renovate 43.271.1 → 43.271.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 (134) hide show
  1. package/dist/config/options/index.js +1 -1
  2. package/dist/config/options/index.js.map +1 -1
  3. package/dist/config/presets/util.js +3 -1
  4. package/dist/config/presets/util.js.map +1 -1
  5. package/dist/global-config-option-defaults.generated.js +1 -1
  6. package/dist/global-config-option-defaults.generated.js.map +1 -1
  7. package/dist/logger/renovate-logger.js.map +1 -1
  8. package/dist/logger/with-sanitizer.js +2 -2
  9. package/dist/logger/with-sanitizer.js.map +1 -1
  10. package/dist/modules/datasource/docker/index.js +3 -1
  11. package/dist/modules/datasource/docker/index.js.map +1 -1
  12. package/dist/modules/datasource/index.d.ts +2 -2
  13. package/dist/modules/datasource/index.js +6 -2
  14. package/dist/modules/datasource/index.js.map +1 -1
  15. package/dist/modules/datasource/rubygems/metadata-cache.js +9 -7
  16. package/dist/modules/datasource/rubygems/metadata-cache.js.map +1 -1
  17. package/dist/modules/datasource/sbt-package/index.js +5 -3
  18. package/dist/modules/datasource/sbt-package/index.js.map +1 -1
  19. package/dist/modules/datasource/sbt-plugin/index.js +2 -2
  20. package/dist/modules/datasource/sbt-plugin/index.js.map +1 -1
  21. package/dist/modules/manager/bazel/artifacts.js +2 -2
  22. package/dist/modules/manager/bazel/artifacts.js.map +1 -1
  23. package/dist/modules/manager/custom/index.js.map +1 -1
  24. package/dist/modules/manager/deno/update.js +4 -2
  25. package/dist/modules/manager/deno/update.js.map +1 -1
  26. package/dist/modules/manager/deps-edn/parser.js +2 -2
  27. package/dist/modules/manager/deps-edn/parser.js.map +1 -1
  28. package/dist/modules/manager/fingerprint.generated.js +14 -14
  29. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  30. package/dist/modules/manager/gomod/artifacts.js +3 -1
  31. package/dist/modules/manager/gomod/artifacts.js.map +1 -1
  32. package/dist/modules/manager/gradle/parser/assignments.js +22 -18
  33. package/dist/modules/manager/gradle/parser/assignments.js.map +1 -1
  34. package/dist/modules/manager/gradle/parser/common.js +12 -8
  35. package/dist/modules/manager/gradle/parser/common.js.map +1 -1
  36. package/dist/modules/manager/gradle/parser/objects.js +11 -9
  37. package/dist/modules/manager/gradle/parser/objects.js.map +1 -1
  38. package/dist/modules/manager/gradle/parser/registry-urls.js +6 -6
  39. package/dist/modules/manager/gradle/parser/registry-urls.js.map +1 -1
  40. package/dist/modules/manager/index.d.ts +2 -2
  41. package/dist/modules/manager/index.js +6 -2
  42. package/dist/modules/manager/index.js.map +1 -1
  43. package/dist/modules/manager/leiningen/extract.js +8 -4
  44. package/dist/modules/manager/leiningen/extract.js.map +1 -1
  45. package/dist/modules/manager/maven/extract.js +13 -11
  46. package/dist/modules/manager/maven/extract.js.map +1 -1
  47. package/dist/modules/manager/npm/post-update/index.js +3 -1
  48. package/dist/modules/manager/npm/post-update/index.js.map +1 -1
  49. package/dist/modules/platform/azure/azure-helper.js +2 -2
  50. package/dist/modules/platform/azure/azure-helper.js.map +1 -1
  51. package/dist/modules/platform/bitbucket/comments.js +10 -4
  52. package/dist/modules/platform/bitbucket/comments.js.map +1 -1
  53. package/dist/modules/platform/bitbucket/index.js +3 -1
  54. package/dist/modules/platform/bitbucket/index.js.map +1 -1
  55. package/dist/modules/platform/bitbucket-server/index.js +13 -5
  56. package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
  57. package/dist/modules/platform/forgejo/forgejo-helper.js +3 -1
  58. package/dist/modules/platform/forgejo/forgejo-helper.js.map +1 -1
  59. package/dist/modules/platform/gitea/gitea-helper.js +3 -1
  60. package/dist/modules/platform/gitea/gitea-helper.js.map +1 -1
  61. package/dist/modules/platform/github/index.js +10 -4
  62. package/dist/modules/platform/github/index.js.map +1 -1
  63. package/dist/modules/platform/github/massage-markdown-links.js +2 -2
  64. package/dist/modules/platform/github/massage-markdown-links.js.map +1 -1
  65. package/dist/modules/platform/gitlab/index.js +10 -4
  66. package/dist/modules/platform/gitlab/index.js.map +1 -1
  67. package/dist/modules/platform/index.d.ts +1 -1
  68. package/dist/modules/platform/index.js +3 -1
  69. package/dist/modules/platform/index.js.map +1 -1
  70. package/dist/modules/versioning/cargo/index.js +15 -5
  71. package/dist/modules/versioning/cargo/index.js.map +1 -1
  72. package/dist/modules/versioning/go-mod-directive/index.js +9 -3
  73. package/dist/modules/versioning/go-mod-directive/index.js.map +1 -1
  74. package/dist/modules/versioning/gradle/index.js +17 -15
  75. package/dist/modules/versioning/gradle/index.js.map +1 -1
  76. package/dist/modules/versioning/hex/index.js +6 -2
  77. package/dist/modules/versioning/hex/index.js.map +1 -1
  78. package/dist/modules/versioning/index.d.ts +2 -2
  79. package/dist/modules/versioning/index.js +6 -2
  80. package/dist/modules/versioning/index.js.map +1 -1
  81. package/dist/modules/versioning/maven/compare.js +5 -3
  82. package/dist/modules/versioning/maven/compare.js.map +1 -1
  83. package/dist/modules/versioning/maven/index.js +23 -17
  84. package/dist/modules/versioning/maven/index.js.map +1 -1
  85. package/dist/modules/versioning/npm/index.js +6 -2
  86. package/dist/modules/versioning/npm/index.js.map +1 -1
  87. package/dist/modules/versioning/pep440/index.js +5 -3
  88. package/dist/modules/versioning/pep440/index.js.map +1 -1
  89. package/dist/modules/versioning/ruby/index.js +39 -19
  90. package/dist/modules/versioning/ruby/index.js.map +1 -1
  91. package/dist/modules/versioning/ruby/operator.js +6 -2
  92. package/dist/modules/versioning/ruby/operator.js.map +1 -1
  93. package/dist/modules/versioning/ruby/range.js +4 -4
  94. package/dist/modules/versioning/ruby/range.js.map +1 -1
  95. package/dist/modules/versioning/ruby/version.js +35 -23
  96. package/dist/modules/versioning/ruby/version.js.map +1 -1
  97. package/dist/modules/versioning/semver/index.js +3 -1
  98. package/dist/modules/versioning/semver/index.js.map +1 -1
  99. package/dist/modules/versioning/semver-coerced/index.d.ts +1 -1
  100. package/dist/modules/versioning/semver-coerced/index.js +3 -1
  101. package/dist/modules/versioning/semver-coerced/index.js.map +1 -1
  102. package/dist/modules/versioning/swift/index.js +6 -2
  103. package/dist/modules/versioning/swift/index.js.map +1 -1
  104. package/dist/util/cache/package/with-cache.js +4 -2
  105. package/dist/util/cache/package/with-cache.js.map +1 -1
  106. package/dist/util/exec/common.d.ts +1 -1
  107. package/dist/util/exec/common.js +3 -1
  108. package/dist/util/exec/common.js.map +1 -1
  109. package/dist/util/git/index.js +2 -2
  110. package/dist/util/git/index.js.map +1 -1
  111. package/dist/util/http/bitbucket-server.js +2 -2
  112. package/dist/util/http/bitbucket-server.js.map +1 -1
  113. package/dist/util/http/forgejo.js +2 -2
  114. package/dist/util/http/forgejo.js.map +1 -1
  115. package/dist/util/http/gitea.js +2 -2
  116. package/dist/util/http/gitea.js.map +1 -1
  117. package/dist/util/http/github.d.ts +1 -1
  118. package/dist/util/http/github.js +2 -2
  119. package/dist/util/http/github.js.map +1 -1
  120. package/dist/util/http/gitlab.d.ts +1 -1
  121. package/dist/util/http/gitlab.js +2 -2
  122. package/dist/util/http/gitlab.js.map +1 -1
  123. package/dist/util/http/scm-manager.js +5 -3
  124. package/dist/util/http/scm-manager.js.map +1 -1
  125. package/dist/workers/repository/extract/index.js +2 -2
  126. package/dist/workers/repository/extract/index.js.map +1 -1
  127. package/dist/workers/repository/update/pr/changelog/source.js +3 -1
  128. package/dist/workers/repository/update/pr/changelog/source.js.map +1 -1
  129. package/dist/workers/repository/updates/flatten.js +3 -1
  130. package/dist/workers/repository/updates/flatten.js.map +1 -1
  131. package/dist/workers/repository/updates/generate.js +3 -1
  132. package/dist/workers/repository/updates/generate.js.map +1 -1
  133. package/package.json +1 -1
  134. package/renovate-schema.json +2 -2
