renovate 44.171.0 → 44.171.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 (88) hide show
  1. package/dist/instrumentation/reporting.js +5 -1
  2. package/dist/instrumentation/reporting.js.map +1 -1
  3. package/dist/modules/datasource/common.d.ts +4 -0
  4. package/dist/modules/datasource/common.js +16 -1
  5. package/dist/modules/datasource/common.js.map +1 -1
  6. package/dist/modules/datasource/crate/index.js +4 -1
  7. package/dist/modules/datasource/crate/index.js.map +1 -1
  8. package/dist/modules/datasource/custom/index.js +5 -1
  9. package/dist/modules/datasource/custom/index.js.map +1 -1
  10. package/dist/modules/datasource/custom/utils.js +2 -1
  11. package/dist/modules/datasource/custom/utils.js.map +1 -1
  12. package/dist/modules/datasource/docker/common.js +1 -1
  13. package/dist/modules/datasource/git-refs/base.js +2 -1
  14. package/dist/modules/datasource/git-refs/base.js.map +1 -1
  15. package/dist/modules/datasource/index.js +20 -10
  16. package/dist/modules/datasource/index.js.map +1 -1
  17. package/dist/modules/datasource/metadata.js +36 -9
  18. package/dist/modules/datasource/metadata.js.map +1 -1
  19. package/dist/modules/manager/bun/extract.js +7 -2
  20. package/dist/modules/manager/bun/extract.js.map +1 -1
  21. package/dist/modules/manager/fingerprint.generated.js +4 -4
  22. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  23. package/dist/modules/manager/npm/extract/index.js +3 -2
  24. package/dist/modules/manager/npm/extract/index.js.map +1 -1
  25. package/dist/modules/manager/npm/extract/post/monorepo.js +6 -3
  26. package/dist/modules/manager/npm/extract/post/monorepo.js.map +1 -1
  27. package/dist/modules/manager/npm/npmrc.js +162 -11
  28. package/dist/modules/manager/npm/npmrc.js.map +1 -1
  29. package/dist/modules/manager/npmrc.js +35 -0
  30. package/dist/modules/manager/npmrc.js.map +1 -0
  31. package/dist/modules/manager/pep621/processors/uv.js +9 -3
  32. package/dist/modules/manager/pep621/processors/uv.js.map +1 -1
  33. package/dist/modules/manager/pipenv/artifacts.js +16 -5
  34. package/dist/modules/manager/pipenv/artifacts.js.map +1 -1
  35. package/dist/util/cache/package/index.js +7 -4
  36. package/dist/util/cache/package/index.js.map +1 -1
  37. package/dist/util/cache/repository/http-cache.js +10 -0
  38. package/dist/util/cache/repository/http-cache.js.map +1 -1
  39. package/dist/util/cache/sanitize-key.js +63 -0
  40. package/dist/util/cache/sanitize-key.js.map +1 -0
  41. package/dist/util/git/auth.js +22 -2
  42. package/dist/util/git/auth.js.map +1 -1
  43. package/dist/util/git/index.d.ts +2 -0
  44. package/dist/util/git/index.js +1 -1
  45. package/dist/util/git/index.js.map +1 -1
  46. package/dist/util/host-rules.d.ts +33 -2
  47. package/dist/util/host-rules.js +237 -12
  48. package/dist/util/host-rules.js.map +1 -1
  49. package/dist/util/http/cache/abstract-http-cache-provider.js +17 -0
  50. package/dist/util/http/cache/abstract-http-cache-provider.js.map +1 -1
  51. package/dist/util/http/cache/memory-http-cache-provider.js +1 -0
  52. package/dist/util/http/cache/memory-http-cache-provider.js.map +1 -1
  53. package/dist/util/http/cache/persisted-headers.js +27 -0
  54. package/dist/util/http/cache/persisted-headers.js.map +1 -0
  55. package/dist/util/http/cache/repository-http-cache-provider.js +7 -4
  56. package/dist/util/http/cache/repository-http-cache-provider.js.map +1 -1
  57. package/dist/util/http/host-rules.js +2 -15
  58. package/dist/util/http/host-rules.js.map +1 -1
  59. package/dist/util/http/http.js +1 -1
  60. package/dist/util/jsonata.js +1 -1
  61. package/dist/util/merge-confidence/index.js +1 -1
  62. package/dist/util/url.d.ts +38 -0
  63. package/dist/util/url.js +100 -2
  64. package/dist/util/url.js.map +1 -1
  65. package/dist/workers/repository/cache.js +9 -1
  66. package/dist/workers/repository/cache.js.map +1 -1
  67. package/dist/workers/repository/init/merge.js +1 -1
  68. package/dist/workers/repository/init/merge.js.map +1 -1
  69. package/dist/workers/repository/onboarding/branch/rebase.js +1 -1
  70. package/dist/workers/repository/onboarding/pr/index.js +1 -1
  71. package/dist/workers/repository/process/extract-update.js +53 -5
  72. package/dist/workers/repository/process/extract-update.js.map +1 -1
  73. package/dist/workers/repository/process/fetch.js +2 -1
  74. package/dist/workers/repository/process/fetch.js.map +1 -1
  75. package/dist/workers/repository/process/lookup/digest.js +8 -4
  76. package/dist/workers/repository/process/lookup/digest.js.map +1 -1
  77. package/dist/workers/repository/process/lookup/index.js +13 -8
  78. package/dist/workers/repository/process/lookup/index.js.map +1 -1
  79. package/dist/workers/repository/update/branch/index.js +5 -3
  80. package/dist/workers/repository/update/branch/index.js.map +1 -1
  81. package/dist/workers/repository/updates/branch-name.js +5 -4
  82. package/dist/workers/repository/updates/branch-name.js.map +1 -1
  83. package/dist/workers/repository/updates/flatten.js +2 -2
  84. package/dist/workers/repository/updates/flatten.js.map +1 -1
  85. package/dist/workers/repository/updates/generate.js +5 -4
  86. package/dist/workers/repository/updates/generate.js.map +1 -1
  87. package/package.json +2 -2
  88. package/renovate-schema.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["datasources","packageCache.get","packageCache.set","versioning.get","memCache.get"],"sources":["../../../lib/modules/datasource/index.ts"],"sourcesContent":["import { ATTR_CODE_FUNCTION_NAME } from '@opentelemetry/semantic-conventions';\nimport { isNonEmptyArray, isString, isTruthy } from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { GlobalConfig } from '../../config/global.ts';\nimport { HOST_BLOCKED, HOST_DISABLED } from '../../constants/error-messages.ts';\nimport { instrument } from '../../instrumentation/index.ts';\nimport {\n ATTR_RENOVATE_DATASOURCE,\n ATTR_RENOVATE_PACKAGE_NAME,\n ATTR_RENOVATE_REGISTRY_URL,\n} from '../../instrumentation/types.ts';\nimport { logger } from '../../logger/index.ts';\nimport { ExternalHostError } from '../../types/errors/external-host-error.ts';\nimport { coerceArray } from '../../util/array.ts';\nimport * as memCache from '../../util/cache/memory/index.ts';\nimport * as packageCache from '../../util/cache/package/index.ts';\nimport { buildCacheKey } from '../../util/cache/package/key.ts';\nimport type { PackageCacheNamespace } from '../../util/cache/package/types.ts';\nimport { clone } from '../../util/clone.ts';\nimport { filterMap } from '../../util/filter-map.ts';\nimport { AsyncResult, Result } from '../../util/result.ts';\nimport { DatasourceCacheStats } from '../../util/stats.ts';\nimport { safeStringify } from '../../util/stringify.ts';\nimport { trimTrailingSlash } from '../../util/url.ts';\nimport * as versioning from '../versioning/index.ts';\nimport datasources from './api.ts';\nimport {\n applyConstraintsFiltering,\n applyExtractVersion,\n applyVersionCompatibility,\n filterValidVersions,\n getDatasourceFor,\n sortAndRemoveDuplicates,\n} from './common.ts';\nimport { addMetaData } from './metadata.ts';\nimport { setNpmrc } from './npm/index.ts';\nimport { resolveRegistryUrl } from './npm/npmrc.ts';\nimport type {\n DatasourceApi,\n DigestConfig,\n GetDigestInputConfig,\n GetPkgReleasesConfig,\n GetReleasesConfig,\n RegistryUrlsConfig,\n ReleaseResult,\n} from './types.ts';\n\nexport { isGetPkgReleasesConfig } from './common.ts';\nexport * from './types.ts';\n\nexport function getDatasources(): Map<string, DatasourceApi> {\n return datasources;\n}\nexport function getDatasourceList(): string[] {\n return Array.from(datasources.keys());\n}\n\n/**\n * Projects the registry-level config onto the fields a datasource\n * implementation is allowed to see.\n */\nfunction toGetReleasesConfig(\n config: GetPkgReleasesConfig,\n registryUrl = config.registryUrl,\n): GetReleasesConfig {\n const {\n customDatasources,\n datasource,\n packageName,\n currentValue,\n constraints,\n constraintsVersioning,\n constraintsFiltering,\n } = config;\n return {\n customDatasources,\n datasource,\n packageName,\n registryUrl,\n currentValue,\n constraints,\n constraintsVersioning,\n constraintsFiltering,\n };\n}\n\n// TODO: fix error Type\nfunction logError(datasource: string, packageName: string, err: any): void {\n const { statusCode, code: errCode, url } = err;\n if (statusCode === 404) {\n logger.debug({ datasource, packageName, url }, 'Datasource 404');\n } else if (statusCode === 401 || statusCode === 403) {\n logger.debug({ datasource, packageName, url }, 'Datasource unauthorized');\n } else if (errCode) {\n logger.debug(\n { datasource, packageName, url, errCode },\n 'Datasource connection error',\n );\n } else {\n logger.debug({ datasource, packageName, err }, 'Datasource unknown error');\n }\n}\n\nasync function getRegistryReleases(\n datasource: DatasourceApi,\n config: GetPkgReleasesConfig,\n registryUrl: string,\n): Promise<ReleaseResult | null> {\n const cacheNamespace: PackageCacheNamespace = `datasource-releases-${datasource.id}`;\n const cacheKey = buildCacheKey(registryUrl, config.packageName);\n\n const cacheEnabled = !!datasource.caching; // tells if `isPrivate` flag is supported in datasource result\n const cacheForced = GlobalConfig.get('cachePrivatePackages'); // tells if caching is forced via admin config\n\n if (cacheEnabled || cacheForced) {\n const cachedResult = await packageCache.get<ReleaseResult>(\n cacheNamespace,\n cacheKey,\n );\n\n if (cachedResult) {\n logger.trace({ cacheKey }, 'Returning cached datasource response');\n DatasourceCacheStats.hit(datasource.id, registryUrl, config.packageName);\n return cachedResult;\n }\n\n DatasourceCacheStats.miss(datasource.id, registryUrl, config.packageName);\n }\n\n const res = await instrument(\n 'getReleases',\n () => datasource.getReleases(toGetReleasesConfig(config, registryUrl)),\n {\n attributes: {\n [ATTR_CODE_FUNCTION_NAME]: 'getReleases',\n [ATTR_RENOVATE_DATASOURCE]: datasource.id,\n [ATTR_RENOVATE_REGISTRY_URL]: registryUrl,\n [ATTR_RENOVATE_PACKAGE_NAME]: config.packageName,\n },\n },\n );\n if (res?.releases.length) {\n res.registryUrl ??= registryUrl;\n }\n\n if (!res) {\n return null;\n }\n\n let cache = false;\n if (cacheForced) {\n cache = true;\n } else if (cacheEnabled && !res.isPrivate) {\n cache = true;\n }\n\n if (cache) {\n logger.trace({ cacheKey }, 'Caching datasource response');\n await packageCache.set(cacheNamespace, cacheKey, res, 15);\n DatasourceCacheStats.set(datasource.id, registryUrl, config.packageName);\n } else {\n DatasourceCacheStats.skip(datasource.id, registryUrl, config.packageName);\n }\n\n return res;\n}\n\nfunction firstRegistry(\n config: GetPkgReleasesConfig,\n datasource: DatasourceApi,\n registryUrls: string[],\n): Promise<ReleaseResult | null> {\n if (registryUrls.length > 1) {\n logger.warn(\n {\n datasource: datasource.id,\n packageName: config.packageName,\n registryUrls,\n },\n 'Excess registryUrls found for datasource lookup - using first configured only',\n );\n }\n const registryUrl = registryUrls[0];\n return getRegistryReleases(datasource, config, registryUrl);\n}\n\nasync function huntRegistries(\n config: GetPkgReleasesConfig,\n datasource: DatasourceApi,\n registryUrls: string[],\n): Promise<ReleaseResult | null> {\n let res: ReleaseResult | null = null;\n let caughtError: Error | undefined;\n for (const registryUrl of registryUrls) {\n try {\n res = await getRegistryReleases(datasource, config, registryUrl);\n if (res) {\n break;\n }\n } catch (err) {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n // We'll always save the last-thrown error\n caughtError = err;\n logger.trace({ err }, 'datasource hunt failure');\n }\n }\n if (res) {\n return res;\n }\n if (caughtError) {\n throw caughtError;\n }\n return null;\n}\n\nasync function mergeRegistries(\n config: GetPkgReleasesConfig,\n datasource: DatasourceApi,\n registryUrls: string[],\n): Promise<ReleaseResult | null> {\n let combinedRes: ReleaseResult | undefined;\n let lastErr: Error | undefined;\n let externalHostError: ExternalHostError | undefined;\n let singleRegistry = true;\n const releaseVersioning = versioning.get(config.versioning);\n for (const registryUrl of registryUrls) {\n try {\n // Merging must not mutate responses shared by the package cache.\n const res = clone(\n await getRegistryReleases(datasource, config, registryUrl),\n );\n if (!res) {\n continue;\n }\n\n if (!combinedRes) {\n // This is the first registry, so we can just use it and continue\n combinedRes = res;\n continue;\n }\n\n if (singleRegistry) {\n // This is the second registry\n // We need to move the registryUrl from the package level to the release level\n for (const release of coerceArray(combinedRes.releases)) {\n release.registryUrl ??= combinedRes.registryUrl;\n }\n singleRegistry = false;\n }\n\n const releases = coerceArray(res.releases);\n for (const release of releases) {\n // We have more than one registry, so we need to move the registryUrl\n // from the package level to the release level before merging\n release.registryUrl ??= res.registryUrl;\n }\n\n combinedRes.releases.push(...releases);\n\n // Merge the tags from the two results\n let tags = combinedRes.tags;\n if (tags) {\n // v8 ignore else -- needs merged registries where only one carries tags\n if (res.tags) {\n // Both results had tags, so we need to compare them\n for (const tag of ['release', 'latest']) {\n const existingTag = combinedRes?.tags?.[tag];\n const newTag = res.tags?.[tag];\n // v8 ignore else -- needs a merged registry whose tag is not a version\n if (isString(newTag) && releaseVersioning.isVersion(newTag)) {\n if (\n isString(existingTag) &&\n releaseVersioning.isVersion(existingTag)\n ) {\n // We need to compare them\n if (releaseVersioning.isGreaterThan(newTag, existingTag)) {\n // New tag is greater than the existing one\n tags[tag] = newTag;\n }\n } else {\n // Existing tag was not present or not a version\n // so we can just use the new one\n tags[tag] = newTag;\n }\n }\n }\n }\n } else {\n // Existing results had no tags, so we can just use the new ones\n tags = res.tags;\n }\n combinedRes = { ...res, ...combinedRes };\n if (tags) {\n combinedRes.tags = tags;\n }\n // Remove the registryUrl from the package level when more than one registry\n delete combinedRes.registryUrl;\n } catch (err) {\n if (err instanceof ExternalHostError) {\n // Don't abort the merge if another registry already returned releases;\n // a single rate-limited registry shouldn't discard results we have\n externalHostError = err;\n logger.debug(\n { err, registryUrl },\n 'datasource merge: external host error from registry; continuing so releases from other registries are not discarded',\n );\n continue;\n }\n\n lastErr = err;\n logger.trace({ err }, 'datasource merge failure');\n }\n }\n\n if (!combinedRes) {\n if (externalHostError) {\n throw externalHostError;\n }\n\n if (lastErr) {\n throw lastErr;\n }\n\n return null;\n }\n\n const seenVersions = new Set<string>();\n combinedRes.releases = filterMap(combinedRes.releases, (release) => {\n if (seenVersions.has(release.version)) {\n return null;\n }\n seenVersions.add(release.version);\n return release;\n });\n\n return combinedRes;\n}\n\nfunction massageRegistryUrls(registryUrls: string[]): string[] {\n return registryUrls.filter(isTruthy).map(trimTrailingSlash);\n}\n\nfunction resolveRegistryUrls(\n datasource: DatasourceApi,\n packageName: string,\n {\n defaultRegistryUrls,\n registryUrls,\n additionalRegistryUrls,\n }: RegistryUrlsConfig,\n): string[] {\n const customRegistrySupport = datasource.supportsCustomRegistry(packageName);\n const datasourceDefaultRegistryUrls =\n datasource.getDefaultRegistryUrls(packageName);\n\n if (!customRegistrySupport) {\n if (\n isNonEmptyArray(registryUrls) ||\n isNonEmptyArray(defaultRegistryUrls) ||\n isNonEmptyArray(additionalRegistryUrls)\n ) {\n logger.warn(\n {\n datasource: datasource.id,\n registryUrls,\n defaultRegistryUrls,\n additionalRegistryUrls,\n },\n 'Custom registries are not allowed for this datasource and will be ignored',\n );\n }\n return coerceArray(datasourceDefaultRegistryUrls);\n }\n const customUrls = registryUrls?.filter(isTruthy);\n if (isNonEmptyArray(customUrls)) {\n return massageRegistryUrls(customUrls);\n }\n const defaultUrls = isNonEmptyArray(defaultRegistryUrls)\n ? defaultRegistryUrls\n : datasourceDefaultRegistryUrls;\n if (!isNonEmptyArray(defaultUrls)) {\n return [];\n }\n return massageRegistryUrls([\n ...defaultUrls,\n ...coerceArray(additionalRegistryUrls),\n ]);\n}\n\nfunction applyReplacements(\n config: GetPkgReleasesConfig,\n): Pick<ReleaseResult, 'replacementName' | 'replacementVersion'> | undefined {\n if (config.replacementName && config.replacementVersion) {\n return {\n replacementName: config.replacementName,\n replacementVersion: config.replacementVersion,\n };\n }\n return undefined;\n}\n\nasync function fetchReleases(\n config: GetPkgReleasesConfig,\n): Promise<ReleaseResult | null> {\n const { datasource: datasourceName } = config;\n let registryUrlsConfig: RegistryUrlsConfig = config;\n // istanbul ignore if: need test\n if (!datasourceName || getDatasourceFor(datasourceName) === undefined) {\n logger.warn({ datasource: datasourceName }, 'Unknown datasource');\n return null;\n }\n if (datasourceName === 'npm') {\n if (isString(config.npmrc)) {\n setNpmrc(config.npmrc);\n }\n // v8 ignore else -- npm lookups here never arrive with explicit registryUrls\n if (!isNonEmptyArray(config.registryUrls)) {\n registryUrlsConfig = {\n ...config,\n registryUrls: [resolveRegistryUrl(config.packageName)],\n };\n }\n }\n const datasource = getDatasourceFor(datasourceName);\n // istanbul ignore if: needs test\n if (!datasource) {\n logger.warn({ datasource: datasourceName }, 'Unknown datasource');\n return null;\n }\n const registryUrls = resolveRegistryUrls(\n datasource,\n config.packageName,\n registryUrlsConfig,\n );\n let dep: ReleaseResult | null = null;\n const registryStrategy =\n config.registryStrategy ?? datasource.registryStrategy;\n try {\n if (isNonEmptyArray(registryUrls)) {\n if (registryStrategy === 'first') {\n dep = await firstRegistry(config, datasource, registryUrls);\n } else if (registryStrategy === 'hunt') {\n dep = await huntRegistries(config, datasource, registryUrls);\n } else {\n // `merge` is the only remaining strategy\n dep = await mergeRegistries(config, datasource, registryUrls);\n }\n } else {\n dep = await instrument(\n 'getReleases',\n () => datasource.getReleases(toGetReleasesConfig(config)),\n {\n attributes: {\n [ATTR_CODE_FUNCTION_NAME]: 'getReleases',\n [ATTR_RENOVATE_DATASOURCE]: datasource.id,\n [ATTR_RENOVATE_REGISTRY_URL]: config.registryUrl ?? '',\n [ATTR_RENOVATE_PACKAGE_NAME]: config.packageName,\n },\n },\n );\n }\n } catch (err) {\n if (\n [HOST_BLOCKED, HOST_DISABLED].includes(err.message) ||\n [HOST_BLOCKED, HOST_DISABLED].includes(err.err?.message)\n ) {\n return null;\n }\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logError(datasource.id, config.packageName, err);\n }\n if (!dep || dequal(dep, { releases: [] })) {\n return null;\n }\n addMetaData(dep, datasourceName, config.packageName);\n dep = { ...dep, ...applyReplacements(config) };\n return dep;\n}\n\nfunction fetchCachedReleases(\n config: GetPkgReleasesConfig,\n): Promise<ReleaseResult | null> {\n const { datasource, packageName, registryUrls } = config;\n const cacheKey = buildCacheKey(\n 'datasource-mem',\n 'releases',\n datasource,\n packageName,\n config.registryStrategy,\n safeStringify([\n registryUrls,\n config.defaultRegistryUrls,\n config.additionalRegistryUrls,\n ]),\n );\n // By returning a Promise and reusing it, we should only fetch each package at most once\n const cachedResult = memCache.get<Promise<ReleaseResult | null>>(cacheKey);\n // istanbul ignore if\n if (cachedResult !== undefined) {\n return cachedResult;\n }\n const promisedRes = fetchReleases(config);\n memCache.set(cacheKey, promisedRes);\n return promisedRes;\n}\n\nexport function getRawPkgReleases(\n config: GetPkgReleasesConfig,\n): AsyncResult<\n ReleaseResult,\n Error | 'no-datasource' | 'no-package-name' | 'no-result'\n> {\n if (!config.datasource) {\n logger.warn('No datasource found');\n return AsyncResult.err('no-datasource');\n }\n\n const packageName = config.packageName;\n if (!packageName) {\n logger.error({ config }, 'Datasource getReleases without packageName');\n return AsyncResult.err('no-package-name');\n }\n\n return Result.wrapNullable(fetchCachedReleases(config), 'no-result' as const)\n .catch((e) => {\n if (e instanceof ExternalHostError) {\n e.hostType = config.datasource;\n e.packageName = packageName;\n }\n return Result.err(e);\n })\n .transform(clone);\n}\n\nexport function applyDatasourceFilters(\n releaseResult: ReleaseResult,\n config: GetPkgReleasesConfig,\n): ReleaseResult {\n let res = releaseResult;\n res = applyExtractVersion(res, config.extractVersion);\n res = applyVersionCompatibility(\n res,\n config.versionCompatibility,\n config.currentCompatibility,\n );\n res = filterValidVersions(res, config);\n res = sortAndRemoveDuplicates(res, config);\n res = applyConstraintsFiltering(res, config);\n return res;\n}\n\nexport async function getPkgReleases(\n config: GetPkgReleasesConfig,\n): Promise<ReleaseResult | null> {\n const { val = null, err } = await getRawPkgReleases(config)\n .transform((res) => applyDatasourceFilters(res, config))\n .unwrap();\n\n if (err instanceof Error) {\n throw err;\n }\n\n return val;\n}\n\nexport function supportsDigests(datasource: string | undefined): boolean {\n const ds = !!datasource && getDatasourceFor(datasource);\n return !!ds && 'getDigest' in ds;\n}\n\nfunction getDigestConfig(\n datasource: DatasourceApi,\n config: GetDigestInputConfig,\n): DigestConfig {\n const { lookupName, currentValue, currentDigest } = config;\n const packageName = config.replacementName ?? config.packageName;\n // Prefer registryUrl from getReleases() lookup if it has been passed\n const registryUrl =\n config.registryUrl ??\n resolveRegistryUrls(datasource, packageName, config)[0];\n return { lookupName, packageName, registryUrl, currentValue, currentDigest };\n}\n\nexport function getDigest(\n config: GetDigestInputConfig,\n value?: string,\n): Promise<string | null> {\n const datasource = getDatasourceFor(config.datasource);\n // istanbul ignore if: need test\n if (!datasource || !('getDigest' in datasource)) {\n return Promise.resolve(null);\n }\n const digestConfig = getDigestConfig(datasource, config);\n return datasource.getDigest!(digestConfig, value);\n}\n\nexport function getDefaultConfig(\n datasource: string,\n): Promise<Record<string, unknown>> {\n const loadedDatasource = getDatasourceFor(datasource);\n return Promise.resolve<Record<string, unknown>>(\n loadedDatasource?.defaultConfig ?? Object.create({}),\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["datasources","packageCache.get","packageCache.set","versioning.get","memCache.get"],"sources":["../../../lib/modules/datasource/index.ts"],"sourcesContent":["import { ATTR_CODE_FUNCTION_NAME } from '@opentelemetry/semantic-conventions';\nimport { isNonEmptyArray, isString, isTruthy } from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { GlobalConfig } from '../../config/global.ts';\nimport { HOST_BLOCKED, HOST_DISABLED } from '../../constants/error-messages.ts';\nimport { instrument } from '../../instrumentation/index.ts';\nimport {\n ATTR_RENOVATE_DATASOURCE,\n ATTR_RENOVATE_PACKAGE_NAME,\n ATTR_RENOVATE_REGISTRY_URL,\n} from '../../instrumentation/types.ts';\nimport { logger } from '../../logger/index.ts';\nimport { ExternalHostError } from '../../types/errors/external-host-error.ts';\nimport { coerceArray } from '../../util/array.ts';\nimport * as memCache from '../../util/cache/memory/index.ts';\nimport * as packageCache from '../../util/cache/package/index.ts';\nimport { buildCacheKey } from '../../util/cache/package/key.ts';\nimport type { PackageCacheNamespace } from '../../util/cache/package/types.ts';\nimport { clone } from '../../util/clone.ts';\nimport { filterMap } from '../../util/filter-map.ts';\nimport { detachUrlCredentials } from '../../util/host-rules.ts';\nimport { AsyncResult, Result } from '../../util/result.ts';\nimport { DatasourceCacheStats } from '../../util/stats.ts';\nimport { safeStringify } from '../../util/stringify.ts';\nimport { trimTrailingSlash, withoutUrlCredentials } from '../../util/url.ts';\nimport * as versioning from '../versioning/index.ts';\nimport datasources from './api.ts';\nimport {\n applyConstraintsFiltering,\n applyExtractVersion,\n applyVersionCompatibility,\n filterValidVersions,\n getDatasourceFor,\n getDatasourceHostType,\n sortAndRemoveDuplicates,\n} from './common.ts';\nimport { addMetaData, stripMetadataUrlCredentials } from './metadata.ts';\nimport { setNpmrc } from './npm/index.ts';\nimport { resolveRegistryUrl } from './npm/npmrc.ts';\nimport type {\n DatasourceApi,\n DigestConfig,\n GetDigestInputConfig,\n GetPkgReleasesConfig,\n GetReleasesConfig,\n RegistryUrlsConfig,\n ReleaseResult,\n} from './types.ts';\n\nexport { isGetPkgReleasesConfig } from './common.ts';\nexport * from './types.ts';\n\nexport function getDatasources(): Map<string, DatasourceApi> {\n return datasources;\n}\nexport function getDatasourceList(): string[] {\n return Array.from(datasources.keys());\n}\n\n/**\n * Projects the registry-level config onto the fields a datasource\n * implementation is allowed to see.\n */\nfunction toGetReleasesConfig(\n config: GetPkgReleasesConfig,\n registryUrl = config.registryUrl,\n): GetReleasesConfig {\n const {\n customDatasources,\n datasource,\n packageName,\n currentValue,\n constraints,\n constraintsVersioning,\n constraintsFiltering,\n } = config;\n return {\n customDatasources,\n datasource,\n packageName,\n registryUrl,\n currentValue,\n constraints,\n constraintsVersioning,\n constraintsFiltering,\n };\n}\n\n// TODO: fix error Type\nfunction logError(datasource: string, packageName: string, err: any): void {\n const { statusCode, code: errCode, url } = err;\n if (statusCode === 404) {\n logger.debug({ datasource, packageName, url }, 'Datasource 404');\n } else if (statusCode === 401 || statusCode === 403) {\n logger.debug({ datasource, packageName, url }, 'Datasource unauthorized');\n } else if (errCode) {\n logger.debug(\n { datasource, packageName, url, errCode },\n 'Datasource connection error',\n );\n } else {\n logger.debug({ datasource, packageName, err }, 'Datasource unknown error');\n }\n}\n\nasync function getRegistryReleases(\n datasource: DatasourceApi,\n config: GetPkgReleasesConfig,\n registryUrl: string,\n): Promise<ReleaseResult | null> {\n const cacheNamespace: PackageCacheNamespace = `datasource-releases-${datasource.id}`;\n const cacheKey = buildCacheKey(registryUrl, config.packageName);\n\n const cacheEnabled = !!datasource.caching; // tells if `isPrivate` flag is supported in datasource result\n const cacheForced = GlobalConfig.get('cachePrivatePackages'); // tells if caching is forced via admin config\n\n if (cacheEnabled || cacheForced) {\n const cachedResult = await packageCache.get<ReleaseResult>(\n cacheNamespace,\n cacheKey,\n );\n\n if (cachedResult) {\n logger.trace({ cacheKey }, 'Returning cached datasource response');\n DatasourceCacheStats.hit(datasource.id, registryUrl, config.packageName);\n return cachedResult;\n }\n\n DatasourceCacheStats.miss(datasource.id, registryUrl, config.packageName);\n }\n\n const res = await instrument(\n 'getReleases',\n () => datasource.getReleases(toGetReleasesConfig(config, registryUrl)),\n {\n attributes: {\n [ATTR_CODE_FUNCTION_NAME]: 'getReleases',\n [ATTR_RENOVATE_DATASOURCE]: datasource.id,\n [ATTR_RENOVATE_REGISTRY_URL]: registryUrl,\n [ATTR_RENOVATE_PACKAGE_NAME]: config.packageName,\n },\n },\n );\n if (res?.releases.length) {\n res.registryUrl ??= registryUrl;\n }\n\n if (!res) {\n return null;\n }\n\n // for the cached and the returned result alike\n stripMetadataUrlCredentials(res);\n\n let cache = false;\n if (cacheForced) {\n cache = true;\n } else if (cacheEnabled && !res.isPrivate) {\n cache = true;\n }\n\n if (cache) {\n logger.trace({ cacheKey }, 'Caching datasource response');\n await packageCache.set(cacheNamespace, cacheKey, res, 15);\n DatasourceCacheStats.set(datasource.id, registryUrl, config.packageName);\n } else {\n DatasourceCacheStats.skip(datasource.id, registryUrl, config.packageName);\n }\n\n return res;\n}\n\nfunction firstRegistry(\n config: GetPkgReleasesConfig,\n datasource: DatasourceApi,\n registryUrls: string[],\n): Promise<ReleaseResult | null> {\n if (registryUrls.length > 1) {\n logger.warn(\n {\n datasource: datasource.id,\n packageName: config.packageName,\n registryUrls,\n },\n 'Excess registryUrls found for datasource lookup - using first configured only',\n );\n }\n const registryUrl = registryUrls[0];\n return getRegistryReleases(datasource, config, registryUrl);\n}\n\nasync function huntRegistries(\n config: GetPkgReleasesConfig,\n datasource: DatasourceApi,\n registryUrls: string[],\n): Promise<ReleaseResult | null> {\n let res: ReleaseResult | null = null;\n let caughtError: Error | undefined;\n for (const registryUrl of registryUrls) {\n try {\n res = await getRegistryReleases(datasource, config, registryUrl);\n if (res) {\n break;\n }\n } catch (err) {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n // We'll always save the last-thrown error\n caughtError = err;\n logger.trace({ err }, 'datasource hunt failure');\n }\n }\n if (res) {\n return res;\n }\n if (caughtError) {\n throw caughtError;\n }\n return null;\n}\n\nasync function mergeRegistries(\n config: GetPkgReleasesConfig,\n datasource: DatasourceApi,\n registryUrls: string[],\n): Promise<ReleaseResult | null> {\n let combinedRes: ReleaseResult | undefined;\n let lastErr: Error | undefined;\n let externalHostError: ExternalHostError | undefined;\n let singleRegistry = true;\n const releaseVersioning = versioning.get(config.versioning);\n for (const registryUrl of registryUrls) {\n try {\n // Merging must not mutate responses shared by the package cache.\n const res = clone(\n await getRegistryReleases(datasource, config, registryUrl),\n );\n if (!res) {\n continue;\n }\n\n if (!combinedRes) {\n // This is the first registry, so we can just use it and continue\n combinedRes = res;\n continue;\n }\n\n if (singleRegistry) {\n // This is the second registry\n // We need to move the registryUrl from the package level to the release level\n for (const release of coerceArray(combinedRes.releases)) {\n release.registryUrl ??= combinedRes.registryUrl;\n }\n singleRegistry = false;\n }\n\n const releases = coerceArray(res.releases);\n for (const release of releases) {\n // We have more than one registry, so we need to move the registryUrl\n // from the package level to the release level before merging\n release.registryUrl ??= res.registryUrl;\n }\n\n combinedRes.releases.push(...releases);\n\n // Merge the tags from the two results\n let tags = combinedRes.tags;\n if (tags) {\n // v8 ignore else -- needs merged registries where only one carries tags\n if (res.tags) {\n // Both results had tags, so we need to compare them\n for (const tag of ['release', 'latest']) {\n const existingTag = combinedRes?.tags?.[tag];\n const newTag = res.tags?.[tag];\n // v8 ignore else -- needs a merged registry whose tag is not a version\n if (isString(newTag) && releaseVersioning.isVersion(newTag)) {\n if (\n isString(existingTag) &&\n releaseVersioning.isVersion(existingTag)\n ) {\n // We need to compare them\n if (releaseVersioning.isGreaterThan(newTag, existingTag)) {\n // New tag is greater than the existing one\n tags[tag] = newTag;\n }\n } else {\n // Existing tag was not present or not a version\n // so we can just use the new one\n tags[tag] = newTag;\n }\n }\n }\n }\n } else {\n // Existing results had no tags, so we can just use the new ones\n tags = res.tags;\n }\n combinedRes = { ...res, ...combinedRes };\n if (tags) {\n combinedRes.tags = tags;\n }\n // Remove the registryUrl from the package level when more than one registry\n delete combinedRes.registryUrl;\n } catch (err) {\n if (err instanceof ExternalHostError) {\n // Don't abort the merge if another registry already returned releases;\n // a single rate-limited registry shouldn't discard results we have\n externalHostError = err;\n logger.debug(\n { err, registryUrl },\n 'datasource merge: external host error from registry; continuing so releases from other registries are not discarded',\n );\n continue;\n }\n\n lastErr = err;\n logger.trace({ err }, 'datasource merge failure');\n }\n }\n\n if (!combinedRes) {\n if (externalHostError) {\n throw externalHostError;\n }\n\n if (lastErr) {\n throw lastErr;\n }\n\n return null;\n }\n\n const seenVersions = new Set<string>();\n combinedRes.releases = filterMap(combinedRes.releases, (release) => {\n if (seenVersions.has(release.version)) {\n return null;\n }\n seenVersions.add(release.version);\n return release;\n });\n\n return combinedRes;\n}\n\nfunction massageRegistryUrls(\n datasource: DatasourceApi,\n registryUrls: string[],\n): string[] {\n const hostTypes = [getDatasourceHostType(datasource.id)].filter(isTruthy);\n return (\n registryUrls\n .filter(isTruthy)\n // the custom datasource detaches the credentials of a URL template from the URL it compiles, which is the one it requests\n .map((url) =>\n isCustomUrlTemplate(hostTypes, url)\n ? url\n : detachUrlCredentials(url, hostTypes),\n )\n .map(trimTrailingSlash)\n );\n}\n\n/**\n * Whether `url` requested with `hostTypes` is a URL template of the custom datasource, such as `https://host/{{packageName}}/versions.json`.\n */\nfunction isCustomUrlTemplate(hostTypes: string[], url: string): boolean {\n return hostTypes.includes('custom') && url.includes('{{');\n}\n\nfunction resolveRegistryUrls(\n datasource: DatasourceApi,\n packageName: string,\n {\n defaultRegistryUrls,\n registryUrls,\n additionalRegistryUrls,\n }: RegistryUrlsConfig,\n): string[] {\n const customRegistrySupport = datasource.supportsCustomRegistry(packageName);\n const datasourceDefaultRegistryUrls =\n datasource.getDefaultRegistryUrls(packageName);\n\n if (!customRegistrySupport) {\n if (\n isNonEmptyArray(registryUrls) ||\n isNonEmptyArray(defaultRegistryUrls) ||\n isNonEmptyArray(additionalRegistryUrls)\n ) {\n // the URLs may carry credentials, which are not logged\n logger.warn(\n {\n datasource: datasource.id,\n registryUrls: registryUrls\n ?.filter(isTruthy)\n .map(withoutUrlCredentials),\n defaultRegistryUrls: defaultRegistryUrls\n ?.filter(isTruthy)\n .map(withoutUrlCredentials),\n additionalRegistryUrls: additionalRegistryUrls\n ?.filter(isTruthy)\n .map(withoutUrlCredentials),\n },\n 'Custom registries are not allowed for this datasource and will be ignored',\n );\n }\n return coerceArray(datasourceDefaultRegistryUrls);\n }\n const customUrls = registryUrls?.filter(isTruthy);\n if (isNonEmptyArray(customUrls)) {\n return massageRegistryUrls(datasource, customUrls);\n }\n const defaultUrls = isNonEmptyArray(defaultRegistryUrls)\n ? defaultRegistryUrls\n : datasourceDefaultRegistryUrls;\n if (!isNonEmptyArray(defaultUrls)) {\n return [];\n }\n return massageRegistryUrls(datasource, [\n ...defaultUrls,\n ...coerceArray(additionalRegistryUrls),\n ]);\n}\n\nfunction applyReplacements(\n config: GetPkgReleasesConfig,\n): Pick<ReleaseResult, 'replacementName' | 'replacementVersion'> | undefined {\n if (config.replacementName && config.replacementVersion) {\n return {\n replacementName: config.replacementName,\n replacementVersion: config.replacementVersion,\n };\n }\n return undefined;\n}\n\nasync function fetchReleases(\n config: GetPkgReleasesConfig,\n): Promise<ReleaseResult | null> {\n const { datasource: datasourceName } = config;\n let registryUrlsConfig: RegistryUrlsConfig = config;\n // istanbul ignore if: need test\n if (!datasourceName || getDatasourceFor(datasourceName) === undefined) {\n logger.warn({ datasource: datasourceName }, 'Unknown datasource');\n return null;\n }\n if (datasourceName === 'npm') {\n if (isString(config.npmrc)) {\n setNpmrc(config.npmrc);\n }\n // v8 ignore else -- npm lookups here never arrive with explicit registryUrls\n if (!isNonEmptyArray(config.registryUrls)) {\n registryUrlsConfig = {\n ...config,\n registryUrls: [resolveRegistryUrl(config.packageName)],\n };\n }\n }\n const datasource = getDatasourceFor(datasourceName);\n // istanbul ignore if: needs test\n if (!datasource) {\n logger.warn({ datasource: datasourceName }, 'Unknown datasource');\n return null;\n }\n const registryUrls = resolveRegistryUrls(\n datasource,\n config.packageName,\n registryUrlsConfig,\n );\n let dep: ReleaseResult | null = null;\n const registryStrategy =\n config.registryStrategy ?? datasource.registryStrategy;\n try {\n if (isNonEmptyArray(registryUrls)) {\n if (registryStrategy === 'first') {\n dep = await firstRegistry(config, datasource, registryUrls);\n } else if (registryStrategy === 'hunt') {\n dep = await huntRegistries(config, datasource, registryUrls);\n } else {\n // `merge` is the only remaining strategy\n dep = await mergeRegistries(config, datasource, registryUrls);\n }\n } else {\n dep = await instrument(\n 'getReleases',\n () => datasource.getReleases(toGetReleasesConfig(config)),\n {\n attributes: {\n [ATTR_CODE_FUNCTION_NAME]: 'getReleases',\n [ATTR_RENOVATE_DATASOURCE]: datasource.id,\n [ATTR_RENOVATE_REGISTRY_URL]: config.registryUrl ?? '',\n [ATTR_RENOVATE_PACKAGE_NAME]: config.packageName,\n },\n },\n );\n }\n } catch (err) {\n if (\n [HOST_BLOCKED, HOST_DISABLED].includes(err.message) ||\n [HOST_BLOCKED, HOST_DISABLED].includes(err.err?.message)\n ) {\n return null;\n }\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logError(datasource.id, config.packageName, err);\n }\n if (!dep || dequal(dep, { releases: [] })) {\n return null;\n }\n addMetaData(dep, datasourceName, config.packageName);\n // also for the results of a lookup without registry URL, which do not pass `getRegistryReleases()`\n stripMetadataUrlCredentials(dep);\n dep = { ...dep, ...applyReplacements(config) };\n return dep;\n}\n\nfunction fetchCachedReleases(\n config: GetPkgReleasesConfig,\n): Promise<ReleaseResult | null> {\n const { datasource, packageName, registryUrls } = config;\n const cacheKey = buildCacheKey(\n 'datasource-mem',\n 'releases',\n datasource,\n packageName,\n config.registryStrategy,\n safeStringify([\n registryUrls,\n config.defaultRegistryUrls,\n config.additionalRegistryUrls,\n ]),\n );\n // By returning a Promise and reusing it, we should only fetch each package at most once\n const cachedResult = memCache.get<Promise<ReleaseResult | null>>(cacheKey);\n // istanbul ignore if\n if (cachedResult !== undefined) {\n return cachedResult;\n }\n const promisedRes = fetchReleases(config);\n memCache.set(cacheKey, promisedRes);\n return promisedRes;\n}\n\nexport function getRawPkgReleases(\n config: GetPkgReleasesConfig,\n): AsyncResult<\n ReleaseResult,\n Error | 'no-datasource' | 'no-package-name' | 'no-result'\n> {\n if (!config.datasource) {\n logger.warn('No datasource found');\n return AsyncResult.err('no-datasource');\n }\n\n const packageName = config.packageName;\n if (!packageName) {\n logger.error({ config }, 'Datasource getReleases without packageName');\n return AsyncResult.err('no-package-name');\n }\n\n return Result.wrapNullable(fetchCachedReleases(config), 'no-result' as const)\n .catch((e) => {\n if (e instanceof ExternalHostError) {\n e.hostType = config.datasource;\n e.packageName = packageName;\n }\n return Result.err(e);\n })\n .transform(clone);\n}\n\nexport function applyDatasourceFilters(\n releaseResult: ReleaseResult,\n config: GetPkgReleasesConfig,\n): ReleaseResult {\n let res = releaseResult;\n res = applyExtractVersion(res, config.extractVersion);\n res = applyVersionCompatibility(\n res,\n config.versionCompatibility,\n config.currentCompatibility,\n );\n res = filterValidVersions(res, config);\n res = sortAndRemoveDuplicates(res, config);\n res = applyConstraintsFiltering(res, config);\n return res;\n}\n\nexport async function getPkgReleases(\n config: GetPkgReleasesConfig,\n): Promise<ReleaseResult | null> {\n const { val = null, err } = await getRawPkgReleases(config)\n .transform((res) => applyDatasourceFilters(res, config))\n .unwrap();\n\n if (err instanceof Error) {\n throw err;\n }\n\n return val;\n}\n\nexport function supportsDigests(datasource: string | undefined): boolean {\n const ds = !!datasource && getDatasourceFor(datasource);\n return !!ds && 'getDigest' in ds;\n}\n\nfunction getDigestConfig(\n datasource: DatasourceApi,\n config: GetDigestInputConfig,\n): DigestConfig {\n const { lookupName, currentValue, currentDigest } = config;\n const packageName = config.replacementName ?? config.packageName;\n // Prefer registryUrl from getReleases() lookup if it has been passed\n const registryUrl =\n config.registryUrl ??\n resolveRegistryUrls(datasource, packageName, config)[0];\n return { lookupName, packageName, registryUrl, currentValue, currentDigest };\n}\n\nexport function getDigest(\n config: GetDigestInputConfig,\n value?: string,\n): Promise<string | null> {\n const datasource = getDatasourceFor(config.datasource);\n // istanbul ignore if: need test\n if (!datasource || !('getDigest' in datasource)) {\n return Promise.resolve(null);\n }\n const digestConfig = getDigestConfig(datasource, config);\n return datasource.getDigest!(digestConfig, value);\n}\n\nexport function getDefaultConfig(\n datasource: string,\n): Promise<Record<string, unknown>> {\n const loadedDatasource = getDatasourceFor(datasource);\n return Promise.resolve<Record<string, unknown>>(\n loadedDatasource?.defaultConfig ?? Object.create({}),\n );\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { regEx } from "../../util/regex.js";
2
- import { isHttpUrl, parseUrl, trimTrailingSlash } from "../../util/url.js";
2
+ import { isHttpUrl, parseUrl, trimTrailingSlash, withoutUrlCredentials } from "../../util/url.js";
3
3
  import { hosts } from "../../util/host-rules.js";
4
4
  import { detectPlatform } from "../../util/common.js";
5
5
  import { asTimestamp } from "../../util/timestamp.js";
@@ -36,6 +36,38 @@ function massageTimestamps(dep) {
36
36
  if (releaseTimestamp) release.releaseTimestamp = releaseTimestamp;
37
37
  }
38
38
  }
