renovate 43.120.2 → 43.122.0

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.
@@ -4,6 +4,7 @@ import { GitTagsDatasource } from "./git-tags/index.js";
4
4
  import { GithubTagsDatasource } from "./github-tags/index.js";
5
5
  import { GalaxyDatasource } from "./galaxy/index.js";
6
6
  import { MavenDatasource } from "./maven/index.js";
7
+ import { BuildpacksRegistryDatasource } from "./buildpacks-registry/index.js";
7
8
  import { NugetDatasource } from "./nuget/index.js";
8
9
  import { HelmDatasource } from "./helm/index.js";
9
10
  import { DartVersionDatasource } from "./dart-version/index.js";
@@ -28,7 +29,6 @@ import { CrateDatasource } from "./crate/index.js";
28
29
  import { GitRefsDatasource } from "./git-refs/index.js";
29
30
  import { AzureBicepResourceDatasource } from "./azure-bicep-resource/index.js";
30
31
  import { BitriseDatasource } from "./bitrise/index.js";
31
- import { BuildpacksRegistryDatasource } from "./buildpacks-registry/index.js";
32
32
  import { ArtifactoryDatasource } from "./artifactory/index.js";
33
33
  import { AwsEKSAddonDataSource } from "./aws-eks-addon/index.js";
34
34
  import { AwsMachineImageDatasource } from "./aws-machine-image/index.js";
@@ -16,8 +16,8 @@ import { massageUrl, removeBuildMeta, sortNugetVersions } from "./common.js";
16
16
  import { isNonEmptyString } from "@sindresorhus/is";
17
17
  import upath from "upath";
18
18
  import { XmlDocument } from "xmldoc";
19
- import extract from "extract-zip";
20
19
  import semver from "semver";
20
+ import extract from "extract-zip";
21
21
  //#region lib/modules/datasource/nuget/v3.ts