@@ -20,18 +20,20 @@ var MetadataCache = class {
20
20
  const cacheNs = `datasource-rubygems`;
21
21
  const cacheKey = `metadata-cache:${registryUrl}:${packageName}`;
22
22
  const versionsHash = hashVersions(versions);
23
- const loadCache = () => Result.wrapNullable(get(cacheNs, cacheKey), { type: "cache-not-found" }).transform((cache) => {
24
- return versionsHash === cache.hash ? Result.ok(cache.data) : Result.err({
25
- type: "cache-stale",
26
- cache
23
+ function loadCache() {
24
+ return Result.wrapNullable(get(cacheNs, cacheKey), { type: "cache-not-found" }).transform((cache) => {
25
+ return versionsHash === cache.hash ? Result.ok(cache.data) : Result.err({
26
+ type: "cache-stale",
27
+ cache
28
+ });
27
29
  });
28
- });
29
- const saveCache = async (cache, ttlMinutes = 2400 * 60, ttlDelta = 14400) => {
30
+ }
31
+ async function saveCache(cache, ttlMinutes = 2400 * 60, ttlDelta = 14400) {
30
32
  if (parseUrl(registryUrl)?.hostname === "rubygems.org") {
31
33
  const ttl = ttlMinutes + Math.floor(Math.random() * ttlDelta);
32
34
  await set(cacheNs, cacheKey, cache, ttl);
33
35
  }
34
- };
36
+ }
35
37
  return await loadCache().catch((err) => getV1Releases(this.http, registryUrl, packageName).transform(async (data) => {
36
38
  const dataHash = hashReleases(data);
37
39
  if (dataHash === versionsHash) {
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-cache.js","names":["packageCache.get","packageCache.set"],"sources":["../../../../lib/modules/datasource/rubygems/metadata-cache.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport * as packageCache from '../../../util/cache/package/index.ts';\nimport { toSha256 } from '../../../util/hash.ts';\nimport type { Http } from '../../../util/http/index.ts';\nimport type { AsyncResult } from '../../../util/result.ts';\nimport { Result } from '../../../util/result.ts';\nimport { parseUrl } from '../../../util/url.ts';\nimport type { ReleaseResult } from '../types.ts';\nimport { getV1Releases } from './common.ts';\n\ninterface CacheRecord {\n hash: string;\n data: ReleaseResult;\n isFallback?: true;\n}\n\nfunction hashVersions(versions: string[]): string {\n return toSha256(versions.sort().join(','));\n}\n\nfunction hashReleases(releases: ReleaseResult): string {\n return hashVersions(releases.releases.map((release) => release.version));\n}\n\ninterface CacheNotFoundError {\n type: 'cache-not-found';\n}\ninterface CacheStaleError {\n type: 'cache-stale';\n cache: CacheRecord;\n}\ninterface CacheInvalidError {\n type: 'cache-invalid';\n}\ntype CacheLoadError = CacheNotFoundError | CacheStaleError;\ntype CacheError = CacheNotFoundError | CacheStaleError | CacheInvalidError;\n\nexport class MetadataCache {\n private readonly http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getRelease(\n registryUrl: string,\n packageName: string,\n versions: string[],\n ): Promise<ReleaseResult> {\n const cacheNs = `datasource-rubygems`;\n const cacheKey = `metadata-cache:${registryUrl}:${packageName}`;\n const versionsHash = hashVersions(versions);\n\n const loadCache = (): AsyncResult<ReleaseResult, CacheLoadError> =>\n Result.wrapNullable<CacheRecord, CacheLoadError, CacheLoadError>(\n packageCache.get<CacheRecord>(cacheNs, cacheKey),\n { type: 'cache-not-found' },\n ).transform((cache) => {\n return versionsHash === cache.hash\n ? Result.ok(cache.data)\n : Result.err({ type: 'cache-stale', cache });\n });\n\n const saveCache = async (\n cache: CacheRecord,\n ttlMinutes = 100 * 24 * 60,\n ttlDelta = 10 * 24 * 60,\n ): Promise<void> => {\n const registryHostname = parseUrl(registryUrl)?.hostname;\n if (registryHostname === 'rubygems.org') {\n const ttlRandomDelta = Math.floor(Math.random() * ttlDelta);\n const ttl = ttlMinutes + ttlRandomDelta;\n await packageCache.set(cacheNs, cacheKey, cache, ttl);\n }\n };\n\n return await loadCache()\n .catch((err) =>\n getV1Releases(this.http, registryUrl, packageName).transform(\n async (\n data: ReleaseResult,\n ): Promise<Result<ReleaseResult, CacheError>> => {\n const dataHash = hashReleases(data);\n if (dataHash === versionsHash) {\n await saveCache({\n hash: dataHash,\n data,\n });\n return Result.ok(data);\n }\n\n /**\n * Return stale cache for 24 hours,\n * if metadata is inconsistent with versions list.\n */\n if (err.type === 'cache-stale') {\n const staleCache = err.cache;\n if (!staleCache.isFallback) {\n await saveCache(\n { ...staleCache, isFallback: true },\n 24 * 60,\n 0,\n );\n }\n return Result.ok(staleCache.data);\n }\n\n return Result.err({ type: 'cache-invalid' });\n },\n ),\n )\n .catch((err) => {\n logger.debug(\n { err },\n 'Rubygems: error fetching rubygems data, falling back to versions-only result',\n );\n const releases = versions.map((version) => ({ version }));\n return Result.ok({ releases } as ReleaseResult);\n })\n .unwrapOrThrow();\n }\n}\n"],"mappings":";;;;;;;AAgBA,SAAS,aAAa,UAA4B;CAChD,OAAO,SAAS,SAAS,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC;AAC3C;AAEA,SAAS,aAAa,UAAiC;CACrD,OAAO,aAAa,SAAS,SAAS,KAAK,YAAY,QAAQ,OAAO,CAAC;AACzE;AAeA,IAAa,gBAAb,MAA2B;CACzB;CAEA,YAAY,MAAY;EACtB,KAAK,OAAO;CACd;CAEA,MAAM,WACJ,aACA,aACA,UACwB;EACxB,MAAM,UAAU;EAChB,MAAM,WAAW,kBAAkB,YAAY,GAAG;EAClD,MAAM,eAAe,aAAa,QAAQ;EAE1C,MAAM,kBACJ,OAAO,aACLA,IAA8B,SAAS,QAAQ,GAC/C,EAAE,MAAM,kBAAkB,CAC5B,CAAC,CAAC,WAAW,UAAU;GACrB,OAAO,iBAAiB,MAAM,OAC1B,OAAO,GAAG,MAAM,IAAI,IACpB,OAAO,IAAI;IAAE,MAAM;IAAe;GAAM,CAAC;EAC/C,CAAC;EAEH,MAAM,YAAY,OAChB,OACA,aAAa,OAAW,IACxB,WAAW,UACO;GAElB,IADyB,SAAS,WAAW,CAAC,EAAE,aACvB,gBAAgB;IAEvC,MAAM,MAAM,aADW,KAAK,MAAM,KAAK,OAAO,IAAI,QACZ;IACtC,MAAMC,IAAiB,SAAS,UAAU,OAAO,GAAG;GACtD;EACF;EAEA,OAAO,MAAM,UAAU,CAAC,CACrB,OAAO,QACN,cAAc,KAAK,MAAM,aAAa,WAAW,CAAC,CAAC,UACjD,OACE,SAC+C;GAC/C,MAAM,WAAW,aAAa,IAAI;GAClC,IAAI,aAAa,cAAc;IAC7B,MAAM,UAAU;KACd,MAAM;KACN;IACF,CAAC;IACD,OAAO,OAAO,GAAG,IAAI;GACvB;;;;;GAMA,IAAI,IAAI,SAAS,eAAe;IAC9B,MAAM,aAAa,IAAI;IACvB,IAAI,CAAC,WAAW,YACd,MAAM,UACJ;KAAE,GAAG;KAAY,YAAY;IAAK,GAClC,MACA,CACF;IAEF,OAAO,OAAO,GAAG,WAAW,IAAI;GAClC;GAEA,OAAO,OAAO,IAAI,EAAE,MAAM,gBAAgB,CAAC;EAC7C,CACF,CACF,CAAC,CACA,OAAO,QAAQ;GACd,OAAO,MACL,EAAE,IAAI,GACN,8EACF;GACA,MAAM,WAAW,SAAS,KAAK,aAAa,EAAE,QAAQ,EAAE;GACxD,OAAO,OAAO,GAAG,EAAE,SAAS,CAAkB;EAChD,CAAC,CAAC,CACD,cAAc;CACnB;AACF"}
1
+ {"version":3,"file":"metadata-cache.js","names":["packageCache.get","packageCache.set"],"sources":["../../../../lib/modules/datasource/rubygems/metadata-cache.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport * as packageCache from '../../../util/cache/package/index.ts';\nimport { toSha256 } from '../../../util/hash.ts';\nimport type { Http } from '../../../util/http/index.ts';\nimport type { AsyncResult } from '../../../util/result.ts';\nimport { Result } from '../../../util/result.ts';\nimport { parseUrl } from '../../../util/url.ts';\nimport type { ReleaseResult } from '../types.ts';\nimport { getV1Releases } from './common.ts';\n\ninterface CacheRecord {\n hash: string;\n data: ReleaseResult;\n isFallback?: true;\n}\n\nfunction hashVersions(versions: string[]): string {\n return toSha256(versions.sort().join(','));\n}\n\nfunction hashReleases(releases: ReleaseResult): string {\n return hashVersions(releases.releases.map((release) => release.version));\n}\n\ninterface CacheNotFoundError {\n type: 'cache-not-found';\n}\ninterface CacheStaleError {\n type: 'cache-stale';\n cache: CacheRecord;\n}\ninterface CacheInvalidError {\n type: 'cache-invalid';\n}\ntype CacheLoadError = CacheNotFoundError | CacheStaleError;\ntype CacheError = CacheNotFoundError | CacheStaleError | CacheInvalidError;\n\nexport class MetadataCache {\n private readonly http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getRelease(\n registryUrl: string,\n packageName: string,\n versions: string[],\n ): Promise<ReleaseResult> {\n const cacheNs = `datasource-rubygems`;\n const cacheKey = `metadata-cache:${registryUrl}:${packageName}`;\n const versionsHash = hashVersions(versions);\n\n function loadCache(): AsyncResult<ReleaseResult, CacheLoadError> {\n return Result.wrapNullable<CacheRecord, CacheLoadError, CacheLoadError>(\n packageCache.get<CacheRecord>(cacheNs, cacheKey),\n { type: 'cache-not-found' },\n ).transform((cache) => {\n return versionsHash === cache.hash\n ? Result.ok(cache.data)\n : Result.err({ type: 'cache-stale', cache });\n });\n }\n\n async function saveCache(\n cache: CacheRecord,\n ttlMinutes = 100 * 24 * 60,\n ttlDelta = 10 * 24 * 60,\n ): Promise<void> {\n const registryHostname = parseUrl(registryUrl)?.hostname;\n if (registryHostname === 'rubygems.org') {\n const ttlRandomDelta = Math.floor(Math.random() * ttlDelta);\n const ttl = ttlMinutes + ttlRandomDelta;\n await packageCache.set(cacheNs, cacheKey, cache, ttl);\n }\n }\n\n return await loadCache()\n .catch((err) =>\n getV1Releases(this.http, registryUrl, packageName).transform(\n async (\n data: ReleaseResult,\n ): Promise<Result<ReleaseResult, CacheError>> => {\n const dataHash = hashReleases(data);\n if (dataHash === versionsHash) {\n await saveCache({\n hash: dataHash,\n data,\n });\n return Result.ok(data);\n }\n\n /**\n * Return stale cache for 24 hours,\n * if metadata is inconsistent with versions list.\n */\n if (err.type === 'cache-stale') {\n const staleCache = err.cache;\n if (!staleCache.isFallback) {\n await saveCache(\n { ...staleCache, isFallback: true },\n 24 * 60,\n 0,\n );\n }\n return Result.ok(staleCache.data);\n }\n\n return Result.err({ type: 'cache-invalid' });\n },\n ),\n )\n .catch((err) => {\n logger.debug(\n { err },\n 'Rubygems: error fetching rubygems data, falling back to versions-only result',\n );\n const releases = versions.map((version) => ({ version }));\n return Result.ok({ releases } as ReleaseResult);\n })\n .unwrapOrThrow();\n }\n}\n"],"mappings":";;;;;;;AAgBA,SAAS,aAAa,UAA4B;CAChD,OAAO,SAAS,SAAS,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC;AAC3C;AAEA,SAAS,aAAa,UAAiC;CACrD,OAAO,aAAa,SAAS,SAAS,KAAK,YAAY,QAAQ,OAAO,CAAC;AACzE;AAeA,IAAa,gBAAb,MAA2B;CACzB;CAEA,YAAY,MAAY;EACtB,KAAK,OAAO;CACd;CAEA,MAAM,WACJ,aACA,aACA,UACwB;EACxB,MAAM,UAAU;EAChB,MAAM,WAAW,kBAAkB,YAAY,GAAG;EAClD,MAAM,eAAe,aAAa,QAAQ;EAE1C,SAAS,YAAwD;GAC/D,OAAO,OAAO,aACZA,IAA8B,SAAS,QAAQ,GAC/C,EAAE,MAAM,kBAAkB,CAC5B,CAAC,CAAC,WAAW,UAAU;IACrB,OAAO,iBAAiB,MAAM,OAC1B,OAAO,GAAG,MAAM,IAAI,IACpB,OAAO,IAAI;KAAE,MAAM;KAAe;IAAM,CAAC;GAC/C,CAAC;EACH;EAEA,eAAe,UACb,OACA,aAAa,OAAW,IACxB,WAAW,OACI;GAEf,IADyB,SAAS,WAAW,CAAC,EAAE,aACvB,gBAAgB;IAEvC,MAAM,MAAM,aADW,KAAK,MAAM,KAAK,OAAO,IAAI,QACZ;IACtC,MAAMC,IAAiB,SAAS,UAAU,OAAO,GAAG;GACtD;EACF;EAEA,OAAO,MAAM,UAAU,CAAC,CACrB,OAAO,QACN,cAAc,KAAK,MAAM,aAAa,WAAW,CAAC,CAAC,UACjD,OACE,SAC+C;GAC/C,MAAM,WAAW,aAAa,IAAI;GAClC,IAAI,aAAa,cAAc;IAC7B,MAAM,UAAU;KACd,MAAM;KACN;IACF,CAAC;IACD,OAAO,OAAO,GAAG,IAAI;GACvB;;;;;GAMA,IAAI,IAAI,SAAS,eAAe;IAC9B,MAAM,aAAa,IAAI;IACvB,IAAI,CAAC,WAAW,YACd,MAAM,UACJ;KAAE,GAAG;KAAY,YAAY;IAAK,GAClC,MACA,CACF;IAEF,OAAO,OAAO,GAAG,WAAW,IAAI;GAClC;GAEA,OAAO,OAAO,IAAI,EAAE,MAAM,gBAAgB,CAAC;EAC7C,CACF,CACF,CAAC,CACA,OAAO,QAAQ;GACd,OAAO,MACL,EAAE,IAAI,GACN,8EACF;GACA,MAAM,WAAW,SAAS,KAAK,aAAa,EAAE,QAAQ,EAAE;GACxD,OAAO,OAAO,GAAG,EAAE,SAAS,CAAkB;EAChD,CAAC,CAAC,CACD,cAAc;CACnB;AACF"}
@@ -44,7 +44,9 @@ var SbtPackageDatasource = class SbtPackageDatasource extends MavenDatasource {
44
44
  // istanbul ignore if: not easily testable
45
45
  if (validRootUrl) packageRootUrls.push(validRootUrl);
46
46
  else {
47
- const packageRootUrlWith = (sep) => `${repoRootUrl}${groupIdSplit.join(sep)}`;
47
+ function packageRootUrlWith(sep) {
48
+ return `${repoRootUrl}${groupIdSplit.join(sep)}`;
49
+ }
48
50
  packageRootUrls.push(ensureTrailingSlash(packageRootUrlWith("/")));
49
51
  packageRootUrls.push(ensureTrailingSlash(packageRootUrlWith(".")));
50
52
  }
@@ -126,9 +128,9 @@ var SbtPackageDatasource = class SbtPackageDatasource extends MavenDatasource {
126
128
  if (!version) return null;
127
129
  const invalidPomFilesKey = `invalid-pom-files:${registryUrl}:${packageName}:${version}`;
128
130
  const invalidPomFiles = new Set(await get("datasource-sbt-package", invalidPomFilesKey));
129
- const saveCache = async () => {
131
+ async function saveCache() {
130
132
  if (invalidPomFiles.size > 0) await set("datasource-sbt-package", invalidPomFilesKey, [...invalidPomFiles], 720 * 60);
131
- };
133
+ }
132
134
  for (const packageUrl of packageUrls) {
133
135
  const artifactDir = upath.basename(packageUrl);
134
136
  const [artifact] = artifactDir.split("_");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["packageCache.get","packageCache.set"],"sources":["../../../../lib/modules/datasource/sbt-package/index.ts"],"sourcesContent":["import upath from 'upath';\nimport { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger/index.ts';\nimport * as packageCache from '../../../util/cache/package/index.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport { Http } from '../../../util/http/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport type { Timestamp } from '../../../util/timestamp.ts';\nimport { asTimestamp } from '../../../util/timestamp.ts';\nimport {\n ensureTrailingSlash,\n parseUrl,\n trimTrailingSlash,\n} from '../../../util/url.ts';\nimport * as ivyVersioning from '../../versioning/ivy/index.ts';\nimport { compare } from '../../versioning/maven/compare.ts';\nimport { MAVEN_REPO } from '../maven/common.ts';\nimport { MavenDatasource } from '../maven/index.ts';\nimport { downloadHttpContent, downloadHttpProtocol } from '../maven/util.ts';\nimport type {\n GetReleasesConfig,\n PostprocessReleaseConfig,\n PostprocessReleaseResult,\n RegistryStrategy,\n Release,\n ReleaseResult,\n} from '../types.ts';\nimport { extractPageLinks, getLatestVersion } from './util.ts';\n\ninterface ScalaDepCoordinate {\n groupId: string;\n artifactId: string;\n scalaVersion?: string;\n}\n\ninterface PomInfo {\n homepage?: string;\n sourceUrl?: string;\n releaseTimestamp?: Timestamp;\n}\n\nexport class SbtPackageDatasource extends MavenDatasource {\n static override readonly id = 'sbt-package';\n\n override readonly defaultRegistryUrls = [MAVEN_REPO];\n\n override readonly defaultVersioning = ivyVersioning.id;\n\n override readonly registryStrategy: RegistryStrategy = 'hunt';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `scm` tags in the results.';\n\n constructor(id = SbtPackageDatasource.id) {\n super(id);\n this.http = new Http('sbt');\n }\n\n protected static parseDepCoordinate(packageName: string): ScalaDepCoordinate {\n const [groupId, javaArtifactId] = packageName.split(':');\n const [artifactId, scalaVersion] = javaArtifactId.split('_');\n return { groupId, artifactId, scalaVersion };\n }\n\n async getSbtReleases(\n registryUrl: string,\n packageName: string,\n ): Promise<ReleaseResult | null> {\n const { groupId, artifactId, scalaVersion } =\n SbtPackageDatasource.parseDepCoordinate(packageName);\n\n const groupIdSplit = groupId.split('.');\n const repoRootUrl = ensureTrailingSlash(registryUrl);\n\n const validRootUrlKey = `valid-root-url:${registryUrl}:${packageName}`;\n const validRootUrl = await packageCache.get<string>(\n 'datasource-sbt-package',\n validRootUrlKey,\n );\n\n const packageRootUrls: string[] = [];\n // istanbul ignore if: not easily testable\n if (validRootUrl) {\n packageRootUrls.push(validRootUrl);\n } else {\n const packageRootUrlWith = (sep: string): string =>\n `${repoRootUrl}${groupIdSplit.join(sep)}`;\n packageRootUrls.push(ensureTrailingSlash(packageRootUrlWith('/')));\n packageRootUrls.push(ensureTrailingSlash(packageRootUrlWith('.')));\n }\n\n let dependencyUrl: string | undefined;\n let packageUrls: string[] | undefined;\n for (const packageRootUrl of packageRootUrls) {\n const packageRootContent = await downloadHttpContent(\n this.http,\n packageRootUrl,\n );\n if (!packageRootContent) {\n continue;\n }\n\n await packageCache.set(\n 'datasource-sbt-package',\n validRootUrlKey,\n packageRootUrl,\n 30 * 24 * 60,\n );\n\n dependencyUrl = trimTrailingSlash(packageRootUrl);\n\n const parsedPackageRootUrl = parseUrl(packageRootUrl);\n if (!parsedPackageRootUrl) {\n logger.warn({ packageRootUrl }, 'Failed to parse packageURL');\n continue;\n }\n const rootPath = parsedPackageRootUrl.pathname;\n const artifactSubdirs = extractPageLinks(packageRootContent, (href) => {\n const path = href.replace(rootPath, '');\n\n if (\n path.startsWith(`${artifactId}_native`) ||\n path.startsWith(`${artifactId}_sjs`)\n ) {\n return null;\n }\n\n if (path === artifactId || path.startsWith(`${artifactId}_`)) {\n return ensureTrailingSlash(`${packageRootUrl}${path}`);\n }\n\n return null;\n });\n\n if (scalaVersion) {\n const scalaSubdir = artifactSubdirs.find((x) =>\n x.endsWith(`/${artifactId}_${scalaVersion}/`),\n );\n if (scalaSubdir) {\n packageUrls = [scalaSubdir];\n break;\n }\n }\n\n packageUrls = artifactSubdirs;\n break;\n }\n\n if (!packageUrls) {\n return null;\n }\n\n const invalidPackageUrlsKey = `invalid-package-urls:${registryUrl}:${packageName}`;\n const invalidPackageUrls = new Set(\n await packageCache.get<string[]>(\n 'datasource-sbt-package',\n invalidPackageUrlsKey,\n ),\n );\n packageUrls = packageUrls.filter((url) => !invalidPackageUrls.has(url));\n\n const allVersions = new Set<string>();\n for (const pkgUrl of packageUrls) {\n const parsedPkgUrl = parseUrl(pkgUrl);\n if (!parsedPkgUrl) {\n invalidPackageUrls.add(pkgUrl);\n continue;\n }\n\n const packageContent = await downloadHttpContent(this.http, pkgUrl);\n // istanbul ignore if\n if (!packageContent) {\n invalidPackageUrls.add(pkgUrl);\n continue;\n }\n\n const rootPath = parsedPkgUrl.pathname;\n const versions = extractPageLinks(packageContent, (href) => {\n const path = href.replace(rootPath, '');\n if (path.startsWith('.')) {\n return null;\n }\n\n return path;\n });\n\n for (const version of versions) {\n allVersions.add(version);\n }\n }\n\n if (invalidPackageUrls.size > 0) {\n await packageCache.set(\n 'datasource-sbt-package',\n invalidPackageUrlsKey,\n [...invalidPackageUrls],\n 30 * 24 * 60,\n );\n }\n\n if (packageUrls.length > 0) {\n const packageUrlsKey = `package-urls:${registryUrl}:${packageName}`;\n await packageCache.set(\n 'datasource-sbt-package',\n packageUrlsKey,\n packageUrls,\n 30 * 24 * 60,\n );\n }\n\n const versions = [...allVersions];\n if (!versions.length) {\n return null;\n }\n\n const releases: Release[] = [...allVersions]\n .sort(compare)\n .map((version) => ({ version }));\n const res: ReleaseResult = { releases, dependencyUrl };\n\n const latestVersion = getLatestVersion(versions);\n const pomInfo = await this.getPomInfo(\n registryUrl,\n packageName,\n latestVersion,\n packageUrls,\n );\n\n if (pomInfo?.homepage) {\n res.homepage = pomInfo.homepage;\n }\n\n if (pomInfo?.sourceUrl) {\n res.sourceUrl = pomInfo.sourceUrl;\n }\n\n return res;\n }\n\n async getPomInfo(\n registryUrl: string,\n packageName: string,\n version: string | null,\n pkgUrls?: string[],\n ): Promise<PomInfo | null> {\n const packageUrlsKey = `package-urls:${registryUrl}:${packageName}`;\n // istanbul ignore next: will be covered later\n const packageUrls =\n pkgUrls ??\n (await packageCache.get<string[]>(\n 'datasource-sbt-package',\n packageUrlsKey,\n ));\n\n // istanbul ignore if\n if (!packageUrls?.length) {\n return null;\n }\n\n // istanbul ignore if\n if (!version) {\n return null;\n }\n\n const invalidPomFilesKey = `invalid-pom-files:${registryUrl}:${packageName}:${version}`;\n const invalidPomFiles = new Set(\n await packageCache.get<string[]>(\n 'datasource-sbt-package',\n invalidPomFilesKey,\n ),\n );\n\n const saveCache = async (): Promise<void> => {\n if (invalidPomFiles.size > 0) {\n await packageCache.set(\n 'datasource-sbt-package',\n invalidPomFilesKey,\n [...invalidPomFiles],\n 30 * 24 * 60,\n );\n }\n };\n\n for (const packageUrl of packageUrls) {\n const artifactDir = upath.basename(packageUrl);\n const [artifact] = artifactDir.split('_');\n\n for (const pomFilePrefix of [artifactDir, artifact]) {\n const pomFileName = `${pomFilePrefix}-${version}.pom`;\n const pomUrl = `${packageUrl}${version}/${pomFileName}`;\n if (invalidPomFiles.has(pomUrl)) {\n continue;\n }\n\n const res = await downloadHttpProtocol(this.http, pomUrl);\n const { val } = res.unwrap();\n if (!val) {\n invalidPomFiles.add(pomUrl);\n continue;\n }\n\n const result: PomInfo = {};\n\n const releaseTimestamp = asTimestamp(val.lastModified);\n if (releaseTimestamp) {\n result.releaseTimestamp = releaseTimestamp;\n }\n\n const pomXml = new XmlDocument(val.data);\n\n const homepage = pomXml.valueWithPath('url');\n if (homepage) {\n result.homepage = homepage;\n }\n\n const sourceUrl = pomXml.valueWithPath('scm.url');\n if (sourceUrl) {\n result.sourceUrl = sourceUrl\n .replace(regEx(/^scm:/), '')\n .replace(regEx(/^git:/), '')\n .replace(regEx(/^git@github.com:/), 'https://github.com/')\n .replace(regEx(/\\.git$/), '');\n }\n\n await saveCache();\n return result;\n }\n }\n\n await saveCache();\n return null;\n }\n\n override async getReleases(\n config: GetReleasesConfig,\n ): Promise<ReleaseResult | null> {\n const { packageName, registryUrl } = config;\n // istanbul ignore if\n if (!registryUrl) {\n return null;\n }\n\n const sbtReleases = await this.getSbtReleases(registryUrl, packageName);\n if (sbtReleases) {\n return sbtReleases;\n }\n\n logger.debug(\n `Sbt: no versions discovered for ${packageName} listing organization root package folder, fallback to maven datasource for version discovery`,\n );\n const mavenReleaseResult = await super.getReleases(config);\n if (mavenReleaseResult) {\n return mavenReleaseResult;\n }\n\n logger.debug(`Sbt: no versions found for \"${packageName}\"`);\n return null;\n }\n\n private async _postprocessRelease(\n config: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n /* v8 ignore next 3 -- should never happen */\n if (!config.registryUrl) {\n return release;\n }\n\n const res = await this.getPomInfo(\n config.registryUrl,\n config.packageName,\n release.version,\n );\n\n if (res?.releaseTimestamp) {\n release.releaseTimestamp = res.releaseTimestamp;\n }\n\n return release;\n }\n\n override postprocessRelease(\n config: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n return withCache(\n {\n namespace: 'datasource-sbt-package',\n key: `postprocessRelease:${config.registryUrl}:${config.packageName}:${release.version}`,\n ttlMinutes: 30 * 24 * 60,\n },\n () => this._postprocessRelease(config, release),\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAyCA,IAAa,uBAAb,MAAa,6BAA6B,gBAAgB;CACxD,OAAyB,KAAK;CAE9B,sBAAwC,CAAC,UAAU;CAEnD,oBAAsC;CAEtC,mBAAuD;CAEvD,mBAAqC;CACrC,gBACE;CAEF,YAAY,KAAK,qBAAqB,IAAI;EACxC,MAAM,EAAE;EACR,KAAK,OAAO,IAAI,KAAK,KAAK;CAC5B;CAEA,OAAiB,mBAAmB,aAAyC;EAC3E,MAAM,CAAC,SAAS,kBAAkB,YAAY,MAAM,GAAG;EACvD,MAAM,CAAC,YAAY,gBAAgB,eAAe,MAAM,GAAG;EAC3D,OAAO;GAAE;GAAS;GAAY;EAAa;CAC7C;CAEA,MAAM,eACJ,aACA,aAC+B;EAC/B,MAAM,EAAE,SAAS,YAAY,iBAC3B,qBAAqB,mBAAmB,WAAW;EAErD,MAAM,eAAe,QAAQ,MAAM,GAAG;EACtC,MAAM,cAAc,oBAAoB,WAAW;EAEnD,MAAM,kBAAkB,kBAAkB,YAAY,GAAG;EACzD,MAAM,eAAe,MAAMA,IACzB,0BACA,eACF;EAEA,MAAM,kBAA4B,CAAC;;EAEnC,IAAI,cACF,gBAAgB,KAAK,YAAY;OAC5B;GACL,MAAM,sBAAsB,QAC1B,GAAG,cAAc,aAAa,KAAK,GAAG;GACxC,gBAAgB,KAAK,oBAAoB,mBAAmB,GAAG,CAAC,CAAC;GACjE,gBAAgB,KAAK,oBAAoB,mBAAmB,GAAG,CAAC,CAAC;EACnE;EAEA,IAAI;EACJ,IAAI;EACJ,KAAK,MAAM,kBAAkB,iBAAiB;GAC5C,MAAM,qBAAqB,MAAM,oBAC/B,KAAK,MACL,cACF;GACA,IAAI,CAAC,oBACH;GAGF,MAAMC,IACJ,0BACA,iBACA,gBACA,MAAU,EACZ;GAEA,gBAAgB,kBAAkB,cAAc;GAEhD,MAAM,uBAAuB,SAAS,cAAc;GACpD,IAAI,CAAC,sBAAsB;IACzB,OAAO,KAAK,EAAE,eAAe,GAAG,4BAA4B;IAC5D;GACF;GACA,MAAM,WAAW,qBAAqB;GACtC,MAAM,kBAAkB,iBAAiB,qBAAqB,SAAS;IACrE,MAAM,OAAO,KAAK,QAAQ,UAAU,EAAE;IAEtC,IACE,KAAK,WAAW,GAAG,WAAW,QAAQ,KACtC,KAAK,WAAW,GAAG,WAAW,KAAK,GAEnC,OAAO;IAGT,IAAI,SAAS,cAAc,KAAK,WAAW,GAAG,WAAW,EAAE,GACzD,OAAO,oBAAoB,GAAG,iBAAiB,MAAM;IAGvD,OAAO;GACT,CAAC;GAED,IAAI,cAAc;IAChB,MAAM,cAAc,gBAAgB,MAAM,MACxC,EAAE,SAAS,IAAI,WAAW,GAAG,aAAa,EAAE,CAC9C;IACA,IAAI,aAAa;KACf,cAAc,CAAC,WAAW;KAC1B;IACF;GACF;GAEA,cAAc;GACd;EACF;EAEA,IAAI,CAAC,aACH,OAAO;EAGT,MAAM,wBAAwB,wBAAwB,YAAY,GAAG;EACrE,MAAM,qBAAqB,IAAI,IAC7B,MAAMD,IACJ,0BACA,qBACF,CACF;EACA,cAAc,YAAY,QAAQ,QAAQ,CAAC,mBAAmB,IAAI,GAAG,CAAC;EAEtE,MAAM,8BAAc,IAAI,IAAY;EACpC,KAAK,MAAM,UAAU,aAAa;GAChC,MAAM,eAAe,SAAS,MAAM;GACpC,IAAI,CAAC,cAAc;IACjB,mBAAmB,IAAI,MAAM;IAC7B;GACF;GAEA,MAAM,iBAAiB,MAAM,oBAAoB,KAAK,MAAM,MAAM;;GAElE,IAAI,CAAC,gBAAgB;IACnB,mBAAmB,IAAI,MAAM;IAC7B;GACF;GAEA,MAAM,WAAW,aAAa;GAC9B,MAAM,WAAW,iBAAiB,iBAAiB,SAAS;IAC1D,MAAM,OAAO,KAAK,QAAQ,UAAU,EAAE;IACtC,IAAI,KAAK,WAAW,GAAG,GACrB,OAAO;IAGT,OAAO;GACT,CAAC;GAED,KAAK,MAAM,WAAW,UACpB,YAAY,IAAI,OAAO;EAE3B;EAEA,IAAI,mBAAmB,OAAO,GAC5B,MAAMC,IACJ,0BACA,uBACA,CAAC,GAAG,kBAAkB,GACtB,MAAU,EACZ;EAGF,IAAI,YAAY,SAAS,GAEvB,MAAMA,IACJ,0BACA,gBAHqC,YAAY,GAAG,eAIpD,aACA,MAAU,EACZ;EAGF,MAAM,WAAW,CAAC,GAAG,WAAW;EAChC,IAAI,CAAC,SAAS,QACZ,OAAO;EAMT,MAAM,MAAqB;GAAE,UAHD,CAAC,GAAG,WAAW,CAAC,CACzC,KAAK,OAAO,CAAC,CACb,KAAK,aAAa,EAAE,QAAQ,EACK;GAAG;EAAc;EAErD,MAAM,gBAAgB,iBAAiB,QAAQ;EAC/C,MAAM,UAAU,MAAM,KAAK,WACzB,aACA,aACA,eACA,WACF;EAEA,IAAI,SAAS,UACX,IAAI,WAAW,QAAQ;EAGzB,IAAI,SAAS,WACX,IAAI,YAAY,QAAQ;EAG1B,OAAO;CACT;CAEA,MAAM,WACJ,aACA,aACA,SACA,SACyB;EACzB,MAAM,iBAAiB,gBAAgB,YAAY,GAAG;;EAEtD,MAAM,cACJ,WACC,MAAMD,IACL,0BACA,cACF;;EAGF,IAAI,CAAC,aAAa,QAChB,OAAO;;EAIT,IAAI,CAAC,SACH,OAAO;EAGT,MAAM,qBAAqB,qBAAqB,YAAY,GAAG,YAAY,GAAG;EAC9E,MAAM,kBAAkB,IAAI,IAC1B,MAAMA,IACJ,0BACA,kBACF,CACF;EAEA,MAAM,YAAY,YAA2B;GAC3C,IAAI,gBAAgB,OAAO,GACzB,MAAMC,IACJ,0BACA,oBACA,CAAC,GAAG,eAAe,GACnB,MAAU,EACZ;EAEJ;EAEA,KAAK,MAAM,cAAc,aAAa;GACpC,MAAM,cAAc,MAAM,SAAS,UAAU;GAC7C,MAAM,CAAC,YAAY,YAAY,MAAM,GAAG;GAExC,KAAK,MAAM,iBAAiB,CAAC,aAAa,QAAQ,GAAG;IAEnD,MAAM,SAAS,GAAG,aAAa,QAAQ,GAAG,GADnB,cAAc,GAAG,QAAQ;IAEhD,IAAI,gBAAgB,IAAI,MAAM,GAC5B;IAIF,MAAM,EAAE,SAAQ,MADE,qBAAqB,KAAK,MAAM,MAAM,EAAA,CACpC,OAAO;IAC3B,IAAI,CAAC,KAAK;KACR,gBAAgB,IAAI,MAAM;KAC1B;IACF;IAEA,MAAM,SAAkB,CAAC;IAEzB,MAAM,mBAAmB,YAAY,IAAI,YAAY;IACrD,IAAI,kBACF,OAAO,mBAAmB;IAG5B,MAAM,SAAS,IAAI,YAAY,IAAI,IAAI;IAEvC,MAAM,WAAW,OAAO,cAAc,KAAK;IAC3C,IAAI,UACF,OAAO,WAAW;IAGpB,MAAM,YAAY,OAAO,cAAc,SAAS;IAChD,IAAI,WACF,OAAO,YAAY,UAChB,QAAQ,MAAM,OAAO,GAAG,EAAE,CAAC,CAC3B,QAAQ,MAAM,OAAO,GAAG,EAAE,CAAC,CAC3B,QAAQ,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,CACzD,QAAQ,MAAM,QAAQ,GAAG,EAAE;IAGhC,MAAM,UAAU;IAChB,OAAO;GACT;EACF;EAEA,MAAM,UAAU;EAChB,OAAO;CACT;CAEA,MAAe,YACb,QAC+B;EAC/B,MAAM,EAAE,aAAa,gBAAgB;;EAErC,IAAI,CAAC,aACH,OAAO;EAGT,MAAM,cAAc,MAAM,KAAK,eAAe,aAAa,WAAW;EACtE,IAAI,aACF,OAAO;EAGT,OAAO,MACL,mCAAmC,YAAY,8FACjD;EACA,MAAM,qBAAqB,MAAM,MAAM,YAAY,MAAM;EACzD,IAAI,oBACF,OAAO;EAGT,OAAO,MAAM,+BAA+B,YAAY,EAAE;EAC1D,OAAO;CACT;CAEA,MAAc,oBACZ,QACA,SACmC;;EAEnC,IAAI,CAAC,OAAO,aACV,OAAO;EAGT,MAAM,MAAM,MAAM,KAAK,WACrB,OAAO,aACP,OAAO,aACP,QAAQ,OACV;EAEA,IAAI,KAAK,kBACP,QAAQ,mBAAmB,IAAI;EAGjC,OAAO;CACT;CAEA,mBACE,QACA,SACmC;EACnC,OAAO,UACL;GACE,WAAW;GACX,KAAK,sBAAsB,OAAO,YAAY,GAAG,OAAO,YAAY,GAAG,QAAQ;GAC/E,YAAY,MAAU;EACxB,SACM,KAAK,oBAAoB,QAAQ,OAAO,CAChD;CACF;AACF"}
1
+ {"version":3,"file":"index.js","names":["packageCache.get","packageCache.set"],"sources":["../../../../lib/modules/datasource/sbt-package/index.ts"],"sourcesContent":["import upath from 'upath';\nimport { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger/index.ts';\nimport * as packageCache from '../../../util/cache/package/index.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport { Http } from '../../../util/http/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport type { Timestamp } from '../../../util/timestamp.ts';\nimport { asTimestamp } from '../../../util/timestamp.ts';\nimport {\n ensureTrailingSlash,\n parseUrl,\n trimTrailingSlash,\n} from '../../../util/url.ts';\nimport * as ivyVersioning from '../../versioning/ivy/index.ts';\nimport { compare } from '../../versioning/maven/compare.ts';\nimport { MAVEN_REPO } from '../maven/common.ts';\nimport { MavenDatasource } from '../maven/index.ts';\nimport { downloadHttpContent, downloadHttpProtocol } from '../maven/util.ts';\nimport type {\n GetReleasesConfig,\n PostprocessReleaseConfig,\n PostprocessReleaseResult,\n RegistryStrategy,\n Release,\n ReleaseResult,\n} from '../types.ts';\nimport { extractPageLinks, getLatestVersion } from './util.ts';\n\ninterface ScalaDepCoordinate {\n groupId: string;\n artifactId: string;\n scalaVersion?: string;\n}\n\ninterface PomInfo {\n homepage?: string;\n sourceUrl?: string;\n releaseTimestamp?: Timestamp;\n}\n\nexport class SbtPackageDatasource extends MavenDatasource {\n static override readonly id = 'sbt-package';\n\n override readonly defaultRegistryUrls = [MAVEN_REPO];\n\n override readonly defaultVersioning = ivyVersioning.id;\n\n override readonly registryStrategy: RegistryStrategy = 'hunt';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `scm` tags in the results.';\n\n constructor(id = SbtPackageDatasource.id) {\n super(id);\n this.http = new Http('sbt');\n }\n\n protected static parseDepCoordinate(packageName: string): ScalaDepCoordinate {\n const [groupId, javaArtifactId] = packageName.split(':');\n const [artifactId, scalaVersion] = javaArtifactId.split('_');\n return { groupId, artifactId, scalaVersion };\n }\n\n async getSbtReleases(\n registryUrl: string,\n packageName: string,\n ): Promise<ReleaseResult | null> {\n const { groupId, artifactId, scalaVersion } =\n SbtPackageDatasource.parseDepCoordinate(packageName);\n\n const groupIdSplit = groupId.split('.');\n const repoRootUrl = ensureTrailingSlash(registryUrl);\n\n const validRootUrlKey = `valid-root-url:${registryUrl}:${packageName}`;\n const validRootUrl = await packageCache.get<string>(\n 'datasource-sbt-package',\n validRootUrlKey,\n );\n\n const packageRootUrls: string[] = [];\n // istanbul ignore if: not easily testable\n if (validRootUrl) {\n packageRootUrls.push(validRootUrl);\n } else {\n function packageRootUrlWith(sep: string): string {\n return `${repoRootUrl}${groupIdSplit.join(sep)}`;\n }\n packageRootUrls.push(ensureTrailingSlash(packageRootUrlWith('/')));\n packageRootUrls.push(ensureTrailingSlash(packageRootUrlWith('.')));\n }\n\n let dependencyUrl: string | undefined;\n let packageUrls: string[] | undefined;\n for (const packageRootUrl of packageRootUrls) {\n const packageRootContent = await downloadHttpContent(\n this.http,\n packageRootUrl,\n );\n if (!packageRootContent) {\n continue;\n }\n\n await packageCache.set(\n 'datasource-sbt-package',\n validRootUrlKey,\n packageRootUrl,\n 30 * 24 * 60,\n );\n\n dependencyUrl = trimTrailingSlash(packageRootUrl);\n\n const parsedPackageRootUrl = parseUrl(packageRootUrl);\n if (!parsedPackageRootUrl) {\n logger.warn({ packageRootUrl }, 'Failed to parse packageURL');\n continue;\n }\n const rootPath = parsedPackageRootUrl.pathname;\n const artifactSubdirs = extractPageLinks(packageRootContent, (href) => {\n const path = href.replace(rootPath, '');\n\n if (\n path.startsWith(`${artifactId}_native`) ||\n path.startsWith(`${artifactId}_sjs`)\n ) {\n return null;\n }\n\n if (path === artifactId || path.startsWith(`${artifactId}_`)) {\n return ensureTrailingSlash(`${packageRootUrl}${path}`);\n }\n\n return null;\n });\n\n if (scalaVersion) {\n const scalaSubdir = artifactSubdirs.find((x) =>\n x.endsWith(`/${artifactId}_${scalaVersion}/`),\n );\n if (scalaSubdir) {\n packageUrls = [scalaSubdir];\n break;\n }\n }\n\n packageUrls = artifactSubdirs;\n break;\n }\n\n if (!packageUrls) {\n return null;\n }\n\n const invalidPackageUrlsKey = `invalid-package-urls:${registryUrl}:${packageName}`;\n const invalidPackageUrls = new Set(\n await packageCache.get<string[]>(\n 'datasource-sbt-package',\n invalidPackageUrlsKey,\n ),\n );\n packageUrls = packageUrls.filter((url) => !invalidPackageUrls.has(url));\n\n const allVersions = new Set<string>();\n for (const pkgUrl of packageUrls) {\n const parsedPkgUrl = parseUrl(pkgUrl);\n if (!parsedPkgUrl) {\n invalidPackageUrls.add(pkgUrl);\n continue;\n }\n\n const packageContent = await downloadHttpContent(this.http, pkgUrl);\n // istanbul ignore if\n if (!packageContent) {\n invalidPackageUrls.add(pkgUrl);\n continue;\n }\n\n const rootPath = parsedPkgUrl.pathname;\n const versions = extractPageLinks(packageContent, (href) => {\n const path = href.replace(rootPath, '');\n if (path.startsWith('.')) {\n return null;\n }\n\n return path;\n });\n\n for (const version of versions) {\n allVersions.add(version);\n }\n }\n\n if (invalidPackageUrls.size > 0) {\n await packageCache.set(\n 'datasource-sbt-package',\n invalidPackageUrlsKey,\n [...invalidPackageUrls],\n 30 * 24 * 60,\n );\n }\n\n if (packageUrls.length > 0) {\n const packageUrlsKey = `package-urls:${registryUrl}:${packageName}`;\n await packageCache.set(\n 'datasource-sbt-package',\n packageUrlsKey,\n packageUrls,\n 30 * 24 * 60,\n );\n }\n\n const versions = [...allVersions];\n if (!versions.length) {\n return null;\n }\n\n const releases: Release[] = [...allVersions]\n .sort(compare)\n .map((version) => ({ version }));\n const res: ReleaseResult = { releases, dependencyUrl };\n\n const latestVersion = getLatestVersion(versions);\n const pomInfo = await this.getPomInfo(\n registryUrl,\n packageName,\n latestVersion,\n packageUrls,\n );\n\n if (pomInfo?.homepage) {\n res.homepage = pomInfo.homepage;\n }\n\n if (pomInfo?.sourceUrl) {\n res.sourceUrl = pomInfo.sourceUrl;\n }\n\n return res;\n }\n\n async getPomInfo(\n registryUrl: string,\n packageName: string,\n version: string | null,\n pkgUrls?: string[],\n ): Promise<PomInfo | null> {\n const packageUrlsKey = `package-urls:${registryUrl}:${packageName}`;\n // istanbul ignore next: will be covered later\n const packageUrls =\n pkgUrls ??\n (await packageCache.get<string[]>(\n 'datasource-sbt-package',\n packageUrlsKey,\n ));\n\n // istanbul ignore if\n if (!packageUrls?.length) {\n return null;\n }\n\n // istanbul ignore if\n if (!version) {\n return null;\n }\n\n const invalidPomFilesKey = `invalid-pom-files:${registryUrl}:${packageName}:${version}`;\n const invalidPomFiles = new Set(\n await packageCache.get<string[]>(\n 'datasource-sbt-package',\n invalidPomFilesKey,\n ),\n );\n\n async function saveCache(): Promise<void> {\n if (invalidPomFiles.size > 0) {\n await packageCache.set(\n 'datasource-sbt-package',\n invalidPomFilesKey,\n [...invalidPomFiles],\n 30 * 24 * 60,\n );\n }\n }\n\n for (const packageUrl of packageUrls) {\n const artifactDir = upath.basename(packageUrl);\n const [artifact] = artifactDir.split('_');\n\n for (const pomFilePrefix of [artifactDir, artifact]) {\n const pomFileName = `${pomFilePrefix}-${version}.pom`;\n const pomUrl = `${packageUrl}${version}/${pomFileName}`;\n if (invalidPomFiles.has(pomUrl)) {\n continue;\n }\n\n const res = await downloadHttpProtocol(this.http, pomUrl);\n const { val } = res.unwrap();\n if (!val) {\n invalidPomFiles.add(pomUrl);\n continue;\n }\n\n const result: PomInfo = {};\n\n const releaseTimestamp = asTimestamp(val.lastModified);\n if (releaseTimestamp) {\n result.releaseTimestamp = releaseTimestamp;\n }\n\n const pomXml = new XmlDocument(val.data);\n\n const homepage = pomXml.valueWithPath('url');\n if (homepage) {\n result.homepage = homepage;\n }\n\n const sourceUrl = pomXml.valueWithPath('scm.url');\n if (sourceUrl) {\n result.sourceUrl = sourceUrl\n .replace(regEx(/^scm:/), '')\n .replace(regEx(/^git:/), '')\n .replace(regEx(/^git@github.com:/), 'https://github.com/')\n .replace(regEx(/\\.git$/), '');\n }\n\n await saveCache();\n return result;\n }\n }\n\n await saveCache();\n return null;\n }\n\n override async getReleases(\n config: GetReleasesConfig,\n ): Promise<ReleaseResult | null> {\n const { packageName, registryUrl } = config;\n // istanbul ignore if\n if (!registryUrl) {\n return null;\n }\n\n const sbtReleases = await this.getSbtReleases(registryUrl, packageName);\n if (sbtReleases) {\n return sbtReleases;\n }\n\n logger.debug(\n `Sbt: no versions discovered for ${packageName} listing organization root package folder, fallback to maven datasource for version discovery`,\n );\n const mavenReleaseResult = await super.getReleases(config);\n if (mavenReleaseResult) {\n return mavenReleaseResult;\n }\n\n logger.debug(`Sbt: no versions found for \"${packageName}\"`);\n return null;\n }\n\n private async _postprocessRelease(\n config: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n /* v8 ignore next 3 -- should never happen */\n if (!config.registryUrl) {\n return release;\n }\n\n const res = await this.getPomInfo(\n config.registryUrl,\n config.packageName,\n release.version,\n );\n\n if (res?.releaseTimestamp) {\n release.releaseTimestamp = res.releaseTimestamp;\n }\n\n return release;\n }\n\n override postprocessRelease(\n config: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n return withCache(\n {\n namespace: 'datasource-sbt-package',\n key: `postprocessRelease:${config.registryUrl}:${config.packageName}:${release.version}`,\n ttlMinutes: 30 * 24 * 60,\n },\n () => this._postprocessRelease(config, release),\n );\n }\n}\n"],"mappings":"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"}
@@ -80,10 +80,10 @@ var SbtPluginDatasource = class SbtPluginDatasource extends Datasource {
80
80
  }
81
81
  async resolvePluginReleases(rootUrl, artifact, scalaVersion) {
82
82
  const searchRoot = `${rootUrl}/${artifact}`;
83
- const hrefFilterMap = (href) => {
83
+ function hrefFilterMap(href) {
84
84
  if (href.startsWith(".")) return null;
85
85
  return href;
86
- };
86
+ }
87
87
  const searchRootContent = await downloadHttpContent(this.http, ensureTrailingSlash(searchRoot));
88
88
  if (searchRootContent) {
89
89
  const releases = [];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/datasource/sbt-plugin/index.ts"],"sourcesContent":["import { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger/index.ts';\nimport { Http } from '../../../util/http/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { ensureTrailingSlash } from '../../../util/url.ts';\nimport * as ivyVersioning from '../../versioning/ivy/index.ts';\nimport { compare } from '../../versioning/maven/compare.ts';\nimport { Datasource } from '../datasource.ts';\nimport { MAVEN_REPO } from '../maven/common.ts';\nimport { downloadHttpContent } from '../maven/util.ts';\nimport { extractPageLinks, getLatestVersion } from '../sbt-package/util.ts';\nimport type {\n GetReleasesConfig,\n RegistryStrategy,\n ReleaseResult,\n} from '../types.ts';\n\nexport const SBT_PLUGINS_REPO =\n 'https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases';\n\nexport class SbtPluginDatasource extends Datasource {\n static readonly id = 'sbt-plugin';\n\n override readonly defaultRegistryUrls = [SBT_PLUGINS_REPO, MAVEN_REPO];\n\n override readonly defaultVersioning = ivyVersioning.id;\n\n override readonly registryStrategy: RegistryStrategy = 'merge';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `scm` tags in the results.';\n\n constructor() {\n super(SbtPluginDatasource.id);\n this.http = new Http('sbt');\n }\n\n // istanbul ignore next: to be rewritten\n async getArtifactSubdirs(\n searchRoot: string,\n artifact: string,\n scalaVersion: string,\n ): Promise<string[] | null> {\n const pkgUrl = ensureTrailingSlash(searchRoot);\n const indexContent = await downloadHttpContent(this.http, pkgUrl);\n if (indexContent) {\n let artifactSubdirs = extractPageLinks(indexContent, (href) => {\n const path = href.split('/').at(-1)!;\n if (\n path.startsWith(`${artifact}_native`) ||\n path.startsWith(`${artifact}_sjs`)\n ) {\n return null;\n }\n\n if (path === artifact || path.startsWith(`${artifact}_`)) {\n return path;\n }\n\n return null;\n });\n\n if (\n scalaVersion &&\n artifactSubdirs.includes(`${artifact}_${scalaVersion}`)\n ) {\n artifactSubdirs = [`${artifact}_${scalaVersion}`];\n }\n return artifactSubdirs;\n }\n\n return null;\n }\n\n // istanbul ignore next: to be rewritten\n async getPackageReleases(\n searchRoot: string,\n artifactSubdirs: string[] | null,\n ): Promise<string[] | null> {\n if (artifactSubdirs) {\n const releases: string[] = [];\n for (const searchSubdir of artifactSubdirs) {\n const pkgUrl = ensureTrailingSlash(`${searchRoot}/${searchSubdir}`);\n const content = await downloadHttpContent(this.http, pkgUrl);\n if (content) {\n const subdirReleases = extractPageLinks(content, (href) => {\n const path = href.split('/').at(-1)!;\n if (path.startsWith('.')) {\n return null;\n }\n\n return path;\n });\n\n subdirReleases.forEach((x) => releases.push(x));\n }\n }\n if (releases.length) {\n return [...new Set(releases)].sort(compare);\n }\n }\n\n return null;\n }\n\n // istanbul ignore next: to be rewritten\n async getUrls(\n searchRoot: string,\n artifactDirs: string[] | null,\n version: string | null,\n ): Promise<Partial<ReleaseResult>> {\n const result: Partial<ReleaseResult> = {};\n\n if (!artifactDirs?.length) {\n return result;\n }\n\n if (!version) {\n return result;\n }\n\n for (const artifactDir of artifactDirs) {\n const [artifact] = artifactDir.split('_');\n const pomFileNames = [\n `${artifactDir}-${version}.pom`,\n `${artifact}-${version}.pom`,\n ];\n\n for (const pomFileName of pomFileNames) {\n const pomUrl = `${searchRoot}/${artifactDir}/${version}/${pomFileName}`;\n const content = await downloadHttpContent(this.http, pomUrl);\n if (content) {\n const pomXml = new XmlDocument(content);\n\n const homepage = pomXml.valueWithPath('url');\n if (homepage) {\n result.homepage = homepage;\n }\n\n const sourceUrl = pomXml.valueWithPath('scm.url');\n if (sourceUrl) {\n result.sourceUrl = sourceUrl\n .replace(regEx(/^scm:/), '')\n .replace(regEx(/^git:/), '')\n .replace(regEx(/^git@github.com:/), 'https://github.com/')\n .replace(regEx(/\\.git$/), '');\n }\n\n return result;\n }\n }\n }\n\n return result;\n }\n\n async resolvePluginReleases(\n rootUrl: string,\n artifact: string,\n scalaVersion: string,\n ): Promise<string[] | null> {\n const searchRoot = `${rootUrl}/${artifact}`;\n const hrefFilterMap = (href: string): string | null => {\n if (href.startsWith('.')) {\n return null;\n }\n\n return href;\n };\n const searchRootContent = await downloadHttpContent(\n this.http,\n ensureTrailingSlash(searchRoot),\n );\n if (searchRootContent) {\n const releases: string[] = [];\n const scalaVersionItems = extractPageLinks(\n searchRootContent,\n hrefFilterMap,\n );\n const scalaVersions = scalaVersionItems.map((x) =>\n x.replace(regEx(/^scala_/), ''),\n );\n const searchVersions = scalaVersions.includes(scalaVersion)\n ? [scalaVersion]\n : scalaVersions;\n for (const searchVersion of searchVersions) {\n const searchSubRoot = `${searchRoot}/scala_${searchVersion}`;\n const subRootContent = await downloadHttpContent(\n this.http,\n ensureTrailingSlash(searchSubRoot),\n );\n if (subRootContent) {\n const sbtVersionItems = extractPageLinks(\n subRootContent,\n hrefFilterMap,\n );\n for (const sbtItem of sbtVersionItems) {\n const releasesRoot = `${searchSubRoot}/${sbtItem}`;\n const releasesIndexContent = await downloadHttpContent(\n this.http,\n ensureTrailingSlash(releasesRoot),\n );\n if (releasesIndexContent) {\n const releasesParsed = extractPageLinks(\n releasesIndexContent,\n hrefFilterMap,\n );\n releasesParsed.forEach((x) => releases.push(x));\n }\n }\n }\n }\n if (releases.length) {\n return [...new Set(releases)].sort(compare);\n }\n }\n return null;\n }\n\n override async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const [groupId, artifactId] = packageName.split(':');\n const groupIdSplit = groupId.split('.');\n const artifactIdSplit = artifactId.split('_');\n const [artifact, scalaVersion] = artifactIdSplit;\n\n const repoRoot = ensureTrailingSlash(registryUrl);\n const searchRoots: string[] = [];\n // Optimize lookup order\n if (!registryUrl.startsWith(MAVEN_REPO)) {\n searchRoots.push(`${repoRoot}${groupIdSplit.join('.')}`);\n }\n searchRoots.push(`${repoRoot}${groupIdSplit.join('/')}`);\n\n for (const searchRoot of searchRoots) {\n let versions = await this.resolvePluginReleases(\n searchRoot,\n artifact,\n scalaVersion,\n );\n let urls = {};\n\n if (!versions?.length) {\n const artifactSubdirs = await this.getArtifactSubdirs(\n searchRoot,\n artifact,\n scalaVersion,\n );\n versions = await this.getPackageReleases(searchRoot, artifactSubdirs);\n const latestVersion = getLatestVersion(versions);\n urls = await this.getUrls(searchRoot, artifactSubdirs, latestVersion);\n }\n\n const dependencyUrl = `${searchRoot}/${artifact}`;\n\n logger.trace({ dependency: packageName, versions }, `Package versions`);\n if (versions) {\n return {\n ...urls,\n dependencyUrl,\n releases: versions.map((v) => ({ version: v })),\n };\n }\n }\n\n logger.debug(\n `No versions found for ${packageName} in ${searchRoots.length} repositories`,\n );\n return null;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/datasource/sbt-plugin/index.ts"],"sourcesContent":["import { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger/index.ts';\nimport { Http } from '../../../util/http/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { ensureTrailingSlash } from '../../../util/url.ts';\nimport * as ivyVersioning from '../../versioning/ivy/index.ts';\nimport { compare } from '../../versioning/maven/compare.ts';\nimport { Datasource } from '../datasource.ts';\nimport { MAVEN_REPO } from '../maven/common.ts';\nimport { downloadHttpContent } from '../maven/util.ts';\nimport { extractPageLinks, getLatestVersion } from '../sbt-package/util.ts';\nimport type {\n GetReleasesConfig,\n RegistryStrategy,\n ReleaseResult,\n} from '../types.ts';\n\nexport const SBT_PLUGINS_REPO =\n 'https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases';\n\nexport class SbtPluginDatasource extends Datasource {\n static readonly id = 'sbt-plugin';\n\n override readonly defaultRegistryUrls = [SBT_PLUGINS_REPO, MAVEN_REPO];\n\n override readonly defaultVersioning = ivyVersioning.id;\n\n override readonly registryStrategy: RegistryStrategy = 'merge';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `scm` tags in the results.';\n\n constructor() {\n super(SbtPluginDatasource.id);\n this.http = new Http('sbt');\n }\n\n // istanbul ignore next: to be rewritten\n async getArtifactSubdirs(\n searchRoot: string,\n artifact: string,\n scalaVersion: string,\n ): Promise<string[] | null> {\n const pkgUrl = ensureTrailingSlash(searchRoot);\n const indexContent = await downloadHttpContent(this.http, pkgUrl);\n if (indexContent) {\n let artifactSubdirs = extractPageLinks(indexContent, (href) => {\n const path = href.split('/').at(-1)!;\n if (\n path.startsWith(`${artifact}_native`) ||\n path.startsWith(`${artifact}_sjs`)\n ) {\n return null;\n }\n\n if (path === artifact || path.startsWith(`${artifact}_`)) {\n return path;\n }\n\n return null;\n });\n\n if (\n scalaVersion &&\n artifactSubdirs.includes(`${artifact}_${scalaVersion}`)\n ) {\n artifactSubdirs = [`${artifact}_${scalaVersion}`];\n }\n return artifactSubdirs;\n }\n\n return null;\n }\n\n // istanbul ignore next: to be rewritten\n async getPackageReleases(\n searchRoot: string,\n artifactSubdirs: string[] | null,\n ): Promise<string[] | null> {\n if (artifactSubdirs) {\n const releases: string[] = [];\n for (const searchSubdir of artifactSubdirs) {\n const pkgUrl = ensureTrailingSlash(`${searchRoot}/${searchSubdir}`);\n const content = await downloadHttpContent(this.http, pkgUrl);\n if (content) {\n const subdirReleases = extractPageLinks(content, (href) => {\n const path = href.split('/').at(-1)!;\n if (path.startsWith('.')) {\n return null;\n }\n\n return path;\n });\n\n subdirReleases.forEach((x) => releases.push(x));\n }\n }\n if (releases.length) {\n return [...new Set(releases)].sort(compare);\n }\n }\n\n return null;\n }\n\n // istanbul ignore next: to be rewritten\n async getUrls(\n searchRoot: string,\n artifactDirs: string[] | null,\n version: string | null,\n ): Promise<Partial<ReleaseResult>> {\n const result: Partial<ReleaseResult> = {};\n\n if (!artifactDirs?.length) {\n return result;\n }\n\n if (!version) {\n return result;\n }\n\n for (const artifactDir of artifactDirs) {\n const [artifact] = artifactDir.split('_');\n const pomFileNames = [\n `${artifactDir}-${version}.pom`,\n `${artifact}-${version}.pom`,\n ];\n\n for (const pomFileName of pomFileNames) {\n const pomUrl = `${searchRoot}/${artifactDir}/${version}/${pomFileName}`;\n const content = await downloadHttpContent(this.http, pomUrl);\n if (content) {\n const pomXml = new XmlDocument(content);\n\n const homepage = pomXml.valueWithPath('url');\n if (homepage) {\n result.homepage = homepage;\n }\n\n const sourceUrl = pomXml.valueWithPath('scm.url');\n if (sourceUrl) {\n result.sourceUrl = sourceUrl\n .replace(regEx(/^scm:/), '')\n .replace(regEx(/^git:/), '')\n .replace(regEx(/^git@github.com:/), 'https://github.com/')\n .replace(regEx(/\\.git$/), '');\n }\n\n return result;\n }\n }\n }\n\n return result;\n }\n\n async resolvePluginReleases(\n rootUrl: string,\n artifact: string,\n scalaVersion: string,\n ): Promise<string[] | null> {\n const searchRoot = `${rootUrl}/${artifact}`;\n function hrefFilterMap(href: string): string | null {\n if (href.startsWith('.')) {\n return null;\n }\n\n return href;\n }\n const searchRootContent = await downloadHttpContent(\n this.http,\n ensureTrailingSlash(searchRoot),\n );\n if (searchRootContent) {\n const releases: string[] = [];\n const scalaVersionItems = extractPageLinks(\n searchRootContent,\n hrefFilterMap,\n );\n const scalaVersions = scalaVersionItems.map((x) =>\n x.replace(regEx(/^scala_/), ''),\n );\n const searchVersions = scalaVersions.includes(scalaVersion)\n ? [scalaVersion]\n : scalaVersions;\n for (const searchVersion of searchVersions) {\n const searchSubRoot = `${searchRoot}/scala_${searchVersion}`;\n const subRootContent = await downloadHttpContent(\n this.http,\n ensureTrailingSlash(searchSubRoot),\n );\n if (subRootContent) {\n const sbtVersionItems = extractPageLinks(\n subRootContent,\n hrefFilterMap,\n );\n for (const sbtItem of sbtVersionItems) {\n const releasesRoot = `${searchSubRoot}/${sbtItem}`;\n const releasesIndexContent = await downloadHttpContent(\n this.http,\n ensureTrailingSlash(releasesRoot),\n );\n if (releasesIndexContent) {\n const releasesParsed = extractPageLinks(\n releasesIndexContent,\n hrefFilterMap,\n );\n releasesParsed.forEach((x) => releases.push(x));\n }\n }\n }\n }\n if (releases.length) {\n return [...new Set(releases)].sort(compare);\n }\n }\n return null;\n }\n\n override async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const [groupId, artifactId] = packageName.split(':');\n const groupIdSplit = groupId.split('.');\n const artifactIdSplit = artifactId.split('_');\n const [artifact, scalaVersion] = artifactIdSplit;\n\n const repoRoot = ensureTrailingSlash(registryUrl);\n const searchRoots: string[] = [];\n // Optimize lookup order\n if (!registryUrl.startsWith(MAVEN_REPO)) {\n searchRoots.push(`${repoRoot}${groupIdSplit.join('.')}`);\n }\n searchRoots.push(`${repoRoot}${groupIdSplit.join('/')}`);\n\n for (const searchRoot of searchRoots) {\n let versions = await this.resolvePluginReleases(\n searchRoot,\n artifact,\n scalaVersion,\n );\n let urls = {};\n\n if (!versions?.length) {\n const artifactSubdirs = await this.getArtifactSubdirs(\n searchRoot,\n artifact,\n scalaVersion,\n );\n versions = await this.getPackageReleases(searchRoot, artifactSubdirs);\n const latestVersion = getLatestVersion(versions);\n urls = await this.getUrls(searchRoot, artifactSubdirs, latestVersion);\n }\n\n const dependencyUrl = `${searchRoot}/${artifact}`;\n\n logger.trace({ dependency: packageName, versions }, `Package versions`);\n if (versions) {\n return {\n ...urls,\n dependencyUrl,\n releases: versions.map((v) => ({ version: v })),\n };\n }\n }\n\n logger.debug(\n `No versions found for ${packageName} in ${searchRoots.length} repositories`,\n );\n return null;\n }\n}\n"],"mappings":"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"}
@@ -83,13 +83,13 @@ async function updateArtifacts(updateArtifact) {
83
83
  logger.debug(`def: ${rule.value}, urls is empty`);
84
84
  continue;
85
85
  }
86
- const updateValues = (oldUrl) => {
86
+ function updateValues(oldUrl) {
87
87
  let url = oldUrl;
88
88
  url = replaceValues(url, upgrade.currentValue, upgrade.newValue);
89
89
  url = replaceValues(url, upgrade.currentDigest, upgrade.newDigest);
90
90
  url = migrateUrl(url, upgrade);
91
91
  return url;
92
- };
92
+ }
93
93
  const urls = urlFragments.map(({ value }) => updateValues(value));
94
94
  const hash = await getHashFromUrls(urls);
95
95
  if (!hash) {
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","names":["packageCache.get","packageCache.set","pMap"],"sources":["../../../../lib/modules/manager/bazel/artifacts.ts"],"sourcesContent":["import { isTruthy } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport * as packageCache from '../../../util/cache/package/index.ts';\nimport { hashStream } from '../../../util/hash.ts';\nimport { Http } from '../../../util/http/index.ts';\nimport { map as pMap } from '../../../util/promises.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport type {\n ArtifactError,\n UpdateArtifact,\n UpdateArtifactsResult,\n Upgrade,\n} from '../types.ts';\nimport {\n findCodeFragment,\n patchCodeAtFragments,\n updateCode,\n} from './common.ts';\nimport type { RecordFragment, StringFragment } from './types.ts';\n\nconst http = new Http('bazel');\n\nfunction getUrlFragments(rule: RecordFragment): StringFragment[] {\n const urls: StringFragment[] = [];\n\n const urlRecord = rule.children.url;\n if (urlRecord?.type === 'string') {\n urls.push(urlRecord);\n }\n\n const urlsRecord = rule.children.urls;\n if (urlsRecord?.type === 'array') {\n for (const urlRecord of urlsRecord.children) {\n if (urlRecord.type === 'string') {\n urls.push(urlRecord);\n }\n }\n }\n\n return urls;\n}\n\nconst urlMassages = {\n 'bazel-skylib.': 'bazel_skylib-',\n '/bazel-gazelle/releases/download/0': '/bazel-gazelle/releases/download/v0',\n '/bazel-gazelle-0': '/bazel-gazelle-v0',\n '/rules_go/releases/download/0': '/rules_go/releases/download/v0',\n '/rules_go-0': '/rules_go-v0',\n};\n\nfunction massageUrl(url: string): string {\n let result = url;\n for (const [from, to] of Object.entries(urlMassages)) {\n result = result.replace(from, to);\n }\n return result;\n}\n\nfunction migrateUrl(url: string, upgrade: Upgrade): string {\n const newValue = upgrade.newValue?.replace(regEx(/^v/), '');\n\n // @see https://github.com/bazelbuild/rules_webtesting/releases/tag/0.3.5\n // @see https://github.com/bazelbuild/rules_webtesting/releases/tag/0.4.0\n if (\n url.endsWith('/rules_webtesting.tar.gz') &&\n !newValue?.match(regEx(/^0\\.[0123]\\./))\n ) {\n return url.replace(regEx(/\\.tar\\.gz$/), `-${newValue}.tar.gz`);\n }\n\n return url;\n}\n\nfunction replaceAll(input: string, from: string, to: string): string {\n return input.split(from).join(to);\n}\n\nfunction replaceValues(\n content: string,\n from: string | null | undefined,\n to: string | null | undefined,\n): string {\n // istanbul ignore if\n if (!from || !to || from === to) {\n return content;\n }\n const massagedFrom = from.replace(regEx(/^v/), '');\n const massagedTo = to.replace(regEx(/^v/), '');\n return replaceAll(content, massagedFrom, massagedTo);\n}\n\nasync function getHashFromUrl(url: string): Promise<string | null> {\n const cacheNamespace = 'url-sha256';\n const cachedResult = await packageCache.get<string | null>(\n cacheNamespace,\n url,\n );\n /* istanbul ignore next line */\n if (cachedResult) {\n return cachedResult;\n }\n try {\n const hash = await hashStream(http.stream(url), 'sha256');\n const cacheMinutes = 3 * 24 * 60; // 3 days\n await packageCache.set(cacheNamespace, url, hash, cacheMinutes);\n return hash;\n } catch /* istanbul ignore next */ {\n return null;\n }\n}\n\nasync function getHashFromUrls(urls: string[]): Promise<string | null> {\n const hashes = (\n await pMap(urls, (url) => getHashFromUrl(massageUrl(url)))\n ).filter(isTruthy);\n if (!hashes.length) {\n logger.debug({ urls }, 'Could not calculate hash for URLs');\n return null;\n }\n\n const distinctHashes = new Set(hashes);\n // istanbul ignore if\n if (distinctHashes.size > 1) {\n logger.warn({ urls }, 'Found multiple hashes for single def');\n }\n\n return hashes[0];\n}\n\nexport async function updateArtifacts(\n updateArtifact: UpdateArtifact,\n): Promise<UpdateArtifactsResult[] | null> {\n const { packageFileName: path, updatedDeps: upgrades } = updateArtifact;\n const oldContents = updateArtifact.newPackageFileContent;\n let newContents = oldContents;\n const artifactErrors: ArtifactError[] = [];\n for (const upgrade of upgrades) {\n const { managerData } = upgrade;\n const idx = managerData?.idx as number;\n\n if (upgrade.depType === 'http_file' || upgrade.depType === 'http_archive') {\n const rule = findCodeFragment(newContents, [idx]);\n /* v8 ignore next -- used only for type narrowing */\n if (rule?.type !== 'record') {\n continue;\n }\n\n const urlFragments = getUrlFragments(rule);\n if (!urlFragments?.length) {\n logger.debug(`def: ${rule.value}, urls is empty`);\n continue;\n }\n\n const updateValues = (oldUrl: string): string => {\n let url = oldUrl;\n url = replaceValues(url, upgrade.currentValue, upgrade.newValue);\n url = replaceValues(url, upgrade.currentDigest, upgrade.newDigest);\n url = migrateUrl(url, upgrade);\n return url;\n };\n\n const urls = urlFragments.map(({ value }) => updateValues(value));\n const hash = await getHashFromUrls(urls);\n if (!hash) {\n if (urlFragments.length >= 1) {\n artifactErrors.push({\n fileName: path,\n stderr: `Could not calculate sha256 for ${upgrade.depName} at ${upgrade.newValue}. Checked URLs: ${urls.join(', ')}`,\n });\n }\n continue;\n }\n\n newContents = patchCodeAtFragments(\n newContents,\n urlFragments,\n updateValues,\n );\n newContents = updateCode(\n newContents,\n [idx, 'strip_prefix'],\n updateValues,\n );\n newContents = updateCode(newContents, [idx, 'sha256'], hash);\n }\n }\n\n if (oldContents === newContents) {\n if (artifactErrors.length) {\n // If we have artifact errors, return them even if we have file changes\n return artifactErrors.map((error) => ({\n artifactError: error,\n }));\n }\n return null;\n }\n\n return [\n {\n file: {\n type: 'addition',\n path,\n contents: newContents,\n },\n },\n ];\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"artifacts.js","names":["packageCache.get","packageCache.set","pMap"],"sources":["../../../../lib/modules/manager/bazel/artifacts.ts"],"sourcesContent":["import { isTruthy } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport * as packageCache from '../../../util/cache/package/index.ts';\nimport { hashStream } from '../../../util/hash.ts';\nimport { Http } from '../../../util/http/index.ts';\nimport { map as pMap } from '../../../util/promises.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport type {\n ArtifactError,\n UpdateArtifact,\n UpdateArtifactsResult,\n Upgrade,\n} from '../types.ts';\nimport {\n findCodeFragment,\n patchCodeAtFragments,\n updateCode,\n} from './common.ts';\nimport type { RecordFragment, StringFragment } from './types.ts';\n\nconst http = new Http('bazel');\n\nfunction getUrlFragments(rule: RecordFragment): StringFragment[] {\n const urls: StringFragment[] = [];\n\n const urlRecord = rule.children.url;\n if (urlRecord?.type === 'string') {\n urls.push(urlRecord);\n }\n\n const urlsRecord = rule.children.urls;\n if (urlsRecord?.type === 'array') {\n for (const urlRecord of urlsRecord.children) {\n if (urlRecord.type === 'string') {\n urls.push(urlRecord);\n }\n }\n }\n\n return urls;\n}\n\nconst urlMassages = {\n 'bazel-skylib.': 'bazel_skylib-',\n '/bazel-gazelle/releases/download/0': '/bazel-gazelle/releases/download/v0',\n '/bazel-gazelle-0': '/bazel-gazelle-v0',\n '/rules_go/releases/download/0': '/rules_go/releases/download/v0',\n '/rules_go-0': '/rules_go-v0',\n};\n\nfunction massageUrl(url: string): string {\n let result = url;\n for (const [from, to] of Object.entries(urlMassages)) {\n result = result.replace(from, to);\n }\n return result;\n}\n\nfunction migrateUrl(url: string, upgrade: Upgrade): string {\n const newValue = upgrade.newValue?.replace(regEx(/^v/), '');\n\n // @see https://github.com/bazelbuild/rules_webtesting/releases/tag/0.3.5\n // @see https://github.com/bazelbuild/rules_webtesting/releases/tag/0.4.0\n if (\n url.endsWith('/rules_webtesting.tar.gz') &&\n !newValue?.match(regEx(/^0\\.[0123]\\./))\n ) {\n return url.replace(regEx(/\\.tar\\.gz$/), `-${newValue}.tar.gz`);\n }\n\n return url;\n}\n\nfunction replaceAll(input: string, from: string, to: string): string {\n return input.split(from).join(to);\n}\n\nfunction replaceValues(\n content: string,\n from: string | null | undefined,\n to: string | null | undefined,\n): string {\n // istanbul ignore if\n if (!from || !to || from === to) {\n return content;\n }\n const massagedFrom = from.replace(regEx(/^v/), '');\n const massagedTo = to.replace(regEx(/^v/), '');\n return replaceAll(content, massagedFrom, massagedTo);\n}\n\nasync function getHashFromUrl(url: string): Promise<string | null> {\n const cacheNamespace = 'url-sha256';\n const cachedResult = await packageCache.get<string | null>(\n cacheNamespace,\n url,\n );\n /* istanbul ignore next line */\n if (cachedResult) {\n return cachedResult;\n }\n try {\n const hash = await hashStream(http.stream(url), 'sha256');\n const cacheMinutes = 3 * 24 * 60; // 3 days\n await packageCache.set(cacheNamespace, url, hash, cacheMinutes);\n return hash;\n } catch /* istanbul ignore next */ {\n return null;\n }\n}\n\nasync function getHashFromUrls(urls: string[]): Promise<string | null> {\n const hashes = (\n await pMap(urls, (url) => getHashFromUrl(massageUrl(url)))\n ).filter(isTruthy);\n if (!hashes.length) {\n logger.debug({ urls }, 'Could not calculate hash for URLs');\n return null;\n }\n\n const distinctHashes = new Set(hashes);\n // istanbul ignore if\n if (distinctHashes.size > 1) {\n logger.warn({ urls }, 'Found multiple hashes for single def');\n }\n\n return hashes[0];\n}\n\nexport async function updateArtifacts(\n updateArtifact: UpdateArtifact,\n): Promise<UpdateArtifactsResult[] | null> {\n const { packageFileName: path, updatedDeps: upgrades } = updateArtifact;\n const oldContents = updateArtifact.newPackageFileContent;\n let newContents = oldContents;\n const artifactErrors: ArtifactError[] = [];\n for (const upgrade of upgrades) {\n const { managerData } = upgrade;\n const idx = managerData?.idx as number;\n\n if (upgrade.depType === 'http_file' || upgrade.depType === 'http_archive') {\n const rule = findCodeFragment(newContents, [idx]);\n /* v8 ignore next -- used only for type narrowing */\n if (rule?.type !== 'record') {\n continue;\n }\n\n const urlFragments = getUrlFragments(rule);\n if (!urlFragments?.length) {\n logger.debug(`def: ${rule.value}, urls is empty`);\n continue;\n }\n\n function updateValues(oldUrl: string): string {\n let url = oldUrl;\n url = replaceValues(url, upgrade.currentValue, upgrade.newValue);\n url = replaceValues(url, upgrade.currentDigest, upgrade.newDigest);\n url = migrateUrl(url, upgrade);\n return url;\n }\n\n const urls = urlFragments.map(({ value }) => updateValues(value));\n const hash = await getHashFromUrls(urls);\n if (!hash) {\n if (urlFragments.length >= 1) {\n artifactErrors.push({\n fileName: path,\n stderr: `Could not calculate sha256 for ${upgrade.depName} at ${upgrade.newValue}. Checked URLs: ${urls.join(', ')}`,\n });\n }\n continue;\n }\n\n newContents = patchCodeAtFragments(\n newContents,\n urlFragments,\n updateValues,\n );\n newContents = updateCode(\n newContents,\n [idx, 'strip_prefix'],\n updateValues,\n );\n newContents = updateCode(newContents, [idx, 'sha256'], hash);\n }\n }\n\n if (oldContents === newContents) {\n if (artifactErrors.length) {\n // If we have artifact errors, return them even if we have file changes\n return artifactErrors.map((error) => ({\n artifactError: error,\n }));\n }\n return null;\n }\n\n return [\n {\n file: {\n type: 'addition',\n path,\n contents: newContents,\n },\n },\n ];\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["customManagers"],"sources":["../../../../lib/modules/manager/custom/index.ts"],"sourcesContent":["import type { ManagerApi } from '../types.ts';\nimport customManagers from './api.ts';\n\nexport const customManagerList = Array.from(customManagers.keys());\nexport const getCustomManagers = (): Map<string, ManagerApi> => customManagers;\n\nexport function isCustomManager(manager: string): boolean {\n return customManagers.has(manager);\n}\n"],"mappings":";;AAGA,MAAa,oBAAoB,MAAM,KAAKA,IAAe,KAAK,CAAC;AAGjE,SAAgB,gBAAgB,SAA0B;CACxD,OAAOA,IAAe,IAAI,OAAO;AACnC"}
1
+ {"version":3,"file":"index.js","names":["customManagers"],"sources":["../../../../lib/modules/manager/custom/index.ts"],"sourcesContent":["import type { ManagerApi } from '../types.ts';\nimport customManagers from './api.ts';\n\nexport const customManagerList = Array.from(customManagers.keys());\nexport function getCustomManagers(): Map<string, ManagerApi> {\n return customManagers;\n}\n\nexport function isCustomManager(manager: string): boolean {\n return customManagers.has(manager);\n}\n"],"mappings":";;AAGA,MAAa,oBAAoB,MAAM,KAAKA,IAAe,KAAK,CAAC;AAKjE,SAAgB,gBAAgB,SAA0B;CACxD,OAAOA,IAAe,IAAI,OAAO;AACnC"}
@@ -107,8 +107,10 @@ function updateDependency(config) {
107
107
  }
108
108
  }
109
109
  if (depType === "tasks.command" && parsedContents.tasks) {
110
- const hasCommandMatch = (value) => isObject(value) && "command" in value && isString(value.command) && value.command.includes(searchCurrentValue);
111
- const matches = Object.entries(parsedContents.tasks).filter((entry) => hasCommandMatch(entry[1]));
110
+ function hasCommandMatch(value, currentValue) {
111
+ return isObject(value) && "command" in value && isString(value.command) && value.command.includes(currentValue);
112
+ }
113
+ const matches = Object.entries(parsedContents.tasks).filter((entry) => hasCommandMatch(entry[1], searchCurrentValue));
112
114
  for (const [key, task] of matches) {
113
115
  task.command = task.command.replace(searchCurrentValue, newString);
114
116
  parsedContents.tasks[key] = task;
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","names":["npmUpdateDependency"],"sources":["../../../../lib/modules/manager/deno/update.ts"],"sourcesContent":["import { isNonEmptyArray, isObject, isString } from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport upath from 'upath';\nimport { logger } from '../../../logger/index.ts';\nimport { parseJsonc } from '../../../util/common.ts';\nimport { matchAt, replaceAt } from '../../../util/string.ts';\nimport { updateDependency as npmUpdateDependency } from '../npm/index.ts';\nimport type { UpdateDependencyConfig } from '../types.ts';\nimport { UpdateDenoJsonFile, UpdateImportMapJsonFile } from './schema.ts';\nimport type { DenoManagerData } from './types.ts';\n\nfunction getValueByDatasource(\n datasource: string,\n depName: string,\n currentValue?: string | null,\n): string | null {\n if (datasource === 'deno') {\n return currentValue ? `${depName}@${currentValue}` : depName;\n }\n if (datasource === 'jsr' || datasource === 'npm') {\n return currentValue\n ? `${datasource}:${depName}@${currentValue}`\n : `${datasource}:${depName}`;\n }\n return null;\n}\n\n// ported from lib/modules/manager/npm/update/dependency/index.ts\nfunction replaceAsString(\n parsedContents: UpdateDenoJsonFile,\n fileContent: string,\n depType: string,\n searchString: string,\n newString: string,\n): string {\n // Skip ahead to depType section\n let searchIndex = fileContent.indexOf(`\"${depType}\"`) + depType.length;\n logger.trace(`Starting search at index ${searchIndex}`);\n // Iterate through the rest of the file\n for (; searchIndex < fileContent.length; searchIndex += 1) {\n // First check if we have a hit for the old version\n if (matchAt(fileContent, searchIndex, searchString)) {\n logger.trace(`Found match at index ${searchIndex}`);\n // Now test if the result matches\n const testContent = replaceAt(\n fileContent,\n searchIndex,\n searchString,\n newString,\n );\n // Compare the parsed JSON/JSONC structure of old and new\n if (dequal(parsedContents, parseJsonc(testContent))) {\n return testContent;\n }\n }\n }\n throw new Error();\n}\n\nfunction updateImportMapLikeDepTypes(\n parsedContents: UpdateDenoJsonFile,\n fileContent: string,\n depType: string,\n searchString: string,\n newString: string,\n): string | null {\n let newFileContent: string | null = null;\n\n if (depType === 'imports' && parsedContents.imports) {\n const matches = Object.entries(parsedContents.imports).filter(([, value]) =>\n value.includes(searchString),\n );\n for (const [key] of matches) {\n parsedContents.imports[key] = parsedContents.imports[key].replace(\n searchString,\n newString,\n );\n newFileContent = replaceAsString(\n parsedContents,\n fileContent,\n depType,\n searchString,\n newString,\n );\n }\n }\n\n if (depType === 'scopes' && parsedContents.scopes) {\n for (const scopeName of Object.keys(parsedContents.scopes)) {\n const scope = parsedContents.scopes[scopeName];\n const matches = Object.entries(scope).filter(([, value]) =>\n value.includes(searchString),\n );\n for (const [key] of matches) {\n parsedContents.scopes[scopeName][key] = parsedContents.scopes[\n scopeName\n ][key].replace(searchString, newString);\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent ?? fileContent,\n depType,\n searchString,\n newString,\n );\n }\n }\n }\n\n return newFileContent;\n}\n\nexport function updateDependency(\n config: UpdateDependencyConfig<DenoManagerData>,\n): string | null {\n const { fileContent, packageFile, upgrade } = config;\n const { depName, currentValue, newValue, datasource, managerData } = upgrade;\n if (!packageFile) {\n logger.debug('deno.updateDependency(): No package file found');\n return null;\n }\n\n // <importMap>.json\n if (managerData?.importMapReferrer) {\n if (!depName || !newValue || !datasource || !upgrade.depType) {\n logger.debug({ depName, currentValue, newValue }, 'Unknown value');\n return null;\n }\n const depType = upgrade.depType;\n logger.debug(\n `deno.updateDependency(): ${packageFile}:${depType}.${depName} = ${newValue}`,\n );\n\n const parsedResult = UpdateImportMapJsonFile.safeParse(fileContent);\n if (!parsedResult.success) {\n logger.debug(\n { err: parsedResult.error },\n `Invalid packageFile: ${packageFile} detected`,\n );\n return null;\n }\n const parsedContents = parsedResult.data;\n\n const searchCurrentValue = getValueByDatasource(\n datasource,\n depName,\n currentValue,\n );\n const newString = getValueByDatasource(datasource, depName, newValue);\n if (!searchCurrentValue || !newString) {\n logger.debug(\n `deno.updateDependency(): \"${datasource}\" is not supported datasource`,\n );\n return null;\n }\n\n return updateImportMapLikeDepTypes(\n parsedContents,\n fileContent,\n depType,\n searchCurrentValue,\n newString,\n );\n }\n\n // deno.json/jsonc\n if (upath.basename(packageFile).startsWith('deno.json')) {\n if (!depName || !newValue || !datasource || !upgrade.depType) {\n logger.debug({ depName, currentValue, newValue }, 'Unknown value');\n return null;\n }\n const depType = upgrade.depType;\n logger.debug(\n `deno.updateDependency(): ${packageFile}:${depType}.${depName} = ${newValue}`,\n );\n\n const parsedResult = UpdateDenoJsonFile.safeParse(fileContent);\n if (!parsedResult.success) {\n logger.debug(\n { err: parsedResult.error },\n `Invalid packageFile: ${packageFile} detected`,\n );\n return null;\n }\n const parsedContents = parsedResult.data;\n\n let newFileContent: string | null = null;\n\n const searchCurrentValue = getValueByDatasource(\n datasource,\n depName,\n currentValue,\n );\n const newString = getValueByDatasource(datasource, depName, newValue);\n if (!searchCurrentValue || !newString) {\n logger.debug(\n `deno.updateDependency(): \"${datasource}\" is not supported datasource`,\n );\n return null;\n }\n\n newFileContent = updateImportMapLikeDepTypes(\n parsedContents,\n fileContent,\n depType,\n searchCurrentValue,\n newString,\n );\n\n if (depType === 'tasks' && parsedContents.tasks) {\n const matches = Object.entries(parsedContents.tasks).flatMap(\n ([key, value]) =>\n isString(value) && value.includes(searchCurrentValue)\n ? [[key, value]]\n : [],\n );\n for (const [key, value] of matches) {\n parsedContents.tasks[key] = value.replace(\n searchCurrentValue,\n newString,\n );\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent ?? fileContent,\n depType,\n searchCurrentValue,\n newString,\n );\n }\n }\n\n if (depType === 'tasks.command' && parsedContents.tasks) {\n const hasCommandMatch = (value: unknown): value is { command: string } =>\n isObject(value) &&\n 'command' in value &&\n isString(value.command) &&\n value.command.includes(searchCurrentValue);\n\n const matches = Object.entries(parsedContents.tasks).filter(\n (entry): entry is [string, { command: string }] =>\n hasCommandMatch(entry[1]),\n );\n for (const [key, task] of matches) {\n task.command = task.command.replace(searchCurrentValue, newString);\n parsedContents.tasks[key] = task;\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent ?? fileContent,\n depType,\n searchCurrentValue,\n newString,\n );\n }\n }\n\n if (\n depType === 'compilerOptions.types' &&\n isNonEmptyArray(parsedContents.compilerOptions?.types)\n ) {\n const index = parsedContents.compilerOptions.types.findIndex(\n (value: string) => value === searchCurrentValue,\n );\n if (index !== -1) {\n parsedContents.compilerOptions.types[index] =\n // prettier-ignore\n parsedContents.compilerOptions.types[index].replace(searchCurrentValue, newString);\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent ?? fileContent,\n depType,\n searchCurrentValue,\n newString,\n );\n }\n }\n\n if (\n depType === 'compilerOptions.jsxImportSource' &&\n parsedContents.compilerOptions?.jsxImportSource\n ) {\n parsedContents.compilerOptions.jsxImportSource =\n parsedContents.compilerOptions.jsxImportSource.replace(\n searchCurrentValue,\n newString,\n );\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent ?? fileContent,\n depType,\n searchCurrentValue,\n newString,\n );\n }\n\n if (\n depType === 'compilerOptions.jsxImportSourceTypes' &&\n parsedContents.compilerOptions?.jsxImportSourceTypes\n ) {\n parsedContents.compilerOptions.jsxImportSourceTypes =\n parsedContents.compilerOptions.jsxImportSourceTypes.replace(\n searchCurrentValue,\n newString,\n );\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent ?? fileContent,\n depType,\n searchCurrentValue,\n newString,\n );\n }\n\n if (\n depType === 'lint.plugins' &&\n isNonEmptyArray(parsedContents.lint?.plugins)\n ) {\n const index = parsedContents.lint.plugins.findIndex(\n (value: string) => value === searchCurrentValue,\n );\n if (index !== -1) {\n parsedContents.lint.plugins[index] = parsedContents.lint.plugins[\n index\n ].replace(searchCurrentValue, newString);\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent ?? fileContent,\n depType,\n searchCurrentValue,\n newString,\n );\n }\n }\n\n if (newFileContent === fileContent) {\n return fileContent;\n }\n return newFileContent;\n }\n\n // node-compat\n if (upath.basename(packageFile) === 'package.json') {\n return npmUpdateDependency(config);\n }\n\n logger.debug(`${packageFile} is not supported`);\n return null;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"update.js","names":["npmUpdateDependency"],"sources":["../../../../lib/modules/manager/deno/update.ts"],"sourcesContent":["import { isNonEmptyArray, isObject, isString } from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport upath from 'upath';\nimport { logger } from '../../../logger/index.ts';\nimport { parseJsonc } from '../../../util/common.ts';\nimport { matchAt, replaceAt } from '../../../util/string.ts';\nimport { updateDependency as npmUpdateDependency } from '../npm/index.ts';\nimport type { UpdateDependencyConfig } from '../types.ts';\nimport { UpdateDenoJsonFile, UpdateImportMapJsonFile } from './schema.ts';\nimport type { DenoManagerData } from './types.ts';\n\nfunction getValueByDatasource(\n datasource: string,\n depName: string,\n currentValue?: string | null,\n): string | null {\n if (datasource === 'deno') {\n return currentValue ? `${depName}@${currentValue}` : depName;\n }\n if (datasource === 'jsr' || datasource === 'npm') {\n return currentValue\n ? `${datasource}:${depName}@${currentValue}`\n : `${datasource}:${depName}`;\n }\n return null;\n}\n\n// ported from lib/modules/manager/npm/update/dependency/index.ts\nfunction replaceAsString(\n parsedContents: UpdateDenoJsonFile,\n fileContent: string,\n depType: string,\n searchString: string,\n newString: string,\n): string {\n // Skip ahead to depType section\n let searchIndex = fileContent.indexOf(`\"${depType}\"`) + depType.length;\n logger.trace(`Starting search at index ${searchIndex}`);\n // Iterate through the rest of the file\n for (; searchIndex < fileContent.length; searchIndex += 1) {\n // First check if we have a hit for the old version\n if (matchAt(fileContent, searchIndex, searchString)) {\n logger.trace(`Found match at index ${searchIndex}`);\n // Now test if the result matches\n const testContent = replaceAt(\n fileContent,\n searchIndex,\n searchString,\n newString,\n );\n // Compare the parsed JSON/JSONC structure of old and new\n if (dequal(parsedContents, parseJsonc(testContent))) {\n return testContent;\n }\n }\n }\n throw new Error();\n}\n\nfunction updateImportMapLikeDepTypes(\n parsedContents: UpdateDenoJsonFile,\n fileContent: string,\n depType: string,\n searchString: string,\n newString: string,\n): string | null {\n let newFileContent: string | null = null;\n\n if (depType === 'imports' && parsedContents.imports) {\n const matches = Object.entries(parsedContents.imports).filter(([, value]) =>\n value.includes(searchString),\n );\n for (const [key] of matches) {\n parsedContents.imports[key] = parsedContents.imports[key].replace(\n searchString,\n newString,\n );\n newFileContent = replaceAsString(\n parsedContents,\n fileContent,\n depType,\n searchString,\n newString,\n );\n }\n }\n\n if (depType === 'scopes' && parsedContents.scopes) {\n for (const scopeName of Object.keys(parsedContents.scopes)) {\n const scope = parsedContents.scopes[scopeName];\n const matches = Object.entries(scope).filter(([, value]) =>\n value.includes(searchString),\n );\n for (const [key] of matches) {\n parsedContents.scopes[scopeName][key] = parsedContents.scopes[\n scopeName\n ][key].replace(searchString, newString);\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent ?? fileContent,\n depType,\n searchString,\n newString,\n );\n }\n }\n }\n\n return newFileContent;\n}\n\nexport function updateDependency(\n config: UpdateDependencyConfig<DenoManagerData>,\n): string | null {\n const { fileContent, packageFile, upgrade } = config;\n const { depName, currentValue, newValue, datasource, managerData } = upgrade;\n if (!packageFile) {\n logger.debug('deno.updateDependency(): No package file found');\n return null;\n }\n\n // <importMap>.json\n if (managerData?.importMapReferrer) {\n if (!depName || !newValue || !datasource || !upgrade.depType) {\n logger.debug({ depName, currentValue, newValue }, 'Unknown value');\n return null;\n }\n const depType = upgrade.depType;\n logger.debug(\n `deno.updateDependency(): ${packageFile}:${depType}.${depName} = ${newValue}`,\n );\n\n const parsedResult = UpdateImportMapJsonFile.safeParse(fileContent);\n if (!parsedResult.success) {\n logger.debug(\n { err: parsedResult.error },\n `Invalid packageFile: ${packageFile} detected`,\n );\n return null;\n }\n const parsedContents = parsedResult.data;\n\n const searchCurrentValue = getValueByDatasource(\n datasource,\n depName,\n currentValue,\n );\n const newString = getValueByDatasource(datasource, depName, newValue);\n if (!searchCurrentValue || !newString) {\n logger.debug(\n `deno.updateDependency(): \"${datasource}\" is not supported datasource`,\n );\n return null;\n }\n\n return updateImportMapLikeDepTypes(\n parsedContents,\n fileContent,\n depType,\n searchCurrentValue,\n newString,\n );\n }\n\n // deno.json/jsonc\n if (upath.basename(packageFile).startsWith('deno.json')) {\n if (!depName || !newValue || !datasource || !upgrade.depType) {\n logger.debug({ depName, currentValue, newValue }, 'Unknown value');\n return null;\n }\n const depType = upgrade.depType;\n logger.debug(\n `deno.updateDependency(): ${packageFile}:${depType}.${depName} = ${newValue}`,\n );\n\n const parsedResult = UpdateDenoJsonFile.safeParse(fileContent);\n if (!parsedResult.success) {\n logger.debug(\n { err: parsedResult.error },\n `Invalid packageFile: ${packageFile} detected`,\n );\n return null;\n }\n const parsedContents = parsedResult.data;\n\n let newFileContent: string | null = null;\n\n const searchCurrentValue = getValueByDatasource(\n datasource,\n depName,\n currentValue,\n );\n const newString = getValueByDatasource(datasource, depName, newValue);\n if (!searchCurrentValue || !newString) {\n logger.debug(\n `deno.updateDependency(): \"${datasource}\" is not supported datasource`,\n );\n return null;\n }\n\n newFileContent = updateImportMapLikeDepTypes(\n parsedContents,\n fileContent,\n depType,\n searchCurrentValue,\n newString,\n );\n\n if (depType === 'tasks' && parsedContents.tasks) {\n const matches = Object.entries(parsedContents.tasks).flatMap(\n ([key, value]) =>\n isString(value) && value.includes(searchCurrentValue)\n ? [[key, value]]\n : [],\n );\n for (const [key, value] of matches) {\n parsedContents.tasks[key] = value.replace(\n searchCurrentValue,\n newString,\n );\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent ?? fileContent,\n depType,\n searchCurrentValue,\n newString,\n );\n }\n }\n\n if (depType === 'tasks.command' && parsedContents.tasks) {\n function hasCommandMatch(\n value: unknown,\n currentValue: string,\n ): value is { command: string } {\n return (\n isObject(value) &&\n 'command' in value &&\n isString(value.command) &&\n value.command.includes(currentValue)\n );\n }\n\n const matches = Object.entries(parsedContents.tasks).filter(\n (entry): entry is [string, { command: string }] =>\n hasCommandMatch(entry[1], searchCurrentValue),\n );\n for (const [key, task] of matches) {\n task.command = task.command.replace(searchCurrentValue, newString);\n parsedContents.tasks[key] = task;\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent ?? fileContent,\n depType,\n searchCurrentValue,\n newString,\n );\n }\n }\n\n if (\n depType === 'compilerOptions.types' &&\n isNonEmptyArray(parsedContents.compilerOptions?.types)\n ) {\n const index = parsedContents.compilerOptions.types.findIndex(\n (value: string) => value === searchCurrentValue,\n );\n if (index !== -1) {\n parsedContents.compilerOptions.types[index] =\n // prettier-ignore\n parsedContents.compilerOptions.types[index].replace(searchCurrentValue, newString);\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent ?? fileContent,\n depType,\n searchCurrentValue,\n newString,\n );\n }\n }\n\n if (\n depType === 'compilerOptions.jsxImportSource' &&\n parsedContents.compilerOptions?.jsxImportSource\n ) {\n parsedContents.compilerOptions.jsxImportSource =\n parsedContents.compilerOptions.jsxImportSource.replace(\n searchCurrentValue,\n newString,\n );\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent ?? fileContent,\n depType,\n searchCurrentValue,\n newString,\n );\n }\n\n if (\n depType === 'compilerOptions.jsxImportSourceTypes' &&\n parsedContents.compilerOptions?.jsxImportSourceTypes\n ) {\n parsedContents.compilerOptions.jsxImportSourceTypes =\n parsedContents.compilerOptions.jsxImportSourceTypes.replace(\n searchCurrentValue,\n newString,\n );\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent ?? fileContent,\n depType,\n searchCurrentValue,\n newString,\n );\n }\n\n if (\n depType === 'lint.plugins' &&\n isNonEmptyArray(parsedContents.lint?.plugins)\n ) {\n const index = parsedContents.lint.plugins.findIndex(\n (value: string) => value === searchCurrentValue,\n );\n if (index !== -1) {\n parsedContents.lint.plugins[index] = parsedContents.lint.plugins[\n index\n ].replace(searchCurrentValue, newString);\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent ?? fileContent,\n depType,\n searchCurrentValue,\n newString,\n );\n }\n }\n\n if (newFileContent === fileContent) {\n return fileContent;\n }\n return newFileContent;\n }\n\n // node-compat\n if (upath.basename(packageFile) === 'package.json') {\n return npmUpdateDependency(config);\n }\n\n logger.debug(`${packageFile} is not supported`);\n return null;\n}\n"],"mappings":"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"}
@@ -56,7 +56,7 @@ function parseDepsEdnFile(content) {
56
56
  data: null
57
57
  };
58
58
  const metadata = /* @__PURE__ */ new WeakMap();
59
- const popState = () => {
59
+ function popState() {
60
60
  const savedState = stack.pop();
61
61
  if (!savedState) return false;
62
62
  if (savedState.type === "root") {
@@ -74,7 +74,7 @@ function parseDepsEdnFile(content) {
74
74
  if (savedState.type === "array") savedState.data.push(state.data);
75
75
  state = savedState;
76
76
  return true;
77
- };
77
+ }
78
78
  for (const token of tokens) {
79
79
  const tokenType = token.type;
80
80
  const stateType = state.type;
@@ -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 const 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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"}
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":"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"}
@@ -8,7 +8,7 @@ hashMap.set("asdf", "0407066010ebb3d7ad4c1afe6b9a3615a3c11d64dc3cf0674cb9dfc3ea2
8
8
  hashMap.set("azure-pipelines", "4f635b0ecd388ee266d992e8281fd40e3db2f5867d86fc1cbce72dc33a66e796");
9
9
  hashMap.set("batect", "fad98996bea8626525ab925f83a6ae0ce9262c53770e7aa7cb448a1e0f1ddf21");
10
10
  hashMap.set("batect-wrapper", "d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939");
11
- hashMap.set("bazel", "c6e0ad88ea468664c3a33263baf7452d83d2d37ff09ba920e18f64ee81fd0acb");
11
+ hashMap.set("bazel", "4994a8bd86d5bfb169d67c08efd8509b58c368c2bf3dd9bbe42553c0fabc3f1a");
12
12
  hashMap.set("bazel-module", "b1324dc15e77012a667d33c48c14dec90aa25832593c6c47c219d57931bd1def");
13
13
  hashMap.set("bazelisk", "49e6bd1fc8f03facd06e517dc64596833b90ee0a079a45cff78f0eeb3c3566f8");
14
14
  hashMap.set("bicep", "7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db");
@@ -18,9 +18,9 @@ hashMap.set("buildkite", "a93effb1f1c5d65b3277c3b4709924eacde282e8efd028a8e3d8c1
18
18
  hashMap.set("buildpacks", "6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f");
19
19
  hashMap.set("bun", "2df1756b14b3d690e5ad1295bc1e78d8a8d7b967a552fd7b8e3274866a5acf3e");
20
20
  hashMap.set("bun-version", "df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4");
21
- hashMap.set("bundler", "6731d919540235a39154d189d4c917fc4aee6b3b99194c4baf1aa9c7cc5c4f8b");
21
+ hashMap.set("bundler", "16e9786a981da29f57239829d009358643e63d61aca08a752aa5deb5a5eb6c15");
22
22
  hashMap.set("cake", "65ad4f28c318675b9edb49dbd11d677f42c762b01b3f5a25dd3b2f345ecd387e");
23
- hashMap.set("cargo", "65b1485dc3e69910bf196910acbe3c54111d8dbf9ee431bc813b9ebcef3b0f62");
23
+ hashMap.set("cargo", "64f58a5397726996c71d7709d9633edf9e3e387d9a19da655f2034d3248e7371");
24
24
  hashMap.set("cdnurl", "d3edf6cdc38e92eb43ff5a2b4e8df6a6a13154cf83244725c39e28d7e6ea9177");
25
25
  hashMap.set("circleci", "91cbeb33ea20f9838e2c81a1195eb806f0b38fa282bc3679f62552f20575ca85");
26
26
  hashMap.set("cloudbuild", "8c0c739f7e4082bbfe8e3fdffebaf43e26f70a1314d95b306e9b93e4f4297886");
@@ -31,7 +31,7 @@ hashMap.set("copier", "3ff250122cf49d52f23fcd3686274b0e86a99d0cb8bfa7e3e2ee3dd3b
31
31
  hashMap.set("cpanfile", "07813fec3f3c2197056500e9266a0553b9774c02f2c74d5ca2e213188c7c12d3");
32
32
  hashMap.set("crossplane", "5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40");
33
33
  hashMap.set("crow", "eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0");
34
- hashMap.set("deno", "9fbc30b9ee7b8eb6ccbc1ef459b3c983bdb1dff38f43b51013056ce7b94ceced");
34
+ hashMap.set("deno", "db87814a407e43b8edaf7ccdf1659407fd934597e4253a3f330b8219dc34c40e");
35
35
  hashMap.set("deps-edn", "c87dd5e88587147ad1a78f047b814f3c4aa60d6de30d0c49d849391eeaf1b64c");
36
36
  hashMap.set("devbox", "ac472ae4897dc1df85326dbd89a8c3488579ae2b180014ffcf085ce422e19dbd");
37
37
  hashMap.set("devcontainer", "24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec");
@@ -66,28 +66,28 @@ hashMap.set("kotlin-script", "99ef296792a0ca575ed31d3defb514b05a58083dc01c52ea08
66
66
  hashMap.set("kubernetes", "321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de");
67
67
  hashMap.set("kustomize", "c6ee547378d5c5619a0fe94be35f9838e0f006b4807a896e9caefefa20efacf7");
68
68
  hashMap.set("leiningen", "133fca2c3423f53f2ccc22518153ddbcafbf0f4812376c77e952eb3d24d81f85");
69
- hashMap.set("maven", "2bf7b65d51718daf3eec4f30c0fc7f2f045f4f8f24862bebe17c2174abb606b9");
69
+ hashMap.set("maven", "f084cdc88320ca1e82af957d0008e7c9ce991d3282cb428f3108a5722239cead");
70
70
  hashMap.set("maven-wrapper", "976ed8a59cf43b0c765b1a49ebc5669478e78278cf48f4ce3d0deb49647d10e3");
71
71
  hashMap.set("meteor", "4a93a326b27bedfe52118e27e06f39fecd7c55bd4cd7fccec4cb120cac14cec4");
72
72
  hashMap.set("mint", "248fe4f1ea5c985921c286785792c97e06fc41f402b2d45df82f6aecd17f710e");
73
73
  hashMap.set("mise", "a5a62a5b5ae6d7429c6e4b8a15a6bf8937126605d9e5f2c15751e66a4f5b3418");
74
- hashMap.set("mix", "ead2078c33550ec8695298c053f549866e1701fa096440d4228e3e51f8f1e49c");
75
- hashMap.set("nix", "95f0827f7ec9a3bfd5119534f129aad6cf26b28e99d55aec0945f08bbfff9fb1");
74
+ hashMap.set("mix", "95244e358a05bf68f980f1875bb915d412b48d4ccd49abb676224fc6339ac90e");
75
+ hashMap.set("nix", "11aa2f2087914c6f0e66a97938d13c55c3900a025e6968fd8484965f7cdb9fd1");
76
76
  hashMap.set("nodenv", "ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8");
77
- hashMap.set("npm", "9f4e4a953c941fb64bb4dc86bf83ecc2c91cf937c034edd65d355f9ccdf73d45");
78
- hashMap.set("nuget", "54c1e149b47e4f588e99857e3e62b420f50649a868a28944a0c82a7b7fb530e7");
77
+ hashMap.set("npm", "4f793c5930bdc06abf429216bc2c112232e2a1645363d693ce138a8ecfe7f3af");
78
+ hashMap.set("nuget", "9f7527c36b786ab8efe3c0b53917aea7f6a34e6602f041cf671728959b4266c1");
79
79
  hashMap.set("nvm", "3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322");
80
80
  hashMap.set("ocb", "032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca");
81
81
  hashMap.set("osgi", "32233a1a8a2725699d7448ba438e3d0b78141f7799cd2b588de278d41e26ed10");
82
82
  hashMap.set("pep621", "fffd093eaf6de3cab7b2f6b57e57715aa240fcd958954f31fbc47f18e1730a4d");
83
83
  hashMap.set("pep723", "b96683163de63ed93207ec0538066705b1e58a1cd5b8bd11c63fc28b26bddba1");
84
- hashMap.set("pip-compile", "fd26981e4e865b8fece492ff78faf34701af62bb8f39397445780eb81b66b7db");
84
+ hashMap.set("pip-compile", "96a857864a15d4d1cb23fd92b69f0f6dedb6168018f59b54105e1a76d6526a39");
85
85
  hashMap.set("pip_requirements", "edaf5ec21e63fd252e6737b294f215d59068b0bba1dea92b9d4510dbb872c837");
86
86
  hashMap.set("pip_setup", "0175fe550c19d9bd31c978bd83fdc088cb40fcacd5d6751f640164274ae64e61");
87
- hashMap.set("pipenv", "1d0af710667f6dce377feae9aa238b21fe5e0e75e75758a70f5e9758c6cb6678");
87
+ hashMap.set("pipenv", "870a4a7c22a49a5165986a7818f1d16dafedf405768d0ba23f75ca71586f2545");
88
88
  hashMap.set("pixi", "7d183aaae4370a0c62496bbff60ad12fd4dd46822630541f712f437dcea021e1");
89
- hashMap.set("poetry", "0211739556f8193c70fa69cbf66c60e688042fd7dc7a2fe08f9f328b35ad1f82");
90
- hashMap.set("pre-commit", "a6a6e847fdb0f56650e66ef7d69e68de752b390913f79ac31d1a7ec5955d03da");
89
+ hashMap.set("poetry", "96585313f96c4e6ad29dc495a49f69f0e63ad92e6c77491216f4ca73898faa2c");
90
+ hashMap.set("pre-commit", "d191792fe6a89025de644421e9e6391c4048f10bf8e46421c676290a35c9e587");
91
91
  hashMap.set("proto", "412053d4550026b4ace490b46e970915b87ec1abf0b0a0c6c8c58ccf1fc16843");
92
92
  hashMap.set("pub", "aad0dd6524158fda5345d75662f337b275c6c46b29f051ba94201d42c22b0da8");
93
93
  hashMap.set("puppet", "ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45");
@@ -97,7 +97,7 @@ hashMap.set("renovate-config", "2a4e4fb671aed5d0c900b8d54c31bfef46ca36d0f4e16b00
97
97
  hashMap.set("ruby-version", "2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97");
98
98
  hashMap.set("runtime-version", "b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160");
99
99
  hashMap.set("rust-toolchain", "e957f1f1563af4e5fbd1c552ca15632b7808d9d2e51ec0da6022a1f84372caec");
100
- hashMap.set("sbt", "74125bd9c76a5724092258cd1dee1ea99fc0d735b463a2b64fedc5d950efde2a");
100
+ hashMap.set("sbt", "e508c2e2fb8d44e6cbec20f449c8eed096728566e6058187269c637930d388fb");
101
101
  hashMap.set("scalafmt", "9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f");
102
102
  hashMap.set("setup-cfg", "7dea08c5708625e753bd56918bc214df7fb4d8543a26e936926a21ab43b5f785");
103
103
  hashMap.set("sveltos", "05b3158e88771ed4629e171592cf4f1bf0ff342f8aeae89be0b340c630cc6d8e");