39
+ /**
40
+ * The URLs of a {@link ReleaseResult} describing the package.
41
+ */
42
+ const metadataUrlKeys = [
43
+ "homepage",
44
+ "sourceUrl",
45
+ "changelogUrl",
46
+ "dependencyUrl"
47
+ ];
48
+ /**
49
+ * The URLs of a {@link Release}.
50
+ */
51
+ const releaseUrlKeys = [
52
+ "changelogUrl",
53
+ "checksumUrl",
54
+ "downloadUrl",
55
+ "registryUrl",
56
+ "sourceUrl"
57
+ ];
58
+ /**
59
+ * Removes the URL credentials from the package URLs of `dep` and from the URLs of its releases.
60
+ */
61
+ function stripMetadataUrlCredentials(dep) {
62
+ for (const urlKey of metadataUrlKeys) {
63
+ const urlVal = dep[urlKey];
64
+ if (isString(urlVal)) dep[urlKey] = withoutUrlCredentials(urlVal);
65
+ }
66
+ for (const release of dep.releases) for (const urlKey of releaseUrlKeys) {
67
+ const urlVal = release[urlKey];
68
+ if (isString(urlVal)) release[urlKey] = withoutUrlCredentials(urlVal);
69
+ }
70
+ }
39
71
  function addMetaData(dep, datasource, packageName) {
40
72
  massageTimestamps(dep);
41
73
  const packageNameLowercase = packageName.toLowerCase();
@@ -70,14 +102,9 @@ function addMetaData(dep, datasource, packageName) {
70
102
  }
71
103
  }