22
22
  var NugetV3Api = class NugetV3Api {
23
23
  static cacheNamespace = "datasource-nuget-v3";
@@ -1,13 +1,13 @@
1
1
  import { regEx } from "../../../util/regex.js";
2
2
  import { logger } from "../../../logger/index.js";
3
- import { joinUrlParts } from "../../../util/url.js";
3
+ import { getQueryString, joinUrlParts } from "../../../util/url.js";
4
4
  import { ExternalHostError } from "../../../types/errors/external-host-error.js";
5
5
  import { withCache } from "../../../util/cache/package/with-cache.js";
6
- import { asTimestamp } from "../../../util/timestamp.js";
7
6
  import { map } from "../../../util/promises.js";
8
7
  import { id } from "../../versioning/hashicorp/index.js";
9
8
  import { TerraformDatasource } from "../terraform-module/base.js";
10
9
  import { createSDBackendURL } from "../terraform-module/utils.js";
10
+ import { TerraformProviderV2Response } from "./schema.js";
11
11
  //#region lib/modules/datasource/terraform-provider/index.ts
12
12
  var TerraformProviderDatasource = class TerraformProviderDatasource extends TerraformDatasource {
13
13
  static id = "terraform-provider";
@@ -22,18 +22,14 @@ var TerraformProviderDatasource = class TerraformProviderDatasource extends Terr
22
22
  defaultVersioning = id;
23
23
  registryStrategy = "hunt";
24
24
  releaseTimestampSupport = true;
25
- releaseTimestampNote = "The release timestamp is only supported for the latest version, and is determined from the `published_at` field in the results and only for `https://registry.terraform.io`";
25
+ releaseTimestampNote = "The release timestamp is determined from the `published-at` field in the Terraform Registry v2 API response and is only available for `https://registry.terraform.io`.";
26
26
  sourceUrlSupport = "package";
27
27
  sourceUrlNote = "The source URL is determined from the the `source` field in the results.";
28
28
  async _getReleases({ packageName, registryUrl }) {
29
29
  /* v8 ignore next 3 -- should never happen */
30
30
  if (!registryUrl) return null;
31
31
  logger.trace(`terraform-provider.getDependencies() packageName: ${packageName}`);
32
- if (registryUrl === TerraformProviderDatasource.terraformRegistryUrl) {
33
- const repository = TerraformProviderDatasource.getRepository({ packageName });
34
- const serviceDiscovery = await this.getTerraformServiceDiscoveryResult(registryUrl);
35
- return await this.queryTerraformRegistry(serviceDiscovery, registryUrl, repository);
36
- }
32
+ if (registryUrl === TerraformProviderDatasource.terraformRegistryUrl) return await this.queryTerraformRegistryV2(registryUrl, packageName);
37
33
  if (registryUrl === TerraformProviderDatasource.hashicorpReleaseUrl) return await this.queryReleaseBackend(packageName, registryUrl);
38
34
  return await this.queryProviderRegistry(registryUrl, packageName);
39
35
  }
@@ -50,19 +46,17 @@ var TerraformProviderDatasource = class TerraformProviderDatasource extends Terr
50
46
  return packageName.includes("/") ? packageName : `hashicorp/${packageName}`;
51
47
  }
52
48
  /**
53
- * Query the Terraform Registry using the undocumented extended provider API.
54
- * This provides more information than the base Provider Registry Protocol,
55
- * such as the release date for the latest version and the source URL.
49
+ * Query the Terraform Registry using the undocumented v2 JSON:API.
50
+ *
51
+ * Returns release timestamps for all versions, unlike the v1 API
52
+ * which only exposed the timestamp for the latest version.
56
53
  */
57
- async queryTerraformRegistry(serviceDiscovery, registryUrl, repository) {
58
- const backendURL = createSDBackendURL(registryUrl, "providers.v1", serviceDiscovery, repository);
59
- const res = (await this.http.getJsonUnchecked(backendURL)).body;
60
- const dep = { releases: res.versions.map((version) => ({ version })) };
61
- if (res.source) dep.sourceUrl = res.source;
62
- const latestVersion = dep.releases.find((release) => res.version === release.version);
63
- if (latestVersion) latestVersion.releaseTimestamp = asTimestamp(res.published_at);
64
- dep.homepage = `${registryUrl}/providers/${repository}`;
65
- return dep;
54
+ async queryTerraformRegistryV2(registryUrl, packageName) {
55
+ const repository = TerraformProviderDatasource.getRepository({ packageName });
56
+ const providerUrl = `${joinUrlParts(registryUrl, "v2/providers", repository)}?${getQueryString({ include: "provider-versions" })}`;
57
+ const { body: res } = await this.http.getJson(providerUrl, TerraformProviderV2Response);
58
+ res.homepage = `${registryUrl}/providers/${repository}`;
59
+ return res;
66
60
  }
67
61
  /**
68
62
  * Query a registry using the Provider Registry Protocol that all registries
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["hashicorpVersioning.id","p.map"],"sources":["../../../../lib/modules/datasource/terraform-provider/index.ts"],"sourcesContent":["// TODO: types (#22198)\nimport { logger } from '../../../logger/index.ts';\nimport { ExternalHostError } from '../../../types/errors/external-host-error.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport * as p from '../../../util/promises.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { asTimestamp } from '../../../util/timestamp.ts';\nimport { joinUrlParts } from '../../../util/url.ts';\nimport * as hashicorpVersioning from '../../versioning/hashicorp/index.ts';\nimport { TerraformDatasource } from '../terraform-module/base.ts';\nimport type { ServiceDiscoveryResult } from '../terraform-module/types.ts';\nimport { createSDBackendURL } from '../terraform-module/utils.ts';\nimport type { GetReleasesConfig, ReleaseResult } from '../types.ts';\nimport type {\n TerraformBuild,\n TerraformProvider,\n TerraformProviderReleaseBackend,\n TerraformProviderVersions,\n TerraformRegistryBuildResponse,\n TerraformRegistryVersions,\n VersionDetailResponse,\n} from './types.ts';\n\nexport class TerraformProviderDatasource extends TerraformDatasource {\n static override readonly id = 'terraform-provider';\n\n static readonly hashicorpReleaseUrl = 'https://releases.hashicorp.com';\n static readonly terraformRegistryUrl = 'https://registry.terraform.io';\n\n static readonly defaultRegistryUrls = [\n TerraformProviderDatasource.terraformRegistryUrl,\n TerraformProviderDatasource.hashicorpReleaseUrl,\n ];\n\n static repositoryRegex = regEx(/^hashicorp\\/(?<packageName>\\S+)$/);\n\n constructor() {\n super(TerraformProviderDatasource.id);\n }\n\n override readonly defaultRegistryUrls =\n TerraformProviderDatasource.defaultRegistryUrls;\n\n override readonly defaultVersioning = hashicorpVersioning.id;\n\n override readonly registryStrategy = 'hunt';\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is only supported for the latest version, and is determined from the `published_at` field in the results and only for `https://registry.terraform.io`';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the the `source` field in the results.';\n\n private 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 logger.trace(\n `terraform-provider.getDependencies() packageName: ${packageName}`,\n );\n\n if (registryUrl === TerraformProviderDatasource.terraformRegistryUrl) {\n const repository = TerraformProviderDatasource.getRepository({\n packageName,\n });\n const serviceDiscovery =\n await this.getTerraformServiceDiscoveryResult(registryUrl);\n return await this.queryTerraformRegistry(\n serviceDiscovery,\n registryUrl,\n repository,\n );\n }\n if (registryUrl === TerraformProviderDatasource.hashicorpReleaseUrl) {\n return await this.queryReleaseBackend(packageName, registryUrl);\n }\n\n // Fall back to the standard Provider Registry Protocol for other registries.\n return await this.queryProviderRegistry(registryUrl, packageName);\n }\n\n getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n const url = config.registryUrl;\n const repo = TerraformProviderDatasource.getRepository(config);\n return withCache(\n {\n namespace: `datasource-${TerraformProviderDatasource.id}`,\n key: `getReleases:${url}/${repo}`,\n fallback: true,\n },\n () => this._getReleases(config),\n );\n }\n\n private static getRepository({ packageName }: GetReleasesConfig): string {\n return packageName.includes('/') ? packageName : `hashicorp/${packageName}`;\n }\n\n /**\n * Query the Terraform Registry using the undocumented extended provider API.\n * This provides more information than the base Provider Registry Protocol,\n * such as the release date for the latest version and the source URL.\n */\n private async queryTerraformRegistry(\n serviceDiscovery: ServiceDiscoveryResult,\n registryUrl: string,\n repository: string,\n ): Promise<ReleaseResult> {\n const backendURL = createSDBackendURL(\n registryUrl,\n 'providers.v1',\n serviceDiscovery,\n repository,\n );\n const res = (\n await this.http.getJsonUnchecked<TerraformProvider>(backendURL)\n ).body;\n const dep: ReleaseResult = {\n releases: res.versions.map((version) => ({\n version,\n })),\n };\n if (res.source) {\n dep.sourceUrl = res.source;\n }\n // set published date for latest release\n const latestVersion = dep.releases.find(\n (release) => res.version === release.version,\n );\n if (latestVersion) {\n latestVersion.releaseTimestamp = asTimestamp(res.published_at);\n }\n dep.homepage = `${registryUrl}/providers/${repository}`;\n return dep;\n }\n\n /**\n * Query a registry using the Provider Registry Protocol that all registries\n * are required to implement.\n * https://www.terraform.io/internals/provider-registry-protocol\n */\n private async queryProviderRegistry(\n registryUrl: string,\n packageName: string,\n ): Promise<ReleaseResult> {\n const repository = TerraformProviderDatasource.getRepository({\n packageName,\n });\n const serviceDiscovery: ServiceDiscoveryResult =\n await this.getTerraformServiceDiscoveryResult(registryUrl);\n const backendURL = createSDBackendURL(\n registryUrl,\n 'providers.v1',\n serviceDiscovery,\n `${repository}/versions`,\n );\n const res = (\n await this.http.getJsonUnchecked<TerraformProviderVersions>(backendURL)\n ).body;\n const dep: ReleaseResult = {\n releases: res.versions.map(({ version }) => ({\n version,\n })),\n };\n return dep;\n }\n\n private async queryReleaseBackend(\n packageName: string,\n registryURL: string,\n ): Promise<ReleaseResult | null> {\n const hashicorpPackage = packageName.replace('hashicorp/', '');\n const backendLookUpName = `terraform-provider-${hashicorpPackage}`;\n const backendURL = joinUrlParts(\n registryURL,\n backendLookUpName,\n `index.json`,\n );\n const res = (\n await this.http.getJsonUnchecked<TerraformProviderReleaseBackend>(\n backendURL,\n )\n ).body;\n\n const dep: ReleaseResult = {\n releases: Object.keys(res.versions).map((version) => ({\n version,\n })),\n sourceUrl: joinUrlParts(\n 'https://github.com/terraform-providers',\n backendLookUpName,\n ),\n };\n return dep;\n }\n\n private async _getBuilds(\n registryURL: string,\n repository: string,\n version: string,\n ): Promise<TerraformBuild[] | null> {\n if (registryURL === TerraformProviderDatasource.hashicorpReleaseUrl) {\n // check if registryURL === secondary backend\n const repositoryRegexResult =\n TerraformProviderDatasource.repositoryRegex.exec(repository)?.groups;\n if (!repositoryRegexResult) {\n // non hashicorp builds are not supported with releases.hashicorp.com\n return null;\n }\n const packageName = repositoryRegexResult.packageName;\n const backendLookUpName = `terraform-provider-${packageName}`;\n let versionReleaseBackend: VersionDetailResponse;\n try {\n versionReleaseBackend = await this.getReleaseBackendIndex(\n backendLookUpName,\n version,\n );\n } catch (err) {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n { err, backendLookUpName, version },\n `Failed to retrieve builds for ${backendLookUpName} ${version}`,\n );\n // throw an error to disable caching\n throw new ExternalHostError(err);\n }\n return versionReleaseBackend.builds;\n }\n\n // check public or private Terraform registry\n const serviceDiscovery =\n await this.getTerraformServiceDiscoveryResult(registryURL);\n if (!serviceDiscovery) {\n // throw an error to disable caching\n throw new ExternalHostError(\n new Error(`Service discovery not found for ${registryURL}`),\n );\n }\n const backendURL = createSDBackendURL(\n registryURL,\n 'providers.v1',\n serviceDiscovery,\n repository,\n );\n const versionsResponse = (\n await this.http.getJsonUnchecked<TerraformRegistryVersions>(\n `${backendURL}/versions`,\n )\n ).body;\n if (!versionsResponse.versions) {\n // throw an error to disable caching\n throw new ExternalHostError(\n new Error(`Failed to retrieve version list for ${backendURL}`),\n );\n }\n const builds = versionsResponse.versions.find(\n (value) => value.version === version,\n );\n if (!builds) {\n // should never happen, but just in case\n // throw an error to disable caching\n throw new ExternalHostError(\n new Error(\n `No builds found for ${repository}:${version} on ${registryURL}`,\n ),\n );\n }\n const result = await p.map(\n builds.platforms,\n async (platform) => {\n const buildURL = `${backendURL}/${version}/download/${platform.os}/${platform.arch}`;\n try {\n const res = (\n await this.http.getJsonUnchecked<TerraformRegistryBuildResponse>(\n buildURL,\n )\n ).body;\n const newBuild: TerraformBuild = {\n name: repository,\n url: res.download_url,\n version,\n ...res,\n };\n return newBuild;\n } catch (err) {\n /* v8 ignore next 3 -- hard to test */\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug({ err, url: buildURL }, 'Failed to retrieve build');\n // throw an error to disable caching\n throw new ExternalHostError(err);\n }\n },\n { concurrency: 4 },\n );\n\n return result;\n }\n\n getBuilds(\n registryURL: string,\n repository: string,\n version: string,\n ): Promise<TerraformBuild[] | null> {\n return withCache(\n {\n namespace: `datasource-${TerraformProviderDatasource.id}`,\n key: `getBuilds:${registryURL}/${repository}/${version}`,\n },\n () => this._getBuilds(registryURL, repository, version),\n );\n }\n\n private async _getZipHashes(\n zipHashUrl: string,\n ): Promise<string[] | undefined> {\n // The hashes are formatted as the result of sha256sum in plain text, each line: <hash>\\t<filename>\n let rawHashData: string;\n try {\n rawHashData = (await this.http.getText(zipHashUrl)).body;\n } catch (err) {\n /* v8 ignore next 3 -- hard to test */\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n { err, zipHashUrl },\n `Failed to retrieve zip hashes from ${zipHashUrl}`,\n );\n return undefined;\n }\n\n return rawHashData\n .trimEnd()\n .split('\\n')\n .map((line) => line.split(/\\s/)[0]);\n }\n\n getZipHashes(zipHashUrl: string): Promise<string[] | undefined> {\n return withCache(\n {\n namespace: `datasource-${TerraformProviderDatasource.id}`,\n key: `getZipHashes:${zipHashUrl}`,\n },\n () => this._getZipHashes(zipHashUrl),\n );\n }\n\n private async _getReleaseBackendIndex(\n backendLookUpName: string,\n version: string,\n ): Promise<VersionDetailResponse> {\n return (\n await this.http.getJsonUnchecked<VersionDetailResponse>(\n `${TerraformProviderDatasource.hashicorpReleaseUrl}/${backendLookUpName}/${version}/index.json`,\n )\n ).body;\n }\n\n getReleaseBackendIndex(\n backendLookUpName: string,\n version: string,\n ): Promise<VersionDetailResponse> {\n return withCache(\n {\n namespace: `datasource-${TerraformProviderDatasource.id}`,\n key: `getReleaseBackendIndex:${backendLookUpName}/${version}`,\n },\n () => this._getReleaseBackendIndex(backendLookUpName, version),\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["hashicorpVersioning.id","p.map"],"sources":["../../../../lib/modules/datasource/terraform-provider/index.ts"],"sourcesContent":["// TODO: types (#22198)\nimport { logger } from '../../../logger/index.ts';\nimport { ExternalHostError } from '../../../types/errors/external-host-error.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport * as p from '../../../util/promises.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { getQueryString, joinUrlParts } from '../../../util/url.ts';\nimport * as hashicorpVersioning from '../../versioning/hashicorp/index.ts';\nimport { TerraformDatasource } from '../terraform-module/base.ts';\nimport type { ServiceDiscoveryResult } from '../terraform-module/types.ts';\nimport { createSDBackendURL } from '../terraform-module/utils.ts';\nimport type { GetReleasesConfig, ReleaseResult } from '../types.ts';\nimport { TerraformProviderV2Response } from './schema.ts';\nimport type {\n TerraformBuild,\n TerraformProviderReleaseBackend,\n TerraformProviderVersions,\n TerraformRegistryBuildResponse,\n TerraformRegistryVersions,\n VersionDetailResponse,\n} from './types.ts';\n\nexport class TerraformProviderDatasource extends TerraformDatasource {\n static override readonly id = 'terraform-provider';\n\n static readonly hashicorpReleaseUrl = 'https://releases.hashicorp.com';\n static readonly terraformRegistryUrl = 'https://registry.terraform.io';\n\n static readonly defaultRegistryUrls = [\n TerraformProviderDatasource.terraformRegistryUrl,\n TerraformProviderDatasource.hashicorpReleaseUrl,\n ];\n\n static repositoryRegex = regEx(/^hashicorp\\/(?<packageName>\\S+)$/);\n\n constructor() {\n super(TerraformProviderDatasource.id);\n }\n\n override readonly defaultRegistryUrls =\n TerraformProviderDatasource.defaultRegistryUrls;\n\n override readonly defaultVersioning = hashicorpVersioning.id;\n\n override readonly registryStrategy = 'hunt';\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `published-at` field in the Terraform Registry v2 API response and is only available for `https://registry.terraform.io`.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the the `source` field in the results.';\n\n private 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 logger.trace(\n `terraform-provider.getDependencies() packageName: ${packageName}`,\n );\n\n if (registryUrl === TerraformProviderDatasource.terraformRegistryUrl) {\n return await this.queryTerraformRegistryV2(registryUrl, packageName);\n }\n if (registryUrl === TerraformProviderDatasource.hashicorpReleaseUrl) {\n return await this.queryReleaseBackend(packageName, registryUrl);\n }\n\n // Fall back to the standard Provider Registry Protocol for other registries.\n return await this.queryProviderRegistry(registryUrl, packageName);\n }\n\n getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n const url = config.registryUrl;\n const repo = TerraformProviderDatasource.getRepository(config);\n return withCache(\n {\n namespace: `datasource-${TerraformProviderDatasource.id}`,\n key: `getReleases:${url}/${repo}`,\n fallback: true,\n },\n () => this._getReleases(config),\n );\n }\n\n private static getRepository({ packageName }: GetReleasesConfig): string {\n return packageName.includes('/') ? packageName : `hashicorp/${packageName}`;\n }\n\n /**\n * Query the Terraform Registry using the undocumented v2 JSON:API.\n *\n * Returns release timestamps for all versions, unlike the v1 API\n * which only exposed the timestamp for the latest version.\n */\n private async queryTerraformRegistryV2(\n registryUrl: string,\n packageName: string,\n ): Promise<ReleaseResult> {\n const repository = TerraformProviderDatasource.getRepository({\n packageName,\n });\n const providerUrl = `${joinUrlParts(\n registryUrl,\n 'v2/providers',\n repository,\n )}?${getQueryString({ include: 'provider-versions' })}`;\n const { body: res } = await this.http.getJson(\n providerUrl,\n TerraformProviderV2Response,\n );\n res.homepage = `${registryUrl}/providers/${repository}`;\n return res;\n }\n\n /**\n * Query a registry using the Provider Registry Protocol that all registries\n * are required to implement.\n * https://www.terraform.io/internals/provider-registry-protocol\n */\n private async queryProviderRegistry(\n registryUrl: string,\n packageName: string,\n ): Promise<ReleaseResult> {\n const repository = TerraformProviderDatasource.getRepository({\n packageName,\n });\n const serviceDiscovery: ServiceDiscoveryResult =\n await this.getTerraformServiceDiscoveryResult(registryUrl);\n const backendURL = createSDBackendURL(\n registryUrl,\n 'providers.v1',\n serviceDiscovery,\n `${repository}/versions`,\n );\n const res = (\n await this.http.getJsonUnchecked<TerraformProviderVersions>(backendURL)\n ).body;\n const dep: ReleaseResult = {\n releases: res.versions.map(({ version }) => ({\n version,\n })),\n };\n return dep;\n }\n\n private async queryReleaseBackend(\n packageName: string,\n registryURL: string,\n ): Promise<ReleaseResult | null> {\n const hashicorpPackage = packageName.replace('hashicorp/', '');\n const backendLookUpName = `terraform-provider-${hashicorpPackage}`;\n const backendURL = joinUrlParts(\n registryURL,\n backendLookUpName,\n `index.json`,\n );\n const res = (\n await this.http.getJsonUnchecked<TerraformProviderReleaseBackend>(\n backendURL,\n )\n ).body;\n\n const dep: ReleaseResult = {\n releases: Object.keys(res.versions).map((version) => ({\n version,\n })),\n sourceUrl: joinUrlParts(\n 'https://github.com/terraform-providers',\n backendLookUpName,\n ),\n };\n return dep;\n }\n\n private async _getBuilds(\n registryURL: string,\n repository: string,\n version: string,\n ): Promise<TerraformBuild[] | null> {\n if (registryURL === TerraformProviderDatasource.hashicorpReleaseUrl) {\n // check if registryURL === secondary backend\n const repositoryRegexResult =\n TerraformProviderDatasource.repositoryRegex.exec(repository)?.groups;\n if (!repositoryRegexResult) {\n // non hashicorp builds are not supported with releases.hashicorp.com\n return null;\n }\n const packageName = repositoryRegexResult.packageName;\n const backendLookUpName = `terraform-provider-${packageName}`;\n let versionReleaseBackend: VersionDetailResponse;\n try {\n versionReleaseBackend = await this.getReleaseBackendIndex(\n backendLookUpName,\n version,\n );\n } catch (err) {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n { err, backendLookUpName, version },\n `Failed to retrieve builds for ${backendLookUpName} ${version}`,\n );\n // throw an error to disable caching\n throw new ExternalHostError(err);\n }\n return versionReleaseBackend.builds;\n }\n\n // check public or private Terraform registry\n const serviceDiscovery =\n await this.getTerraformServiceDiscoveryResult(registryURL);\n if (!serviceDiscovery) {\n // throw an error to disable caching\n throw new ExternalHostError(\n new Error(`Service discovery not found for ${registryURL}`),\n );\n }\n const backendURL = createSDBackendURL(\n registryURL,\n 'providers.v1',\n serviceDiscovery,\n repository,\n );\n const versionsResponse = (\n await this.http.getJsonUnchecked<TerraformRegistryVersions>(\n `${backendURL}/versions`,\n )\n ).body;\n if (!versionsResponse.versions) {\n // throw an error to disable caching\n throw new ExternalHostError(\n new Error(`Failed to retrieve version list for ${backendURL}`),\n );\n }\n const builds = versionsResponse.versions.find(\n (value) => value.version === version,\n );\n if (!builds) {\n // should never happen, but just in case\n // throw an error to disable caching\n throw new ExternalHostError(\n new Error(\n `No builds found for ${repository}:${version} on ${registryURL}`,\n ),\n );\n }\n const result = await p.map(\n builds.platforms,\n async (platform) => {\n const buildURL = `${backendURL}/${version}/download/${platform.os}/${platform.arch}`;\n try {\n const res = (\n await this.http.getJsonUnchecked<TerraformRegistryBuildResponse>(\n buildURL,\n )\n ).body;\n const newBuild: TerraformBuild = {\n name: repository,\n url: res.download_url,\n version,\n ...res,\n };\n return newBuild;\n } catch (err) {\n /* v8 ignore next 3 -- hard to test */\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug({ err, url: buildURL }, 'Failed to retrieve build');\n // throw an error to disable caching\n throw new ExternalHostError(err);\n }\n },\n { concurrency: 4 },\n );\n\n return result;\n }\n\n getBuilds(\n registryURL: string,\n repository: string,\n version: string,\n ): Promise<TerraformBuild[] | null> {\n return withCache(\n {\n namespace: `datasource-${TerraformProviderDatasource.id}`,\n key: `getBuilds:${registryURL}/${repository}/${version}`,\n },\n () => this._getBuilds(registryURL, repository, version),\n );\n }\n\n private async _getZipHashes(\n zipHashUrl: string,\n ): Promise<string[] | undefined> {\n // The hashes are formatted as the result of sha256sum in plain text, each line: <hash>\\t<filename>\n let rawHashData: string;\n try {\n rawHashData = (await this.http.getText(zipHashUrl)).body;\n } catch (err) {\n /* v8 ignore next 3 -- hard to test */\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n { err, zipHashUrl },\n `Failed to retrieve zip hashes from ${zipHashUrl}`,\n );\n return undefined;\n }\n\n return rawHashData\n .trimEnd()\n .split('\\n')\n .map((line) => line.split(/\\s/)[0]);\n }\n\n getZipHashes(zipHashUrl: string): Promise<string[] | undefined> {\n return withCache(\n {\n namespace: `datasource-${TerraformProviderDatasource.id}`,\n key: `getZipHashes:${zipHashUrl}`,\n },\n () => this._getZipHashes(zipHashUrl),\n );\n }\n\n private async _getReleaseBackendIndex(\n backendLookUpName: string,\n version: string,\n ): Promise<VersionDetailResponse> {\n return (\n await this.http.getJsonUnchecked<VersionDetailResponse>(\n `${TerraformProviderDatasource.hashicorpReleaseUrl}/${backendLookUpName}/${version}/index.json`,\n )\n ).body;\n }\n\n getReleaseBackendIndex(\n backendLookUpName: string,\n version: string,\n ): Promise<VersionDetailResponse> {\n return withCache(\n {\n namespace: `datasource-${TerraformProviderDatasource.id}`,\n key: `getReleaseBackendIndex:${backendLookUpName}/${version}`,\n },\n () => this._getReleaseBackendIndex(backendLookUpName, version),\n );\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { LooseArray } from "../../../util/schema-utils/index.js";
2
+ import { MaybeTimestamp } from "../../../util/timestamp.js";
3
+ import { z } from "zod/v3";
4
+ //#region lib/modules/datasource/terraform-provider/schema.ts
5
+ const ProviderAttributes = z.object({ source: z.string().optional() });
6
+ const ProviderVersion = z.object({
7
+ type: z.literal("provider-versions"),
8
+ attributes: z.object({
9
+ version: z.string(),
10
+ "published-at": MaybeTimestamp
11
+ })
12
+ }).transform((resource) => ({
13
+ version: resource.attributes.version,
14
+ releaseTimestamp: resource.attributes["published-at"]
15
+ }));
16
+ const TerraformProviderV2Response = z.object({
17
+ data: z.object({ attributes: ProviderAttributes }),
18
+ included: LooseArray(ProviderVersion).catch([])
19
+ }).transform((response) => ({
20
+ sourceUrl: response.data.attributes.source,
21
+ releases: response.included
22
+ }));
23
+ //#endregion
24
+ export { TerraformProviderV2Response };
25
+
26
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/datasource/terraform-provider/schema.ts"],"sourcesContent":["import { z } from 'zod/v3';\nimport { LooseArray } from '../../../util/schema-utils/index.ts';\nimport { MaybeTimestamp } from '../../../util/timestamp.ts';\nimport type { Release, ReleaseResult } from '../types.ts';\n\nconst ProviderAttributes = z.object({\n source: z.string().optional(),\n});\n\nconst ProviderVersion = z\n .object({\n type: z.literal('provider-versions'),\n attributes: z.object({\n version: z.string(),\n 'published-at': MaybeTimestamp,\n }),\n })\n .transform(\n (resource): Release => ({\n version: resource.attributes.version,\n releaseTimestamp: resource.attributes['published-at'],\n }),\n );\n\nexport const TerraformProviderV2Response = z\n .object({\n data: z.object({\n attributes: ProviderAttributes,\n }),\n included: LooseArray(ProviderVersion).catch([]),\n })\n .transform(\n (response): ReleaseResult => ({\n sourceUrl: response.data.attributes.source,\n releases: response.included,\n }),\n );\n\nexport type TerraformProviderV2Response = z.infer<\n typeof TerraformProviderV2Response\n>;\n"],"mappings":";;;;AAKA,MAAM,qBAAqB,EAAE,OAAO,EAClC,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAC9B,CAAC;AAEF,MAAM,kBAAkB,EACrB,OAAO;CACN,MAAM,EAAE,QAAQ,oBAAoB;CACpC,YAAY,EAAE,OAAO;EACnB,SAAS,EAAE,QAAQ;EACnB,gBAAgB;EACjB,CAAC;CACH,CAAC,CACD,WACE,cAAuB;CACtB,SAAS,SAAS,WAAW;CAC7B,kBAAkB,SAAS,WAAW;CACvC,EACF;AAEH,MAAa,8BAA8B,EACxC,OAAO;CACN,MAAM,EAAE,OAAO,EACb,YAAY,oBACb,CAAC;CACF,UAAU,WAAW,gBAAgB,CAAC,MAAM,EAAE,CAAC;CAChD,CAAC,CACD,WACE,cAA6B;CAC5B,WAAW,SAAS,KAAK,WAAW;CACpC,UAAU,SAAS;CACpB,EACF"}
@@ -1,6 +1,7 @@
1
1
  import { logger } from "../../../logger/index.js";
2
2
  import { readLocalFile } from "../../../util/fs/index.js";
3
3
  import { MavenDatasource } from "../../datasource/maven/index.js";
4
+ import { extractRegistries } from "../maven/extract.js";
4
5
  import { isXmlElement } from "../nuget/util.js";
5
6
  import { applyProps, findAttrValuePosition, parsePropertiesFile, resolveChainedProps } from "./properties.js";
6
7
  import upath from "upath";
@@ -17,7 +18,61 @@ function getDependencyType(scope) {
17
18
  if (scope && scopeNames.has(scope)) return scope;
18
19
  return "compile";
19
20
  }
20
- function collectDependency(node, packageFile, content) {
21
+ function parseCoords(coordsStr) {
22
+ const parts = coordsStr.split(":");
23
+ if (parts.length < 3) {
24
+ logger.trace({ coordsStr }, "ant manager: coords has fewer than 3 parts");
25
+ return null;
26
+ }
27
+ const [groupId, artifactId] = parts;
28
+ if (!groupId || !artifactId) {
29
+ logger.trace({ coordsStr }, "ant manager: coords has empty groupId or artifactId");
30
+ return null;
31
+ }
32
+ let scope;
33
+ let rawVersion;
34
+ if (parts.length >= 4 && scopeNames.has(parts.at(-1))) {
35
+ scope = parts.at(-1);
36
+ rawVersion = parts.at(-2);
37
+ } else rawVersion = parts.at(-1);
38
+ return {
39
+ groupId,
40
+ artifactId,
41
+ rawVersion,
42
+ scope
43
+ };
44
+ }
45
+ async function collectRegistryUrls(node, baseDir) {
46
+ const urls = [];
47
+ const settingsFile = node.attr.settingsFile;
48
+ if (settingsFile) {
49
+ const settingsPath = settingsFile.startsWith("/") ? settingsFile : upath.join(baseDir, settingsFile);
50
+ const settingsContent = await readLocalFile(settingsPath, "utf8");
51
+ if (settingsContent) urls.push(...extractRegistries(settingsContent));
52
+ else logger.debug(`ant manager: could not read settings file ${settingsPath}`);
53
+ }
54
+ for (const child of node.children) if (isXmlElement(child) && child.name === "remoteRepository" && child.attr.url) urls.push(child.attr.url);
55
+ return [...new Set(urls)];
56
+ }
57
+ function collectCoordsDependency(node, packageFile, content, registryUrls) {
58
+ const coordsStr = node.attr.coords;
59
+ const parsed = parseCoords(coordsStr);
60
+ if (!parsed) return null;
61
+ const dep = {
62
+ datasource: MavenDatasource.id,
63
+ depName: `${parsed.groupId}:${parsed.artifactId}`,
64
+ currentValue: parsed.rawVersion,
65
+ depType: getDependencyType(parsed.scope ?? node.attr.scope),
66
+ ...registryUrls?.length && { registryUrls }
67
+ };
68
+ dep.fileReplacePosition = findAttrValuePosition(content, node, "coords") + coordsStr.lastIndexOf(parsed.rawVersion);
69
+ return {
70
+ dep,
71
+ depPackageFile: packageFile
72
+ };
73
+ }
74
+ function collectDependency(node, packageFile, content, registryUrls = []) {
75
+ if (node.attr.coords) return collectCoordsDependency(node, packageFile, content, registryUrls);
21
76
  const { groupId, artifactId, version, scope } = node.attr;
22
77
  if (!version || !groupId || !artifactId) return null;
23
78
  const dep = {
@@ -25,7 +80,7 @@ function collectDependency(node, packageFile, content) {
25
80
  depName: `${groupId}:${artifactId}`,
26
81
  currentValue: version,
27
82
  depType: getDependencyType(scope),
28
- registryUrls: []
83
+ ...registryUrls?.length && { registryUrls }
29
84
  };
30
85
  dep.fileReplacePosition = findAttrValuePosition(content, node, "version");
31
86
  return {
@@ -60,7 +115,7 @@ function extractPackageFile(content, packageFile) {
60
115
  * Walk an XML node tree in document order, processing properties,
61
116
  * property file references, and dependencies as they appear.
62
117
  */
63
- async function walkNodeInOrder(node, packageFile, content, visitedFiles, allProps, allRawDeps) {
118
+ async function walkNodeInOrder(node, packageFile, content, visitedFiles, allProps, allRawDeps, registryUrls = []) {
64
119
  const baseDir = upath.dirname(packageFile);
65
120
  for (const child of node.children) {
66
121
  if (!isXmlElement(child)) continue;
@@ -84,9 +139,12 @@ async function walkNodeInOrder(node, packageFile, content, visitedFiles, allProp
84
139
  }
85
140
  } else if (child.name === "import" && child.attr.file) await walkXmlFile(upath.normalize(upath.join(baseDir, child.attr.file)), visitedFiles, allProps, allRawDeps);
86
141
  else if (child.name === "dependency") {
87
- const rawDep = collectDependency(child, packageFile, content);
142
+ const rawDep = collectDependency(child, packageFile, content, registryUrls);
88
143
  if (rawDep) allRawDeps.push(rawDep);
89
- } else await walkNodeInOrder(child, packageFile, content, visitedFiles, allProps, allRawDeps);
144
+ } else {
145
+ const childRegistries = await collectRegistryUrls(child, baseDir);
146
+ await walkNodeInOrder(child, packageFile, content, visitedFiles, allProps, allRawDeps, childRegistries.length > 0 ? childRegistries : registryUrls);
147
+ }
90
148
  }
91
149
  }
92
150
  async function walkXmlFile(packageFile, visitedFiles, allProps, allRawDeps) {
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/ant/extract.ts"],"sourcesContent":["import upath from 'upath';\nimport type { XmlElement } from 'xmldoc';\nimport { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { MavenDatasource } from '../../datasource/maven/index.ts';\nimport { isXmlElement } from '../nuget/util.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFile,\n PackageFileContent,\n} from '../types.ts';\nimport {\n applyProps,\n findAttrValuePosition,\n parsePropertiesFile,\n resolveChainedProps,\n} from './properties.ts';\nimport type { AntProp } from './types.ts';\n\nexport { parsePropertiesFile } from './properties.ts';\n\nconst scopeNames = new Set([\n 'compile',\n 'runtime',\n 'test',\n 'provided',\n 'system',\n]);\n\nfunction getDependencyType(scope: string | undefined): string {\n if (scope && scopeNames.has(scope)) {\n return scope;\n }\n return 'compile';\n}\n\ninterface RawDep {\n dep: PackageDependency;\n depPackageFile: string;\n}\n\nfunction collectDependency(\n node: XmlElement,\n packageFile: string,\n content: string,\n): RawDep | null {\n const { groupId, artifactId, version, scope } = node.attr;\n\n if (!version || !groupId || !artifactId) {\n return null;\n }\n\n const dep: PackageDependency = {\n datasource: MavenDatasource.id,\n depName: `${groupId}:${artifactId}`,\n currentValue: version,\n depType: getDependencyType(scope),\n registryUrls: [],\n };\n\n dep.fileReplacePosition = findAttrValuePosition(content, node, 'version');\n\n return { dep, depPackageFile: packageFile };\n}\n\nfunction walkNode(\n node: XmlElement | XmlDocument,\n rawDeps: RawDep[],\n packageFile: string,\n content: string,\n): void {\n for (const child of node.children) {\n if (!isXmlElement(child)) {\n continue;\n }\n\n if (child.name === 'dependency') {\n const rawDep = collectDependency(child, packageFile, content);\n if (rawDep) {\n rawDeps.push(rawDep);\n }\n } else {\n walkNode(child, rawDeps, packageFile, content);\n }\n }\n}\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n): PackageFileContent | null {\n let doc: XmlDocument;\n try {\n doc = new XmlDocument(content);\n } catch {\n logger.debug(`ant manager: could not parse XML ${packageFile}`);\n return null;\n }\n\n const rawDeps: RawDep[] = [];\n walkNode(doc, rawDeps, packageFile, content);\n\n const deps = rawDeps.map((rd) => rd.dep);\n\n if (deps.length === 0) {\n return null;\n }\n\n return { deps };\n}\n\n/**\n * Walk an XML node tree in document order, processing properties,\n * property file references, and dependencies as they appear.\n */\nasync function walkNodeInOrder(\n node: XmlElement | XmlDocument,\n packageFile: string,\n content: string,\n visitedFiles: Set<string>,\n allProps: Record<string, AntProp>,\n allRawDeps: RawDep[],\n): Promise<void> {\n const baseDir = upath.dirname(packageFile);\n\n for (const child of node.children) {\n if (!isXmlElement(child)) {\n continue;\n }\n\n if (child.name === 'property') {\n // Handle inline property definition\n const name = child.attr.name;\n const value = child.attr.value;\n if (name && value && !(name in allProps)) {\n const pos = findAttrValuePosition(content, child, 'value');\n allProps[name] = { val: value, fileReplacePosition: pos, packageFile };\n }\n\n // Handle property file reference\n const file = child.attr.file;\n if (file) {\n const propFilePath = file.startsWith('/')\n ? file\n : upath.join(baseDir, file);\n\n if (!visitedFiles.has(propFilePath)) {\n visitedFiles.add(propFilePath);\n const propContent = await readLocalFile(propFilePath, 'utf8');\n if (propContent) {\n parsePropertiesFile(propContent, propFilePath, allProps);\n } else {\n logger.debug(\n `ant manager: could not read properties file ${propFilePath}`,\n );\n }\n }\n }\n } else if (child.name === 'import' && child.attr.file) {\n const importedFile = upath.normalize(\n upath.join(baseDir, child.attr.file),\n );\n await walkXmlFile(importedFile, visitedFiles, allProps, allRawDeps);\n } else if (child.name === 'dependency') {\n const rawDep = collectDependency(child, packageFile, content);\n if (rawDep) {\n allRawDeps.push(rawDep);\n }\n } else {\n await walkNodeInOrder(\n child,\n packageFile,\n content,\n visitedFiles,\n allProps,\n allRawDeps,\n );\n }\n }\n}\n\nasync function walkXmlFile(\n packageFile: string,\n visitedFiles: Set<string>,\n allProps: Record<string, AntProp>,\n allRawDeps: RawDep[],\n): Promise<void> {\n if (visitedFiles.has(packageFile)) {\n return;\n }\n visitedFiles.add(packageFile);\n\n const content = await readLocalFile(packageFile, 'utf8');\n if (!content) {\n logger.debug(`ant manager: could not read ${packageFile}`);\n return;\n }\n\n let doc: XmlDocument;\n try {\n doc = new XmlDocument(content);\n } catch {\n logger.debug(`ant manager: could not parse XML ${packageFile}`);\n return;\n }\n\n await walkNodeInOrder(\n doc,\n packageFile,\n content,\n visitedFiles,\n allProps,\n allRawDeps,\n );\n}\n\nexport async function extractAllPackageFiles(\n _config: ExtractConfig,\n packageFiles: string[],\n): Promise<PackageFile[] | null> {\n const results: PackageFile[] = [];\n const seen = new Set<string>();\n\n for (const packageFile of packageFiles) {\n if (seen.has(packageFile)) {\n continue;\n }\n seen.add(packageFile);\n\n const visitedFiles = new Set<string>();\n const allProps: Record<string, AntProp> = {};\n const allRawDeps: RawDep[] = [];\n\n await walkXmlFile(packageFile, visitedFiles, allProps, allRawDeps);\n\n // Resolve chained property values before applying to deps\n resolveChainedProps(allProps);\n\n // Apply property resolution to all dependencies\n const resolvedDeps = allRawDeps.map((rawDep) =>\n applyProps(rawDep.dep, rawDep.depPackageFile, allProps),\n );\n\n if (resolvedDeps.length === 0) {\n continue;\n }\n\n // Group deps by their target file (propSource or original packageFile)\n const fileMap = new Map<string, PackageDependency[]>();\n for (let i = 0; i < resolvedDeps.length; i++) {\n const dep = resolvedDeps[i];\n const targetFile = dep.propSource ?? allRawDeps[i].depPackageFile;\n if (!fileMap.has(targetFile)) {\n fileMap.set(targetFile, []);\n }\n fileMap.get(targetFile)!.push(dep);\n }\n\n for (const [pkgFile, deps] of fileMap) {\n // Clean up internal propSource field\n for (const dep of deps) {\n delete dep.propSource;\n }\n results.push({ packageFile: pkgFile, deps });\n }\n }\n\n return results.length > 0 ? results : null;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/ant/extract.ts"],"sourcesContent":["import upath from 'upath';\nimport type { XmlElement } from 'xmldoc';\nimport { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { MavenDatasource } from '../../datasource/maven/index.ts';\nimport { extractRegistries } from '../maven/extract.ts';\nimport { isXmlElement } from '../nuget/util.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFile,\n PackageFileContent,\n} from '../types.ts';\nimport {\n applyProps,\n findAttrValuePosition,\n parsePropertiesFile,\n resolveChainedProps,\n} from './properties.ts';\nimport type { AntProp } from './types.ts';\n\nexport { parsePropertiesFile } from './properties.ts';\n\nconst scopeNames = new Set([\n 'compile',\n 'runtime',\n 'test',\n 'provided',\n 'system',\n]);\n\nfunction getDependencyType(scope: string | undefined): string {\n if (scope && scopeNames.has(scope)) {\n return scope;\n }\n return 'compile';\n}\n\nfunction parseCoords(coordsStr: string): {\n groupId: string;\n artifactId: string;\n rawVersion: string;\n scope: string | undefined;\n} | null {\n const parts = coordsStr.split(':');\n if (parts.length < 3) {\n logger.trace({ coordsStr }, 'ant manager: coords has fewer than 3 parts');\n return null;\n }\n\n const [groupId, artifactId] = parts;\n if (!groupId || !artifactId) {\n logger.trace(\n { coordsStr },\n 'ant manager: coords has empty groupId or artifactId',\n );\n return null;\n }\n\n let scope: string | undefined;\n let rawVersion: string;\n\n if (parts.length >= 4 && scopeNames.has(parts.at(-1)!)) {\n scope = parts.at(-1);\n rawVersion = parts.at(-2)!;\n } else {\n rawVersion = parts.at(-1)!;\n }\n\n return { groupId, artifactId, rawVersion, scope };\n}\n\ninterface RawDep {\n dep: PackageDependency;\n depPackageFile: string;\n}\n\nasync function collectRegistryUrls(\n node: XmlElement,\n baseDir: string,\n): Promise<string[]> {\n const urls: string[] = [];\n\n // Read registry URLs from settingsFile attribute\n const settingsFile = node.attr.settingsFile;\n if (settingsFile) {\n const settingsPath = settingsFile.startsWith('/')\n ? settingsFile\n : upath.join(baseDir, settingsFile);\n const settingsContent = await readLocalFile(settingsPath, 'utf8');\n if (settingsContent) {\n urls.push(...extractRegistries(settingsContent));\n } else {\n logger.debug(`ant manager: could not read settings file ${settingsPath}`);\n }\n }\n\n // Collect inline <remoteRepository url=\"...\" /> elements\n for (const child of node.children) {\n if (\n isXmlElement(child) &&\n child.name === 'remoteRepository' &&\n child.attr.url\n ) {\n urls.push(child.attr.url);\n }\n }\n\n return [...new Set(urls)];\n}\n\nfunction collectCoordsDependency(\n node: XmlElement,\n packageFile: string,\n content: string,\n registryUrls: string[],\n): RawDep | null {\n const coordsStr = node.attr.coords;\n\n const parsed = parseCoords(coordsStr);\n if (!parsed) {\n return null;\n }\n\n const dep: PackageDependency = {\n datasource: MavenDatasource.id,\n depName: `${parsed.groupId}:${parsed.artifactId}`,\n currentValue: parsed.rawVersion,\n depType: getDependencyType(parsed.scope ?? node.attr.scope),\n ...(registryUrls?.length && { registryUrls }),\n };\n\n // Position at the version substring within the coords attribute value\n const coordsValuePos = findAttrValuePosition(content, node, 'coords');\n const versionOffset = coordsStr.lastIndexOf(parsed.rawVersion);\n dep.fileReplacePosition = coordsValuePos + versionOffset;\n\n return { dep, depPackageFile: packageFile };\n}\n\nfunction collectDependency(\n node: XmlElement,\n packageFile: string,\n content: string,\n registryUrls: string[] = [],\n): RawDep | null {\n if (node.attr.coords) {\n return collectCoordsDependency(node, packageFile, content, registryUrls);\n }\n\n const { groupId, artifactId, version, scope } = node.attr;\n\n if (!version || !groupId || !artifactId) {\n return null;\n }\n\n const dep: PackageDependency = {\n datasource: MavenDatasource.id,\n depName: `${groupId}:${artifactId}`,\n currentValue: version,\n depType: getDependencyType(scope),\n ...(registryUrls?.length && { registryUrls }),\n };\n\n dep.fileReplacePosition = findAttrValuePosition(content, node, 'version');\n\n return { dep, depPackageFile: packageFile };\n}\n\nfunction walkNode(\n node: XmlElement | XmlDocument,\n rawDeps: RawDep[],\n packageFile: string,\n content: string,\n): void {\n for (const child of node.children) {\n if (!isXmlElement(child)) {\n continue;\n }\n\n if (child.name === 'dependency') {\n const rawDep = collectDependency(child, packageFile, content);\n if (rawDep) {\n rawDeps.push(rawDep);\n }\n } else {\n walkNode(child, rawDeps, packageFile, content);\n }\n }\n}\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n): PackageFileContent | null {\n let doc: XmlDocument;\n try {\n doc = new XmlDocument(content);\n } catch {\n logger.debug(`ant manager: could not parse XML ${packageFile}`);\n return null;\n }\n\n const rawDeps: RawDep[] = [];\n walkNode(doc, rawDeps, packageFile, content);\n\n const deps = rawDeps.map((rd) => rd.dep);\n\n if (deps.length === 0) {\n return null;\n }\n\n return { deps };\n}\n\n/**\n * Walk an XML node tree in document order, processing properties,\n * property file references, and dependencies as they appear.\n */\nasync function walkNodeInOrder(\n node: XmlElement | XmlDocument,\n packageFile: string,\n content: string,\n visitedFiles: Set<string>,\n allProps: Record<string, AntProp>,\n allRawDeps: RawDep[],\n registryUrls: string[] = [],\n): Promise<void> {\n const baseDir = upath.dirname(packageFile);\n\n for (const child of node.children) {\n if (!isXmlElement(child)) {\n continue;\n }\n\n if (child.name === 'property') {\n // Handle inline property definition\n const name = child.attr.name;\n const value = child.attr.value;\n if (name && value && !(name in allProps)) {\n const pos = findAttrValuePosition(content, child, 'value');\n allProps[name] = { val: value, fileReplacePosition: pos, packageFile };\n }\n\n // Handle property file reference\n const file = child.attr.file;\n if (file) {\n const propFilePath = file.startsWith('/')\n ? file\n : upath.join(baseDir, file);\n\n if (!visitedFiles.has(propFilePath)) {\n visitedFiles.add(propFilePath);\n const propContent = await readLocalFile(propFilePath, 'utf8');\n if (propContent) {\n parsePropertiesFile(propContent, propFilePath, allProps);\n } else {\n logger.debug(\n `ant manager: could not read properties file ${propFilePath}`,\n );\n }\n }\n }\n } else if (child.name === 'import' && child.attr.file) {\n const importedFile = upath.normalize(\n upath.join(baseDir, child.attr.file),\n );\n await walkXmlFile(importedFile, visitedFiles, allProps, allRawDeps);\n } else if (child.name === 'dependency') {\n const rawDep = collectDependency(\n child,\n packageFile,\n content,\n registryUrls,\n );\n if (rawDep) {\n allRawDeps.push(rawDep);\n }\n } else {\n // Collect registry URLs from settingsFile and remoteRepository\n const childRegistries = await collectRegistryUrls(child, baseDir);\n const mergedUrls =\n childRegistries.length > 0 ? childRegistries : registryUrls;\n await walkNodeInOrder(\n child,\n packageFile,\n content,\n visitedFiles,\n allProps,\n allRawDeps,\n mergedUrls,\n );\n }\n }\n}\n\nasync function walkXmlFile(\n packageFile: string,\n visitedFiles: Set<string>,\n allProps: Record<string, AntProp>,\n allRawDeps: RawDep[],\n): Promise<void> {\n if (visitedFiles.has(packageFile)) {\n return;\n }\n visitedFiles.add(packageFile);\n\n const content = await readLocalFile(packageFile, 'utf8');\n if (!content) {\n logger.debug(`ant manager: could not read ${packageFile}`);\n return;\n }\n\n let doc: XmlDocument;\n try {\n doc = new XmlDocument(content);\n } catch {\n logger.debug(`ant manager: could not parse XML ${packageFile}`);\n return;\n }\n\n await walkNodeInOrder(\n doc,\n packageFile,\n content,\n visitedFiles,\n allProps,\n allRawDeps,\n );\n}\n\nexport async function extractAllPackageFiles(\n _config: ExtractConfig,\n packageFiles: string[],\n): Promise<PackageFile[] | null> {\n const results: PackageFile[] = [];\n const seen = new Set<string>();\n\n for (const packageFile of packageFiles) {\n if (seen.has(packageFile)) {\n continue;\n }\n seen.add(packageFile);\n\n const visitedFiles = new Set<string>();\n const allProps: Record<string, AntProp> = {};\n const allRawDeps: RawDep[] = [];\n\n await walkXmlFile(packageFile, visitedFiles, allProps, allRawDeps);\n\n // Resolve chained property values before applying to deps\n resolveChainedProps(allProps);\n\n // Apply property resolution to all dependencies\n const resolvedDeps = allRawDeps.map((rawDep) =>\n applyProps(rawDep.dep, rawDep.depPackageFile, allProps),\n );\n\n if (resolvedDeps.length === 0) {\n continue;\n }\n\n // Group deps by their target file (propSource or original packageFile)\n const fileMap = new Map<string, PackageDependency[]>();\n for (let i = 0; i < resolvedDeps.length; i++) {\n const dep = resolvedDeps[i];\n const targetFile = dep.propSource ?? allRawDeps[i].depPackageFile;\n if (!fileMap.has(targetFile)) {\n fileMap.set(targetFile, []);\n }\n fileMap.get(targetFile)!.push(dep);\n }\n\n for (const [pkgFile, deps] of fileMap) {\n // Clean up internal propSource field\n for (const dep of deps) {\n delete dep.propSource;\n }\n results.push({ packageFile: pkgFile, deps });\n }\n }\n\n return results.length > 0 ? results : null;\n}\n"],"mappings":"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"}
@@ -14,7 +14,13 @@ function updateDependency({ fileContent, upgrade }) {
14
14
  if (quoteChar === "\"" || quoteChar === "'") endIndex = rightPart.indexOf(quoteChar);
15
15
  else {
16
16
  const newlineIndex = rightPart.indexOf("\n");
17
- endIndex = newlineIndex === -1 ? rightPart.length : newlineIndex;
17
+ const lineEnd = newlineIndex === -1 ? rightPart.length : newlineIndex;
18
+ const nearestQuote = [rightPart.indexOf("\""), rightPart.indexOf("'")].filter((i) => i !== -1 && i < lineEnd);
19
+ if (nearestQuote.length > 0) {
20
+ const quoteEnd = Math.min(...nearestQuote);
21
+ const colonIndex = rightPart.indexOf(":");
22
+ endIndex = colonIndex !== -1 && colonIndex < quoteEnd ? colonIndex : quoteEnd;
23
+ } else endIndex = lineEnd;
18
24
  }
19
25
  const currentFound = rightPart.slice(0, endIndex);
20
26
  if (currentFound === newValue) return fileContent;
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","names":[],"sources":["../../../../lib/modules/manager/ant/update.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport type { UpdateDependencyConfig } from '../types.ts';\n\n/** For external .properties files: updateDependency is necessary because extractPackageFile can't reconstruct dep metadata from a .properties file alone */\nexport function updateDependency({\n fileContent,\n upgrade,\n}: UpdateDependencyConfig): string | null {\n const { depName, currentValue, newValue, fileReplacePosition } = upgrade;\n\n if (fileReplacePosition === undefined || fileReplacePosition === null) {\n logger.debug({ depName }, 'No fileReplacePosition for ant dependency');\n return null;\n }\n\n const leftPart = fileContent.slice(0, fileReplacePosition);\n const rightPart = fileContent.slice(fileReplacePosition);\n\n // Find the end of the value (closing quote or end of line for .properties files)\n let endIndex: number;\n const quoteChar = leftPart.at(-1);\n if (quoteChar === '\"' || quoteChar === \"'\") {\n endIndex = rightPart.indexOf(quoteChar);\n } else {\n // .properties file: value ends at newline or EOF\n const newlineIndex = rightPart.indexOf('\\n');\n endIndex = newlineIndex === -1 ? rightPart.length : newlineIndex;\n }\n\n const currentFound = rightPart.slice(0, endIndex);\n\n if (currentFound === newValue) {\n return fileContent;\n }\n\n if (currentFound === currentValue || upgrade.sharedVariableName) {\n return `${leftPart}${newValue}${rightPart.slice(endIndex)}`;\n }\n\n logger.debug(\n { depName, currentFound, currentValue, newValue },\n 'ant: unexpected value at fileReplacePosition',\n );\n return null;\n}\n"],"mappings":";;;AAIA,SAAgB,iBAAiB,EAC/B,aACA,WACwC;CACxC,MAAM,EAAE,SAAS,cAAc,UAAU,wBAAwB;AAEjE,KAAI,wBAAwB,KAAA,KAAa,wBAAwB,MAAM;AACrE,SAAO,MAAM,EAAE,SAAS,EAAE,4CAA4C;AACtE,SAAO;;CAGT,MAAM,WAAW,YAAY,MAAM,GAAG,oBAAoB;CAC1D,MAAM,YAAY,YAAY,MAAM,oBAAoB;CAGxD,IAAI;CACJ,MAAM,YAAY,SAAS,GAAG,GAAG;AACjC,KAAI,cAAc,QAAO,cAAc,IACrC,YAAW,UAAU,QAAQ,UAAU;MAClC;EAEL,MAAM,eAAe,UAAU,QAAQ,KAAK;AAC5C,aAAW,iBAAiB,KAAK,UAAU,SAAS;;CAGtD,MAAM,eAAe,UAAU,MAAM,GAAG,SAAS;AAEjD,KAAI,iBAAiB,SACnB,QAAO;AAGT,KAAI,iBAAiB,gBAAgB,QAAQ,mBAC3C,QAAO,GAAG,WAAW,WAAW,UAAU,MAAM,SAAS;AAG3D,QAAO,MACL;EAAE;EAAS;EAAc;EAAc;EAAU,EACjD,+CACD;AACD,QAAO"}
1
+ {"version":3,"file":"update.js","names":[],"sources":["../../../../lib/modules/manager/ant/update.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport type { UpdateDependencyConfig } from '../types.ts';\n\n/** For external .properties files: updateDependency is necessary because extractPackageFile can't reconstruct dep metadata from a .properties file alone */\nexport function updateDependency({\n fileContent,\n upgrade,\n}: UpdateDependencyConfig): string | null {\n const { depName, currentValue, newValue, fileReplacePosition } = upgrade;\n\n if (fileReplacePosition === undefined || fileReplacePosition === null) {\n logger.debug({ depName }, 'No fileReplacePosition for ant dependency');\n return null;\n }\n\n const leftPart = fileContent.slice(0, fileReplacePosition);\n const rightPart = fileContent.slice(fileReplacePosition);\n\n // Find the end of the value (closing quote or end of line for .properties files)\n let endIndex: number;\n const quoteChar = leftPart.at(-1);\n if (quoteChar === '\"' || quoteChar === \"'\") {\n endIndex = rightPart.indexOf(quoteChar);\n } else {\n // Could be a .properties file or a substring inside a coords attribute\n const newlineIndex = rightPart.indexOf('\\n');\n const lineEnd = newlineIndex === -1 ? rightPart.length : newlineIndex;\n\n // Check for closing quote before newline (indicates coords attribute)\n const nearestQuote = [\n rightPart.indexOf('\"'),\n rightPart.indexOf(\"'\"),\n ].filter((i) => i !== -1 && i < lineEnd);\n\n if (nearestQuote.length > 0) {\n // Inside a quoted attribute (coords) - version ends at : or closing quote\n const quoteEnd = Math.min(...nearestQuote);\n const colonIndex = rightPart.indexOf(':');\n endIndex =\n colonIndex !== -1 && colonIndex < quoteEnd ? colonIndex : quoteEnd;\n } else {\n // .properties file: value ends at newline or EOF\n endIndex = lineEnd;\n }\n }\n\n const currentFound = rightPart.slice(0, endIndex);\n\n if (currentFound === newValue) {\n return fileContent;\n }\n\n if (currentFound === currentValue || upgrade.sharedVariableName) {\n return `${leftPart}${newValue}${rightPart.slice(endIndex)}`;\n }\n\n logger.debug(\n { depName, currentFound, currentValue, newValue },\n 'ant: unexpected value at fileReplacePosition',\n );\n return null;\n}\n"],"mappings":";;;AAIA,SAAgB,iBAAiB,EAC/B,aACA,WACwC;CACxC,MAAM,EAAE,SAAS,cAAc,UAAU,wBAAwB;AAEjE,KAAI,wBAAwB,KAAA,KAAa,wBAAwB,MAAM;AACrE,SAAO,MAAM,EAAE,SAAS,EAAE,4CAA4C;AACtE,SAAO;;CAGT,MAAM,WAAW,YAAY,MAAM,GAAG,oBAAoB;CAC1D,MAAM,YAAY,YAAY,MAAM,oBAAoB;CAGxD,IAAI;CACJ,MAAM,YAAY,SAAS,GAAG,GAAG;AACjC,KAAI,cAAc,QAAO,cAAc,IACrC,YAAW,UAAU,QAAQ,UAAU;MAClC;EAEL,MAAM,eAAe,UAAU,QAAQ,KAAK;EAC5C,MAAM,UAAU,iBAAiB,KAAK,UAAU,SAAS;EAGzD,MAAM,eAAe,CACnB,UAAU,QAAQ,KAAI,EACtB,UAAU,QAAQ,IAAI,CACvB,CAAC,QAAQ,MAAM,MAAM,MAAM,IAAI,QAAQ;AAExC,MAAI,aAAa,SAAS,GAAG;GAE3B,MAAM,WAAW,KAAK,IAAI,GAAG,aAAa;GAC1C,MAAM,aAAa,UAAU,QAAQ,IAAI;AACzC,cACE,eAAe,MAAM,aAAa,WAAW,aAAa;QAG5D,YAAW;;CAIf,MAAM,eAAe,UAAU,MAAM,GAAG,SAAS;AAEjD,KAAI,iBAAiB,SACnB,QAAO;AAGT,KAAI,iBAAiB,gBAAgB,QAAQ,mBAC3C,QAAO,GAAG,WAAW,WAAW,UAAU,MAAM,SAAS;AAG3D,QAAO,MACL;EAAE;EAAS;EAAc;EAAc;EAAU,EACjD,+CACD;AACD,QAAO"}
@@ -1,8 +1,8 @@
1
1
  import { regEx } from "../../../util/regex.js";
2
2
  import { logger } from "../../../logger/index.js";
3
3
  import { getDep as getDep$1 } from "../dockerfile/extract.js";
4
- import { isVersion } from "../../versioning/semver/index.js";
5
4
  import { BuildpacksRegistryDatasource } from "../../datasource/buildpacks-registry/index.js";
5
+ import { isVersion } from "../../versioning/semver/index.js";
6
6
  import { ProjectDescriptorToml, isBuildpackByName, isBuildpackByURI } from "./schema.js";
7
7
  import { isArray } from "@sindresorhus/is";
8
8
  //#region lib/modules/manager/buildpacks/extract.ts
@@ -2,7 +2,7 @@
2
2
  const hashMap = /* @__PURE__ */ new Map();
3
3
  hashMap.set("ansible", "1fbc76f78daa14a8c9ab1142e9d1e05c746c0419a9f1455e4279f476590d0c04");
4
4
  hashMap.set("ansible-galaxy", "8226d47128f2018825d4d6f84794e3183eb79c706045fa7e88491edd5e64106f");
5
- hashMap.set("ant", "27e1e1b4b077554dbc62e54893f2a3a0372228e7afdd2bdc68c6335dc7654c4e");
5
+ hashMap.set("ant", "8640868d2249c9a0fbc57680fa81cf0c8c35f170258c50ac3ffb3a4f798cc5ae");
6
6
  hashMap.set("argocd", "5d35b1992e53130bf83b0e59a0f90ccd3a78919974c69044f306dc5d162f48ce");
7
7
  hashMap.set("asdf", "1f6fcf620e9c6cd35991380cb6eafb94ec60cd77cbd13335ebe3a1d9727416c9");
8
8
  hashMap.set("azure-pipelines", "4f635b0ecd388ee266d992e8281fd40e3db2f5867d86fc1cbce72dc33a66e796");
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.generated.js","names":[],"sources":["../../../lib/modules/manager/fingerprint.generated.ts"],"sourcesContent":["export const hashMap = new Map<string, string>();\n\nhashMap.set('ansible','1fbc76f78daa14a8c9ab1142e9d1e05c746c0419a9f1455e4279f476590d0c04');\nhashMap.set('ansible-galaxy','8226d47128f2018825d4d6f84794e3183eb79c706045fa7e88491edd5e64106f');\nhashMap.set('ant','27e1e1b4b077554dbc62e54893f2a3a0372228e7afdd2bdc68c6335dc7654c4e');\nhashMap.set('argocd','5d35b1992e53130bf83b0e59a0f90ccd3a78919974c69044f306dc5d162f48ce');\nhashMap.set('asdf','1f6fcf620e9c6cd35991380cb6eafb94ec60cd77cbd13335ebe3a1d9727416c9');\nhashMap.set('azure-pipelines','4f635b0ecd388ee266d992e8281fd40e3db2f5867d86fc1cbce72dc33a66e796');\nhashMap.set('batect','fad98996bea8626525ab925f83a6ae0ce9262c53770e7aa7cb448a1e0f1ddf21');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','c6e0ad88ea468664c3a33263baf7452d83d2d37ff09ba920e18f64ee81fd0acb');\nhashMap.set('bazel-module','ff071fcf8b53036956627d2a430ccdf256e30bee4d7e80c329379879d836a931');\nhashMap.set('bazelisk','b6ec532dfa7c8f82ad4084df864ac6276e87c27285369323902afc146d3537ac');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','59c0503494ab1442b127914503c01b97ac17b6742b19c632292d5aa24de115cd');\nhashMap.set('bitrise','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\nhashMap.set('buildkite','a93effb1f1c5d65b3277c3b4709924eacde282e8efd028a8e3d8c1ce3ef69407');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','1322232bf1d0c4fa796e31a00488453bdcd00d4958431d9e424c1635e60a99bd');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','6d7e9d2018ac03e15f19e8b40ef70dd87d509d5affca24bc464d085899880a25');\nhashMap.set('cake','288c3c36a50371b26957fa71992cc335228d53563c75597b36919ac7286e96eb');\nhashMap.set('cargo','308d7ab4c6d24027b050bf659dfab0e510d9a22f8134695a7c68214908ee4634');\nhashMap.set('cdnurl','d3edf6cdc38e92eb43ff5a2b4e8df6a6a13154cf83244725c39e28d7e6ea9177');\nhashMap.set('circleci','135937d4720718304adb0ba998516f8ce38c3220ccd18b00b8c70c62b45df4da');\nhashMap.set('cloudbuild','8c0c739f7e4082bbfe8e3fdffebaf43e26f70a1314d95b306e9b93e4f4297886');\nhashMap.set('cocoapods','b6ac3b4a6b8a5b32daed37bf695fe177cdb1b4a94ae7f7fb2f4c4c096c0a004c');\nhashMap.set('composer','cdb6895574020cec402e0b878e4078b62f1acfd0392a861cbb523036634f6383');\nhashMap.set('conan','aecc3917d77146db4e57dd12944be1beff860e90b7ebdd2d8fbc449fc1a06574');\nhashMap.set('copier','faa3b79991256a6fc0957fdcd530a1bc8aee65913d5aff2b1b4d226dcd44d008');\nhashMap.set('cpanfile','6a1d67d9c8751123deaf0c7f3ac38a07024e960c140f8228fcbcb93954fdca01');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deps-edn','c87dd5e88587147ad1a78f047b814f3c4aa60d6de30d0c49d849391eeaf1b64c');\nhashMap.set('devbox','bcf5334e8a21190baaa25436acf2f17fbf095504262a4e9ee7c62ffb644eb716');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','5441af5b5abf8d347e46002d47f02f85743401bda28232f49fb7b3bbb772a4fb');\nhashMap.set('dockerfile','322b95f7e55dd78d7fe71306a6f649479eca61c60d75bb10b23604a230dbdd08');\nhashMap.set('droneci','237c8de87b9bf653fb943b56e84e99c45f6d86ae27d86e599b3f3f99c35ba8ee');\nhashMap.set('fleet','d73d5d35f10df0599a561d9c8d25f3935350407d0e3bd3a1d1545295f278912e');\nhashMap.set('flux','427e0c1a5b1d8337503a9a568a76532fbde0bab8b355fa8f47312de50eadf2f6');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('git-submodules','fbbf1c7b7b6f4166fa3beee96a3283d007b388e9ecb6a14f76123c8ab8c78071');\nhashMap.set('github-actions','d8f83c65da1e80b639ad44a0d8641e7e97b1d93a1b6c873603333d337ad02011');\nhashMap.set('gitlabci','0dec44dd398bfc5b3c19d0929bea2fef7f386c94acfd1b1d7bc2a31d81d96fd6');\nhashMap.set('gitlabci-include','354cfc4ea327c6d5cd5bee1f17763832efc7f5402e9fd22c579239fccb9c6dab');\nhashMap.set('glasskube','253d6db30bdec75ed5ab5d26f31d69bc07813ba10089a28da12c6a29eff4ec70');\nhashMap.set('gleam','b717a48c525ad6b1d434c6a9db828ddebbb85e94519e89ddc4040878e3600e84');\nhashMap.set('gomod','82e877b22c0dd0217368760bb5d38430657fff63d07c289793a866f0845d2976');\nhashMap.set('gradle','f430d8d768b56889ad1e5a69965841e85cc700e364d15db7bce680e8a5d6f821');\nhashMap.set('gradle-wrapper','90d2ecb9d0b113f8e946d4ea221c040f17f91af846e1ff4f9fc1514ad4324b74');\nhashMap.set('haskell-cabal','d796ec6859e63ab4f1b7030c4016071202c3a44c7c11d4a9131d7e2ba19b396d');\nhashMap.set('helm-requirements','4d90e5e18a380876ad48e21e1ad88ea62e25d973a1ddaa3763447fc0a9f9915b');\nhashMap.set('helm-values','b5c52c6a27d805557418c585c5d3030c95ee641d53057021f3fe060f81b6e1af');\nhashMap.set('helmfile','e5783484b81247279563da3c835afe4002edfc412e13fb91877818ca44ae65f2');\nhashMap.set('helmsman','ef9680c612f702c7f07aea9b6e5d811e91214dcfa5755c9f3803e9528090935e');\nhashMap.set('helmv3','7724bf6cc3ff4afec1809899f619a332f4350049b9578b5c4634514b4448cf2b');\nhashMap.set('hermit','672c328e4baea3a1ccd2cde2364db01c8033a8c077bf63a5b914fc20ee1de838');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','56ef90301143874355fd2ed25dff7c646875f701f97422d02e01d45608a88f31');\nhashMap.set('html','67c5f3c5c58e96f5dd257ba5987d900cf7fef81d667c3640e96c847b37de35a8');\nhashMap.set('jenkins','268ebfc8a1caf3edeb2192c2b1b2fa4bf18a78a3e731ba20a6c104940a5539f3');\nhashMap.set('jsonnet-bundler','4b73c32ddc3fe45d9777106d45b116777a2960e6e631256a6553060e602f893c');\nhashMap.set('kotlin-script','99ef296792a0ca575ed31d3defb514b05a58083dc01c52ea0890c69d867ba1dd');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','1e44d6ef8622252dac6d9649fb04badd12d4827eb2a55f74792aa9de2b915775');\nhashMap.set('leiningen','133fca2c3423f53f2ccc22518153ddbcafbf0f4812376c77e952eb3d24d81f85');\nhashMap.set('maven','fd6bfc21be851ed076eabea1a91a89b25eb82129734c7cb0c2e684385cf1ea69');\nhashMap.set('maven-wrapper','9a868d1328f911eb72f9e65a64d46c86ae347aab0153d1cf4e9a62ad9e0d6cb0');\nhashMap.set('meteor','4a93a326b27bedfe52118e27e06f39fecd7c55bd4cd7fccec4cb120cac14cec4');\nhashMap.set('mint','b816a49c8525716454d0a2bc9127916d5b27e5cca7b2aa2030312f218942af3e');\nhashMap.set('mise','38177382f3785cfe7cce92994bfb429b68f5165e6eef1bdcd2c7a3d8d5414da2');\nhashMap.set('mix','1116e1adf1c18c866f0a9e6fa065c4fb9da055d8d150e625344899bb94095481');\nhashMap.set('nix','f3ffec2f14e7261de8068895b91392e992dcef208fbaf52110d6862e4712c031');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','eaf9fe4981de8f7504227f3be88445f60f87ba74f9b9c7e54284bc2bb41320b3');\nhashMap.set('nuget','42175b1906e8e91ae0731a13d92d0df065108063665f8a36150aeae73aafdc78');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','32233a1a8a2725699d7448ba438e3d0b78141f7799cd2b588de278d41e26ed10');\nhashMap.set('pep621','f503497a4adef31b29572176e9a69d52fa9b0bfe3477b6e228c906aeb4861de5');\nhashMap.set('pep723','b96683163de63ed93207ec0538066705b1e58a1cd5b8bd11c63fc28b26bddba1');\nhashMap.set('pip-compile','89152ad6c89f278395f32d289dc3890823c233366547d228e97dd1319aa144b5');\nhashMap.set('pip_requirements','d5c474c524bc7adc1aae065da0531bd22d9f7f52523b018f2461f6c29e12fdf3');\nhashMap.set('pip_setup','0175fe550c19d9bd31c978bd83fdc088cb40fcacd5d6751f640164274ae64e61');\nhashMap.set('pipenv','50f5a54ed714fd3d738c1aa9a353cf3aab767899acdcb763088d4bd04f3a737b');\nhashMap.set('pixi','b17af6eaa33e7babcc52cfc9a617c7801c0efb1125bbd6d0d4e9f6fe33afd353');\nhashMap.set('poetry','7f227b8b912b405df7735e9dc7c178f03021844f0c027d4b321c023c330c390a');\nhashMap.set('pre-commit','a6a6e847fdb0f56650e66ef7d69e68de752b390913f79ac31d1a7ec5955d03da');\nhashMap.set('pub','0fbad9f77579fcec3a623c6feab56e71934c67a79bb8f4f0f847452051d2a0ba');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','e355e13e104351a8b3516a8e272fc5f7e625c9f39b0c492ba27283a36227c2d4');\nhashMap.set('renovate-config-presets','a394fe55f8b6ba356f29f76efd9f0d34b56baceb111e6d92f95b29b5ca50ac67');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('sbt','74125bd9c76a5724092258cd1dee1ea99fc0d735b463a2b64fedc5d950efde2a');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','7dea08c5708625e753bd56918bc214df7fb4d8543a26e936926a21ab43b5f785');\nhashMap.set('sveltos','167a5cc79098803be3b815a28cc40ef3361c455751e1d6a7a99ba91bfce26709');\nhashMap.set('swift','79ec9a6a2a8bb4853bb78bbb3a2a6e64e3b32b0ddeb312385abb3a14366ad505');\nhashMap.set('tekton','4e35c75bba4abc9c3cf49c55da6c19db4f4e9181d1fd9583288ab55ef7c944fd');\nhashMap.set('terraform','5bd62ce12c23896b8ecb2385a60a3cb9eb72badf10f9984bfed38f50f9262266');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','b8474c65383a702602eee432cc1434f9a49a1ef886d1213de92d7a84fb98b9cd');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','4a975f0cc1aa22cd258aa835de3dc98d7a5c0d1cee0a1092324338968e08a827');\nhashMap.set('travis','bb482a0195cd009ec3896a6227bb95617f5c84bedb518c7d971e50c62235d9ca');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','4627230d3b7698c41aac192d57b65b091c860c8f858c89d6af4b06ed6a32fae6');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('jsonata','3b5f465b586993f92c8490e70885e7eecce9b6556bcc376dd9c11db8ee9e6960');\nhashMap.set('regex','7b643b49e498465cf91b25b8b840bb1fec8c8a3a59bfa8f97a39c976675325a0');"],"mappings":"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"}
1
+ {"version":3,"file":"fingerprint.generated.js","names":[],"sources":["../../../lib/modules/manager/fingerprint.generated.ts"],"sourcesContent":["export const hashMap = new Map<string, string>();\n\nhashMap.set('ansible','1fbc76f78daa14a8c9ab1142e9d1e05c746c0419a9f1455e4279f476590d0c04');\nhashMap.set('ansible-galaxy','8226d47128f2018825d4d6f84794e3183eb79c706045fa7e88491edd5e64106f');\nhashMap.set('ant','8640868d2249c9a0fbc57680fa81cf0c8c35f170258c50ac3ffb3a4f798cc5ae');\nhashMap.set('argocd','5d35b1992e53130bf83b0e59a0f90ccd3a78919974c69044f306dc5d162f48ce');\nhashMap.set('asdf','1f6fcf620e9c6cd35991380cb6eafb94ec60cd77cbd13335ebe3a1d9727416c9');\nhashMap.set('azure-pipelines','4f635b0ecd388ee266d992e8281fd40e3db2f5867d86fc1cbce72dc33a66e796');\nhashMap.set('batect','fad98996bea8626525ab925f83a6ae0ce9262c53770e7aa7cb448a1e0f1ddf21');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','c6e0ad88ea468664c3a33263baf7452d83d2d37ff09ba920e18f64ee81fd0acb');\nhashMap.set('bazel-module','ff071fcf8b53036956627d2a430ccdf256e30bee4d7e80c329379879d836a931');\nhashMap.set('bazelisk','b6ec532dfa7c8f82ad4084df864ac6276e87c27285369323902afc146d3537ac');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','59c0503494ab1442b127914503c01b97ac17b6742b19c632292d5aa24de115cd');\nhashMap.set('bitrise','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\nhashMap.set('buildkite','a93effb1f1c5d65b3277c3b4709924eacde282e8efd028a8e3d8c1ce3ef69407');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','1322232bf1d0c4fa796e31a00488453bdcd00d4958431d9e424c1635e60a99bd');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','6d7e9d2018ac03e15f19e8b40ef70dd87d509d5affca24bc464d085899880a25');\nhashMap.set('cake','288c3c36a50371b26957fa71992cc335228d53563c75597b36919ac7286e96eb');\nhashMap.set('cargo','308d7ab4c6d24027b050bf659dfab0e510d9a22f8134695a7c68214908ee4634');\nhashMap.set('cdnurl','d3edf6cdc38e92eb43ff5a2b4e8df6a6a13154cf83244725c39e28d7e6ea9177');\nhashMap.set('circleci','135937d4720718304adb0ba998516f8ce38c3220ccd18b00b8c70c62b45df4da');\nhashMap.set('cloudbuild','8c0c739f7e4082bbfe8e3fdffebaf43e26f70a1314d95b306e9b93e4f4297886');\nhashMap.set('cocoapods','b6ac3b4a6b8a5b32daed37bf695fe177cdb1b4a94ae7f7fb2f4c4c096c0a004c');\nhashMap.set('composer','cdb6895574020cec402e0b878e4078b62f1acfd0392a861cbb523036634f6383');\nhashMap.set('conan','aecc3917d77146db4e57dd12944be1beff860e90b7ebdd2d8fbc449fc1a06574');\nhashMap.set('copier','faa3b79991256a6fc0957fdcd530a1bc8aee65913d5aff2b1b4d226dcd44d008');\nhashMap.set('cpanfile','6a1d67d9c8751123deaf0c7f3ac38a07024e960c140f8228fcbcb93954fdca01');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deps-edn','c87dd5e88587147ad1a78f047b814f3c4aa60d6de30d0c49d849391eeaf1b64c');\nhashMap.set('devbox','bcf5334e8a21190baaa25436acf2f17fbf095504262a4e9ee7c62ffb644eb716');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','5441af5b5abf8d347e46002d47f02f85743401bda28232f49fb7b3bbb772a4fb');\nhashMap.set('dockerfile','322b95f7e55dd78d7fe71306a6f649479eca61c60d75bb10b23604a230dbdd08');\nhashMap.set('droneci','237c8de87b9bf653fb943b56e84e99c45f6d86ae27d86e599b3f3f99c35ba8ee');\nhashMap.set('fleet','d73d5d35f10df0599a561d9c8d25f3935350407d0e3bd3a1d1545295f278912e');\nhashMap.set('flux','427e0c1a5b1d8337503a9a568a76532fbde0bab8b355fa8f47312de50eadf2f6');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('git-submodules','fbbf1c7b7b6f4166fa3beee96a3283d007b388e9ecb6a14f76123c8ab8c78071');\nhashMap.set('github-actions','d8f83c65da1e80b639ad44a0d8641e7e97b1d93a1b6c873603333d337ad02011');\nhashMap.set('gitlabci','0dec44dd398bfc5b3c19d0929bea2fef7f386c94acfd1b1d7bc2a31d81d96fd6');\nhashMap.set('gitlabci-include','354cfc4ea327c6d5cd5bee1f17763832efc7f5402e9fd22c579239fccb9c6dab');\nhashMap.set('glasskube','253d6db30bdec75ed5ab5d26f31d69bc07813ba10089a28da12c6a29eff4ec70');\nhashMap.set('gleam','b717a48c525ad6b1d434c6a9db828ddebbb85e94519e89ddc4040878e3600e84');\nhashMap.set('gomod','82e877b22c0dd0217368760bb5d38430657fff63d07c289793a866f0845d2976');\nhashMap.set('gradle','f430d8d768b56889ad1e5a69965841e85cc700e364d15db7bce680e8a5d6f821');\nhashMap.set('gradle-wrapper','90d2ecb9d0b113f8e946d4ea221c040f17f91af846e1ff4f9fc1514ad4324b74');\nhashMap.set('haskell-cabal','d796ec6859e63ab4f1b7030c4016071202c3a44c7c11d4a9131d7e2ba19b396d');\nhashMap.set('helm-requirements','4d90e5e18a380876ad48e21e1ad88ea62e25d973a1ddaa3763447fc0a9f9915b');\nhashMap.set('helm-values','b5c52c6a27d805557418c585c5d3030c95ee641d53057021f3fe060f81b6e1af');\nhashMap.set('helmfile','e5783484b81247279563da3c835afe4002edfc412e13fb91877818ca44ae65f2');\nhashMap.set('helmsman','ef9680c612f702c7f07aea9b6e5d811e91214dcfa5755c9f3803e9528090935e');\nhashMap.set('helmv3','7724bf6cc3ff4afec1809899f619a332f4350049b9578b5c4634514b4448cf2b');\nhashMap.set('hermit','672c328e4baea3a1ccd2cde2364db01c8033a8c077bf63a5b914fc20ee1de838');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','56ef90301143874355fd2ed25dff7c646875f701f97422d02e01d45608a88f31');\nhashMap.set('html','67c5f3c5c58e96f5dd257ba5987d900cf7fef81d667c3640e96c847b37de35a8');\nhashMap.set('jenkins','268ebfc8a1caf3edeb2192c2b1b2fa4bf18a78a3e731ba20a6c104940a5539f3');\nhashMap.set('jsonnet-bundler','4b73c32ddc3fe45d9777106d45b116777a2960e6e631256a6553060e602f893c');\nhashMap.set('kotlin-script','99ef296792a0ca575ed31d3defb514b05a58083dc01c52ea0890c69d867ba1dd');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','1e44d6ef8622252dac6d9649fb04badd12d4827eb2a55f74792aa9de2b915775');\nhashMap.set('leiningen','133fca2c3423f53f2ccc22518153ddbcafbf0f4812376c77e952eb3d24d81f85');\nhashMap.set('maven','fd6bfc21be851ed076eabea1a91a89b25eb82129734c7cb0c2e684385cf1ea69');\nhashMap.set('maven-wrapper','9a868d1328f911eb72f9e65a64d46c86ae347aab0153d1cf4e9a62ad9e0d6cb0');\nhashMap.set('meteor','4a93a326b27bedfe52118e27e06f39fecd7c55bd4cd7fccec4cb120cac14cec4');\nhashMap.set('mint','b816a49c8525716454d0a2bc9127916d5b27e5cca7b2aa2030312f218942af3e');\nhashMap.set('mise','38177382f3785cfe7cce92994bfb429b68f5165e6eef1bdcd2c7a3d8d5414da2');\nhashMap.set('mix','1116e1adf1c18c866f0a9e6fa065c4fb9da055d8d150e625344899bb94095481');\nhashMap.set('nix','f3ffec2f14e7261de8068895b91392e992dcef208fbaf52110d6862e4712c031');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','eaf9fe4981de8f7504227f3be88445f60f87ba74f9b9c7e54284bc2bb41320b3');\nhashMap.set('nuget','42175b1906e8e91ae0731a13d92d0df065108063665f8a36150aeae73aafdc78');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','32233a1a8a2725699d7448ba438e3d0b78141f7799cd2b588de278d41e26ed10');\nhashMap.set('pep621','f503497a4adef31b29572176e9a69d52fa9b0bfe3477b6e228c906aeb4861de5');\nhashMap.set('pep723','b96683163de63ed93207ec0538066705b1e58a1cd5b8bd11c63fc28b26bddba1');\nhashMap.set('pip-compile','89152ad6c89f278395f32d289dc3890823c233366547d228e97dd1319aa144b5');\nhashMap.set('pip_requirements','d5c474c524bc7adc1aae065da0531bd22d9f7f52523b018f2461f6c29e12fdf3');\nhashMap.set('pip_setup','0175fe550c19d9bd31c978bd83fdc088cb40fcacd5d6751f640164274ae64e61');\nhashMap.set('pipenv','50f5a54ed714fd3d738c1aa9a353cf3aab767899acdcb763088d4bd04f3a737b');\nhashMap.set('pixi','b17af6eaa33e7babcc52cfc9a617c7801c0efb1125bbd6d0d4e9f6fe33afd353');\nhashMap.set('poetry','7f227b8b912b405df7735e9dc7c178f03021844f0c027d4b321c023c330c390a');\nhashMap.set('pre-commit','a6a6e847fdb0f56650e66ef7d69e68de752b390913f79ac31d1a7ec5955d03da');\nhashMap.set('pub','0fbad9f77579fcec3a623c6feab56e71934c67a79bb8f4f0f847452051d2a0ba');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','e355e13e104351a8b3516a8e272fc5f7e625c9f39b0c492ba27283a36227c2d4');\nhashMap.set('renovate-config-presets','a394fe55f8b6ba356f29f76efd9f0d34b56baceb111e6d92f95b29b5ca50ac67');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('sbt','74125bd9c76a5724092258cd1dee1ea99fc0d735b463a2b64fedc5d950efde2a');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','7dea08c5708625e753bd56918bc214df7fb4d8543a26e936926a21ab43b5f785');\nhashMap.set('sveltos','167a5cc79098803be3b815a28cc40ef3361c455751e1d6a7a99ba91bfce26709');\nhashMap.set('swift','79ec9a6a2a8bb4853bb78bbb3a2a6e64e3b32b0ddeb312385abb3a14366ad505');\nhashMap.set('tekton','4e35c75bba4abc9c3cf49c55da6c19db4f4e9181d1fd9583288ab55ef7c944fd');\nhashMap.set('terraform','5bd62ce12c23896b8ecb2385a60a3cb9eb72badf10f9984bfed38f50f9262266');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','b8474c65383a702602eee432cc1434f9a49a1ef886d1213de92d7a84fb98b9cd');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','4a975f0cc1aa22cd258aa835de3dc98d7a5c0d1cee0a1092324338968e08a827');\nhashMap.set('travis','bb482a0195cd009ec3896a6227bb95617f5c84bedb518c7d971e50c62235d9ca');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','4627230d3b7698c41aac192d57b65b091c860c8f858c89d6af4b06ed6a32fae6');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('jsonata','3b5f465b586993f92c8490e70885e7eecce9b6556bcc376dd9c11db8ee9e6960');\nhashMap.set('regex','7b643b49e498465cf91b25b8b840bb1fec8c8a3a59bfa8f97a39c976675325a0');"],"mappings":"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"}
@@ -397,6 +397,6 @@ async function extractAllPackageFiles(config, packageFiles) {
397
397
  return cleanResult(resolveParents(packages));
398
398
  }
399
399
  //#endregion
400
- export { extractAllPackageFiles };
400
+ export { extractAllPackageFiles, extractRegistries };
401
401
 
402
402
  //# sourceMappingURL=extract.js.map
@@ -2,9 +2,9 @@ import { regEx } from "../../../util/regex.js";
2
2
  import { logger } from "../../../logger/index.js";
3
3
  import { getSiblingFileName, localPathExists } from "../../../util/fs/index.js";
4
4
  import { getDep } from "../dockerfile/extract.js";
5
+ import { isVersion } from "../../versioning/semver/index.js";
5
6
  import { NugetDatasource } from "../../datasource/nuget/index.js";
6
7
  import { applyRegistries, findVersion, getConfiguredRegistries, isXmlElement } from "./util.js";
7
- import { isVersion } from "../../versioning/semver/index.js";
8
8
  import { extractMsbuildGlobalManifest } from "./extract/global-manifest.js";
9
9
  import { extractPackagesFromSingleCsharpFile } from "./extract/single-csharp-file.js";
10
10
  import { isNonEmptyStringAndNotWhitespace, isString } from "@sindresorhus/is";
@@ -3,8 +3,8 @@ import api$2, { id as id$1 } from "./debian/index.js";
3
3
  import { api as api$3, id as id$2 } from "./ubuntu/index.js";
4
4
  import api$4, { id as id$3 } from "./pep440/index.js";
5
5
  import api$5, { id as id$4 } from "./maven/index.js";
6
- import api$6, { id as id$5 } from "./nuget/index.js";
7
- import api$7, { id as id$6 } from "./semver/index.js";
6
+ import api$6, { id as id$5 } from "./semver/index.js";
7
+ import api$7, { id as id$6 } from "./nuget/index.js";
8
8
  import api$8 from "./npm/index.js";
9
9
  import { api as api$9, id as id$7 } from "./helm/index.js";
10
10
  import api$10, { id as id$8 } from "./node/index.js";
@@ -84,7 +84,7 @@ api.set(id$4, api$5);
84
84
  api.set(id$30, api$38);
85
85
  api.set(id$8, api$10);
86
86
  api.set("npm", api$8);
87
- api.set(id$5, api$6);
87
+ api.set(id$6, api$7);
88
88
  api.set(id$3, api$4);
89
89
  api.set(id$31, api$39);
90
90
  api.set(id$32, api$40);
@@ -97,7 +97,7 @@ api.set("rpm", api$45);
97
97
  api.set(id$9, api$11);
98
98
  api.set(id$35, api$46);
99
99
  api.set(id$37, api$48);
100
- api.set(id$6, api$7);
100
+ api.set(id$5, api$6);
101
101
  api.set(id$36, api$47);
102
102
  api.set(id$38, api$49);
103
103
  api.set(id$39, api$50);
@@ -36,7 +36,6 @@ var PackageCacheFile = class PackageCacheFile extends PackageCacheBase {
36
36
  key
37
37
  }, "Returning cached value");
38
38
  this.expiryMap.set(this.getKey(namespace, key), expiry);
39
- if (!cached.compress) return cached.value;
40
39
  const json = await decompressFromBase64(cached.value);
41
40
  return JSON.parse(json);
42
41
  } catch {
@@ -55,7 +54,6 @@ var PackageCacheFile = class PackageCacheFile extends PackageCacheBase {
55
54
  const compressedValue = await compressToBase64(JSON.stringify(value));
56
55
  const expiry = DateTime.local().plus({ minutes: hardTtlMinutes });
57
56
  const payload = JSON.stringify({
58
- compress: true,
59
57
  value: compressedValue,
60
58
  expiry
61
59
  });