72
104
  if (shouldDeleteHomepage(dep.sourceUrl, dep.homepage)) delete dep.homepage;
73
- for (const urlKey of [
74
- "homepage",
75
- "sourceUrl",
76
- "changelogUrl",
77
- "dependencyUrl"
78
- ]) {
105
+ for (const urlKey of metadataUrlKeys) {
79
106
  const urlVal = dep[urlKey];
80
- if (isString(urlVal) && isHttpUrl(urlVal.trim())) dep[urlKey] = urlVal.trim();
107
+ if (isString(urlVal) && isHttpUrl(urlVal.trim())) dep[urlKey] = withoutUrlCredentials(urlVal.trim());
81
108
  else delete dep[urlKey];
82
109
  }
83
110
  }
@@ -101,6 +128,6 @@ function shouldDeleteHomepage(sourceUrl, homepage) {
101
128
  return massagedSourceUrl === homepage;
102
129
  }
103
130
  //#endregion
104
- export { addMetaData, massageGithubUrl, massageGitlabUrl, massageUrl, shouldDeleteHomepage };
131
+ export { addMetaData, massageGithubUrl, massageGitlabUrl, massageUrl, shouldDeleteHomepage, stripMetadataUrlCredentials };
105
132
 
106
133
  //# sourceMappingURL=metadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","names":[],"sources":["../../../lib/modules/datasource/metadata.ts"],"sourcesContent":["import {\n isEmptyString,\n isNullOrUndefined,\n isString,\n isUndefined,\n} from '@sindresorhus/is';\nimport parse from 'github-url-from-git';\nimport { detectPlatform } from '../../util/common.ts';\nimport { parseGitUrl } from '../../util/git/url.ts';\nimport * as hostRules from '../../util/host-rules.ts';\nimport { regEx } from '../../util/regex.ts';\nimport { asTimestamp } from '../../util/timestamp.ts';\nimport { isHttpUrl, parseUrl, trimTrailingSlash } from '../../util/url.ts';\nimport { manualChangelogUrls, manualSourceUrls } from './metadata-manual.ts';\nimport type { ReleaseResult } from './types.ts';\n\nconst githubPages = regEx('^https://([^.]+).github.com/([^/]+)$');\nconst gitPlusPrefix = regEx('^git\\\\+');\nconst gitPrefix = regEx('^git:/?/?');\n\nexport function massageUrl(sourceUrl: string): string {\n // Replace git@ sourceUrl with https so hostname can be parsed\n const massagedUrl = massageGitPrefixes(sourceUrl);\n\n // Check if URL is valid\n const parsedUrl = parseUrl(massagedUrl);\n if (!parsedUrl) {\n return '';\n }\n\n if (detectPlatform(massagedUrl) === 'gitlab') {\n return massageGitlabUrl(sourceUrl);\n }\n return massageGithubUrl(sourceUrl);\n}\n\nexport function massageGithubUrl(url: string): string {\n const massagedUrl = massageGitPrefixes(url);\n\n return massagedUrl\n .replace('http:', 'https:')\n .replace('http+git:', 'https:')\n .replace('https+git:', 'https:')\n .replace('ssh://git@', 'https://')\n .replace(gitPrefix, 'https://')\n .replace(githubPages, 'https://github.com/$1/$2')\n .replace('www.github.com', 'github.com')\n .split('/')\n .slice(0, 5)\n .join('/');\n}\n\nexport function massageGitlabUrl(url: string): string {\n const massagedUrl = massageGitPrefixes(url);\n\n return massagedUrl\n .replace('http:', 'https:')\n .replace('ssh://git@', 'https://')\n .replace(gitPrefix, 'https://')\n .replace(regEx(/\\/tree\\/.*$/i), '')\n .replace(regEx(/\\/$/i), '')\n .replace(regEx(/\\.git$/i), '');\n}\n\nfunction massageGitPrefixes(url: string): string {\n let massagedUrl = url.replace(gitPlusPrefix, '');\n\n if (massagedUrl.startsWith('git@')) {\n massagedUrl = massagedUrl.replace(':', '/').replace('git@', 'https://');\n }\n\n return massagedUrl;\n}\n\nfunction massageTimestamps(dep: ReleaseResult): void {\n for (const release of dep.releases || []) {\n let { releaseTimestamp } = release;\n delete release.releaseTimestamp;\n releaseTimestamp = asTimestamp(releaseTimestamp);\n if (releaseTimestamp) {\n release.releaseTimestamp = releaseTimestamp;\n }\n }\n}\n\nexport function addMetaData(\n dep: ReleaseResult,\n datasource: string,\n packageName: string,\n): void {\n massageTimestamps(dep);\n\n const packageNameLowercase = packageName.toLowerCase();\n const manualChangelogUrl =\n manualChangelogUrls[datasource]?.[packageNameLowercase];\n if (manualChangelogUrl) {\n dep.changelogUrl = manualChangelogUrl;\n }\n\n const manualSourceUrl = manualSourceUrls[datasource]?.[packageNameLowercase];\n if (manualSourceUrl) {\n dep.sourceUrl = manualSourceUrl;\n }\n\n if (dep.sourceUrl && !dep.sourceDirectory) {\n try {\n const parsed = parseGitUrl(dep.sourceUrl);\n if (parsed.filepathtype === 'tree' && parsed.filepath !== '') {\n dep.sourceUrl = parsed.toString();\n dep.sourceDirectory = parsed.filepath;\n }\n } catch {\n // ignore invalid urls\n }\n }\n\n if (\n !dep.sourceUrl &&\n dep.changelogUrl &&\n detectPlatform(dep.changelogUrl) === 'github'\n ) {\n dep.sourceUrl = dep.changelogUrl;\n }\n\n if (!dep.sourceUrl && dep.homepage) {\n const platform = detectPlatform(dep.homepage);\n if (platform === 'github' || platform === 'gitlab') {\n dep.sourceUrl = dep.homepage;\n }\n }\n const extraBaseUrls = [];\n // istanbul ignore next\n hostRules.hosts({ hostType: 'github' }).forEach((host) => {\n extraBaseUrls.push(host, `gist.${host}`);\n });\n extraBaseUrls.push('gitlab.com');\n if (dep.sourceUrl) {\n // try massaging it\n const massagedUrl = massageUrl(dep.sourceUrl);\n if (isEmptyString(massagedUrl)) {\n delete dep.sourceUrl;\n } else {\n // parse from github-url-from-git only supports Github URLs as its name implies\n dep.sourceUrl =\n parse(massagedUrl, {\n extraBaseUrls,\n }) || dep.sourceUrl;\n // prefer massaged URL to source URL if the latter does not start with http:// or https://\n // (e.g. git@somehost.com) and the detected platform is gitlab.\n // this allows to retrieve changelogs from git hosts other than Github\n if (\n !isHttpUrl(dep.sourceUrl) &&\n detectPlatform(massagedUrl) === 'gitlab'\n ) {\n dep.sourceUrl = massagedUrl;\n }\n }\n }\n if (shouldDeleteHomepage(dep.sourceUrl, dep.homepage)) {\n delete dep.homepage;\n }\n // Clean up any empty urls\n const urlKeys: (keyof ReleaseResult)[] = [\n 'homepage',\n 'sourceUrl',\n 'changelogUrl',\n 'dependencyUrl',\n ];\n for (const urlKey of urlKeys) {\n const urlVal = dep[urlKey];\n if (isString(urlVal) && isHttpUrl(urlVal.trim())) {\n dep[urlKey] = urlVal.trim() as never;\n } else {\n delete dep[urlKey];\n }\n }\n}\n\n/**\n * Returns true if\n * 1. it's a github or gitlab url and not a path within the repo.\n * 2. it's equal to sourceURl\n * @param sourceUrl\n * @param homepage\n */\nexport function shouldDeleteHomepage(\n sourceUrl: string | null | undefined,\n homepage: string | undefined,\n): boolean {\n if (isNullOrUndefined(sourceUrl) || isUndefined(homepage)) {\n return false;\n }\n const massagedSourceUrl = massageUrl(sourceUrl);\n const platform = detectPlatform(homepage);\n if (platform === 'github' || platform === 'gitlab') {\n const sourceUrlParsed = parseUrl(massagedSourceUrl);\n if (isNullOrUndefined(sourceUrlParsed)) {\n return false;\n }\n const homepageParsed = parseUrl(homepage);\n return (\n homepageParsed !== null &&\n trimTrailingSlash(homepageParsed.pathname) ===\n trimTrailingSlash(sourceUrlParsed.pathname)\n );\n }\n return massagedSourceUrl === homepage;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"metadata.js","names":[],"sources":["../../../lib/modules/datasource/metadata.ts"],"sourcesContent":["import {\n isEmptyString,\n isNullOrUndefined,\n isString,\n isUndefined,\n} from '@sindresorhus/is';\nimport parse from 'github-url-from-git';\nimport { detectPlatform } from '../../util/common.ts';\nimport { parseGitUrl } from '../../util/git/url.ts';\nimport * as hostRules from '../../util/host-rules.ts';\nimport { regEx } from '../../util/regex.ts';\nimport { asTimestamp } from '../../util/timestamp.ts';\nimport {\n isHttpUrl,\n parseUrl,\n trimTrailingSlash,\n withoutUrlCredentials,\n} from '../../util/url.ts';\nimport { manualChangelogUrls, manualSourceUrls } from './metadata-manual.ts';\nimport type { Release, ReleaseResult } from './types.ts';\n\nconst githubPages = regEx('^https://([^.]+).github.com/([^/]+)$');\nconst gitPlusPrefix = regEx('^git\\\\+');\nconst gitPrefix = regEx('^git:/?/?');\n\nexport function massageUrl(sourceUrl: string): string {\n // Replace git@ sourceUrl with https so hostname can be parsed\n const massagedUrl = massageGitPrefixes(sourceUrl);\n\n // Check if URL is valid\n const parsedUrl = parseUrl(massagedUrl);\n if (!parsedUrl) {\n return '';\n }\n\n if (detectPlatform(massagedUrl) === 'gitlab') {\n return massageGitlabUrl(sourceUrl);\n }\n return massageGithubUrl(sourceUrl);\n}\n\nexport function massageGithubUrl(url: string): string {\n const massagedUrl = massageGitPrefixes(url);\n\n return massagedUrl\n .replace('http:', 'https:')\n .replace('http+git:', 'https:')\n .replace('https+git:', 'https:')\n .replace('ssh://git@', 'https://')\n .replace(gitPrefix, 'https://')\n .replace(githubPages, 'https://github.com/$1/$2')\n .replace('www.github.com', 'github.com')\n .split('/')\n .slice(0, 5)\n .join('/');\n}\n\nexport function massageGitlabUrl(url: string): string {\n const massagedUrl = massageGitPrefixes(url);\n\n return massagedUrl\n .replace('http:', 'https:')\n .replace('ssh://git@', 'https://')\n .replace(gitPrefix, 'https://')\n .replace(regEx(/\\/tree\\/.*$/i), '')\n .replace(regEx(/\\/$/i), '')\n .replace(regEx(/\\.git$/i), '');\n}\n\nfunction massageGitPrefixes(url: string): string {\n let massagedUrl = url.replace(gitPlusPrefix, '');\n\n if (massagedUrl.startsWith('git@')) {\n massagedUrl = massagedUrl.replace(':', '/').replace('git@', 'https://');\n }\n\n return massagedUrl;\n}\n\nfunction massageTimestamps(dep: ReleaseResult): void {\n for (const release of dep.releases || []) {\n let { releaseTimestamp } = release;\n delete release.releaseTimestamp;\n releaseTimestamp = asTimestamp(releaseTimestamp);\n if (releaseTimestamp) {\n release.releaseTimestamp = releaseTimestamp;\n }\n }\n}\n\n/**\n * The URLs of a {@link ReleaseResult} describing the package.\n */\nconst metadataUrlKeys = [\n 'homepage',\n 'sourceUrl',\n 'changelogUrl',\n 'dependencyUrl',\n] as const satisfies (keyof ReleaseResult)[];\n\n/**\n * The URLs of a {@link Release}.\n */\nconst releaseUrlKeys = [\n 'changelogUrl',\n 'checksumUrl',\n 'downloadUrl',\n 'registryUrl',\n 'sourceUrl',\n] as const satisfies (keyof Release)[];\n\n/**\n * Removes the URL credentials from the package URLs of `dep` and from the URLs of its releases.\n */\nexport function stripMetadataUrlCredentials(dep: ReleaseResult): void {\n for (const urlKey of metadataUrlKeys) {\n const urlVal = dep[urlKey];\n if (isString(urlVal)) {\n dep[urlKey] = withoutUrlCredentials(urlVal);\n }\n }\n for (const release of dep.releases) {\n for (const urlKey of releaseUrlKeys) {\n const urlVal = release[urlKey];\n if (isString(urlVal)) {\n release[urlKey] = withoutUrlCredentials(urlVal);\n }\n }\n }\n}\n\nexport function addMetaData(\n dep: ReleaseResult,\n datasource: string,\n packageName: string,\n): void {\n massageTimestamps(dep);\n\n const packageNameLowercase = packageName.toLowerCase();\n const manualChangelogUrl =\n manualChangelogUrls[datasource]?.[packageNameLowercase];\n if (manualChangelogUrl) {\n dep.changelogUrl = manualChangelogUrl;\n }\n\n const manualSourceUrl = manualSourceUrls[datasource]?.[packageNameLowercase];\n if (manualSourceUrl) {\n dep.sourceUrl = manualSourceUrl;\n }\n\n if (dep.sourceUrl && !dep.sourceDirectory) {\n try {\n const parsed = parseGitUrl(dep.sourceUrl);\n if (parsed.filepathtype === 'tree' && parsed.filepath !== '') {\n dep.sourceUrl = parsed.toString();\n dep.sourceDirectory = parsed.filepath;\n }\n } catch {\n // ignore invalid urls\n }\n }\n\n if (\n !dep.sourceUrl &&\n dep.changelogUrl &&\n detectPlatform(dep.changelogUrl) === 'github'\n ) {\n dep.sourceUrl = dep.changelogUrl;\n }\n\n if (!dep.sourceUrl && dep.homepage) {\n const platform = detectPlatform(dep.homepage);\n if (platform === 'github' || platform === 'gitlab') {\n dep.sourceUrl = dep.homepage;\n }\n }\n const extraBaseUrls = [];\n // istanbul ignore next\n hostRules.hosts({ hostType: 'github' }).forEach((host) => {\n extraBaseUrls.push(host, `gist.${host}`);\n });\n extraBaseUrls.push('gitlab.com');\n if (dep.sourceUrl) {\n // try massaging it\n const massagedUrl = massageUrl(dep.sourceUrl);\n if (isEmptyString(massagedUrl)) {\n delete dep.sourceUrl;\n } else {\n // parse from github-url-from-git only supports Github URLs as its name implies\n dep.sourceUrl =\n parse(massagedUrl, {\n extraBaseUrls,\n }) || dep.sourceUrl;\n // prefer massaged URL to source URL if the latter does not start with http:// or https://\n // (e.g. git@somehost.com) and the detected platform is gitlab.\n // this allows to retrieve changelogs from git hosts other than Github\n if (\n !isHttpUrl(dep.sourceUrl) &&\n detectPlatform(massagedUrl) === 'gitlab'\n ) {\n dep.sourceUrl = massagedUrl;\n }\n }\n }\n if (shouldDeleteHomepage(dep.sourceUrl, dep.homepage)) {\n delete dep.homepage;\n }\n // Clean up any empty urls\n for (const urlKey of metadataUrlKeys) {\n const urlVal = dep[urlKey];\n if (isString(urlVal) && isHttpUrl(urlVal.trim())) {\n // Strip any userinfo credentials so they do not end up in a PR body, also from URLs added or massaged above\n dep[urlKey] = withoutUrlCredentials(urlVal.trim()) as never;\n } else {\n delete dep[urlKey];\n }\n }\n}\n\n/**\n * Returns true if\n * 1. it's a github or gitlab url and not a path within the repo.\n * 2. it's equal to sourceURl\n * @param sourceUrl\n * @param homepage\n */\nexport function shouldDeleteHomepage(\n sourceUrl: string | null | undefined,\n homepage: string | undefined,\n): boolean {\n if (isNullOrUndefined(sourceUrl) || isUndefined(homepage)) {\n return false;\n }\n const massagedSourceUrl = massageUrl(sourceUrl);\n const platform = detectPlatform(homepage);\n if (platform === 'github' || platform === 'gitlab') {\n const sourceUrlParsed = parseUrl(massagedSourceUrl);\n if (isNullOrUndefined(sourceUrlParsed)) {\n return false;\n }\n const homepageParsed = parseUrl(homepage);\n return (\n homepageParsed !== null &&\n trimTrailingSlash(homepageParsed.pathname) ===\n trimTrailingSlash(sourceUrlParsed.pathname)\n );\n }\n return massagedSourceUrl === homepage;\n}\n"],"mappings":";;;;;;;;;;AAqBA,MAAM,cAAc,MAAM,sCAAsC;AAChE,MAAM,gBAAgB,MAAM,SAAS;AACrC,MAAM,YAAY,MAAM,WAAW;AAEnC,SAAgB,WAAW,WAA2B;CAEpD,MAAM,cAAc,mBAAmB,SAAS;CAIhD,IAAI,CADc,SAAS,WACd,GACX,OAAO;CAGT,IAAI,eAAe,WAAW,MAAM,UAClC,OAAO,iBAAiB,SAAS;CAEnC,OAAO,iBAAiB,SAAS;AACnC;AAEA,SAAgB,iBAAiB,KAAqB;CAGpD,OAFoB,mBAAmB,GAEtB,CAAC,CACf,QAAQ,SAAS,QAAQ,CAAC,CAC1B,QAAQ,aAAa,QAAQ,CAAC,CAC9B,QAAQ,cAAc,QAAQ,CAAC,CAC/B,QAAQ,cAAc,UAAU,CAAC,CACjC,QAAQ,WAAW,UAAU,CAAC,CAC9B,QAAQ,aAAa,0BAA0B,CAAC,CAChD,QAAQ,kBAAkB,YAAY,CAAC,CACvC,MAAM,GAAG,CAAC,CACV,MAAM,GAAG,CAAC,CAAC,CACX,KAAK,GAAG;AACb;AAEA,SAAgB,iBAAiB,KAAqB;CAGpD,OAFoB,mBAAmB,GAEtB,CAAC,CACf,QAAQ,SAAS,QAAQ,CAAC,CAC1B,QAAQ,cAAc,UAAU,CAAC,CACjC,QAAQ,WAAW,UAAU,CAAC,CAC9B,QAAQ,MAAM,cAAc,GAAG,EAAE,CAAC,CAClC,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC,CAC1B,QAAQ,MAAM,SAAS,GAAG,EAAE;AACjC;AAEA,SAAS,mBAAmB,KAAqB;CAC/C,IAAI,cAAc,IAAI,QAAQ,eAAe,EAAE;CAE/C,IAAI,YAAY,WAAW,MAAM,GAC/B,cAAc,YAAY,QAAQ,KAAK,GAAG,CAAC,CAAC,QAAQ,QAAQ,UAAU;CAGxE,OAAO;AACT;AAEA,SAAS,kBAAkB,KAA0B;CACnD,KAAK,MAAM,WAAW,IAAI,YAAY,CAAC,GAAG;EACxC,IAAI,EAAE,qBAAqB;EAC3B,OAAO,QAAQ;EACf,mBAAmB,YAAY,gBAAgB;EAC/C,IAAI,kBACF,QAAQ,mBAAmB;CAE/B;AACF;;;;AAKA,MAAM,kBAAkB;CACtB;CACA;CACA;CACA;AACF;;;;AAKA,MAAM,iBAAiB;CACrB;CACA;CACA;CACA;CACA;AACF;;;;AAKA,SAAgB,4BAA4B,KAA0B;CACpE,KAAK,MAAM,UAAU,iBAAiB;EACpC,MAAM,SAAS,IAAI;EACnB,IAAI,SAAS,MAAM,GACjB,IAAI,UAAU,sBAAsB,MAAM;CAE9C;CACA,KAAK,MAAM,WAAW,IAAI,UACxB,KAAK,MAAM,UAAU,gBAAgB;EACnC,MAAM,SAAS,QAAQ;EACvB,IAAI,SAAS,MAAM,GACjB,QAAQ,UAAU,sBAAsB,MAAM;CAElD;AAEJ;AAEA,SAAgB,YACd,KACA,YACA,aACM;CACN,kBAAkB,GAAG;CAErB,MAAM,uBAAuB,YAAY,YAAY;CACrD,MAAM,qBACJ,oBAAoB,WAAW,GAAG;CACpC,IAAI,oBACF,IAAI,eAAe;CAGrB,MAAM,kBAAkB,iBAAiB,WAAW,GAAG;CACvD,IAAI,iBACF,IAAI,YAAY;CAGlB,IAAI,IAAI,aAAa,CAAC,IAAI,iBACxB,IAAI;EACF,MAAM,SAAS,YAAY,IAAI,SAAS;EACxC,IAAI,OAAO,iBAAiB,UAAU,OAAO,aAAa,IAAI;GAC5D,IAAI,YAAY,OAAO,SAAS;GAChC,IAAI,kBAAkB,OAAO;EAC/B;CACF,QAAQ,CAER;CAGF,IACE,CAAC,IAAI,aACL,IAAI,gBACJ,eAAe,IAAI,YAAY,MAAM,UAErC,IAAI,YAAY,IAAI;CAGtB,IAAI,CAAC,IAAI,aAAa,IAAI,UAAU;EAClC,MAAM,WAAW,eAAe,IAAI,QAAQ;EAC5C,IAAI,aAAa,YAAY,aAAa,UACxC,IAAI,YAAY,IAAI;CAExB;CACA,MAAM,gBAAgB,CAAC;;CAEvB,MAAgB,EAAE,UAAU,SAAS,CAAC,CAAC,CAAC,SAAS,SAAS;EACxD,cAAc,KAAK,MAAM,QAAQ,MAAM;CACzC,CAAC;CACD,cAAc,KAAK,YAAY;CAC/B,IAAI,IAAI,WAAW;EAEjB,MAAM,cAAc,WAAW,IAAI,SAAS;EAC5C,IAAI,cAAc,WAAW,GAC3B,OAAO,IAAI;OACN;GAEL,IAAI,YACF,MAAM,aAAa,EACjB,cACF,CAAC,KAAK,IAAI;GAIZ,IACE,CAAC,UAAU,IAAI,SAAS,KACxB,eAAe,WAAW,MAAM,UAEhC,IAAI,YAAY;EAEpB;CACF;CACA,IAAI,qBAAqB,IAAI,WAAW,IAAI,QAAQ,GAClD,OAAO,IAAI;CAGb,KAAK,MAAM,UAAU,iBAAiB;EACpC,MAAM,SAAS,IAAI;EACnB,IAAI,SAAS,MAAM,KAAK,UAAU,OAAO,KAAK,CAAC,GAE7C,IAAI,UAAU,sBAAsB,OAAO,KAAK,CAAC;OAEjD,OAAO,IAAI;CAEf;AACF;;;;;;;;AASA,SAAgB,qBACd,WACA,UACS;CACT,IAAI,kBAAkB,SAAS,KAAK,YAAY,QAAQ,GACtD,OAAO;CAET,MAAM,oBAAoB,WAAW,SAAS;CAC9C,MAAM,WAAW,eAAe,QAAQ;CACxC,IAAI,aAAa,YAAY,aAAa,UAAU;EAClD,MAAM,kBAAkB,SAAS,iBAAiB;EAClD,IAAI,kBAAkB,eAAe,GACnC,OAAO;EAET,MAAM,iBAAiB,SAAS,QAAQ;EACxC,OACE,mBAAmB,QACnB,kBAAkB,eAAe,QAAQ,MACvC,kBAAkB,gBAAgB,QAAQ;CAEhD;CACA,OAAO,sBAAsB;AAC/B"}
@@ -26,11 +26,16 @@ async function processPackageFile(packageFile, config) {
26
26
  logger.debug({ packageFile }, "No dependencies found");
27
27
  return null;
28
28
  }
29
- const { npmrc } = await resolveNpmrc(packageFile, config);
29
+ const { npmrc, npmrcFileName, repoNpmrc } = await resolveNpmrc(packageFile, config);
30
30
  return {
31
31
  ...result,
32
32
  packageFile,
33
- npmrc
33
+ npmrc,
34
+ managerData: {
35
+ ...result.managerData,
36
+ npmrcFileName,
37
+ ...repoNpmrc && { repoNpmrc }
38
+ }
34
39
  };
35
40
  }
36
41
  async function extractAllPackageFiles(config, matchedFiles) {
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/bun/extract.ts"],"sourcesContent":["import { isArray, isObject, isString } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport {\n getParentDir,\n getSiblingFileName,\n readLocalFile,\n} from '../../../util/fs/index.ts';\n\nimport { extractPackageJson } from '../npm/extract/common/package-file.ts';\nimport type { NpmPackage } from '../npm/extract/types.ts';\nimport { resolveNpmrc } from '../npm/npmrc.ts';\nimport type { NpmManagerData } from '../npm/types.ts';\nimport type { ExtractConfig, NpmrcPackageFile } from '../types.ts';\nimport { filesMatchingWorkspaces } from './utils.ts';\n\nfunction matchesFileName(fileNameWithPath: string, fileName: string): boolean {\n return (\n fileNameWithPath === fileName || fileNameWithPath.endsWith(`/${fileName}`)\n );\n}\n\nexport async function processPackageFile(\n packageFile: string,\n config: ExtractConfig,\n): Promise<NpmrcPackageFile<NpmManagerData> | null> {\n const fileContent = await readLocalFile(packageFile, 'utf8');\n if (!fileContent) {\n logger.warn({ fileName: packageFile }, 'Could not read file content');\n return null;\n }\n let packageJson: NpmPackage;\n try {\n packageJson = JSON.parse(fileContent);\n } catch (err) {\n logger.debug({ err }, 'Error parsing package.json');\n return null;\n }\n const result = extractPackageJson(packageJson, packageFile);\n if (!result) {\n logger.debug({ packageFile }, 'No dependencies found');\n return null;\n }\n\n const { npmrc } = await resolveNpmrc(packageFile, config);\n\n return {\n ...result,\n packageFile,\n npmrc,\n };\n}\nexport async function extractAllPackageFiles(\n config: ExtractConfig,\n matchedFiles: string[],\n): Promise<NpmrcPackageFile[]> {\n const packageFiles: NpmrcPackageFile<NpmManagerData>[] = [];\n const allLockFiles = matchedFiles.filter(\n (file) =>\n matchesFileName(file, 'bun.lock') || matchesFileName(file, 'bun.lockb'),\n );\n if (allLockFiles.length === 0) {\n logger.debug('No bun lockfiles found');\n return packageFiles;\n }\n const allPackageJson = matchedFiles.filter((file) =>\n matchesFileName(file, 'package.json'),\n );\n for (const lockFile of allLockFiles) {\n const packageFile = getSiblingFileName(lockFile, 'package.json');\n const res = await processPackageFile(packageFile, config);\n if (res) {\n packageFiles.push({ ...res, lockFiles: [lockFile] });\n }\n // Check if package.json contains workspaces\n let workspaces = res?.managerData?.workspaces;\n\n // Check for nested packages property https://bun.com/docs/pm/catalogs#1-define-catalogs-in-root-package-json\n if (isObject(workspaces) && 'packages' in workspaces) {\n workspaces = workspaces.packages;\n }\n\n if (!isArray(workspaces, isString)) {\n continue;\n }\n\n logger.debug(`Found bun workspaces in ${packageFile}`);\n const pwd = getParentDir(packageFile);\n const workspacePackageFiles = filesMatchingWorkspaces(\n pwd,\n allPackageJson,\n workspaces,\n );\n if (workspacePackageFiles.length) {\n logger.debug({ workspacePackageFiles }, 'Found bun workspace files');\n for (const workspaceFile of workspacePackageFiles) {\n const res = await processPackageFile(workspaceFile, config);\n if (res) {\n packageFiles.push({ ...res, lockFiles: [lockFile] });\n }\n }\n }\n }\n\n return packageFiles;\n}\n"],"mappings":";;;;;;;AAeA,SAAS,gBAAgB,kBAA0B,UAA2B;CAC5E,OACE,qBAAqB,YAAY,iBAAiB,SAAS,IAAI,UAAU;AAE7E;AAEA,eAAsB,mBACpB,aACA,QACkD;CAClD,MAAM,cAAc,MAAM,cAAc,aAAa,MAAM;CAC3D,IAAI,CAAC,aAAa;EAChB,OAAO,KAAK,EAAE,UAAU,YAAY,GAAG,6BAA6B;EACpE,OAAO;CACT;CACA,IAAI;CACJ,IAAI;EACF,cAAc,KAAK,MAAM,WAAW;CACtC,SAAS,KAAK;EACZ,OAAO,MAAM,EAAE,IAAI,GAAG,4BAA4B;EAClD,OAAO;CACT;CACA,MAAM,SAAS,mBAAmB,aAAa,WAAW;CAC1D,IAAI,CAAC,QAAQ;EACX,OAAO,MAAM,EAAE,YAAY,GAAG,uBAAuB;EACrD,OAAO;CACT;CAEA,MAAM,EAAE,UAAU,MAAM,aAAa,aAAa,MAAM;CAExD,OAAO;EACL,GAAG;EACH;EACA;CACF;AACF;AACA,eAAsB,uBACpB,QACA,cAC6B;CAC7B,MAAM,eAAmD,CAAC;CAC1D,MAAM,eAAe,aAAa,QAC/B,SACC,gBAAgB,MAAM,UAAU,KAAK,gBAAgB,MAAM,WAAW,CAC1E;CACA,IAAI,aAAa,WAAW,GAAG;EAC7B,OAAO,MAAM,wBAAwB;EACrC,OAAO;CACT;CACA,MAAM,iBAAiB,aAAa,QAAQ,SAC1C,gBAAgB,MAAM,cAAc,CACtC;CACA,KAAK,MAAM,YAAY,cAAc;EACnC,MAAM,cAAc,mBAAmB,UAAU,cAAc;EAC/D,MAAM,MAAM,MAAM,mBAAmB,aAAa,MAAM;EACxD,IAAI,KACF,aAAa,KAAK;GAAE,GAAG;GAAK,WAAW,CAAC,QAAQ;EAAE,CAAC;EAGrD,IAAI,aAAa,KAAK,aAAa;EAGnC,IAAI,SAAS,UAAU,KAAK,cAAc,YACxC,aAAa,WAAW;EAG1B,IAAI,CAAC,QAAQ,YAAY,QAAQ,GAC/B;EAGF,OAAO,MAAM,2BAA2B,aAAa;EACrD,MAAM,MAAM,aAAa,WAAW;EACpC,MAAM,wBAAwB,wBAC5B,KACA,gBACA,UACF;EACA,IAAI,sBAAsB,QAAQ;GAChC,OAAO,MAAM,EAAE,sBAAsB,GAAG,2BAA2B;GACnE,KAAK,MAAM,iBAAiB,uBAAuB;IACjD,MAAM,MAAM,MAAM,mBAAmB,eAAe,MAAM;IAC1D,IAAI,KACF,aAAa,KAAK;KAAE,GAAG;KAAK,WAAW,CAAC,QAAQ;IAAE,CAAC;GAEvD;EACF;CACF;CAEA,OAAO;AACT"}
1
+ {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/bun/extract.ts"],"sourcesContent":["import { isArray, isObject, isString } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport {\n getParentDir,\n getSiblingFileName,\n readLocalFile,\n} from '../../../util/fs/index.ts';\n\nimport { extractPackageJson } from '../npm/extract/common/package-file.ts';\nimport type { NpmPackage } from '../npm/extract/types.ts';\nimport { resolveNpmrc } from '../npm/npmrc.ts';\nimport type { NpmManagerData } from '../npm/types.ts';\nimport type { ExtractConfig, NpmrcPackageFile } from '../types.ts';\nimport { filesMatchingWorkspaces } from './utils.ts';\n\nfunction matchesFileName(fileNameWithPath: string, fileName: string): boolean {\n return (\n fileNameWithPath === fileName || fileNameWithPath.endsWith(`/${fileName}`)\n );\n}\n\nexport async function processPackageFile(\n packageFile: string,\n config: ExtractConfig,\n): Promise<NpmrcPackageFile<NpmManagerData> | null> {\n const fileContent = await readLocalFile(packageFile, 'utf8');\n if (!fileContent) {\n logger.warn({ fileName: packageFile }, 'Could not read file content');\n return null;\n }\n let packageJson: NpmPackage;\n try {\n packageJson = JSON.parse(fileContent);\n } catch (err) {\n logger.debug({ err }, 'Error parsing package.json');\n return null;\n }\n const result = extractPackageJson(packageJson, packageFile);\n if (!result) {\n logger.debug({ packageFile }, 'No dependencies found');\n return null;\n }\n\n const { npmrc, npmrcFileName, repoNpmrc } = await resolveNpmrc(\n packageFile,\n config,\n );\n\n return {\n ...result,\n packageFile,\n npmrc,\n managerData: {\n ...result.managerData,\n // store npmrc file name so that a repository `.npmrc` which is not cached is read from disk again\n npmrcFileName,\n // stored instead of `npmrc` in the repository cache, from which `npmrc` is rebuilt\n ...(repoNpmrc && { repoNpmrc }),\n },\n };\n}\nexport async function extractAllPackageFiles(\n config: ExtractConfig,\n matchedFiles: string[],\n): Promise<NpmrcPackageFile<NpmManagerData>[]> {\n const packageFiles: NpmrcPackageFile<NpmManagerData>[] = [];\n const allLockFiles = matchedFiles.filter(\n (file) =>\n matchesFileName(file, 'bun.lock') || matchesFileName(file, 'bun.lockb'),\n );\n if (allLockFiles.length === 0) {\n logger.debug('No bun lockfiles found');\n return packageFiles;\n }\n const allPackageJson = matchedFiles.filter((file) =>\n matchesFileName(file, 'package.json'),\n );\n for (const lockFile of allLockFiles) {\n const packageFile = getSiblingFileName(lockFile, 'package.json');\n const res = await processPackageFile(packageFile, config);\n if (res) {\n packageFiles.push({ ...res, lockFiles: [lockFile] });\n }\n // Check if package.json contains workspaces\n let workspaces = res?.managerData?.workspaces;\n\n // Check for nested packages property https://bun.com/docs/pm/catalogs#1-define-catalogs-in-root-package-json\n if (isObject(workspaces) && 'packages' in workspaces) {\n workspaces = workspaces.packages;\n }\n\n if (!isArray(workspaces, isString)) {\n continue;\n }\n\n logger.debug(`Found bun workspaces in ${packageFile}`);\n const pwd = getParentDir(packageFile);\n const workspacePackageFiles = filesMatchingWorkspaces(\n pwd,\n allPackageJson,\n workspaces,\n );\n if (workspacePackageFiles.length) {\n logger.debug({ workspacePackageFiles }, 'Found bun workspace files');\n for (const workspaceFile of workspacePackageFiles) {\n const res = await processPackageFile(workspaceFile, config);\n if (res) {\n packageFiles.push({ ...res, lockFiles: [lockFile] });\n }\n }\n }\n }\n\n return packageFiles;\n}\n"],"mappings":";;;;;;;AAeA,SAAS,gBAAgB,kBAA0B,UAA2B;CAC5E,OACE,qBAAqB,YAAY,iBAAiB,SAAS,IAAI,UAAU;AAE7E;AAEA,eAAsB,mBACpB,aACA,QACkD;CAClD,MAAM,cAAc,MAAM,cAAc,aAAa,MAAM;CAC3D,IAAI,CAAC,aAAa;EAChB,OAAO,KAAK,EAAE,UAAU,YAAY,GAAG,6BAA6B;EACpE,OAAO;CACT;CACA,IAAI;CACJ,IAAI;EACF,cAAc,KAAK,MAAM,WAAW;CACtC,SAAS,KAAK;EACZ,OAAO,MAAM,EAAE,IAAI,GAAG,4BAA4B;EAClD,OAAO;CACT;CACA,MAAM,SAAS,mBAAmB,aAAa,WAAW;CAC1D,IAAI,CAAC,QAAQ;EACX,OAAO,MAAM,EAAE,YAAY,GAAG,uBAAuB;EACrD,OAAO;CACT;CAEA,MAAM,EAAE,OAAO,eAAe,cAAc,MAAM,aAChD,aACA,MACF;CAEA,OAAO;EACL,GAAG;EACH;EACA;EACA,aAAa;GACX,GAAG,OAAO;GAEV;GAEA,GAAI,aAAa,EAAE,UAAU;EAC/B;CACF;AACF;AACA,eAAsB,uBACpB,QACA,cAC6C;CAC7C,MAAM,eAAmD,CAAC;CAC1D,MAAM,eAAe,aAAa,QAC/B,SACC,gBAAgB,MAAM,UAAU,KAAK,gBAAgB,MAAM,WAAW,CAC1E;CACA,IAAI,aAAa,WAAW,GAAG;EAC7B,OAAO,MAAM,wBAAwB;EACrC,OAAO;CACT;CACA,MAAM,iBAAiB,aAAa,QAAQ,SAC1C,gBAAgB,MAAM,cAAc,CACtC;CACA,KAAK,MAAM,YAAY,cAAc;EACnC,MAAM,cAAc,mBAAmB,UAAU,cAAc;EAC/D,MAAM,MAAM,MAAM,mBAAmB,aAAa,MAAM;EACxD,IAAI,KACF,aAAa,KAAK;GAAE,GAAG;GAAK,WAAW,CAAC,QAAQ;EAAE,CAAC;EAGrD,IAAI,aAAa,KAAK,aAAa;EAGnC,IAAI,SAAS,UAAU,KAAK,cAAc,YACxC,aAAa,WAAW;EAG1B,IAAI,CAAC,QAAQ,YAAY,QAAQ,GAC/B;EAGF,OAAO,MAAM,2BAA2B,aAAa;EACrD,MAAM,MAAM,aAAa,WAAW;EACpC,MAAM,wBAAwB,wBAC5B,KACA,gBACA,UACF;EACA,IAAI,sBAAsB,QAAQ;GAChC,OAAO,MAAM,EAAE,sBAAsB,GAAG,2BAA2B;GACnE,KAAK,MAAM,iBAAiB,uBAAuB;IACjD,MAAM,MAAM,MAAM,mBAAmB,eAAe,MAAM;IAC1D,IAAI,KACF,aAAa,KAAK;KAAE,GAAG;KAAK,WAAW,CAAC,QAAQ;IAAE,CAAC;GAEvD;EACF;CACF;CAEA,OAAO;AACT"}
@@ -17,7 +17,7 @@ hashMap.set("bitbucket-pipelines", "59c0503494ab1442b127914503c01b97ac17b6742b19
17
17
  hashMap.set("bitrise", "478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42");
18
18
  hashMap.set("buildkite", "b8b404f53cd5d61c39153fddf93945e621471c4ac6aa9960c881cd868922bb4c");
19
19
  hashMap.set("buildpacks", "6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f");
20
- hashMap.set("bun", "6789cc6499c77cdf44d4fb306198274bb72241e6d0ef7ceda7e916d7022d864c");
20
+ hashMap.set("bun", "320097d7b876bebd71a3a1df5d31572bc72c1d53f3a687cbe3bcfab866373c1d");
21
21
  hashMap.set("bun-version", "df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4");
22
22
  hashMap.set("bundler", "6e4784dd98c1f86ef64cc8cbf3128df48aebf920032d7792b54fdedd3dd9d4d5");
23
23
  hashMap.set("cake", "9ebd8b481220b30a8860121d26184540a1a2fcc05ef780df9295dea39b386fad");
@@ -75,17 +75,17 @@ hashMap.set("mise", "59c691024c34cb4be4d9b4f811019ae9b22410df0da54977cdcecea261f
75
75
  hashMap.set("mix", "0f79163dc2a1c896599d152be635c23beaf16812ae3d8fbfffec98c7bd0de872");
76
76
  hashMap.set("nix", "9cbd96a29fe96e3df7418e422256380202f07970cf7f00b08388c181224a2b85");
77
77
  hashMap.set("nodenv", "ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8");
78
- hashMap.set("npm", "9686302b38f9d6ff899cc69590ec2b9677fd5451f52d227649c0e0812b15c6f9");
78
+ hashMap.set("npm", "c2049f645aaa42a227d84ccd81f7156cc05ab41cc645f6e6a492df7e64e5ec87");
79
79
  hashMap.set("nuget", "fb02247c67a198ffe414a44d23c7894bd114dcc53803334f82e39479e7b27f6f");
80
80
  hashMap.set("nvm", "3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322");
81
81
  hashMap.set("ocb", "032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca");
82
82
  hashMap.set("osgi", "d6567a733ef3983112b46fdccd7ceebfcd48411104e0c6b6e714d4310db48024");
83
- hashMap.set("pep621", "5a01837b4bc0b575073d1d3d44d9cb030ad66ea2bfb0be830f83f53c30bdb277");
83
+ hashMap.set("pep621", "02ba97d9d2bbd696417ea0ea26c0ed27f4e8cf296f1afdbb27ec07bcc3bd987c");
84
84
  hashMap.set("pep723", "77022a0eae6a3cbb74a1e6d596db1276e379768e40448192b3fa81edd14ca73f");
85
85
  hashMap.set("pip-compile", "a98dc76a002e1dc21662237f009ff8fea36236bb4e24cb82ee30c6a78f57271f");
86
86
  hashMap.set("pip_requirements", "bf3a407f72abf711230247bef94ba5dc84c08a35107b0f017912fad66afa716a");
87
87
  hashMap.set("pip_setup", "df18fba2bdcf48f3ca12a8f7e5cd28df31e2368d5528127277038ef4206eca79");
88
- hashMap.set("pipenv", "baf237cd77173c1a7a9c7fa2a8bfb214f3c488ba0cc27f0e8f334df192e3a398");
88
+ hashMap.set("pipenv", "9b8ac4f9432f2789f60847c80582966d5ed4f735d2f678c82416d0eb9548b4fa");
89
89
  hashMap.set("pixi", "e31c397982ffa34222b061f23f3b3683f42523dd5dca45ecce2448b0ebc55ea2");
90
90
  hashMap.set("poetry", "2c74e8e94c484c8bfc93ba1272078d531a52e4faaa978fc90ddb654064bb85bc");
91
91
  hashMap.set("pre-commit", "760f2c291ae084db889f722390798a0e2d431ccdc3bc676e73b14901ebea19ac");
@@ -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','a52394a36ac5517f7330473c31d93aa05b2ce607c5e951b48f25a4693cd20a81');\nhashMap.set('ansible-galaxy','8e11293c8f61b4cbae77a3b1634a47213031c59df2c9833d89db65bf4e6edc64');\nhashMap.set('ant','2df5943cf0ed19a21b94df13729dbb925655548130caf37e3e22bebaed518e17');\nhashMap.set('apm','66c207983960b1a1f49b972f77efe3bfd3097e19b0ee4034ccf9ac6c0d13e05b');\nhashMap.set('argocd','cff9cd22257bc460ae4b9936570bf0ed5585f280a55d26629deaeeb0bfee8eb5');\nhashMap.set('asdf','430eb99b58171700c8a59c78b9e648575e9b176b781d90dd10a710f7b69015bb');\nhashMap.set('azure-pipelines','04a13dec4e08ba21004961c718072fde976226d65809fa3c838bf66ba93e5d5a');\nhashMap.set('batect','375d39b432013bedb1330cf40a2199dd822751b28578214f219e7bab98594b8d');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','4d4f1d9a6519ba552b316b396db13ff0654a2663d8ed976188899a2d57d306a2');\nhashMap.set('bazel-module','9fbba0339f9f7785d52ab85c5f0f6385003093c063483c13feccba13ae438bef');\nhashMap.set('bazelisk','770f75a746dc6ba90c518788d5987d7df4243ef9eee122d1bb0556a93d6e1b11');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','59c0503494ab1442b127914503c01b97ac17b6742b19c632292d5aa24de115cd');\nhashMap.set('bitrise','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\nhashMap.set('buildkite','b8b404f53cd5d61c39153fddf93945e621471c4ac6aa9960c881cd868922bb4c');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','6789cc6499c77cdf44d4fb306198274bb72241e6d0ef7ceda7e916d7022d864c');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','6e4784dd98c1f86ef64cc8cbf3128df48aebf920032d7792b54fdedd3dd9d4d5');\nhashMap.set('cake','9ebd8b481220b30a8860121d26184540a1a2fcc05ef780df9295dea39b386fad');\nhashMap.set('cargo','d354b54fee207cabab9fcff67fea1ca3292c7f37a4ef9537c7bb4cab41a35610');\nhashMap.set('cdnurl','9a81c8e3c6ad6c788498c99fc1067ffdfcd92a427c3afaf8c0130975d83131f2');\nhashMap.set('circleci','91cbeb33ea20f9838e2c81a1195eb806f0b38fa282bc3679f62552f20575ca85');\nhashMap.set('cloudbuild','f4e40388944652c8a19f8518771ac8d3f3c4ccf81ddef0e68b463aca833cb73c');\nhashMap.set('cocoapods','f832e2beef885bb3fd697ed9bb3e8cd742926bfec37ff41212edd2dbb4edb3ba');\nhashMap.set('composer','3976117beb9adeade088187965929d42f21f5da12c4614fd22aa92cad1083b19');\nhashMap.set('conan','8d46e9a30ae628e26118aea10a98d1b846f7c5d96d51ce24693437d555f6d125');\nhashMap.set('copier','a0678cc1eec36301328780966eec215c6e18748ea80c98873c8e13291a684cfa');\nhashMap.set('cpanfile','07813fec3f3c2197056500e9266a0553b9774c02f2c74d5ca2e213188c7c12d3');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deno','41e6a8b7b8bae08f07b3e4b69c8c095db5da984bb23c004cd1ebf755a6317794');\nhashMap.set('deps-edn','06783dbc8b9c7bb84e162d1f75b7db56dfa021cc6f809dfd2314cee8b64af08d');\nhashMap.set('devbox','a40050cc61bd9b5d500ec111abb17bb15d5f82ab5b7699f66f628307ba8382c9');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','fba87b82cb0f2bfd66526631fbe928b8153e7ca701a5790d02b944df17417bb9');\nhashMap.set('dockerfile','b5faeb8f31d238e0d05a4aeebf9a837273687908ab8078b34e738bb0e369c80c');\nhashMap.set('droneci','661d2a2d7295af8dd7a1234c7090c42a89306bd574c3adf1fc67782efaad3998');\nhashMap.set('fleet','ffa222820f72c4eb4cdc4c229ae8c50433bee96f3b974f0633d5a7d1f6427c97');\nhashMap.set('flux','0e9d00a108f6e828ad207ee0213d56ecd64475df9bd87c23b0c2b2f80e00a392');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('git-submodules','f4e2c6ddf2fa93241665c5176faafb358eecfcb701e7478790c4d58853ed827a');\nhashMap.set('github-actions','763dc8e3db3a25641cbcff127df79f79face1a6ead05758b1bbb0ebbdb0eec97');\nhashMap.set('gitlabci','a5e1e66ef461e1c1e71062f85f35a212417e23627f4b002810f9a98295d6e672');\nhashMap.set('gitlabci-include','8860a15ab516fde00694f9bd9bf56fce4addafe5a55b5ddb9a4ec477d301d351');\nhashMap.set('glasskube','93e7b9000a17efa15a1abaaf320b5af9169b1ecd828fc0c881d98570ef9d9e30');\nhashMap.set('gleam','5e9b9f5f914afe5ed7b526c06c65111e3716d2dea9b0cbe7907bbc96db1064a3');\nhashMap.set('gomod','b70bcb736679e5660cf4d075a663629d0ddab4e854ce78d6336844138f2cbc82');\nhashMap.set('gradle','14ffeecba62452d47d3796e68753da745de2614b6e5ecc346da4f0067ed4bc6e');\nhashMap.set('gradle-wrapper','73ba30c34955fab7737454b5cff9aca6d1b5607d53c17c9e13d8ad96f6eaae87');\nhashMap.set('haskell-cabal','f158b7725e3143dfd2950e3de0bbccc2a61cd7eba87f7a54c5057e01252348e2');\nhashMap.set('helm-requirements','22f61344565f87ca3512c0ba8fac32627fde8ee919b7badae07b2116e285f049');\nhashMap.set('helm-values','0aa79bb0257d0d72e54dfd2653e59bfef63b97e46c035b7443593bdf6e6382aa');\nhashMap.set('helmfile','ab63e5bc2bb381939a6b75911947e3fc79d31827423ded07f61ea1c98d95a542');\nhashMap.set('helmsman','951deeb3355da751ef39c9e932b26ea749450e32e75759e4b5fc29359e100b37');\nhashMap.set('helmv3','927798e082caf46a0da703389ba07e9e61fa73ef571ab551301b8fc6b06957d1');\nhashMap.set('hermit','abf066a64be5e5112e4da68896cf14583691e817d8bf2fc5ec65aebcc0fde53b');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','dffe954a4e18c2dc4bfdaa12222fe8ddc3395869afd5afa603fc2b6264747984');\nhashMap.set('html','81fa6c2bf2b868596584a48b949645207a2aa3081951ed99183ee50b70b77d5f');\nhashMap.set('jenkins','7fda0e7e0f3d5e18088ccb3594f727f4cfc48b064706bdaaf1a0a075b6a2cff5');\nhashMap.set('jsonnet-bundler','4cedeb0394e5c38361d1868ff45b4f34747ab8c492378b6e63dcaf1f4f3c024d');\nhashMap.set('kotlin-script','95ebc844c040ca047321b207d525220e29774a2a1fe06f9639e8353c66908564');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','4a4321595a55de36669f3bcc6fb54236ad81c8f80ec9cbd3888f49a45fbe70e7');\nhashMap.set('leiningen','c8397e376f1717c2f771ae9ea3ba6b720d2422b133cf937e762c44e42be146a2');\nhashMap.set('maven','c110b99291c2a5bc82cf7a69330275e9bbd7dc8ba3e9e987611dfcffbe002d8d');\nhashMap.set('maven-wrapper','6e53b6e4abf1d20b75094c7a70d66b4a5ac39954f009aa401f5e55dada8be4d0');\nhashMap.set('meteor','4636a47ba4dcfff19fe662572ef7a40d17146be3c966e00ef437e1fc8de92776');\nhashMap.set('mint','248fe4f1ea5c985921c286785792c97e06fc41f402b2d45df82f6aecd17f710e');\nhashMap.set('mise','59c691024c34cb4be4d9b4f811019ae9b22410df0da54977cdcecea261fbbbf5');\nhashMap.set('mix','0f79163dc2a1c896599d152be635c23beaf16812ae3d8fbfffec98c7bd0de872');\nhashMap.set('nix','9cbd96a29fe96e3df7418e422256380202f07970cf7f00b08388c181224a2b85');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','9686302b38f9d6ff899cc69590ec2b9677fd5451f52d227649c0e0812b15c6f9');\nhashMap.set('nuget','fb02247c67a198ffe414a44d23c7894bd114dcc53803334f82e39479e7b27f6f');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','d6567a733ef3983112b46fdccd7ceebfcd48411104e0c6b6e714d4310db48024');\nhashMap.set('pep621','5a01837b4bc0b575073d1d3d44d9cb030ad66ea2bfb0be830f83f53c30bdb277');\nhashMap.set('pep723','77022a0eae6a3cbb74a1e6d596db1276e379768e40448192b3fa81edd14ca73f');\nhashMap.set('pip-compile','a98dc76a002e1dc21662237f009ff8fea36236bb4e24cb82ee30c6a78f57271f');\nhashMap.set('pip_requirements','bf3a407f72abf711230247bef94ba5dc84c08a35107b0f017912fad66afa716a');\nhashMap.set('pip_setup','df18fba2bdcf48f3ca12a8f7e5cd28df31e2368d5528127277038ef4206eca79');\nhashMap.set('pipenv','baf237cd77173c1a7a9c7fa2a8bfb214f3c488ba0cc27f0e8f334df192e3a398');\nhashMap.set('pixi','e31c397982ffa34222b061f23f3b3683f42523dd5dca45ecce2448b0ebc55ea2');\nhashMap.set('poetry','2c74e8e94c484c8bfc93ba1272078d531a52e4faaa978fc90ddb654064bb85bc');\nhashMap.set('pre-commit','760f2c291ae084db889f722390798a0e2d431ccdc3bc676e73b14901ebea19ac');\nhashMap.set('proto','412053d4550026b4ace490b46e970915b87ec1abf0b0a0c6c8c58ccf1fc16843');\nhashMap.set('pub','8e7c65dfd1999de4f7c44392e949a4d8f4701eb86df59d550e4657feb06b1872');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','40927b98dd2bac45dba60e66b5fd0e6b84b61d02db8be536fda7b14546a4feb7');\nhashMap.set('renovate-config','dfaf3f03ddaf70c332f7916106648f36dbfa6a36dd76d15dd27fa116ab3c174c');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('rust-toolchain','6ace53db02874d73620d2d872291839820a512a9529c42d174358c692e5db720');\nhashMap.set('sbt','e1eb5c7f0171a9bb1b6bd4a36a91039a31b6c84e0983d91d930be31a69506d9e');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','4a3a7c812d34739c07685691e7e64c7d3127f9d7d4aff99dc45a25df97ed9745');\nhashMap.set('smithy','9641b91d065ffb63be0dd888139a0402dba41e550f8b44c592db9daf52109100');\nhashMap.set('sveltos','60dd75bb53ace31217211100d622fdb65068c6162758b6ae7103a6ce8bdc9f90');\nhashMap.set('swift','cdf063debdbf36888523ff8cec6d2d1b0ec6f49b37b2fbcd80b0d4f6a31114e1');\nhashMap.set('tekton','33948f5bdf7553909fa63744adb26da97ddf366e9499bccab1250879570267c9');\nhashMap.set('terraform','6788a8569ba9c50c763ffa2bed952a4314ae8e696c29f93d3eb7c4a12d99ce20');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','300f8fb3c09667654412d2f5dd8ab4882e0f5d1d7a8bc39794993d2e7e58d1b7');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','f423bfa2b42a2bfc0e38a33ebd4f9d452473e7ed4e7ad6384a99eb9a35d97479');\nhashMap.set('travis','f3e2f38e699c390b00ff481be5e91dceaa81609e93caf9a4214933de759c84fc');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','30774cd456c443be2cd236fd5b8cd1cb821f1437c6309842e34960832df3557f');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('xcodegen','dad511d88a9ce1dbdde8b9731f3da7f2bdaa4ca8a083294ee58d56da62ab1683');\nhashMap.set('jsonata','416bcf61144b276b3112814c6e6d261aa29608f46fbb0516c471d35c16f8f0d7');\nhashMap.set('regex','20be5247fdc164173871a051acb0527da017d0c155c653d7563601f55e7b3ff5');"],"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','a52394a36ac5517f7330473c31d93aa05b2ce607c5e951b48f25a4693cd20a81');\nhashMap.set('ansible-galaxy','8e11293c8f61b4cbae77a3b1634a47213031c59df2c9833d89db65bf4e6edc64');\nhashMap.set('ant','2df5943cf0ed19a21b94df13729dbb925655548130caf37e3e22bebaed518e17');\nhashMap.set('apm','66c207983960b1a1f49b972f77efe3bfd3097e19b0ee4034ccf9ac6c0d13e05b');\nhashMap.set('argocd','cff9cd22257bc460ae4b9936570bf0ed5585f280a55d26629deaeeb0bfee8eb5');\nhashMap.set('asdf','430eb99b58171700c8a59c78b9e648575e9b176b781d90dd10a710f7b69015bb');\nhashMap.set('azure-pipelines','04a13dec4e08ba21004961c718072fde976226d65809fa3c838bf66ba93e5d5a');\nhashMap.set('batect','375d39b432013bedb1330cf40a2199dd822751b28578214f219e7bab98594b8d');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','4d4f1d9a6519ba552b316b396db13ff0654a2663d8ed976188899a2d57d306a2');\nhashMap.set('bazel-module','9fbba0339f9f7785d52ab85c5f0f6385003093c063483c13feccba13ae438bef');\nhashMap.set('bazelisk','770f75a746dc6ba90c518788d5987d7df4243ef9eee122d1bb0556a93d6e1b11');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','59c0503494ab1442b127914503c01b97ac17b6742b19c632292d5aa24de115cd');\nhashMap.set('bitrise','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\nhashMap.set('buildkite','b8b404f53cd5d61c39153fddf93945e621471c4ac6aa9960c881cd868922bb4c');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','320097d7b876bebd71a3a1df5d31572bc72c1d53f3a687cbe3bcfab866373c1d');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','6e4784dd98c1f86ef64cc8cbf3128df48aebf920032d7792b54fdedd3dd9d4d5');\nhashMap.set('cake','9ebd8b481220b30a8860121d26184540a1a2fcc05ef780df9295dea39b386fad');\nhashMap.set('cargo','d354b54fee207cabab9fcff67fea1ca3292c7f37a4ef9537c7bb4cab41a35610');\nhashMap.set('cdnurl','9a81c8e3c6ad6c788498c99fc1067ffdfcd92a427c3afaf8c0130975d83131f2');\nhashMap.set('circleci','91cbeb33ea20f9838e2c81a1195eb806f0b38fa282bc3679f62552f20575ca85');\nhashMap.set('cloudbuild','f4e40388944652c8a19f8518771ac8d3f3c4ccf81ddef0e68b463aca833cb73c');\nhashMap.set('cocoapods','f832e2beef885bb3fd697ed9bb3e8cd742926bfec37ff41212edd2dbb4edb3ba');\nhashMap.set('composer','3976117beb9adeade088187965929d42f21f5da12c4614fd22aa92cad1083b19');\nhashMap.set('conan','8d46e9a30ae628e26118aea10a98d1b846f7c5d96d51ce24693437d555f6d125');\nhashMap.set('copier','a0678cc1eec36301328780966eec215c6e18748ea80c98873c8e13291a684cfa');\nhashMap.set('cpanfile','07813fec3f3c2197056500e9266a0553b9774c02f2c74d5ca2e213188c7c12d3');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deno','41e6a8b7b8bae08f07b3e4b69c8c095db5da984bb23c004cd1ebf755a6317794');\nhashMap.set('deps-edn','06783dbc8b9c7bb84e162d1f75b7db56dfa021cc6f809dfd2314cee8b64af08d');\nhashMap.set('devbox','a40050cc61bd9b5d500ec111abb17bb15d5f82ab5b7699f66f628307ba8382c9');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','fba87b82cb0f2bfd66526631fbe928b8153e7ca701a5790d02b944df17417bb9');\nhashMap.set('dockerfile','b5faeb8f31d238e0d05a4aeebf9a837273687908ab8078b34e738bb0e369c80c');\nhashMap.set('droneci','661d2a2d7295af8dd7a1234c7090c42a89306bd574c3adf1fc67782efaad3998');\nhashMap.set('fleet','ffa222820f72c4eb4cdc4c229ae8c50433bee96f3b974f0633d5a7d1f6427c97');\nhashMap.set('flux','0e9d00a108f6e828ad207ee0213d56ecd64475df9bd87c23b0c2b2f80e00a392');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('git-submodules','f4e2c6ddf2fa93241665c5176faafb358eecfcb701e7478790c4d58853ed827a');\nhashMap.set('github-actions','763dc8e3db3a25641cbcff127df79f79face1a6ead05758b1bbb0ebbdb0eec97');\nhashMap.set('gitlabci','a5e1e66ef461e1c1e71062f85f35a212417e23627f4b002810f9a98295d6e672');\nhashMap.set('gitlabci-include','8860a15ab516fde00694f9bd9bf56fce4addafe5a55b5ddb9a4ec477d301d351');\nhashMap.set('glasskube','93e7b9000a17efa15a1abaaf320b5af9169b1ecd828fc0c881d98570ef9d9e30');\nhashMap.set('gleam','5e9b9f5f914afe5ed7b526c06c65111e3716d2dea9b0cbe7907bbc96db1064a3');\nhashMap.set('gomod','b70bcb736679e5660cf4d075a663629d0ddab4e854ce78d6336844138f2cbc82');\nhashMap.set('gradle','14ffeecba62452d47d3796e68753da745de2614b6e5ecc346da4f0067ed4bc6e');\nhashMap.set('gradle-wrapper','73ba30c34955fab7737454b5cff9aca6d1b5607d53c17c9e13d8ad96f6eaae87');\nhashMap.set('haskell-cabal','f158b7725e3143dfd2950e3de0bbccc2a61cd7eba87f7a54c5057e01252348e2');\nhashMap.set('helm-requirements','22f61344565f87ca3512c0ba8fac32627fde8ee919b7badae07b2116e285f049');\nhashMap.set('helm-values','0aa79bb0257d0d72e54dfd2653e59bfef63b97e46c035b7443593bdf6e6382aa');\nhashMap.set('helmfile','ab63e5bc2bb381939a6b75911947e3fc79d31827423ded07f61ea1c98d95a542');\nhashMap.set('helmsman','951deeb3355da751ef39c9e932b26ea749450e32e75759e4b5fc29359e100b37');\nhashMap.set('helmv3','927798e082caf46a0da703389ba07e9e61fa73ef571ab551301b8fc6b06957d1');\nhashMap.set('hermit','abf066a64be5e5112e4da68896cf14583691e817d8bf2fc5ec65aebcc0fde53b');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','dffe954a4e18c2dc4bfdaa12222fe8ddc3395869afd5afa603fc2b6264747984');\nhashMap.set('html','81fa6c2bf2b868596584a48b949645207a2aa3081951ed99183ee50b70b77d5f');\nhashMap.set('jenkins','7fda0e7e0f3d5e18088ccb3594f727f4cfc48b064706bdaaf1a0a075b6a2cff5');\nhashMap.set('jsonnet-bundler','4cedeb0394e5c38361d1868ff45b4f34747ab8c492378b6e63dcaf1f4f3c024d');\nhashMap.set('kotlin-script','95ebc844c040ca047321b207d525220e29774a2a1fe06f9639e8353c66908564');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','4a4321595a55de36669f3bcc6fb54236ad81c8f80ec9cbd3888f49a45fbe70e7');\nhashMap.set('leiningen','c8397e376f1717c2f771ae9ea3ba6b720d2422b133cf937e762c44e42be146a2');\nhashMap.set('maven','c110b99291c2a5bc82cf7a69330275e9bbd7dc8ba3e9e987611dfcffbe002d8d');\nhashMap.set('maven-wrapper','6e53b6e4abf1d20b75094c7a70d66b4a5ac39954f009aa401f5e55dada8be4d0');\nhashMap.set('meteor','4636a47ba4dcfff19fe662572ef7a40d17146be3c966e00ef437e1fc8de92776');\nhashMap.set('mint','248fe4f1ea5c985921c286785792c97e06fc41f402b2d45df82f6aecd17f710e');\nhashMap.set('mise','59c691024c34cb4be4d9b4f811019ae9b22410df0da54977cdcecea261fbbbf5');\nhashMap.set('mix','0f79163dc2a1c896599d152be635c23beaf16812ae3d8fbfffec98c7bd0de872');\nhashMap.set('nix','9cbd96a29fe96e3df7418e422256380202f07970cf7f00b08388c181224a2b85');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','c2049f645aaa42a227d84ccd81f7156cc05ab41cc645f6e6a492df7e64e5ec87');\nhashMap.set('nuget','fb02247c67a198ffe414a44d23c7894bd114dcc53803334f82e39479e7b27f6f');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','d6567a733ef3983112b46fdccd7ceebfcd48411104e0c6b6e714d4310db48024');\nhashMap.set('pep621','02ba97d9d2bbd696417ea0ea26c0ed27f4e8cf296f1afdbb27ec07bcc3bd987c');\nhashMap.set('pep723','77022a0eae6a3cbb74a1e6d596db1276e379768e40448192b3fa81edd14ca73f');\nhashMap.set('pip-compile','a98dc76a002e1dc21662237f009ff8fea36236bb4e24cb82ee30c6a78f57271f');\nhashMap.set('pip_requirements','bf3a407f72abf711230247bef94ba5dc84c08a35107b0f017912fad66afa716a');\nhashMap.set('pip_setup','df18fba2bdcf48f3ca12a8f7e5cd28df31e2368d5528127277038ef4206eca79');\nhashMap.set('pipenv','9b8ac4f9432f2789f60847c80582966d5ed4f735d2f678c82416d0eb9548b4fa');\nhashMap.set('pixi','e31c397982ffa34222b061f23f3b3683f42523dd5dca45ecce2448b0ebc55ea2');\nhashMap.set('poetry','2c74e8e94c484c8bfc93ba1272078d531a52e4faaa978fc90ddb654064bb85bc');\nhashMap.set('pre-commit','760f2c291ae084db889f722390798a0e2d431ccdc3bc676e73b14901ebea19ac');\nhashMap.set('proto','412053d4550026b4ace490b46e970915b87ec1abf0b0a0c6c8c58ccf1fc16843');\nhashMap.set('pub','8e7c65dfd1999de4f7c44392e949a4d8f4701eb86df59d550e4657feb06b1872');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','40927b98dd2bac45dba60e66b5fd0e6b84b61d02db8be536fda7b14546a4feb7');\nhashMap.set('renovate-config','dfaf3f03ddaf70c332f7916106648f36dbfa6a36dd76d15dd27fa116ab3c174c');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('rust-toolchain','6ace53db02874d73620d2d872291839820a512a9529c42d174358c692e5db720');\nhashMap.set('sbt','e1eb5c7f0171a9bb1b6bd4a36a91039a31b6c84e0983d91d930be31a69506d9e');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','4a3a7c812d34739c07685691e7e64c7d3127f9d7d4aff99dc45a25df97ed9745');\nhashMap.set('smithy','9641b91d065ffb63be0dd888139a0402dba41e550f8b44c592db9daf52109100');\nhashMap.set('sveltos','60dd75bb53ace31217211100d622fdb65068c6162758b6ae7103a6ce8bdc9f90');\nhashMap.set('swift','cdf063debdbf36888523ff8cec6d2d1b0ec6f49b37b2fbcd80b0d4f6a31114e1');\nhashMap.set('tekton','33948f5bdf7553909fa63744adb26da97ddf366e9499bccab1250879570267c9');\nhashMap.set('terraform','6788a8569ba9c50c763ffa2bed952a4314ae8e696c29f93d3eb7c4a12d99ce20');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','300f8fb3c09667654412d2f5dd8ab4882e0f5d1d7a8bc39794993d2e7e58d1b7');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','f423bfa2b42a2bfc0e38a33ebd4f9d452473e7ed4e7ad6384a99eb9a35d97479');\nhashMap.set('travis','f3e2f38e699c390b00ff481be5e91dceaa81609e93caf9a4214933de759c84fc');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','30774cd456c443be2cd236fd5b8cd1cb821f1437c6309842e34960832df3557f');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('xcodegen','dad511d88a9ce1dbdde8b9731f3da7f2bdaa4ca8a083294ee58d56da62ab1683');\nhashMap.set('jsonata','416bcf61144b276b3112814c6e6d261aa29608f46fbb0516c471d35c16f8f0d7');\nhashMap.set('regex','20be5247fdc164173871a051acb0527da017d0c155c653d7563601f55e7b3ff5');"],"mappings":";AAAA,MAAa,0BAAU,IAAI,IAAoB;AAE/C,QAAQ,IAAI,WAAU,kEAAkE;AACxF,QAAQ,IAAI,kBAAiB,kEAAkE;AAC/F,QAAQ,IAAI,OAAM,kEAAkE;AACpF,QAAQ,IAAI,OAAM,kEAAkE;AACpF,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,QAAO,kEAAkE;AACrF,QAAQ,IAAI,mBAAkB,kEAAkE;AAChG,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,kBAAiB,kEAAkE;AAC/F,QAAQ,IAAI,SAAQ,kEAAkE;AACtF,QAAQ,IAAI,gBAAe,kEAAkE;AAC7F,QAAQ,IAAI,YAAW,kEAAkE;AACzF,QAAQ,IAAI,SAAQ,kEAAkE;AACtF,QAAQ,IAAI,uBAAsB,kEAAkE;AACpG,QAAQ,IAAI,WAAU,kEAAkE;AACxF,QAAQ,IAAI,aAAY,kEAAkE;AAC1F,QAAQ,IAAI,cAAa,kEAAkE;AAC3F,QAAQ,IAAI,OAAM,kEAAkE;AACpF,QAAQ,IAAI,eAAc,kEAAkE;AAC5F,QAAQ,IAAI,WAAU,kEAAkE;AACxF,QAAQ,IAAI,QAAO,kEAAkE;AACrF,QAAQ,IAAI,SAAQ,kEAAkE;AACtF,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,YAAW,kEAAkE;AACzF,QAAQ,IAAI,cAAa,kEAAkE;AAC3F,QAAQ,IAAI,aAAY,kEAAkE;AAC1F,QAAQ,IAAI,YAAW,kEAAkE;AACzF,QAAQ,IAAI,SAAQ,kEAAkE;AACtF,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,YAAW,kEAAkE;AACzF,QAAQ,IAAI,cAAa,kEAAkE;AAC3F,QAAQ,IAAI,QAAO,kEAAkE;AACrF,QAAQ,IAAI,QAAO,kEAAkE;AACrF,QAAQ,IAAI,YAAW,kEAAkE;AACzF,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,gBAAe,kEAAkE;AAC7F,QAAQ,IAAI,kBAAiB,kEAAkE;AAC/F,QAAQ,IAAI,cAAa,kEAAkE;AAC3F,QAAQ,IAAI,WAAU,kEAAkE;AACxF,QAAQ,IAAI,SAAQ,kEAAkE;AACtF,QAAQ,IAAI,QAAO,kEAAkE;AACrF,QAAQ,IAAI,OAAM,kEAAkE;AACpF,QAAQ,IAAI,kBAAiB,kEAAkE;AAC/F,QAAQ,IAAI,kBAAiB,kEAAkE;AAC/F,QAAQ,IAAI,YAAW,kEAAkE;AACzF,QAAQ,IAAI,oBAAmB,kEAAkE;AACjG,QAAQ,IAAI,aAAY,kEAAkE;AAC1F,QAAQ,IAAI,SAAQ,kEAAkE;AACtF,QAAQ,IAAI,SAAQ,kEAAkE;AACtF,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,kBAAiB,kEAAkE;AAC/F,QAAQ,IAAI,iBAAgB,kEAAkE;AAC9F,QAAQ,IAAI,qBAAoB,kEAAkE;AAClG,QAAQ,IAAI,eAAc,kEAAkE;AAC5F,QAAQ,IAAI,YAAW,kEAAkE;AACzF,QAAQ,IAAI,YAAW,kEAAkE;AACzF,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,0BAAyB,kEAAkE;AACvG,QAAQ,IAAI,YAAW,kEAAkE;AACzF,QAAQ,IAAI,QAAO,kEAAkE;AACrF,QAAQ,IAAI,WAAU,kEAAkE;AACxF,QAAQ,IAAI,mBAAkB,kEAAkE;AAChG,QAAQ,IAAI,iBAAgB,kEAAkE;AAC9F,QAAQ,IAAI,cAAa,kEAAkE;AAC3F,QAAQ,IAAI,aAAY,kEAAkE;AAC1F,QAAQ,IAAI,aAAY,kEAAkE;AAC1F,QAAQ,IAAI,SAAQ,kEAAkE;AACtF,QAAQ,IAAI,iBAAgB,kEAAkE;AAC9F,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,QAAO,kEAAkE;AACrF,QAAQ,IAAI,QAAO,kEAAkE;AACrF,QAAQ,IAAI,OAAM,kEAAkE;AACpF,QAAQ,IAAI,OAAM,kEAAkE;AACpF,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,OAAM,kEAAkE;AACpF,QAAQ,IAAI,SAAQ,kEAAkE;AACtF,QAAQ,IAAI,OAAM,kEAAkE;AACpF,QAAQ,IAAI,OAAM,kEAAkE;AACpF,QAAQ,IAAI,QAAO,kEAAkE;AACrF,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,eAAc,kEAAkE;AAC5F,QAAQ,IAAI,oBAAmB,kEAAkE;AACjG,QAAQ,IAAI,aAAY,kEAAkE;AAC1F,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,QAAO,kEAAkE;AACrF,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,cAAa,kEAAkE;AAC3F,QAAQ,IAAI,SAAQ,kEAAkE;AACtF,QAAQ,IAAI,OAAM,kEAAkE;AACpF,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,SAAQ,kEAAkE;AACtF,QAAQ,IAAI,WAAU,kEAAkE;AACxF,QAAQ,IAAI,mBAAkB,kEAAkE;AAChG,QAAQ,IAAI,gBAAe,kEAAkE;AAC7F,QAAQ,IAAI,mBAAkB,kEAAkE;AAChG,QAAQ,IAAI,kBAAiB,kEAAkE;AAC/F,QAAQ,IAAI,OAAM,kEAAkE;AACpF,QAAQ,IAAI,YAAW,kEAAkE;AACzF,QAAQ,IAAI,aAAY,kEAAkE;AAC1F,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,WAAU,kEAAkE;AACxF,QAAQ,IAAI,SAAQ,kEAAkE;AACtF,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,aAAY,kEAAkE;AAC1F,QAAQ,IAAI,qBAAoB,kEAAkE;AAClG,QAAQ,IAAI,cAAa,kEAAkE;AAC3F,QAAQ,IAAI,sBAAqB,kEAAkE;AACnG,QAAQ,IAAI,iBAAgB,kEAAkE;AAC9F,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,SAAQ,kEAAkE;AACtF,QAAQ,IAAI,WAAU,kEAAkE;AACxF,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,UAAS,kEAAkE;AACvF,QAAQ,IAAI,cAAa,kEAAkE;AAC3F,QAAQ,IAAI,YAAW,kEAAkE;AACzF,QAAQ,IAAI,WAAU,kEAAkE;AACxF,QAAQ,IAAI,SAAQ,kEAAkE"}
@@ -45,7 +45,7 @@ async function extractPackageFile(content, packageFile, config) {
45
45
  delete lockFiles.packageLock;
46
46
  delete lockFiles.shrinkwrapJson;
47
47
  if (hasMultipleLockFiles(lockFiles)) logger.warn("Updating multiple npm lock files is deprecated and support will be removed in future versions.");
48
- const { npmrc, npmrcFileName } = await resolveNpmrc(packageFile, config);
48
+ const { npmrc, npmrcFileName, repoNpmrc } = await resolveNpmrc(packageFile, config);
49
49
  const yarnrcYmlFileName = await findLocalSiblingOrParent(packageFile, ".yarnrc.yml");
50
50
  const yarnZeroInstall = yarnrcYmlFileName ? await isZeroInstall(yarnrcYmlFileName) : false;
51
51
  let yarnrcConfig = null;
@@ -101,7 +101,8 @@ async function extractPackageFile(content, packageFile, config) {
101
101
  yarnZeroInstall,
102
102
  hasPackageManager: isNonEmptyStringAndNotWhitespace(packageJson.packageManager) || hasDevEnginesPackageManager(packageJson),
103
103
  workspacesPackages,
104
- npmrcFileName
104
+ npmrcFileName,
105
+ repoNpmrc
105
106
  },
106
107
  skipInstalls,
107
108
  extractedConstraints
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../lib/modules/manager/npm/extract/index.ts"],"sourcesContent":["import {\n isArray,\n isNonEmptyStringAndNotWhitespace,\n isString,\n} from '@sindresorhus/is';\nimport upath from 'upath';\nimport { logger } from '../../../../logger/index.ts';\nimport {\n findLocalSiblingOrParent,\n getSiblingFileName,\n readLocalFile,\n} from '../../../../util/fs/index.ts';\nimport { NpmDatasource } from '../../../datasource/npm/index.ts';\n\nimport type {\n ExtractConfig,\n NpmrcPackageFile,\n NpmrcPackageFileContent,\n} from '../../types.ts';\nimport { resolveNpmrc } from '../npmrc.ts';\nimport { PnpmWorkspaceFile, type YarnConfig } from '../schema.ts';\nimport type { NpmLockFiles, NpmManagerData } from '../types.ts';\nimport { getExtractedConstraints } from './common/dependency.ts';\nimport {\n extractPackageJson,\n hasDevEnginesPackageManager,\n hasPackageManager,\n} from './common/package-file.ts';\nimport {\n applyPnpmWorkspaceRegistries,\n extractPnpmWorkspaceFile,\n} from './pnpm.ts';\nimport { postExtract } from './post/index.ts';\nimport type { NpmPackage } from './types.ts';\nimport { extractYarnCatalogs, isZeroInstall } from './yarn.ts';\nimport {\n loadConfigFromLegacyYarnrc,\n loadConfigFromYarnrcYml,\n resolveRegistryUrl,\n} from './yarnrc.ts';\n\nfunction hasMultipleLockFiles(lockFiles: NpmLockFiles): boolean {\n return Object.values(lockFiles).filter(isString).length > 1;\n}\n\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n config: ExtractConfig,\n): Promise<NpmrcPackageFileContent<NpmManagerData> | null> {\n logger.trace(`npm.extractPackageFile(${packageFile})`);\n logger.trace({ content });\n let packageJson: NpmPackage;\n try {\n packageJson = JSON.parse(content);\n } catch {\n logger.debug({ packageFile }, `Invalid JSON`);\n return null;\n }\n\n const res = extractPackageJson(packageJson, packageFile);\n if (!res) {\n return null;\n }\n\n let workspacesPackages: string[] | undefined;\n if (isArray(packageJson.workspaces)) {\n workspacesPackages = packageJson.workspaces;\n } else {\n workspacesPackages = packageJson.workspaces?.packages;\n }\n\n const lockFiles: NpmLockFiles = {\n yarnLock: 'yarn.lock',\n packageLock: 'package-lock.json',\n shrinkwrapJson: 'npm-shrinkwrap.json',\n pnpmLockFile: 'pnpm-lock.yaml',\n };\n\n for (const [key, val] of Object.entries(lockFiles) as [\n 'yarnLock' | 'packageLock' | 'shrinkwrapJson' | 'pnpmLockFile',\n string,\n ][]) {\n const filePath = getSiblingFileName(packageFile, val);\n if (await readLocalFile(filePath, 'utf8')) {\n lockFiles[key] = filePath;\n } else {\n lockFiles[key] = undefined;\n }\n }\n lockFiles.npmLock = lockFiles.packageLock ?? lockFiles.shrinkwrapJson;\n delete lockFiles.packageLock;\n delete lockFiles.shrinkwrapJson;\n\n if (hasMultipleLockFiles(lockFiles)) {\n logger.warn(\n 'Updating multiple npm lock files is deprecated and support will be removed in future versions.',\n );\n }\n\n const { npmrc, npmrcFileName } = await resolveNpmrc(packageFile, config);\n\n const yarnrcYmlFileName = await findLocalSiblingOrParent(\n packageFile,\n '.yarnrc.yml',\n );\n const yarnZeroInstall = yarnrcYmlFileName\n ? await isZeroInstall(yarnrcYmlFileName)\n : false;\n\n let yarnrcConfig: YarnConfig | null = null;\n const repoYarnrcYml = yarnrcYmlFileName\n ? await readLocalFile(yarnrcYmlFileName, 'utf8')\n : null;\n if (isString(repoYarnrcYml) && repoYarnrcYml.trim().length > 0) {\n yarnrcConfig = loadConfigFromYarnrcYml(repoYarnrcYml);\n }\n\n const legacyYarnrcFileName = await findLocalSiblingOrParent(\n packageFile,\n '.yarnrc',\n );\n const repoLegacyYarnrc = legacyYarnrcFileName\n ? await readLocalFile(legacyYarnrcFileName, 'utf8')\n : null;\n if (isString(repoLegacyYarnrc) && repoLegacyYarnrc.trim().length > 0) {\n yarnrcConfig = loadConfigFromLegacyYarnrc(repoLegacyYarnrc);\n }\n\n let pnpmWorkspaceRegistry: string | undefined;\n let pnpmWorkspaceRegistries: Record<string, string> | undefined;\n const pnpmWorkspaceYamlFileName = await findLocalSiblingOrParent(\n packageFile,\n 'pnpm-workspace.yaml',\n );\n const repoPnpmWorkspaceYaml = pnpmWorkspaceYamlFileName\n ? await readLocalFile(pnpmWorkspaceYamlFileName, 'utf8')\n : null;\n if (isNonEmptyStringAndNotWhitespace(repoPnpmWorkspaceYaml)) {\n const parsed = await PnpmWorkspaceFile.safeParseAsync(\n repoPnpmWorkspaceYaml,\n );\n if (parsed.success) {\n pnpmWorkspaceRegistry = parsed.data.registry;\n pnpmWorkspaceRegistries = parsed.data.registries;\n } else {\n logger.debug(\n { packageFile: pnpmWorkspaceYamlFileName, err: parsed.error },\n 'Failed to parse pnpm-workspace.yaml',\n );\n }\n }\n\n if (res.deps.length === 0) {\n logger.debug('Package file has no deps');\n if (!(\n !!res.managerData?.packageJsonName ||\n !!res.packageFileVersion ||\n !!npmrc ||\n workspacesPackages\n )) {\n logger.debug('Skipping file');\n return null;\n }\n }\n let skipInstalls = config.skipInstalls;\n if (skipInstalls === null) {\n const hasFancyRefs = !!res.deps.some(\n (dep) =>\n !!dep.currentValue?.startsWith('file:') ||\n !!dep.currentValue?.startsWith('npm:'),\n );\n if ((hasFancyRefs && !!lockFiles.npmLock) || yarnZeroInstall) {\n // https://github.com/npm/cli/issues/1432\n // Explanation:\n // - npm install --package-lock-only is buggy for transitive deps in file: and npm: references\n // - So we set skipInstalls to false if file: or npm: refs are found *and* the user hasn't explicitly set the value already\n // - Also, do not skip install if Yarn zero-install is used\n logger.debug('Automatically setting skipInstalls to false');\n skipInstalls = false;\n } else {\n skipInstalls = true;\n }\n }\n\n const extractedConstraints = getExtractedConstraints(res.deps);\n\n if (yarnrcConfig) {\n for (const dep of res.deps) {\n // v8 ignore else -- TODO: add tests #40625\n if (dep.depName) {\n const registryUrlFromYarnrcConfig = resolveRegistryUrl(\n dep.packageName ?? dep.depName,\n yarnrcConfig,\n );\n if (\n registryUrlFromYarnrcConfig &&\n dep.datasource === NpmDatasource.id\n ) {\n dep.registryUrls = [registryUrlFromYarnrcConfig];\n }\n }\n }\n }\n\n // Applied after the yarnrc resolution so pnpm-workspace.yaml wins in pnpm repos\n applyPnpmWorkspaceRegistries(\n res.deps,\n pnpmWorkspaceRegistries,\n pnpmWorkspaceRegistry,\n );\n\n return {\n ...res,\n npmrc,\n managerData: {\n ...res.managerData,\n ...lockFiles,\n yarnZeroInstall,\n hasPackageManager:\n isNonEmptyStringAndNotWhitespace(packageJson.packageManager) ||\n hasDevEnginesPackageManager(packageJson),\n workspacesPackages,\n npmrcFileName, // store npmrc file name so we can later tell if it came from the workspace or not\n },\n skipInstalls,\n extractedConstraints,\n };\n}\n\nexport async function extractAllPackageFiles(\n config: ExtractConfig,\n packageFiles: string[],\n): Promise<NpmrcPackageFile<NpmManagerData>[]> {\n const npmFiles: NpmrcPackageFile<NpmManagerData>[] = [];\n for (const packageFile of packageFiles) {\n const content = await readLocalFile(packageFile, 'utf8');\n if (content) {\n // pnpm workspace files are their own package file, defined via managerFilePatterns.\n if (packageFile.endsWith('pnpm-workspace.yaml')) {\n logger.trace(\n { packageFile },\n `Extracting as a pnpm-workspace.yaml file`,\n );\n const parsedPnpmWorkspaceYaml =\n await PnpmWorkspaceFile.safeParseAsync(content);\n if (parsedPnpmWorkspaceYaml.success) {\n logger.trace(\n { packageFile },\n `Extracting file as a pnpm workspace YAML file`,\n );\n const deps = await extractPnpmWorkspaceFile(\n parsedPnpmWorkspaceYaml.data,\n packageFile,\n );\n // v8 ignore else -- TODO: add test #40625\n if (deps) {\n npmFiles.push({\n ...deps,\n packageFile,\n });\n }\n } else {\n logger.warn(\n { packageFile, err: parsedPnpmWorkspaceYaml.error },\n `Failed to parse pnpm-workspace.yaml file`,\n );\n }\n } else {\n if (packageFile.endsWith('json')) {\n logger.trace({ packageFile }, `Extracting as a package.json file`);\n\n const deps = await extractPackageFile(content, packageFile, config);\n // v8 ignore else -- TODO: add tests #40625\n if (deps) {\n npmFiles.push({\n ...deps,\n packageFile,\n });\n }\n } else {\n logger.trace({ packageFile }, `Extracting as a .yarnrc.yml file`);\n\n const yarnConfig = loadConfigFromYarnrcYml(content);\n\n // v8 ignore else -- TODO: add tests #40625\n if (yarnConfig?.catalogs || yarnConfig?.catalog) {\n const hasPackageManagerResult = await hasPackageManager(\n upath.dirname(packageFile),\n );\n const catalogsDeps = await extractYarnCatalogs(\n { catalog: yarnConfig.catalog, catalogs: yarnConfig.catalogs },\n packageFile,\n hasPackageManagerResult,\n );\n // v8 ignore else -- TODO: add tests #40625\n if (catalogsDeps) {\n npmFiles.push({\n ...catalogsDeps,\n packageFile,\n });\n }\n }\n }\n }\n } else {\n logger.debug({ packageFile }, `No content found`);\n }\n }\n\n await postExtract(npmFiles);\n return npmFiles;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../lib/modules/manager/npm/extract/index.ts"],"sourcesContent":["import {\n isArray,\n isNonEmptyStringAndNotWhitespace,\n isString,\n} from '@sindresorhus/is';\nimport upath from 'upath';\nimport { logger } from '../../../../logger/index.ts';\nimport {\n findLocalSiblingOrParent,\n getSiblingFileName,\n readLocalFile,\n} from '../../../../util/fs/index.ts';\nimport { NpmDatasource } from '../../../datasource/npm/index.ts';\n\nimport type {\n ExtractConfig,\n NpmrcPackageFile,\n NpmrcPackageFileContent,\n} from '../../types.ts';\nimport { resolveNpmrc } from '../npmrc.ts';\nimport { PnpmWorkspaceFile, type YarnConfig } from '../schema.ts';\nimport type { NpmLockFiles, NpmManagerData } from '../types.ts';\nimport { getExtractedConstraints } from './common/dependency.ts';\nimport {\n extractPackageJson,\n hasDevEnginesPackageManager,\n hasPackageManager,\n} from './common/package-file.ts';\nimport {\n applyPnpmWorkspaceRegistries,\n extractPnpmWorkspaceFile,\n} from './pnpm.ts';\nimport { postExtract } from './post/index.ts';\nimport type { NpmPackage } from './types.ts';\nimport { extractYarnCatalogs, isZeroInstall } from './yarn.ts';\nimport {\n loadConfigFromLegacyYarnrc,\n loadConfigFromYarnrcYml,\n resolveRegistryUrl,\n} from './yarnrc.ts';\n\nfunction hasMultipleLockFiles(lockFiles: NpmLockFiles): boolean {\n return Object.values(lockFiles).filter(isString).length > 1;\n}\n\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n config: ExtractConfig,\n): Promise<NpmrcPackageFileContent<NpmManagerData> | null> {\n logger.trace(`npm.extractPackageFile(${packageFile})`);\n logger.trace({ content });\n let packageJson: NpmPackage;\n try {\n packageJson = JSON.parse(content);\n } catch {\n logger.debug({ packageFile }, `Invalid JSON`);\n return null;\n }\n\n const res = extractPackageJson(packageJson, packageFile);\n if (!res) {\n return null;\n }\n\n let workspacesPackages: string[] | undefined;\n if (isArray(packageJson.workspaces)) {\n workspacesPackages = packageJson.workspaces;\n } else {\n workspacesPackages = packageJson.workspaces?.packages;\n }\n\n const lockFiles: NpmLockFiles = {\n yarnLock: 'yarn.lock',\n packageLock: 'package-lock.json',\n shrinkwrapJson: 'npm-shrinkwrap.json',\n pnpmLockFile: 'pnpm-lock.yaml',\n };\n\n for (const [key, val] of Object.entries(lockFiles) as [\n 'yarnLock' | 'packageLock' | 'shrinkwrapJson' | 'pnpmLockFile',\n string,\n ][]) {\n const filePath = getSiblingFileName(packageFile, val);\n if (await readLocalFile(filePath, 'utf8')) {\n lockFiles[key] = filePath;\n } else {\n lockFiles[key] = undefined;\n }\n }\n lockFiles.npmLock = lockFiles.packageLock ?? lockFiles.shrinkwrapJson;\n delete lockFiles.packageLock;\n delete lockFiles.shrinkwrapJson;\n\n if (hasMultipleLockFiles(lockFiles)) {\n logger.warn(\n 'Updating multiple npm lock files is deprecated and support will be removed in future versions.',\n );\n }\n\n const { npmrc, npmrcFileName, repoNpmrc } = await resolveNpmrc(\n packageFile,\n config,\n );\n\n const yarnrcYmlFileName = await findLocalSiblingOrParent(\n packageFile,\n '.yarnrc.yml',\n );\n const yarnZeroInstall = yarnrcYmlFileName\n ? await isZeroInstall(yarnrcYmlFileName)\n : false;\n\n let yarnrcConfig: YarnConfig | null = null;\n const repoYarnrcYml = yarnrcYmlFileName\n ? await readLocalFile(yarnrcYmlFileName, 'utf8')\n : null;\n if (isString(repoYarnrcYml) && repoYarnrcYml.trim().length > 0) {\n yarnrcConfig = loadConfigFromYarnrcYml(repoYarnrcYml);\n }\n\n const legacyYarnrcFileName = await findLocalSiblingOrParent(\n packageFile,\n '.yarnrc',\n );\n const repoLegacyYarnrc = legacyYarnrcFileName\n ? await readLocalFile(legacyYarnrcFileName, 'utf8')\n : null;\n if (isString(repoLegacyYarnrc) && repoLegacyYarnrc.trim().length > 0) {\n yarnrcConfig = loadConfigFromLegacyYarnrc(repoLegacyYarnrc);\n }\n\n let pnpmWorkspaceRegistry: string | undefined;\n let pnpmWorkspaceRegistries: Record<string, string> | undefined;\n const pnpmWorkspaceYamlFileName = await findLocalSiblingOrParent(\n packageFile,\n 'pnpm-workspace.yaml',\n );\n const repoPnpmWorkspaceYaml = pnpmWorkspaceYamlFileName\n ? await readLocalFile(pnpmWorkspaceYamlFileName, 'utf8')\n : null;\n if (isNonEmptyStringAndNotWhitespace(repoPnpmWorkspaceYaml)) {\n const parsed = await PnpmWorkspaceFile.safeParseAsync(\n repoPnpmWorkspaceYaml,\n );\n if (parsed.success) {\n pnpmWorkspaceRegistry = parsed.data.registry;\n pnpmWorkspaceRegistries = parsed.data.registries;\n } else {\n logger.debug(\n { packageFile: pnpmWorkspaceYamlFileName, err: parsed.error },\n 'Failed to parse pnpm-workspace.yaml',\n );\n }\n }\n\n if (res.deps.length === 0) {\n logger.debug('Package file has no deps');\n if (!(\n !!res.managerData?.packageJsonName ||\n !!res.packageFileVersion ||\n !!npmrc ||\n workspacesPackages\n )) {\n logger.debug('Skipping file');\n return null;\n }\n }\n let skipInstalls = config.skipInstalls;\n if (skipInstalls === null) {\n const hasFancyRefs = !!res.deps.some(\n (dep) =>\n !!dep.currentValue?.startsWith('file:') ||\n !!dep.currentValue?.startsWith('npm:'),\n );\n if ((hasFancyRefs && !!lockFiles.npmLock) || yarnZeroInstall) {\n // https://github.com/npm/cli/issues/1432\n // Explanation:\n // - npm install --package-lock-only is buggy for transitive deps in file: and npm: references\n // - So we set skipInstalls to false if file: or npm: refs are found *and* the user hasn't explicitly set the value already\n // - Also, do not skip install if Yarn zero-install is used\n logger.debug('Automatically setting skipInstalls to false');\n skipInstalls = false;\n } else {\n skipInstalls = true;\n }\n }\n\n const extractedConstraints = getExtractedConstraints(res.deps);\n\n if (yarnrcConfig) {\n for (const dep of res.deps) {\n // v8 ignore else -- TODO: add tests #40625\n if (dep.depName) {\n const registryUrlFromYarnrcConfig = resolveRegistryUrl(\n dep.packageName ?? dep.depName,\n yarnrcConfig,\n );\n if (\n registryUrlFromYarnrcConfig &&\n dep.datasource === NpmDatasource.id\n ) {\n dep.registryUrls = [registryUrlFromYarnrcConfig];\n }\n }\n }\n }\n\n // Applied after the yarnrc resolution so pnpm-workspace.yaml wins in pnpm repos\n applyPnpmWorkspaceRegistries(\n res.deps,\n pnpmWorkspaceRegistries,\n pnpmWorkspaceRegistry,\n );\n\n return {\n ...res,\n npmrc,\n managerData: {\n ...res.managerData,\n ...lockFiles,\n yarnZeroInstall,\n hasPackageManager:\n isNonEmptyStringAndNotWhitespace(packageJson.packageManager) ||\n hasDevEnginesPackageManager(packageJson),\n workspacesPackages,\n npmrcFileName, // store npmrc file name so we can later tell if it came from the workspace or not\n repoNpmrc, // stored instead of `npmrc` in the repository cache, from which `npmrc` is rebuilt\n },\n skipInstalls,\n extractedConstraints,\n };\n}\n\nexport async function extractAllPackageFiles(\n config: ExtractConfig,\n packageFiles: string[],\n): Promise<NpmrcPackageFile<NpmManagerData>[]> {\n const npmFiles: NpmrcPackageFile<NpmManagerData>[] = [];\n for (const packageFile of packageFiles) {\n const content = await readLocalFile(packageFile, 'utf8');\n if (content) {\n // pnpm workspace files are their own package file, defined via managerFilePatterns.\n if (packageFile.endsWith('pnpm-workspace.yaml')) {\n logger.trace(\n { packageFile },\n `Extracting as a pnpm-workspace.yaml file`,\n );\n const parsedPnpmWorkspaceYaml =\n await PnpmWorkspaceFile.safeParseAsync(content);\n if (parsedPnpmWorkspaceYaml.success) {\n logger.trace(\n { packageFile },\n `Extracting file as a pnpm workspace YAML file`,\n );\n const deps = await extractPnpmWorkspaceFile(\n parsedPnpmWorkspaceYaml.data,\n packageFile,\n );\n // v8 ignore else -- TODO: add test #40625\n if (deps) {\n npmFiles.push({\n ...deps,\n packageFile,\n });\n }\n } else {\n logger.warn(\n { packageFile, err: parsedPnpmWorkspaceYaml.error },\n `Failed to parse pnpm-workspace.yaml file`,\n );\n }\n } else {\n if (packageFile.endsWith('json')) {\n logger.trace({ packageFile }, `Extracting as a package.json file`);\n\n const deps = await extractPackageFile(content, packageFile, config);\n // v8 ignore else -- TODO: add tests #40625\n if (deps) {\n npmFiles.push({\n ...deps,\n packageFile,\n });\n }\n } else {\n logger.trace({ packageFile }, `Extracting as a .yarnrc.yml file`);\n\n const yarnConfig = loadConfigFromYarnrcYml(content);\n\n // v8 ignore else -- TODO: add tests #40625\n if (yarnConfig?.catalogs || yarnConfig?.catalog) {\n const hasPackageManagerResult = await hasPackageManager(\n upath.dirname(packageFile),\n );\n const catalogsDeps = await extractYarnCatalogs(\n { catalog: yarnConfig.catalog, catalogs: yarnConfig.catalogs },\n packageFile,\n hasPackageManagerResult,\n );\n // v8 ignore else -- TODO: add tests #40625\n if (catalogsDeps) {\n npmFiles.push({\n ...catalogsDeps,\n packageFile,\n });\n }\n }\n }\n }\n } else {\n logger.debug({ packageFile }, `No content found`);\n }\n }\n\n await postExtract(npmFiles);\n return npmFiles;\n}\n"],"mappings":"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"}
@@ -3,14 +3,14 @@ import { logger } from "../../../../../logger/index.js";
3
3
  import { getParentDir, getSiblingFileName } from "../../../../../util/fs/index.js";
4
4
  import { detectPnpmWorkspaces } from "../pnpm.js";
5
5
  import { matchesAnyPattern } from "../utils.js";
6
- import { isArray, isString, isTruthy } from "@sindresorhus/is";
6
+ import { isArray, isNullOrUndefined, isString, isTruthy } from "@sindresorhus/is";
7
7
  //#region lib/modules/manager/npm/extract/post/monorepo.ts
8
8
  async function detectMonorepos(packageFiles) {
9
9
  await detectPnpmWorkspaces(packageFiles);
10
10
  logger.debug("Detecting workspaces");
11
11
  for (const p of packageFiles) {
12
12
  const { packageFile, npmrc, managerData = {}, skipInstalls } = p;
13
- const { npmLock, yarnZeroInstall, hasPackageManager, workspacesPackages, yarnLock } = managerData;
13
+ const { npmLock, yarnZeroInstall, hasPackageManager, workspacesPackages, yarnLock, repoNpmrc } = managerData;
14
14
  const packages = workspacesPackages;
15
15
  if (packages?.length) {
16
16
  const internalPackagePatterns = (isArray(packages) ? packages : [packages]).map((pattern) => getSiblingFileName(packageFile, pattern));
@@ -27,7 +27,10 @@ async function detectMonorepos(packageFiles) {
27
27
  subPackage.managerData.npmLock ??= npmLock;
28
28
  subPackage.skipInstalls = skipInstalls && subPackage.skipInstalls;
29
29
  subPackage.managerData.workspacesPackages = workspacesPackages;
30
- subPackage.npmrc ??= npmrc;
30
+ if (isNullOrUndefined(subPackage.npmrc)) {
31
+ subPackage.npmrc = npmrc;
32
+ if (repoNpmrc) subPackage.managerData.repoNpmrc = repoNpmrc;
33
+ }
31
34
  if (p.extractedConstraints) subPackage.extractedConstraints = {
32
35
  ...p.extractedConstraints,
33
36
  ...subPackage.extractedConstraints
@@ -1 +1 @@
1
- {"version":3,"file":"monorepo.js","names":[],"sources":["../../../../../../lib/modules/manager/npm/extract/post/monorepo.ts"],"sourcesContent":["import { isArray, isString, isTruthy } from '@sindresorhus/is';\nimport { logger } from '../../../../../logger/index.ts';\nimport {\n getParentDir,\n getSiblingFileName,\n} from '../../../../../util/fs/index.ts';\nimport { coerceObject } from '../../../../../util/object.ts';\nimport type { NpmrcPackageFile } from '../../../types.ts';\nimport type { NpmManagerData } from '../../types.ts';\nimport { detectPnpmWorkspaces } from '../pnpm.ts';\nimport { matchesAnyPattern } from '../utils.ts';\n\nexport async function detectMonorepos(\n packageFiles: Partial<NpmrcPackageFile<NpmManagerData>>[],\n): Promise<void> {\n await detectPnpmWorkspaces(packageFiles);\n logger.debug('Detecting workspaces');\n for (const p of packageFiles) {\n const { packageFile, npmrc, managerData = {}, skipInstalls } = p;\n const {\n npmLock,\n yarnZeroInstall,\n hasPackageManager,\n workspacesPackages,\n yarnLock,\n } = managerData;\n\n const packages = workspacesPackages as string[] | undefined;\n if (packages?.length) {\n const internalPackagePatterns = (\n isArray(packages) ? packages : [packages]\n ).map((pattern) => getSiblingFileName(packageFile!, pattern));\n const internalPackageFiles = packageFiles.filter((sp) =>\n matchesAnyPattern(\n getParentDir(sp.packageFile!),\n internalPackagePatterns,\n ),\n );\n const internalPackageNames = internalPackageFiles\n .map((sp) => sp.managerData?.packageJsonName)\n .filter(isTruthy);\n\n p.deps?.forEach((dep) => {\n if (\n isString(dep.depName) &&\n internalPackageNames.includes(dep.depName)\n ) {\n dep.isInternal = true;\n }\n });\n\n for (const subPackage of internalPackageFiles) {\n subPackage.managerData = coerceObject(subPackage.managerData);\n subPackage.managerData.yarnZeroInstall = yarnZeroInstall;\n subPackage.managerData.hasPackageManager = hasPackageManager;\n subPackage.managerData.yarnLock ??= yarnLock;\n subPackage.managerData.npmLock ??= npmLock;\n subPackage.skipInstalls = skipInstalls && subPackage.skipInstalls; // skip if both are true\n subPackage.managerData.workspacesPackages = workspacesPackages;\n subPackage.npmrc ??= npmrc;\n\n if (p.extractedConstraints) {\n subPackage.extractedConstraints = {\n ...p.extractedConstraints,\n ...subPackage.extractedConstraints,\n };\n }\n\n subPackage.deps?.forEach((dep) => {\n if (\n isString(dep.depName) &&\n internalPackageNames.includes(dep.depName)\n ) {\n dep.isInternal = true;\n }\n });\n }\n }\n }\n}\n"],"mappings":";;;;;;;AAYA,eAAsB,gBACpB,cACe;CACf,MAAM,qBAAqB,YAAY;CACvC,OAAO,MAAM,sBAAsB;CACnC,KAAK,MAAM,KAAK,cAAc;EAC5B,MAAM,EAAE,aAAa,OAAO,cAAc,CAAC,GAAG,iBAAiB;EAC/D,MAAM,EACJ,SACA,iBACA,mBACA,oBACA,aACE;EAEJ,MAAM,WAAW;EACjB,IAAI,UAAU,QAAQ;GACpB,MAAM,2BACJ,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ,EAAA,CACxC,KAAK,YAAY,mBAAmB,aAAc,OAAO,CAAC;GAC5D,MAAM,uBAAuB,aAAa,QAAQ,OAChD,kBACE,aAAa,GAAG,WAAY,GAC5B,uBACF,CACF;GACA,MAAM,uBAAuB,qBAC1B,KAAK,OAAO,GAAG,aAAa,eAAe,CAAC,CAC5C,OAAO,QAAQ;GAElB,EAAE,MAAM,SAAS,QAAQ;IACvB,IACE,SAAS,IAAI,OAAO,KACpB,qBAAqB,SAAS,IAAI,OAAO,GAEzC,IAAI,aAAa;GAErB,CAAC;GAED,KAAK,MAAM,cAAc,sBAAsB;IAC7C,WAAW,cAAc,aAAa,WAAW,WAAW;IAC5D,WAAW,YAAY,kBAAkB;IACzC,WAAW,YAAY,oBAAoB;IAC3C,WAAW,YAAY,aAAa;IACpC,WAAW,YAAY,YAAY;IACnC,WAAW,eAAe,gBAAgB,WAAW;IACrD,WAAW,YAAY,qBAAqB;IAC5C,WAAW,UAAU;IAErB,IAAI,EAAE,sBACJ,WAAW,uBAAuB;KAChC,GAAG,EAAE;KACL,GAAG,WAAW;IAChB;IAGF,WAAW,MAAM,SAAS,QAAQ;KAChC,IACE,SAAS,IAAI,OAAO,KACpB,qBAAqB,SAAS,IAAI,OAAO,GAEzC,IAAI,aAAa;IAErB,CAAC;GACH;EACF;CACF;AACF"}
1
+ {"version":3,"file":"monorepo.js","names":[],"sources":["../../../../../../lib/modules/manager/npm/extract/post/monorepo.ts"],"sourcesContent":["import {\n isArray,\n isNullOrUndefined,\n isString,\n isTruthy,\n} from '@sindresorhus/is';\nimport { logger } from '../../../../../logger/index.ts';\nimport {\n getParentDir,\n getSiblingFileName,\n} from '../../../../../util/fs/index.ts';\nimport { coerceObject } from '../../../../../util/object.ts';\nimport type { NpmrcPackageFile } from '../../../types.ts';\nimport type { NpmManagerData } from '../../types.ts';\nimport { detectPnpmWorkspaces } from '../pnpm.ts';\nimport { matchesAnyPattern } from '../utils.ts';\n\nexport async function detectMonorepos(\n packageFiles: Partial<NpmrcPackageFile<NpmManagerData>>[],\n): Promise<void> {\n await detectPnpmWorkspaces(packageFiles);\n logger.debug('Detecting workspaces');\n for (const p of packageFiles) {\n const { packageFile, npmrc, managerData = {}, skipInstalls } = p;\n const {\n npmLock,\n yarnZeroInstall,\n hasPackageManager,\n workspacesPackages,\n yarnLock,\n repoNpmrc,\n } = managerData;\n\n const packages = workspacesPackages as string[] | undefined;\n if (packages?.length) {\n const internalPackagePatterns = (\n isArray(packages) ? packages : [packages]\n ).map((pattern) => getSiblingFileName(packageFile!, pattern));\n const internalPackageFiles = packageFiles.filter((sp) =>\n matchesAnyPattern(\n getParentDir(sp.packageFile!),\n internalPackagePatterns,\n ),\n );\n const internalPackageNames = internalPackageFiles\n .map((sp) => sp.managerData?.packageJsonName)\n .filter(isTruthy);\n\n p.deps?.forEach((dep) => {\n if (\n isString(dep.depName) &&\n internalPackageNames.includes(dep.depName)\n ) {\n dep.isInternal = true;\n }\n });\n\n for (const subPackage of internalPackageFiles) {\n subPackage.managerData = coerceObject(subPackage.managerData);\n subPackage.managerData.yarnZeroInstall = yarnZeroInstall;\n subPackage.managerData.hasPackageManager = hasPackageManager;\n subPackage.managerData.yarnLock ??= yarnLock;\n subPackage.managerData.npmLock ??= npmLock;\n subPackage.skipInstalls = skipInstalls && subPackage.skipInstalls; // skip if both are true\n subPackage.managerData.workspacesPackages = workspacesPackages;\n if (isNullOrUndefined(subPackage.npmrc)) {\n subPackage.npmrc = npmrc;\n // so that the inherited `npmrc` is rebuilt the same way from the cache\n if (repoNpmrc) {\n subPackage.managerData.repoNpmrc = repoNpmrc;\n }\n }\n\n if (p.extractedConstraints) {\n subPackage.extractedConstraints = {\n ...p.extractedConstraints,\n ...subPackage.extractedConstraints,\n };\n }\n\n subPackage.deps?.forEach((dep) => {\n if (\n isString(dep.depName) &&\n internalPackageNames.includes(dep.depName)\n ) {\n dep.isInternal = true;\n }\n });\n }\n }\n }\n}\n"],"mappings":";;;;;;;AAiBA,eAAsB,gBACpB,cACe;CACf,MAAM,qBAAqB,YAAY;CACvC,OAAO,MAAM,sBAAsB;CACnC,KAAK,MAAM,KAAK,cAAc;EAC5B,MAAM,EAAE,aAAa,OAAO,cAAc,CAAC,GAAG,iBAAiB;EAC/D,MAAM,EACJ,SACA,iBACA,mBACA,oBACA,UACA,cACE;EAEJ,MAAM,WAAW;EACjB,IAAI,UAAU,QAAQ;GACpB,MAAM,2BACJ,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ,EAAA,CACxC,KAAK,YAAY,mBAAmB,aAAc,OAAO,CAAC;GAC5D,MAAM,uBAAuB,aAAa,QAAQ,OAChD,kBACE,aAAa,GAAG,WAAY,GAC5B,uBACF,CACF;GACA,MAAM,uBAAuB,qBAC1B,KAAK,OAAO,GAAG,aAAa,eAAe,CAAC,CAC5C,OAAO,QAAQ;GAElB,EAAE,MAAM,SAAS,QAAQ;IACvB,IACE,SAAS,IAAI,OAAO,KACpB,qBAAqB,SAAS,IAAI,OAAO,GAEzC,IAAI,aAAa;GAErB,CAAC;GAED,KAAK,MAAM,cAAc,sBAAsB;IAC7C,WAAW,cAAc,aAAa,WAAW,WAAW;IAC5D,WAAW,YAAY,kBAAkB;IACzC,WAAW,YAAY,oBAAoB;IAC3C,WAAW,YAAY,aAAa;IACpC,WAAW,YAAY,YAAY;IACnC,WAAW,eAAe,gBAAgB,WAAW;IACrD,WAAW,YAAY,qBAAqB;IAC5C,IAAI,kBAAkB,WAAW,KAAK,GAAG;KACvC,WAAW,QAAQ;KAEnB,IAAI,WACF,WAAW,YAAY,YAAY;IAEvC;IAEA,IAAI,EAAE,sBACJ,WAAW,uBAAuB;KAChC,GAAG,EAAE;KACL,GAAG,WAAW;IAChB;IAGF,WAAW,MAAM,SAAS,QAAQ;KAChC,IACE,SAAS,IAAI,OAAO,KACpB,qBAAqB,SAAS,IAAI,OAAO,GAEzC,IAAI,aAAa;IAErB,CAAC;GACH;EACF;CACF;AACF"}