renovate 44.90.3 → 44.91.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/options/index.js +1 -1
- package/dist/config/options/index.js.map +1 -1
- package/dist/global-config-option-defaults.generated.js +1 -1
- package/dist/global-config-option-defaults.generated.js.map +1 -1
- package/dist/modules/manager/ansible-galaxy/collections.js +4 -6
- package/dist/modules/manager/ansible-galaxy/collections.js.map +1 -1
- package/dist/modules/manager/azure-pipelines/extract.js +1 -0
- package/dist/modules/manager/azure-pipelines/extract.js.map +1 -1
- package/dist/modules/manager/bazel/artifacts.js +5 -1
- package/dist/modules/manager/bazel/artifacts.js.map +1 -1
- package/dist/modules/manager/bazel/parser.js +15 -0
- package/dist/modules/manager/bazel/parser.js.map +1 -1
- package/dist/modules/manager/bazel/rules/http.js.map +1 -1
- package/dist/modules/manager/bundler/common.js +1 -0
- package/dist/modules/manager/bundler/common.js.map +1 -1
- package/dist/modules/manager/cargo/artifacts.js +2 -0
- package/dist/modules/manager/cargo/artifacts.js.map +1 -1
- package/dist/modules/manager/cargo/extract.js.map +1 -1
- package/dist/modules/manager/cocoapods/extract.js +3 -0
- package/dist/modules/manager/cocoapods/extract.js.map +1 -1
- package/dist/modules/manager/composer/artifacts.js +1 -0
- package/dist/modules/manager/composer/artifacts.js.map +1 -1
- package/dist/modules/manager/composer/schema.js.map +1 -1
- package/dist/modules/manager/cpanfile/parser.js +2 -0
- package/dist/modules/manager/cpanfile/parser.js.map +1 -1
- package/dist/modules/manager/deps-edn/extract.js +3 -1
- package/dist/modules/manager/deps-edn/extract.js.map +1 -1
- package/dist/modules/manager/droneci/extract.js +4 -6
- package/dist/modules/manager/droneci/extract.js.map +1 -1
- package/dist/modules/manager/fingerprint.generated.js +11 -11
- package/dist/modules/manager/fingerprint.generated.js.map +1 -1
- package/dist/modules/manager/flux/extract.js +1 -0
- package/dist/modules/manager/flux/extract.js.map +1 -1
- package/dist/modules/manager/github-actions/extract.js +3 -0
- package/dist/modules/manager/github-actions/extract.js.map +1 -1
- package/dist/modules/manager/github-actions/known-actions.js +38 -2
- package/dist/modules/manager/github-actions/known-actions.js.map +1 -1
- package/dist/modules/manager/gitlabci/extract.js +1 -0
- package/dist/modules/manager/gitlabci/extract.js.map +1 -1
- package/dist/modules/manager/glasskube/extract.js +2 -0
- package/dist/modules/manager/glasskube/extract.js.map +1 -1
- package/dist/modules/manager/gomod/artifacts-extra.js +1 -0
- package/dist/modules/manager/gomod/artifacts-extra.js.map +1 -1
- package/dist/modules/manager/gomod/artifacts.js +1 -0
- package/dist/modules/manager/gomod/artifacts.js.map +1 -1
- package/dist/modules/manager/gomod/extract.js +1 -0
- package/dist/modules/manager/gomod/extract.js.map +1 -1
- package/dist/modules/manager/gradle/artifacts.js +1 -1
- package/dist/modules/manager/gradle/artifacts.js.map +1 -1
- package/dist/modules/manager/gradle-wrapper/utils.js +1 -0
- package/dist/modules/manager/gradle-wrapper/utils.js.map +1 -1
- package/dist/modules/manager/npm/extract/common/dependency.js +2 -1
- package/dist/modules/manager/npm/extract/common/dependency.js.map +1 -1
- package/dist/modules/manager/pep621/extract.js +1 -2
- package/dist/modules/manager/pep621/extract.js.map +1 -1
- package/dist/modules/manager/quadlet/extract.js +2 -4
- package/dist/modules/manager/quadlet/extract.js.map +1 -1
- package/dist/modules/manager/swift/artifacts.js +3 -1
- package/dist/modules/manager/swift/artifacts.js.map +1 -1
- package/dist/modules/manager/swift/extract.js +1 -0
- package/dist/modules/manager/swift/extract.js.map +1 -1
- package/dist/modules/manager/terraform/extractors/others/modules.js.map +1 -1
- package/dist/modules/manager/terraform/lockfile/index.js +1 -0
- package/dist/modules/manager/terraform/lockfile/index.js.map +1 -1
- package/dist/modules/manager/terragrunt/extract.js +1 -0
- package/dist/modules/manager/terragrunt/extract.js.map +1 -1
- package/dist/modules/manager/tflint-plugin/extract.js +1 -0
- package/dist/modules/manager/tflint-plugin/extract.js.map +1 -1
- package/dist/modules/manager/tflint-plugin/plugins.js.map +1 -1
- package/package.json +1 -1
- package/renovate-schema.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","names":["versioning"],"sources":["../../../../lib/modules/manager/cargo/extract.ts"],"sourcesContent":["import { isObject, isString } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { coerceArray } from '../../../util/array.ts';\nimport { getEnv } from '../../../util/env.ts';\nimport {\n findLocalSiblingOrParent,\n readLocalFile,\n} from '../../../util/fs/index.ts';\nimport { coerceObject } from '../../../util/object.ts';\nimport { api as versioning } from '../../versioning/cargo/index.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\nimport { extractLockFileVersions } from './locked-version.ts';\nimport { CargoConfig, CargoManifest } from './schema.ts';\nimport type {\n CargoManagerData,\n CargoRegistries,\n CargoRegistryUrl,\n} from './types.ts';\nimport { DEFAULT_REGISTRY_URL } from './utils.ts';\n\nconst DEFAULT_REGISTRY_ID = 'crates-io';\n\nfunction getCargoIndexEnv(registryName: string): string | null {\n const registry = registryName.toUpperCase().replaceAll('-', '_');\n return getEnv()[`CARGO_REGISTRIES_${registry}_INDEX`] ?? null;\n}\n\nfunction extractFromSection(\n dependencies: PackageDependency<CargoManagerData>[] | undefined,\n cargoRegistries: CargoRegistries,\n target?: string,\n): PackageDependency[] {\n if (!dependencies) {\n return [];\n }\n\n const deps: PackageDependency<CargoManagerData>[] = [];\n\n for (const dep of Object.values(dependencies)) {\n let registryUrls: string[] | undefined;\n\n if (dep.managerData?.registryName) {\n const registryUrl =\n getCargoIndexEnv(dep.managerData.registryName) ??\n cargoRegistries[dep.managerData?.registryName];\n if (registryUrl) {\n if (registryUrl !== DEFAULT_REGISTRY_URL) {\n registryUrls = [registryUrl];\n }\n } else {\n dep.skipReason = 'unknown-registry';\n }\n }\n\n if (registryUrls) {\n dep.registryUrls = registryUrls;\n } else {\n // if we don't have an explicit registry URL check if the default registry has a non-standard url\n if (cargoRegistries[DEFAULT_REGISTRY_ID]) {\n if (cargoRegistries[DEFAULT_REGISTRY_ID] !== DEFAULT_REGISTRY_URL) {\n dep.registryUrls = [cargoRegistries[DEFAULT_REGISTRY_ID]];\n }\n } else {\n // we always expect to have DEFAULT_REGISTRY_ID set, if it's not it means the config defines an alternative\n // registry that we couldn't resolve.\n dep.skipReason = 'unknown-registry';\n }\n }\n\n if (target) {\n dep.target = target;\n }\n deps.push(dep);\n }\n\n return deps;\n}\n\n/** Reads `.cargo/config.toml`, or, if not found, `.cargo/config` */\nasync function readCargoConfig(): Promise<CargoConfig | null> {\n for (const configName of ['config.toml', 'config']) {\n const path = `.cargo/${configName}`;\n const payload = await readLocalFile(path, 'utf8');\n if (payload) {\n const parsedCargoConfig = CargoConfig.safeParse(payload);\n if (parsedCargoConfig.success) {\n return parsedCargoConfig.data;\n }\n logger.debug(\n { err: parsedCargoConfig.error, path },\n `Error parsing cargo config`,\n );\n }\n }\n\n logger.debug('Neither .cargo/config nor .cargo/config.toml found');\n return null;\n}\n\n/** Extracts a map of cargo registries from a CargoConfig */\nfunction extractCargoRegistries(config: CargoConfig): CargoRegistries {\n const result: CargoRegistries = {};\n // check if we're overriding our default registry index\n result[DEFAULT_REGISTRY_ID] = resolveRegistryIndex(\n DEFAULT_REGISTRY_ID,\n config,\n );\n\n const registryNames = new Set([\n ...Object.keys(coerceObject(config.registries)),\n ...Object.keys(coerceObject(config.source)),\n ]);\n for (const registryName of registryNames) {\n result[registryName] = resolveRegistryIndex(registryName, config);\n }\n\n return result;\n}\n\nfunction resolveRegistryIndex(\n registryName: string,\n config: CargoConfig,\n originalNames = new Set<string>(),\n): CargoRegistryUrl {\n // if we have a source replacement, follow that.\n // https://doc.rust-lang.org/cargo/reference/source-replacement.html\n const replacementName = config.source?.[registryName]?.['replace-with'];\n if (replacementName) {\n logger.debug(\n `Replacing index of cargo registry ${registryName} with ${replacementName}`,\n );\n if (originalNames.has(replacementName)) {\n logger.warn({ registryName }, 'cargo registry resolves to itself');\n return null;\n }\n return resolveRegistryIndex(\n replacementName,\n config,\n originalNames.add(replacementName),\n );\n }\n\n const sourceRegistry = config.source?.[registryName]?.registry;\n if (sourceRegistry) {\n logger.debug(\n `Replacing cargo source registry with ${sourceRegistry} for ${registryName}`,\n );\n return sourceRegistry;\n }\n\n const registryIndex = config.registries?.[registryName]?.index;\n if (registryIndex) {\n return registryIndex;\n }\n // we don't need an explicit index if we're using the default registry\n if (registryName === DEFAULT_REGISTRY_ID) {\n return DEFAULT_REGISTRY_URL;\n }\n logger.debug(`${registryName} cargo registry is missing index`);\n return null;\n}\n\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n _config?: ExtractConfig,\n): Promise<PackageFileContent<CargoManagerData> | null> {\n logger.trace(`cargo.extractPackageFile(${packageFile})`);\n\n const cargoConfig = coerceObject(await readCargoConfig());\n const cargoRegistries = extractCargoRegistries(cargoConfig);\n\n const parsedCargoManifest = CargoManifest.safeParse(content);\n if (!parsedCargoManifest.success) {\n logger.debug(\n { err: parsedCargoManifest.error, packageFile },\n 'Error parsing Cargo.toml file',\n );\n return null;\n }\n\n const cargoManifest = parsedCargoManifest.data;\n\n /*\n There are the following sections in Cargo.toml:\n [package]\n [dependencies]\n [dev-dependencies]\n [build-dependencies]\n [target.*.dependencies]\n [workspace.dependencies]\n */\n const targetSection = cargoManifest.target;\n // An array of all dependencies in the target section\n let targetDeps: PackageDependency[] = [];\n if (targetSection) {\n const targets = Object.keys(targetSection);\n targets.forEach((target) => {\n const targetContent = targetSection[target];\n // Dependencies for `${target}`\n const deps = [\n ...extractFromSection(\n targetContent.dependencies,\n cargoRegistries,\n target,\n ),\n ...extractFromSection(\n targetContent['dev-dependencies'],\n cargoRegistries,\n target,\n ),\n ...extractFromSection(\n targetContent['build-dependencies'],\n cargoRegistries,\n target,\n ),\n ];\n targetDeps = targetDeps.concat(deps);\n });\n }\n\n const workspaceSection = cargoManifest.workspace;\n let workspaceDeps: PackageDependency[] = [];\n if (workspaceSection) {\n workspaceDeps = extractFromSection(\n workspaceSection.dependencies,\n cargoRegistries,\n undefined,\n );\n }\n\n const deps = [\n ...extractFromSection(cargoManifest.dependencies, cargoRegistries),\n ...extractFromSection(cargoManifest['dev-dependencies'], cargoRegistries),\n ...extractFromSection(cargoManifest['build-dependencies'], cargoRegistries),\n ...targetDeps,\n ...workspaceDeps,\n ];\n if (!deps.length) {\n return null;\n }\n\n const packageSection = cargoManifest.package;\n let version: string | undefined = undefined;\n if (packageSection) {\n if (isString(packageSection.version)) {\n version = packageSection.version;\n } else if (\n isObject(packageSection.version) &&\n cargoManifest.workspace?.package?.version\n ) {\n // TODO: Support reading from parent workspace manifest?\n version = cargoManifest.workspace.package.version;\n }\n }\n\n const lockFileName = await findLocalSiblingOrParent(\n packageFile,\n 'Cargo.lock',\n );\n const res: PackageFileContent = { deps, packageFileVersion: version };\n if (lockFileName) {\n logger.debug(\n `Found lock file ${lockFileName} for packageFile: ${packageFile}`,\n );\n\n const versionsByPackage = await extractLockFileVersions(lockFileName);\n if (!versionsByPackage) {\n logger.debug(\n `Could not extract lock file versions from ${lockFileName}.`,\n );\n return res;\n }\n\n res.lockFiles = [lockFileName];\n\n for (const dep of deps) {\n const packageName = dep.packageName ?? dep.depName!;\n const versions = coerceArray(versionsByPackage.get(packageName));\n\n let lockedVersion: string | null = null;\n if (dep.currentValue) {\n lockedVersion = versioning.getSatisfyingVersion(\n versions,\n dep.currentValue,\n );\n }\n\n if (lockedVersion) {\n dep.lockedVersion = lockedVersion;\n } else {\n logger.debug(\n `No locked version found for package ${dep.depName} in the range of ${dep.currentValue}.`,\n );\n }\n }\n }\n\n return res;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extract.js","names":["versioning"],"sources":["../../../../lib/modules/manager/cargo/extract.ts"],"sourcesContent":["import { isObject, isString } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { coerceArray } from '../../../util/array.ts';\nimport { getEnv } from '../../../util/env.ts';\nimport {\n findLocalSiblingOrParent,\n readLocalFile,\n} from '../../../util/fs/index.ts';\nimport { coerceObject } from '../../../util/object.ts';\nimport { api as versioning } from '../../versioning/cargo/index.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\nimport { extractLockFileVersions } from './locked-version.ts';\nimport { CargoConfig, CargoManifest } from './schema.ts';\nimport type {\n CargoManagerData,\n CargoRegistries,\n CargoRegistryUrl,\n} from './types.ts';\nimport { DEFAULT_REGISTRY_URL } from './utils.ts';\n\nconst DEFAULT_REGISTRY_ID = 'crates-io';\n\nfunction getCargoIndexEnv(registryName: string): string | null {\n const registry = registryName.toUpperCase().replaceAll('-', '_');\n return getEnv()[`CARGO_REGISTRIES_${registry}_INDEX`] ?? null;\n}\n\nfunction extractFromSection(\n dependencies: PackageDependency<CargoManagerData>[] | undefined,\n cargoRegistries: CargoRegistries,\n target?: string,\n): PackageDependency[] {\n if (!dependencies) {\n return [];\n }\n\n const deps: PackageDependency<CargoManagerData>[] = [];\n\n for (const dep of Object.values(dependencies)) {\n let registryUrls: string[] | undefined;\n\n if (dep.managerData?.registryName) {\n const registryUrl =\n getCargoIndexEnv(dep.managerData.registryName) ??\n cargoRegistries[dep.managerData?.registryName];\n if (registryUrl) {\n if (registryUrl !== DEFAULT_REGISTRY_URL) {\n registryUrls = [registryUrl];\n }\n } else {\n dep.skipReason = 'unknown-registry';\n }\n }\n\n if (registryUrls) {\n dep.registryUrls = registryUrls;\n } else {\n // if we don't have an explicit registry URL check if the default registry has a non-standard url\n if (cargoRegistries[DEFAULT_REGISTRY_ID]) {\n if (cargoRegistries[DEFAULT_REGISTRY_ID] !== DEFAULT_REGISTRY_URL) {\n dep.registryUrls = [cargoRegistries[DEFAULT_REGISTRY_ID]];\n }\n } else {\n // we always expect to have DEFAULT_REGISTRY_ID set, if it's not it means the config defines an alternative\n // registry that we couldn't resolve.\n dep.skipReason = 'unknown-registry';\n }\n }\n\n if (target) {\n dep.target = target;\n }\n deps.push(dep);\n }\n\n return deps;\n}\n\n/** Reads `.cargo/config.toml`, or, if not found, `.cargo/config` */\nasync function readCargoConfig(): Promise<CargoConfig | null> {\n for (const configName of ['config.toml', 'config']) {\n const path = `.cargo/${configName}`;\n const payload = await readLocalFile(path, 'utf8');\n if (payload) {\n const parsedCargoConfig = CargoConfig.safeParse(payload);\n if (parsedCargoConfig.success) {\n return parsedCargoConfig.data;\n }\n logger.debug(\n { err: parsedCargoConfig.error, path },\n `Error parsing cargo config`,\n );\n }\n }\n\n logger.debug('Neither .cargo/config nor .cargo/config.toml found');\n return null;\n}\n\n/** Extracts a map of cargo registries from a CargoConfig */\nfunction extractCargoRegistries(config: CargoConfig): CargoRegistries {\n const result: CargoRegistries = {};\n // check if we're overriding our default registry index\n result[DEFAULT_REGISTRY_ID] = resolveRegistryIndex(\n DEFAULT_REGISTRY_ID,\n config,\n );\n\n const registryNames = new Set([\n ...Object.keys(coerceObject(config.registries)),\n ...Object.keys(coerceObject(config.source)),\n ]);\n for (const registryName of registryNames) {\n result[registryName] = resolveRegistryIndex(registryName, config);\n }\n\n return result;\n}\n\nfunction resolveRegistryIndex(\n registryName: string,\n config: CargoConfig,\n originalNames = new Set<string>(),\n): CargoRegistryUrl {\n // if we have a source replacement, follow that.\n // https://doc.rust-lang.org/cargo/reference/source-replacement.html\n const replacementName = config.source?.[registryName]?.['replace-with'];\n if (replacementName) {\n logger.debug(\n `Replacing index of cargo registry ${registryName} with ${replacementName}`,\n );\n if (originalNames.has(replacementName)) {\n logger.warn({ registryName }, 'cargo registry resolves to itself');\n return null;\n }\n return resolveRegistryIndex(\n replacementName,\n config,\n originalNames.add(replacementName),\n );\n }\n\n const sourceRegistry = config.source?.[registryName]?.registry;\n if (sourceRegistry) {\n logger.debug(\n `Replacing cargo source registry with ${sourceRegistry} for ${registryName}`,\n );\n return sourceRegistry;\n }\n\n const registryIndex = config.registries?.[registryName]?.index;\n if (registryIndex) {\n return registryIndex;\n }\n // we don't need an explicit index if we're using the default registry\n if (registryName === DEFAULT_REGISTRY_ID) {\n return DEFAULT_REGISTRY_URL;\n }\n logger.debug(`${registryName} cargo registry is missing index`);\n return null;\n}\n\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n _config?: ExtractConfig,\n): Promise<PackageFileContent<CargoManagerData> | null> {\n logger.trace(`cargo.extractPackageFile(${packageFile})`);\n\n const cargoConfig = coerceObject(await readCargoConfig());\n const cargoRegistries = extractCargoRegistries(cargoConfig);\n\n const parsedCargoManifest = CargoManifest.safeParse(content);\n if (!parsedCargoManifest.success) {\n logger.debug(\n { err: parsedCargoManifest.error, packageFile },\n 'Error parsing Cargo.toml file',\n );\n return null;\n }\n\n const cargoManifest = parsedCargoManifest.data;\n\n /*\n There are the following sections in Cargo.toml:\n [package]\n [dependencies]\n [dev-dependencies]\n [build-dependencies]\n [target.*.dependencies]\n [workspace.dependencies]\n */\n const targetSection = cargoManifest.target;\n // An array of all dependencies in the target section\n let targetDeps: PackageDependency[] = [];\n if (targetSection) {\n const targets = Object.keys(targetSection);\n targets.forEach((target) => {\n const targetContent = targetSection[target];\n // Dependencies for `${target}`\n const deps = [\n ...extractFromSection(\n targetContent.dependencies,\n cargoRegistries,\n target,\n ),\n ...extractFromSection(\n targetContent['dev-dependencies'],\n cargoRegistries,\n target,\n ),\n ...extractFromSection(\n targetContent['build-dependencies'],\n cargoRegistries,\n target,\n ),\n ];\n targetDeps = targetDeps.concat(deps);\n });\n }\n\n const workspaceSection = cargoManifest.workspace;\n let workspaceDeps: PackageDependency[] = [];\n if (workspaceSection) {\n workspaceDeps = extractFromSection(\n workspaceSection.dependencies,\n cargoRegistries,\n undefined,\n );\n }\n\n const deps = [\n ...extractFromSection(cargoManifest.dependencies, cargoRegistries),\n ...extractFromSection(cargoManifest['dev-dependencies'], cargoRegistries),\n ...extractFromSection(cargoManifest['build-dependencies'], cargoRegistries),\n ...targetDeps,\n ...workspaceDeps,\n ];\n if (!deps.length) {\n return null;\n }\n\n const packageSection = cargoManifest.package;\n let version: string | undefined = undefined;\n if (packageSection) {\n if (isString(packageSection.version)) {\n version = packageSection.version;\n // NOTE: a version that is neither a string nor a workspace reference\n // leaves it unset. A coverage-ignore hint cannot suppress the implicit\n // else on an `else if`.\n } else if (\n isObject(packageSection.version) &&\n cargoManifest.workspace?.package?.version\n ) {\n // TODO: Support reading from parent workspace manifest?\n version = cargoManifest.workspace.package.version;\n }\n }\n\n const lockFileName = await findLocalSiblingOrParent(\n packageFile,\n 'Cargo.lock',\n );\n const res: PackageFileContent = { deps, packageFileVersion: version };\n if (lockFileName) {\n logger.debug(\n `Found lock file ${lockFileName} for packageFile: ${packageFile}`,\n );\n\n const versionsByPackage = await extractLockFileVersions(lockFileName);\n if (!versionsByPackage) {\n logger.debug(\n `Could not extract lock file versions from ${lockFileName}.`,\n );\n return res;\n }\n\n res.lockFiles = [lockFileName];\n\n for (const dep of deps) {\n const packageName = dep.packageName ?? dep.depName!;\n const versions = coerceArray(versionsByPackage.get(packageName));\n\n let lockedVersion: string | null = null;\n if (dep.currentValue) {\n lockedVersion = versioning.getSatisfyingVersion(\n versions,\n dep.currentValue,\n );\n }\n\n if (lockedVersion) {\n dep.lockedVersion = lockedVersion;\n } else {\n logger.debug(\n `No locked version found for package ${dep.depName} in the range of ${dep.currentValue}.`,\n );\n }\n }\n }\n\n return res;\n}\n"],"mappings":"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"}
|
|
@@ -28,7 +28,9 @@ function parseLine(line) {
|
|
|
28
28
|
if (result.spec) {
|
|
29
29
|
const depName = result.subspec ? `${result.spec}/${result.subspec}` : result.spec;
|
|
30
30
|
const specName = result.spec;
|
|
31
|
+
// v8 ignore else -- both derive from `result.spec`, already truthy above
|
|
31
32
|
if (depName) result.depName = depName;
|
|
33
|
+
// v8 ignore else -- see above
|
|
32
34
|
if (specName) result.specName = specName;
|
|
33
35
|
delete result.spec;
|
|
34
36
|
delete result.subspec;
|
|
@@ -40,6 +42,7 @@ function gitDep(parsedLine) {
|
|
|
40
42
|
const platformMatch = regEx(/[@/](?<platform>github|gitlab)\.com[:/](?<account>[^/]+)\/(?<repo>[^/]+)/).exec(coerceString(git));
|
|
41
43
|
if (platformMatch?.groups) {
|
|
42
44
|
const { account, repo, platform } = platformMatch.groups;
|
|
45
|
+
// v8 ignore else -- the regex only matches when both groups are present
|
|
43
46
|
if (account && repo) return {
|
|
44
47
|
datasource: platform === "github" ? GithubTagsDatasource.id : GitlabTagsDatasource.id,
|
|
45
48
|
depName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/cocoapods/extract.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { getSiblingFileName, localPathExists } from '../../../util/fs/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport { coerceString } from '../../../util/string.ts';\nimport { GitTagsDatasource } from '../../datasource/git-tags/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { GitlabTagsDatasource } from '../../datasource/gitlab-tags/index.ts';\nimport { PodDatasource } from '../../datasource/pod/index.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\nimport type { ParsedLine } from './types.ts';\n\nconst regexMappings = [\n regEx(`^\\\\s*pod\\\\s+(['\"])(?<spec>[^'\"/]+)(/(?<subspec>[^'\"]+))?(['\"])`),\n regEx(\n `^\\\\s*pod\\\\s+(['\"])[^'\"]+(['\"])\\\\s*,\\\\s*(['\"])(?<currentValue>[^'\"]+)(['\"])\\\\s*$`,\n ),\n regEx(`,\\\\s*:git\\\\s*=>\\\\s*(['\"])(?<git>[^'\"]+)(['\"])`),\n regEx(`,\\\\s*:tag\\\\s*=>\\\\s*(['\"])(?<tag>[^'\"]+)(['\"])`),\n regEx(`,\\\\s*:path\\\\s*=>\\\\s*(['\"])(?<path>[^'\"]+)(['\"])`),\n regEx(`^\\\\s*source\\\\s*(['\"])(?<source>[^'\"]+)(['\"])`),\n];\n\nexport function parseLine(line: string): ParsedLine {\n let result: ParsedLine = {};\n if (!line) {\n return result;\n }\n for (const regex of Object.values(regexMappings)) {\n const match = regex.exec(line.replace(regEx(/#.*$/), ''));\n if (match?.groups) {\n result = { ...result, ...match.groups };\n }\n }\n\n if (result.spec) {\n const depName = result.subspec\n ? `${result.spec}/${result.subspec}`\n : result.spec;\n const specName = result.spec;\n if (depName) {\n result.depName = depName;\n }\n if (specName) {\n result.specName = specName;\n }\n delete result.spec;\n delete result.subspec;\n }\n\n return result;\n}\n\nexport function gitDep(parsedLine: ParsedLine): PackageDependency | null {\n const { depName, git, tag } = parsedLine;\n\n const platformMatch = regEx(\n /[@/](?<platform>github|gitlab)\\.com[:/](?<account>[^/]+)\\/(?<repo>[^/]+)/,\n ).exec(coerceString(git));\n\n if (platformMatch?.groups) {\n const { account, repo, platform } = platformMatch.groups;\n if (account && repo) {\n const datasource =\n platform === 'github'\n ? GithubTagsDatasource.id\n : GitlabTagsDatasource.id;\n return {\n datasource,\n depName,\n packageName: `${account}/${repo.replace(regEx(/\\.git$/), '')}`,\n currentValue: tag,\n };\n }\n }\n\n return {\n datasource: GitTagsDatasource.id,\n depName,\n packageName: git,\n currentValue: tag,\n };\n}\n\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n): Promise<PackageFileContent | null> {\n logger.trace(`cocoapods.extractPackageFile(${packageFile})`);\n const deps: PackageDependency[] = [];\n const lines: string[] = content.split(newlineRegex);\n\n const registryUrls: string[] = [];\n\n for (let lineNumber = 0; lineNumber < lines.length; lineNumber += 1) {\n const line = lines[lineNumber];\n const parsedLine = parseLine(line);\n const {\n depName,\n specName,\n currentValue,\n git,\n tag,\n path,\n source,\n }: ParsedLine = parsedLine;\n\n if (source) {\n registryUrls.push(source.replace(regEx(/\\/*$/), ''));\n }\n\n if (depName) {\n const managerData = { lineNumber };\n let dep: PackageDependency = {\n depName,\n sharedVariableName: specName,\n skipReason: 'unspecified-version',\n };\n\n if (currentValue) {\n dep = {\n depName,\n sharedVariableName: specName,\n datasource: PodDatasource.id,\n currentValue,\n managerData,\n registryUrls,\n };\n } else if (git) {\n if (tag) {\n dep = { ...gitDep(parsedLine), managerData };\n } else {\n dep = {\n depName,\n sharedVariableName: specName,\n skipReason: 'git-dependency',\n };\n }\n } else if (path) {\n dep = {\n depName,\n sharedVariableName: specName,\n skipReason: 'path-dependency',\n };\n }\n\n deps.push(dep);\n }\n }\n const res: PackageFileContent = { deps };\n const lockFile = getSiblingFileName(packageFile, 'Podfile.lock');\n // istanbul ignore if\n if (await localPathExists(lockFile)) {\n res.lockFiles = [lockFile];\n }\n return res;\n}\n"],"mappings":";;;;;;;;;AAWA,MAAM,gBAAgB;CACpB,MAAM,gEAAgE;CACtE,MACE,iFACF;CACA,MAAM,+CAA+C;CACrD,MAAM,+CAA+C;CACrD,MAAM,iDAAiD;CACvD,MAAM,8CAA8C;AACtD;AAEA,SAAgB,UAAU,MAA0B;CAClD,IAAI,SAAqB,CAAC;CAC1B,IAAI,CAAC,MACH,OAAO;CAET,KAAK,MAAM,SAAS,OAAO,OAAO,aAAa,GAAG;EAChD,MAAM,QAAQ,MAAM,KAAK,KAAK,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC;EACxD,IAAI,OAAO,QACT,SAAS;GAAE,GAAG;GAAQ,GAAG,MAAM;EAAO;CAE1C;CAEA,IAAI,OAAO,MAAM;EACf,MAAM,UAAU,OAAO,UACnB,GAAG,OAAO,KAAK,GAAG,OAAO,YACzB,OAAO;EACX,MAAM,WAAW,OAAO
|
|
1
|
+
{"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/cocoapods/extract.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { getSiblingFileName, localPathExists } from '../../../util/fs/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport { coerceString } from '../../../util/string.ts';\nimport { GitTagsDatasource } from '../../datasource/git-tags/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { GitlabTagsDatasource } from '../../datasource/gitlab-tags/index.ts';\nimport { PodDatasource } from '../../datasource/pod/index.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\nimport type { ParsedLine } from './types.ts';\n\nconst regexMappings = [\n regEx(`^\\\\s*pod\\\\s+(['\"])(?<spec>[^'\"/]+)(/(?<subspec>[^'\"]+))?(['\"])`),\n regEx(\n `^\\\\s*pod\\\\s+(['\"])[^'\"]+(['\"])\\\\s*,\\\\s*(['\"])(?<currentValue>[^'\"]+)(['\"])\\\\s*$`,\n ),\n regEx(`,\\\\s*:git\\\\s*=>\\\\s*(['\"])(?<git>[^'\"]+)(['\"])`),\n regEx(`,\\\\s*:tag\\\\s*=>\\\\s*(['\"])(?<tag>[^'\"]+)(['\"])`),\n regEx(`,\\\\s*:path\\\\s*=>\\\\s*(['\"])(?<path>[^'\"]+)(['\"])`),\n regEx(`^\\\\s*source\\\\s*(['\"])(?<source>[^'\"]+)(['\"])`),\n];\n\nexport function parseLine(line: string): ParsedLine {\n let result: ParsedLine = {};\n if (!line) {\n return result;\n }\n for (const regex of Object.values(regexMappings)) {\n const match = regex.exec(line.replace(regEx(/#.*$/), ''));\n if (match?.groups) {\n result = { ...result, ...match.groups };\n }\n }\n\n if (result.spec) {\n const depName = result.subspec\n ? `${result.spec}/${result.subspec}`\n : result.spec;\n const specName = result.spec;\n // v8 ignore else -- both derive from `result.spec`, already truthy above\n if (depName) {\n result.depName = depName;\n }\n // v8 ignore else -- see above\n if (specName) {\n result.specName = specName;\n }\n delete result.spec;\n delete result.subspec;\n }\n\n return result;\n}\n\nexport function gitDep(parsedLine: ParsedLine): PackageDependency | null {\n const { depName, git, tag } = parsedLine;\n\n const platformMatch = regEx(\n /[@/](?<platform>github|gitlab)\\.com[:/](?<account>[^/]+)\\/(?<repo>[^/]+)/,\n ).exec(coerceString(git));\n\n if (platformMatch?.groups) {\n const { account, repo, platform } = platformMatch.groups;\n // v8 ignore else -- the regex only matches when both groups are present\n if (account && repo) {\n const datasource =\n platform === 'github'\n ? GithubTagsDatasource.id\n : GitlabTagsDatasource.id;\n return {\n datasource,\n depName,\n packageName: `${account}/${repo.replace(regEx(/\\.git$/), '')}`,\n currentValue: tag,\n };\n }\n }\n\n return {\n datasource: GitTagsDatasource.id,\n depName,\n packageName: git,\n currentValue: tag,\n };\n}\n\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n): Promise<PackageFileContent | null> {\n logger.trace(`cocoapods.extractPackageFile(${packageFile})`);\n const deps: PackageDependency[] = [];\n const lines: string[] = content.split(newlineRegex);\n\n const registryUrls: string[] = [];\n\n for (let lineNumber = 0; lineNumber < lines.length; lineNumber += 1) {\n const line = lines[lineNumber];\n const parsedLine = parseLine(line);\n const {\n depName,\n specName,\n currentValue,\n git,\n tag,\n path,\n source,\n }: ParsedLine = parsedLine;\n\n if (source) {\n registryUrls.push(source.replace(regEx(/\\/*$/), ''));\n }\n\n if (depName) {\n const managerData = { lineNumber };\n let dep: PackageDependency = {\n depName,\n sharedVariableName: specName,\n skipReason: 'unspecified-version',\n };\n\n if (currentValue) {\n dep = {\n depName,\n sharedVariableName: specName,\n datasource: PodDatasource.id,\n currentValue,\n managerData,\n registryUrls,\n };\n } else if (git) {\n if (tag) {\n dep = { ...gitDep(parsedLine), managerData };\n } else {\n dep = {\n depName,\n sharedVariableName: specName,\n skipReason: 'git-dependency',\n };\n }\n } else if (path) {\n dep = {\n depName,\n sharedVariableName: specName,\n skipReason: 'path-dependency',\n };\n }\n\n deps.push(dep);\n }\n }\n const res: PackageFileContent = { deps };\n const lockFile = getSiblingFileName(packageFile, 'Podfile.lock');\n // istanbul ignore if\n if (await localPathExists(lockFile)) {\n res.lockFiles = [lockFile];\n }\n return res;\n}\n"],"mappings":";;;;;;;;;AAWA,MAAM,gBAAgB;CACpB,MAAM,gEAAgE;CACtE,MACE,iFACF;CACA,MAAM,+CAA+C;CACrD,MAAM,+CAA+C;CACrD,MAAM,iDAAiD;CACvD,MAAM,8CAA8C;AACtD;AAEA,SAAgB,UAAU,MAA0B;CAClD,IAAI,SAAqB,CAAC;CAC1B,IAAI,CAAC,MACH,OAAO;CAET,KAAK,MAAM,SAAS,OAAO,OAAO,aAAa,GAAG;EAChD,MAAM,QAAQ,MAAM,KAAK,KAAK,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC;EACxD,IAAI,OAAO,QACT,SAAS;GAAE,GAAG;GAAQ,GAAG,MAAM;EAAO;CAE1C;CAEA,IAAI,OAAO,MAAM;EACf,MAAM,UAAU,OAAO,UACnB,GAAG,OAAO,KAAK,GAAG,OAAO,YACzB,OAAO;EACX,MAAM,WAAW,OAAO;;EAExB,IAAI,SACF,OAAO,UAAU;;EAGnB,IAAI,UACF,OAAO,WAAW;EAEpB,OAAO,OAAO;EACd,OAAO,OAAO;CAChB;CAEA,OAAO;AACT;AAEA,SAAgB,OAAO,YAAkD;CACvE,MAAM,EAAE,SAAS,KAAK,QAAQ;CAE9B,MAAM,gBAAgB,MACpB,0EACF,CAAC,CAAC,KAAK,aAAa,GAAG,CAAC;CAExB,IAAI,eAAe,QAAQ;EACzB,MAAM,EAAE,SAAS,MAAM,aAAa,cAAc;;EAElD,IAAI,WAAW,MAKb,OAAO;GACL,YAJA,aAAa,WACT,qBAAqB,KACrB,qBAAqB;GAGzB;GACA,aAAa,GAAG,QAAQ,GAAG,KAAK,QAAQ,MAAM,QAAQ,GAAG,EAAE;GAC3D,cAAc;EAChB;CAEJ;CAEA,OAAO;EACL,YAAY,kBAAkB;EAC9B;EACA,aAAa;EACb,cAAc;CAChB;AACF;AAEA,eAAsB,mBACpB,SACA,aACoC;CACpC,OAAO,MAAM,gCAAgC,YAAY,EAAE;CAC3D,MAAM,OAA4B,CAAC;CACnC,MAAM,QAAkB,QAAQ,MAAM,YAAY;CAElD,MAAM,eAAyB,CAAC;CAEhC,KAAK,IAAI,aAAa,GAAG,aAAa,MAAM,QAAQ,cAAc,GAAG;EACnE,MAAM,OAAO,MAAM;EACnB,MAAM,aAAa,UAAU,IAAI;EACjC,MAAM,EACJ,SACA,UACA,cACA,KACA,KACA,MACA,WACc;EAEhB,IAAI,QACF,aAAa,KAAK,OAAO,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC;EAGrD,IAAI,SAAS;GACX,MAAM,cAAc,EAAE,WAAW;GACjC,IAAI,MAAyB;IAC3B;IACA,oBAAoB;IACpB,YAAY;GACd;GAEA,IAAI,cACF,MAAM;IACJ;IACA,oBAAoB;IACpB,YAAY,cAAc;IAC1B;IACA;IACA;GACF;QACK,IAAI,KAAK;IACd,IAAI,KACF,MAAM;KAAE,GAAG,OAAO,UAAU;KAAG;IAAY;SAE3C,MAAM;KACJ;KACA,oBAAoB;KACpB,YAAY;IACd;GAEJ,OAAO,IAAI,MACT,MAAM;IACJ;IACA,oBAAoB;IACpB,YAAY;GACd;GAGF,KAAK,KAAK,GAAG;EACf;CACF;CACA,MAAM,MAA0B,EAAE,KAAK;CACvC,MAAM,WAAW,mBAAmB,aAAa,cAAc;;CAE/D,IAAI,MAAM,gBAAgB,QAAQ,GAChC,IAAI,YAAY,CAAC,QAAQ;CAE3B,OAAO;AACT"}
|
|
@@ -34,6 +34,7 @@ function getAuthJson() {
|
|
|
34
34
|
if (selectedGithubToken) authJson["github-oauth"] = { "github.com": selectedGithubToken };
|
|
35
35
|
for (const gitlabHostRule of findAll({ hostType: "gitlab" })) {
|
|
36
36
|
if (!isArtifactAuthEnabled(gitlabHostRule)) continue;
|
|
37
|
+
// v8 ignore else -- a rule without a token does not pass the check above
|
|
37
38
|
if (gitlabHostRule?.token) {
|
|
38
39
|
const host = coerceString(gitlabHostRule.resolvedHost, "gitlab.com");
|
|
39
40
|
authJson["gitlab-token"] = coerceObject(authJson["gitlab-token"]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.js","names":["hostRules.find","hostRules.findAll"],"sources":["../../../../lib/modules/manager/composer/artifacts.ts"],"sourcesContent":["import { isEmptyObject, isString } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport { z } from 'zod/v4';\nimport {\n SYSTEM_INSUFFICIENT_DISK_SPACE,\n TEMPORARY_ERROR,\n} from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { coerceArray } from '../../../util/array.ts';\nimport {\n findGithubToken,\n takePersonalAccessTokenIfPossible,\n} from '../../../util/check-token.ts';\nimport { exec } from '../../../util/exec/index.ts';\nimport type {\n CommandWithOptions,\n ExecOptions,\n ToolConstraint,\n} from '../../../util/exec/types.ts';\nimport {\n deleteLocalFile,\n ensureCacheDir,\n ensureLocalDir,\n getSiblingFileName,\n localPathExists,\n readLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport { getRepoStatus } from '../../../util/git/index.ts';\nimport * as hostRules from '../../../util/host-rules.ts';\nimport { Lazy } from '../../../util/lazy.ts';\nimport { coerceObject } from '../../../util/object.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { Json } from '../../../util/schema-utils/index.ts';\nimport { coerceString } from '../../../util/string.ts';\nimport { GitTagsDatasource } from '../../datasource/git-tags/index.ts';\nimport { PackagistDatasource } from '../../datasource/packagist/index.ts';\nimport type { UpdateArtifact, UpdateArtifactsResult } from '../types.ts';\nimport { resolveToolConstraint } from '../util.ts';\nimport { Lockfile, PackageFile } from './schema.ts';\nimport type { AuthJson } from './types.ts';\nimport {\n extractConstraints,\n getComposerArguments,\n getComposerUpdateArguments,\n isArtifactAuthEnabled,\n requireComposerDependencyInstallation,\n} from './utils.ts';\n\nfunction getAuthJson(): string | null {\n const authJson: AuthJson = {};\n\n const githubHostRule = hostRules.find({\n hostType: 'github',\n url: 'https://api.github.com/',\n });\n\n const gitTagsHostRule = hostRules.find({\n hostType: GitTagsDatasource.id,\n url: 'https://github.com',\n });\n\n const selectedGithubToken = takePersonalAccessTokenIfPossible(\n isArtifactAuthEnabled(githubHostRule)\n ? findGithubToken(githubHostRule)\n : undefined,\n isArtifactAuthEnabled(gitTagsHostRule)\n ? findGithubToken(gitTagsHostRule)\n : undefined,\n );\n\n if (selectedGithubToken) {\n authJson['github-oauth'] = {\n 'github.com': selectedGithubToken,\n };\n }\n\n for (const gitlabHostRule of hostRules.findAll({ hostType: 'gitlab' })) {\n if (!isArtifactAuthEnabled(gitlabHostRule)) {\n continue;\n }\n\n if (gitlabHostRule?.token) {\n const host = coerceString(gitlabHostRule.resolvedHost, 'gitlab.com');\n authJson['gitlab-token'] = coerceObject(authJson['gitlab-token']);\n authJson['gitlab-token'][host] = gitlabHostRule.token;\n // https://getcomposer.org/doc/articles/authentication-for-private-packages.md#gitlab-token\n authJson['gitlab-domains'] = [\n host,\n ...coerceArray(authJson['gitlab-domains']),\n ];\n }\n }\n\n for (const packagistHostRule of hostRules.findAll({\n hostType: PackagistDatasource.id,\n })) {\n if (!isArtifactAuthEnabled(packagistHostRule)) {\n continue;\n }\n\n const { resolvedHost, username, password, token } = packagistHostRule;\n if (resolvedHost && username && password) {\n authJson['http-basic'] = coerceObject(authJson['http-basic']);\n authJson['http-basic'][resolvedHost] = { username, password };\n } else if (resolvedHost && token) {\n authJson.bearer = coerceObject(authJson.bearer);\n authJson.bearer[resolvedHost] = token;\n }\n }\n\n return isEmptyObject(authJson) ? null : JSON.stringify(authJson);\n}\n\nexport async function updateArtifacts({\n packageFileName,\n updatedDeps,\n newPackageFileContent,\n config,\n}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {\n logger.debug(`composer.updateArtifacts(${packageFileName})`);\n\n const file = Json.pipe(PackageFile).parse(newPackageFileContent);\n\n const lockFileName = packageFileName.replace(regEx(/\\.json$/), '.lock');\n const lockfile = await z\n .string()\n .transform((f) => readLocalFile(f, 'utf8'))\n .pipe(Json)\n .pipe(Lockfile)\n .nullable()\n .catch(null)\n .parseAsync(lockFileName);\n if (!lockfile) {\n logger.debug('Composer: unable to read lockfile');\n return null;\n }\n\n const vendorDir = getSiblingFileName(packageFileName, 'vendor');\n const commitVendorFiles = await localPathExists(vendorDir);\n await ensureLocalDir(vendorDir);\n try {\n await writeLocalFile(packageFileName, newPackageFileContent);\n\n // `extractConstraints()` re-reads the updated package file, so its values win\n // over what extraction saw on the base branch. It only runs when a user\n // constraint is missing for at least one of the tools.\n const fileConstraints = new Lazy(() => extractConstraints(file, lockfile));\n\n const composerToolConstraint: ToolConstraint = {\n toolName: 'composer',\n constraint: await resolveToolConstraint(\n config,\n 'composer',\n () => fileConstraints.getValue().composer,\n ),\n };\n\n const phpToolConstraint: ToolConstraint = {\n toolName: 'php',\n constraint: await resolveToolConstraint(\n config,\n 'php',\n () => fileConstraints.getValue().php,\n ),\n };\n\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n extraEnv: {\n COMPOSER_CACHE_DIR: await ensureCacheDir('composer'),\n COMPOSER_AUTH: getAuthJson(),\n },\n toolConstraints: [phpToolConstraint, composerToolConstraint],\n docker: {},\n };\n\n const commands: (string | CommandWithOptions)[] = [];\n\n // Determine whether install is required before update\n if (requireComposerDependencyInstallation(lockfile)) {\n const preCmd = 'composer';\n const preArgs = `install${getComposerArguments(config, composerToolConstraint)}`;\n logger.trace({ preCmd, preArgs }, 'composer pre-update command');\n commands.push('git stash -- composer.json');\n commands.push(`${preCmd} ${preArgs}`);\n commands.push({ command: ['git', 'stash', 'pop'], ignoreFailure: true });\n }\n\n if (config.isLockFileMaintenance) {\n logger.debug(\n `Removing ${lockFileName} first due to lock file maintenance upgrade`,\n );\n await deleteLocalFile(lockFileName);\n }\n\n const cmd = 'composer';\n let args: string;\n if (config.isLockFileMaintenance) {\n args = 'update';\n } else {\n args =\n (\n 'update ' +\n updatedDeps\n .map((dep) =>\n dep.newVersion\n ? quote(`${dep.depName}:${dep.newVersion}`)\n : quote(dep.depName!),\n )\n .filter(isString)\n .map((dep) => quote(dep))\n .join(' ')\n ).trim() +\n (config.postUpdateOptions?.includes('composerWithAll')\n ? ' --with-all-dependencies'\n : ' --with-dependencies');\n }\n args += getComposerUpdateArguments(config, composerToolConstraint);\n logger.trace({ cmd, args }, 'composer command');\n commands.push(`${cmd} ${args}`);\n\n await exec(commands, execOptions);\n const status = await getRepoStatus();\n if (!status.modified.includes(lockFileName)) {\n return null;\n }\n logger.debug('Returning updated composer.lock');\n const res: UpdateArtifactsResult[] = [\n {\n file: {\n type: 'addition',\n path: lockFileName,\n contents: await readLocalFile(lockFileName),\n },\n },\n ];\n\n if (!commitVendorFiles) {\n return res;\n }\n\n logger.debug(`Committing vendor files in ${vendorDir}`);\n for (const f of [...status.modified, ...status.not_added]) {\n if (f.startsWith(vendorDir)) {\n res.push({\n file: {\n type: 'addition',\n path: f,\n contents: await readLocalFile(f),\n },\n });\n }\n }\n for (const f of status.deleted) {\n res.push({\n file: {\n type: 'deletion',\n path: f,\n },\n });\n }\n\n return res;\n } catch (err) {\n // istanbul ignore if\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n if (\n err.message?.includes(\n 'Your requirements could not be resolved to an installable set of packages.',\n )\n ) {\n logger.info('Composer requirements cannot be resolved');\n } else if (err.message?.includes('write error (disk full?)')) {\n throw new Error(SYSTEM_INSUFFICIENT_DISK_SPACE);\n } else {\n logger.debug({ err }, 'Failed to generate composer.lock');\n }\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: err.message,\n },\n },\n ];\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"artifacts.js","names":["hostRules.find","hostRules.findAll"],"sources":["../../../../lib/modules/manager/composer/artifacts.ts"],"sourcesContent":["import { isEmptyObject, isString } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport { z } from 'zod/v4';\nimport {\n SYSTEM_INSUFFICIENT_DISK_SPACE,\n TEMPORARY_ERROR,\n} from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { coerceArray } from '../../../util/array.ts';\nimport {\n findGithubToken,\n takePersonalAccessTokenIfPossible,\n} from '../../../util/check-token.ts';\nimport { exec } from '../../../util/exec/index.ts';\nimport type {\n CommandWithOptions,\n ExecOptions,\n ToolConstraint,\n} from '../../../util/exec/types.ts';\nimport {\n deleteLocalFile,\n ensureCacheDir,\n ensureLocalDir,\n getSiblingFileName,\n localPathExists,\n readLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport { getRepoStatus } from '../../../util/git/index.ts';\nimport * as hostRules from '../../../util/host-rules.ts';\nimport { Lazy } from '../../../util/lazy.ts';\nimport { coerceObject } from '../../../util/object.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { Json } from '../../../util/schema-utils/index.ts';\nimport { coerceString } from '../../../util/string.ts';\nimport { GitTagsDatasource } from '../../datasource/git-tags/index.ts';\nimport { PackagistDatasource } from '../../datasource/packagist/index.ts';\nimport type { UpdateArtifact, UpdateArtifactsResult } from '../types.ts';\nimport { resolveToolConstraint } from '../util.ts';\nimport { Lockfile, PackageFile } from './schema.ts';\nimport type { AuthJson } from './types.ts';\nimport {\n extractConstraints,\n getComposerArguments,\n getComposerUpdateArguments,\n isArtifactAuthEnabled,\n requireComposerDependencyInstallation,\n} from './utils.ts';\n\nfunction getAuthJson(): string | null {\n const authJson: AuthJson = {};\n\n const githubHostRule = hostRules.find({\n hostType: 'github',\n url: 'https://api.github.com/',\n });\n\n const gitTagsHostRule = hostRules.find({\n hostType: GitTagsDatasource.id,\n url: 'https://github.com',\n });\n\n const selectedGithubToken = takePersonalAccessTokenIfPossible(\n isArtifactAuthEnabled(githubHostRule)\n ? findGithubToken(githubHostRule)\n : undefined,\n isArtifactAuthEnabled(gitTagsHostRule)\n ? findGithubToken(gitTagsHostRule)\n : undefined,\n );\n\n if (selectedGithubToken) {\n authJson['github-oauth'] = {\n 'github.com': selectedGithubToken,\n };\n }\n\n for (const gitlabHostRule of hostRules.findAll({ hostType: 'gitlab' })) {\n if (!isArtifactAuthEnabled(gitlabHostRule)) {\n continue;\n }\n\n // v8 ignore else -- a rule without a token does not pass the check above\n if (gitlabHostRule?.token) {\n const host = coerceString(gitlabHostRule.resolvedHost, 'gitlab.com');\n authJson['gitlab-token'] = coerceObject(authJson['gitlab-token']);\n authJson['gitlab-token'][host] = gitlabHostRule.token;\n // https://getcomposer.org/doc/articles/authentication-for-private-packages.md#gitlab-token\n authJson['gitlab-domains'] = [\n host,\n ...coerceArray(authJson['gitlab-domains']),\n ];\n }\n }\n\n for (const packagistHostRule of hostRules.findAll({\n hostType: PackagistDatasource.id,\n })) {\n if (!isArtifactAuthEnabled(packagistHostRule)) {\n continue;\n }\n\n const { resolvedHost, username, password, token } = packagistHostRule;\n if (resolvedHost && username && password) {\n authJson['http-basic'] = coerceObject(authJson['http-basic']);\n authJson['http-basic'][resolvedHost] = { username, password };\n } else if (resolvedHost && token) {\n authJson.bearer = coerceObject(authJson.bearer);\n authJson.bearer[resolvedHost] = token;\n }\n }\n\n return isEmptyObject(authJson) ? null : JSON.stringify(authJson);\n}\n\nexport async function updateArtifacts({\n packageFileName,\n updatedDeps,\n newPackageFileContent,\n config,\n}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {\n logger.debug(`composer.updateArtifacts(${packageFileName})`);\n\n const file = Json.pipe(PackageFile).parse(newPackageFileContent);\n\n const lockFileName = packageFileName.replace(regEx(/\\.json$/), '.lock');\n const lockfile = await z\n .string()\n .transform((f) => readLocalFile(f, 'utf8'))\n .pipe(Json)\n .pipe(Lockfile)\n .nullable()\n .catch(null)\n .parseAsync(lockFileName);\n if (!lockfile) {\n logger.debug('Composer: unable to read lockfile');\n return null;\n }\n\n const vendorDir = getSiblingFileName(packageFileName, 'vendor');\n const commitVendorFiles = await localPathExists(vendorDir);\n await ensureLocalDir(vendorDir);\n try {\n await writeLocalFile(packageFileName, newPackageFileContent);\n\n // `extractConstraints()` re-reads the updated package file, so its values win\n // over what extraction saw on the base branch. It only runs when a user\n // constraint is missing for at least one of the tools.\n const fileConstraints = new Lazy(() => extractConstraints(file, lockfile));\n\n const composerToolConstraint: ToolConstraint = {\n toolName: 'composer',\n constraint: await resolveToolConstraint(\n config,\n 'composer',\n () => fileConstraints.getValue().composer,\n ),\n };\n\n const phpToolConstraint: ToolConstraint = {\n toolName: 'php',\n constraint: await resolveToolConstraint(\n config,\n 'php',\n () => fileConstraints.getValue().php,\n ),\n };\n\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n extraEnv: {\n COMPOSER_CACHE_DIR: await ensureCacheDir('composer'),\n COMPOSER_AUTH: getAuthJson(),\n },\n toolConstraints: [phpToolConstraint, composerToolConstraint],\n docker: {},\n };\n\n const commands: (string | CommandWithOptions)[] = [];\n\n // Determine whether install is required before update\n if (requireComposerDependencyInstallation(lockfile)) {\n const preCmd = 'composer';\n const preArgs = `install${getComposerArguments(config, composerToolConstraint)}`;\n logger.trace({ preCmd, preArgs }, 'composer pre-update command');\n commands.push('git stash -- composer.json');\n commands.push(`${preCmd} ${preArgs}`);\n commands.push({ command: ['git', 'stash', 'pop'], ignoreFailure: true });\n }\n\n if (config.isLockFileMaintenance) {\n logger.debug(\n `Removing ${lockFileName} first due to lock file maintenance upgrade`,\n );\n await deleteLocalFile(lockFileName);\n }\n\n const cmd = 'composer';\n let args: string;\n if (config.isLockFileMaintenance) {\n args = 'update';\n } else {\n args =\n (\n 'update ' +\n updatedDeps\n .map((dep) =>\n dep.newVersion\n ? quote(`${dep.depName}:${dep.newVersion}`)\n : quote(dep.depName!),\n )\n .filter(isString)\n .map((dep) => quote(dep))\n .join(' ')\n ).trim() +\n (config.postUpdateOptions?.includes('composerWithAll')\n ? ' --with-all-dependencies'\n : ' --with-dependencies');\n }\n args += getComposerUpdateArguments(config, composerToolConstraint);\n logger.trace({ cmd, args }, 'composer command');\n commands.push(`${cmd} ${args}`);\n\n await exec(commands, execOptions);\n const status = await getRepoStatus();\n if (!status.modified.includes(lockFileName)) {\n return null;\n }\n logger.debug('Returning updated composer.lock');\n const res: UpdateArtifactsResult[] = [\n {\n file: {\n type: 'addition',\n path: lockFileName,\n contents: await readLocalFile(lockFileName),\n },\n },\n ];\n\n if (!commitVendorFiles) {\n return res;\n }\n\n logger.debug(`Committing vendor files in ${vendorDir}`);\n for (const f of [...status.modified, ...status.not_added]) {\n if (f.startsWith(vendorDir)) {\n res.push({\n file: {\n type: 'addition',\n path: f,\n contents: await readLocalFile(f),\n },\n });\n }\n }\n for (const f of status.deleted) {\n res.push({\n file: {\n type: 'deletion',\n path: f,\n },\n });\n }\n\n return res;\n } catch (err) {\n // istanbul ignore if\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n if (\n err.message?.includes(\n 'Your requirements could not be resolved to an installable set of packages.',\n )\n ) {\n logger.info('Composer requirements cannot be resolved');\n } else if (err.message?.includes('write error (disk full?)')) {\n throw new Error(SYSTEM_INSUFFICIENT_DISK_SPACE);\n } else {\n logger.debug({ err }, 'Failed to generate composer.lock');\n }\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: err.message,\n },\n },\n ];\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","names":["semverComposer"],"sources":["../../../../lib/modules/manager/composer/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { logger } from '../../../logger/index.ts';\nimport { coerceArray } from '../../../util/array.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport {\n Json,\n LooseArray,\n LooseRecord,\n withDebugMessage,\n} from '../../../util/schema-utils/index.ts';\nimport { BitbucketTagsDatasource } from '../../datasource/bitbucket-tags/index.ts';\nimport { GitTagsDatasource } from '../../datasource/git-tags/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { PackagistDatasource } from '../../datasource/packagist/index.ts';\nimport { api as semverComposer } from '../../versioning/composer/index.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\nimport type { ComposerManagerData } from './types.ts';\n\nexport const ComposerRepo = z.object({\n type: z.literal('composer'),\n /**\n * The regUrl is expected to be a base URL. GitLab composer repository installation guide specifies\n * to use a base URL containing packages.json. Composer still works in this scenario by determining\n * whether to add / remove packages.json from the URL.\n *\n * See https://github.com/composer/composer/blob/750a92b4b7aecda0e5b2f9b963f1cb1421900675/src/Composer/Repository/ComposerRepository.php#L815\n */\n url: z\n .string()\n .transform((url) => url.replace(regEx(/\\/packages\\.json$/), '')),\n});\nexport type ComposerRepo = z.infer<typeof ComposerRepo>;\n\nexport const GitRepo = z.object({\n type: z.enum(['vcs', 'git']).transform(() => 'git' as const),\n url: z.string(),\n name: z.string().optional(),\n});\nexport type GitRepo = z.infer<typeof GitRepo>;\n\nexport const PathRepo = z.object({\n type: z.literal('path'),\n url: z.string(),\n name: z.string().optional(),\n});\nexport type PathRepo = z.infer<typeof PathRepo>;\n\nexport const PackageRepo = z.object({\n type: z.literal('package'),\n});\n\nexport const Repo = z.discriminatedUnion('type', [\n ComposerRepo,\n GitRepo,\n PathRepo,\n PackageRepo,\n]);\nexport type Repo = z.infer<typeof Repo>;\n\nexport const NamedRepo = z.discriminatedUnion('type', [\n ComposerRepo,\n GitRepo.extend({ name: z.string() }),\n PathRepo.extend({ name: z.string() }),\n PackageRepo,\n]);\nexport type NamedRepo = z.infer<typeof NamedRepo>;\n\nconst DisablePackagist = z.object({ type: z.literal('disable-packagist') });\nexport type DisablePackagist = z.infer<typeof DisablePackagist>;\n\nconst bitbucketUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)bitbucket\\.org[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\n\nexport const ReposRecord = LooseRecord(z.union([Repo, z.literal(false)]), {\n onError: ({ error: err }) => {\n logger.debug({ err }, 'Composer: error parsing repositories object');\n },\n}).transform((repos) => {\n const result: (NamedRepo | DisablePackagist)[] = [];\n for (const [name, repo] of Object.entries(repos)) {\n if (repo === false) {\n if (name === 'packagist' || name === 'packagist.org') {\n result.push({ type: 'disable-packagist' });\n }\n continue;\n }\n\n if (repo.type === 'path' || repo.type === 'git') {\n result.push({ name, ...repo });\n continue;\n }\n\n if (repo.type === 'composer') {\n result.push(repo);\n continue;\n }\n }\n\n return result;\n});\nexport type ReposRecord = z.infer<typeof ReposRecord>;\n\nexport const ReposArray = LooseArray(\n z.union([\n Repo,\n z\n .union([\n z.object({ packagist: z.literal(false) }),\n z.object({ 'packagist.org': z.literal(false) }),\n ])\n .transform((): DisablePackagist => ({ type: 'disable-packagist' })),\n ]),\n {\n onError: ({ error: err }) => {\n logger.debug({ err }, 'Composer: error parsing repositories array');\n },\n },\n).transform((repos) => {\n const result: (NamedRepo | DisablePackagist)[] = [];\n for (let idx = 0; idx < repos.length; idx++) {\n const repo = repos[idx];\n if (repo.type === 'path' || repo.type === 'git') {\n result.push({ name: `__${idx}`, ...repo });\n } else {\n result.push(repo);\n }\n }\n return result;\n});\nexport type ReposArray = z.infer<typeof ReposArray>;\n\nexport const Repos = z\n .union([ReposRecord, ReposArray])\n .default([]) // Prevents warnings for packages without repositories field\n .catch(withDebugMessage([], 'Composer: invalid \"repositories\" field'))\n .transform((repos) => {\n let packagist = true;\n const repoUrls: string[] = [];\n const gitRepos: Record<string, GitRepo> = {};\n const pathRepos: Record<string, PathRepo> = {};\n\n for (const repo of repos) {\n if (repo.type === 'composer') {\n repoUrls.push(repo.url);\n } else if (repo.type === 'git') {\n gitRepos[repo.name] = repo;\n } else if (repo.type === 'path') {\n pathRepos[repo.name] = repo;\n } else if (repo.type === 'disable-packagist') {\n packagist = false;\n }\n }\n\n if (packagist && repoUrls.length) {\n repoUrls.push('https://repo.packagist.org');\n }\n const registryUrls = repoUrls.length ? repoUrls : null;\n\n return { registryUrls, gitRepos, pathRepos };\n });\nexport type Repos = z.infer<typeof Repos>;\n\nconst RequireDefs = LooseRecord(z.string().transform((x) => x.trim())).catch(\n {},\n);\n\nexport const PackageFile = z\n .object({\n type: z.string().optional(),\n config: z\n .object({\n platform: z.object({\n php: z.string(),\n }),\n })\n .nullable()\n .catch(null),\n repositories: Repos,\n require: RequireDefs,\n 'require-dev': RequireDefs,\n })\n .transform(\n ({\n type: composerJsonType,\n config,\n repositories,\n require,\n 'require-dev': requireDev,\n }) => ({\n composerJsonType,\n config,\n repositories,\n require,\n requireDev,\n }),\n );\nexport type PackageFile = z.infer<typeof PackageFile>;\n\nconst LockedPackage = z.object({\n name: z.string(),\n version: z.string(),\n});\ntype LockedPackage = z.infer<typeof LockedPackage>;\n\nexport const Lockfile = z\n .object({\n 'plugin-api-version': z.string().optional(),\n packages: LooseArray(LockedPackage).catch([]),\n 'packages-dev': LooseArray(LockedPackage).catch([]),\n })\n .transform(\n ({\n 'plugin-api-version': pluginApiVersion,\n packages,\n 'packages-dev': packagesDev,\n }) => ({ pluginApiVersion, packages, packagesDev }),\n );\nexport type Lockfile = z.infer<typeof Lockfile>;\n\nexport const ComposerExtract = z\n .object({\n content: z.string(),\n fileName: z.string(),\n })\n .transform(({ content, fileName }) => {\n const lockfileName = fileName.replace(regEx(/\\.json$/), '.lock');\n return {\n file: content,\n lockfileName,\n lockfile: lockfileName,\n };\n })\n .pipe(\n z.object({\n file: Json.pipe(PackageFile),\n lockfileName: z.string(),\n lockfile: z\n .string()\n .transform((lockfileName) => readLocalFile(lockfileName, 'utf8'))\n .pipe(\n z.union([\n z.null(),\n z\n .string()\n .pipe(Json)\n .pipe(Lockfile)\n .nullable()\n .catch(withDebugMessage(null, 'Composer: does not match schema')),\n ]),\n ),\n }),\n )\n .transform(({ file, lockfile, lockfileName }) => {\n const { composerJsonType, require, requireDev } = file;\n const { registryUrls, gitRepos, pathRepos } = file.repositories;\n\n const deps: PackageDependency[] = [];\n\n const profiles = [\n {\n depType: 'require',\n req: require,\n locked: coerceArray(lockfile?.packages),\n },\n {\n depType: 'require-dev',\n req: requireDev,\n locked: coerceArray(lockfile?.packagesDev),\n },\n ];\n\n for (const { depType, req, locked } of profiles) {\n for (const [depName, currentValue] of Object.entries(req)) {\n if (depName === 'php') {\n deps.push({\n depType,\n depName,\n currentValue,\n datasource: GithubTagsDatasource.id,\n packageName: 'containerbase/php-prebuild',\n });\n continue;\n }\n\n if (pathRepos[depName]) {\n deps.push({\n depType,\n depName,\n currentValue,\n skipReason: 'path-dependency',\n });\n continue;\n }\n\n const dep: PackageDependency = {\n depType,\n depName,\n currentValue,\n };\n\n if (!depName.includes('/')) {\n dep.skipReason = 'unsupported';\n }\n\n const lockedDep = locked.find((item) => item.name === depName);\n if (lockedDep && semverComposer.isVersion(lockedDep.version)) {\n dep.lockedVersion = lockedDep.version.replace(regEx(/^v/i), '');\n }\n\n const gitRepo = gitRepos[depName];\n if (gitRepo) {\n const bitbucketMatchGroups = bitbucketUrlRegex.exec(\n gitRepo.url,\n )?.groups;\n\n if (bitbucketMatchGroups) {\n dep.datasource = BitbucketTagsDatasource.id;\n dep.packageName = bitbucketMatchGroups.packageName;\n deps.push(dep);\n continue;\n }\n\n dep.datasource = GitTagsDatasource.id;\n dep.packageName = gitRepo.url;\n deps.push(dep);\n continue;\n }\n\n dep.datasource = PackagistDatasource.id;\n\n if (registryUrls) {\n dep.registryUrls = registryUrls;\n }\n\n deps.push(dep);\n }\n }\n\n if (!deps.length) {\n return null;\n }\n\n const res: PackageFileContent<ComposerManagerData> = { deps };\n\n if (composerJsonType) {\n res.managerData = { composerJsonType };\n }\n\n if (require.php) {\n res.extractedConstraints = { php: require.php };\n }\n\n if (lockfile) {\n res.lockFiles = [lockfileName];\n }\n\n return res;\n });\nexport type ComposerExtract = z.infer<typeof ComposerExtract>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.js","names":["semverComposer"],"sources":["../../../../lib/modules/manager/composer/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { logger } from '../../../logger/index.ts';\nimport { coerceArray } from '../../../util/array.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport {\n Json,\n LooseArray,\n LooseRecord,\n withDebugMessage,\n} from '../../../util/schema-utils/index.ts';\nimport { BitbucketTagsDatasource } from '../../datasource/bitbucket-tags/index.ts';\nimport { GitTagsDatasource } from '../../datasource/git-tags/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { PackagistDatasource } from '../../datasource/packagist/index.ts';\nimport { api as semverComposer } from '../../versioning/composer/index.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\nimport type { ComposerManagerData } from './types.ts';\n\nexport const ComposerRepo = z.object({\n type: z.literal('composer'),\n /**\n * The regUrl is expected to be a base URL. GitLab composer repository installation guide specifies\n * to use a base URL containing packages.json. Composer still works in this scenario by determining\n * whether to add / remove packages.json from the URL.\n *\n * See https://github.com/composer/composer/blob/750a92b4b7aecda0e5b2f9b963f1cb1421900675/src/Composer/Repository/ComposerRepository.php#L815\n */\n url: z\n .string()\n .transform((url) => url.replace(regEx(/\\/packages\\.json$/), '')),\n});\nexport type ComposerRepo = z.infer<typeof ComposerRepo>;\n\nexport const GitRepo = z.object({\n type: z.enum(['vcs', 'git']).transform(() => 'git' as const),\n url: z.string(),\n name: z.string().optional(),\n});\nexport type GitRepo = z.infer<typeof GitRepo>;\n\nexport const PathRepo = z.object({\n type: z.literal('path'),\n url: z.string(),\n name: z.string().optional(),\n});\nexport type PathRepo = z.infer<typeof PathRepo>;\n\nexport const PackageRepo = z.object({\n type: z.literal('package'),\n});\n\nexport const Repo = z.discriminatedUnion('type', [\n ComposerRepo,\n GitRepo,\n PathRepo,\n PackageRepo,\n]);\nexport type Repo = z.infer<typeof Repo>;\n\nexport const NamedRepo = z.discriminatedUnion('type', [\n ComposerRepo,\n GitRepo.extend({ name: z.string() }),\n PathRepo.extend({ name: z.string() }),\n PackageRepo,\n]);\nexport type NamedRepo = z.infer<typeof NamedRepo>;\n\nconst DisablePackagist = z.object({ type: z.literal('disable-packagist') });\nexport type DisablePackagist = z.infer<typeof DisablePackagist>;\n\nconst bitbucketUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)bitbucket\\.org[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\n\nexport const ReposRecord = LooseRecord(z.union([Repo, z.literal(false)]), {\n onError: ({ error: err }) => {\n logger.debug({ err }, 'Composer: error parsing repositories object');\n },\n}).transform((repos) => {\n const result: (NamedRepo | DisablePackagist)[] = [];\n for (const [name, repo] of Object.entries(repos)) {\n if (repo === false) {\n if (name === 'packagist' || name === 'packagist.org') {\n result.push({ type: 'disable-packagist' });\n }\n continue;\n }\n\n if (repo.type === 'path' || repo.type === 'git') {\n result.push({ name, ...repo });\n continue;\n }\n\n if (repo.type === 'composer') {\n result.push(repo);\n continue;\n }\n }\n\n return result;\n});\nexport type ReposRecord = z.infer<typeof ReposRecord>;\n\nexport const ReposArray = LooseArray(\n z.union([\n Repo,\n z\n .union([\n z.object({ packagist: z.literal(false) }),\n z.object({ 'packagist.org': z.literal(false) }),\n ])\n .transform((): DisablePackagist => ({ type: 'disable-packagist' })),\n ]),\n {\n onError: ({ error: err }) => {\n logger.debug({ err }, 'Composer: error parsing repositories array');\n },\n },\n).transform((repos) => {\n const result: (NamedRepo | DisablePackagist)[] = [];\n for (let idx = 0; idx < repos.length; idx++) {\n const repo = repos[idx];\n if (repo.type === 'path' || repo.type === 'git') {\n result.push({ name: `__${idx}`, ...repo });\n } else {\n result.push(repo);\n }\n }\n return result;\n});\nexport type ReposArray = z.infer<typeof ReposArray>;\n\nexport const Repos = z\n .union([ReposRecord, ReposArray])\n .default([]) // Prevents warnings for packages without repositories field\n .catch(withDebugMessage([], 'Composer: invalid \"repositories\" field'))\n .transform((repos) => {\n let packagist = true;\n const repoUrls: string[] = [];\n const gitRepos: Record<string, GitRepo> = {};\n const pathRepos: Record<string, PathRepo> = {};\n\n for (const repo of repos) {\n if (repo.type === 'composer') {\n repoUrls.push(repo.url);\n } else if (repo.type === 'git') {\n gitRepos[repo.name] = repo;\n } else if (repo.type === 'path') {\n pathRepos[repo.name] = repo;\n // NOTE: the union above has no other member, so the implicit else never\n // runs. A coverage-ignore hint cannot suppress it on an `else if`.\n } else if (repo.type === 'disable-packagist') {\n packagist = false;\n }\n }\n\n if (packagist && repoUrls.length) {\n repoUrls.push('https://repo.packagist.org');\n }\n const registryUrls = repoUrls.length ? repoUrls : null;\n\n return { registryUrls, gitRepos, pathRepos };\n });\nexport type Repos = z.infer<typeof Repos>;\n\nconst RequireDefs = LooseRecord(z.string().transform((x) => x.trim())).catch(\n {},\n);\n\nexport const PackageFile = z\n .object({\n type: z.string().optional(),\n config: z\n .object({\n platform: z.object({\n php: z.string(),\n }),\n })\n .nullable()\n .catch(null),\n repositories: Repos,\n require: RequireDefs,\n 'require-dev': RequireDefs,\n })\n .transform(\n ({\n type: composerJsonType,\n config,\n repositories,\n require,\n 'require-dev': requireDev,\n }) => ({\n composerJsonType,\n config,\n repositories,\n require,\n requireDev,\n }),\n );\nexport type PackageFile = z.infer<typeof PackageFile>;\n\nconst LockedPackage = z.object({\n name: z.string(),\n version: z.string(),\n});\ntype LockedPackage = z.infer<typeof LockedPackage>;\n\nexport const Lockfile = z\n .object({\n 'plugin-api-version': z.string().optional(),\n packages: LooseArray(LockedPackage).catch([]),\n 'packages-dev': LooseArray(LockedPackage).catch([]),\n })\n .transform(\n ({\n 'plugin-api-version': pluginApiVersion,\n packages,\n 'packages-dev': packagesDev,\n }) => ({ pluginApiVersion, packages, packagesDev }),\n );\nexport type Lockfile = z.infer<typeof Lockfile>;\n\nexport const ComposerExtract = z\n .object({\n content: z.string(),\n fileName: z.string(),\n })\n .transform(({ content, fileName }) => {\n const lockfileName = fileName.replace(regEx(/\\.json$/), '.lock');\n return {\n file: content,\n lockfileName,\n lockfile: lockfileName,\n };\n })\n .pipe(\n z.object({\n file: Json.pipe(PackageFile),\n lockfileName: z.string(),\n lockfile: z\n .string()\n .transform((lockfileName) => readLocalFile(lockfileName, 'utf8'))\n .pipe(\n z.union([\n z.null(),\n z\n .string()\n .pipe(Json)\n .pipe(Lockfile)\n .nullable()\n .catch(withDebugMessage(null, 'Composer: does not match schema')),\n ]),\n ),\n }),\n )\n .transform(({ file, lockfile, lockfileName }) => {\n const { composerJsonType, require, requireDev } = file;\n const { registryUrls, gitRepos, pathRepos } = file.repositories;\n\n const deps: PackageDependency[] = [];\n\n const profiles = [\n {\n depType: 'require',\n req: require,\n locked: coerceArray(lockfile?.packages),\n },\n {\n depType: 'require-dev',\n req: requireDev,\n locked: coerceArray(lockfile?.packagesDev),\n },\n ];\n\n for (const { depType, req, locked } of profiles) {\n for (const [depName, currentValue] of Object.entries(req)) {\n if (depName === 'php') {\n deps.push({\n depType,\n depName,\n currentValue,\n datasource: GithubTagsDatasource.id,\n packageName: 'containerbase/php-prebuild',\n });\n continue;\n }\n\n if (pathRepos[depName]) {\n deps.push({\n depType,\n depName,\n currentValue,\n skipReason: 'path-dependency',\n });\n continue;\n }\n\n const dep: PackageDependency = {\n depType,\n depName,\n currentValue,\n };\n\n if (!depName.includes('/')) {\n dep.skipReason = 'unsupported';\n }\n\n const lockedDep = locked.find((item) => item.name === depName);\n if (lockedDep && semverComposer.isVersion(lockedDep.version)) {\n dep.lockedVersion = lockedDep.version.replace(regEx(/^v/i), '');\n }\n\n const gitRepo = gitRepos[depName];\n if (gitRepo) {\n const bitbucketMatchGroups = bitbucketUrlRegex.exec(\n gitRepo.url,\n )?.groups;\n\n if (bitbucketMatchGroups) {\n dep.datasource = BitbucketTagsDatasource.id;\n dep.packageName = bitbucketMatchGroups.packageName;\n deps.push(dep);\n continue;\n }\n\n dep.datasource = GitTagsDatasource.id;\n dep.packageName = gitRepo.url;\n deps.push(dep);\n continue;\n }\n\n dep.datasource = PackagistDatasource.id;\n\n if (registryUrls) {\n dep.registryUrls = registryUrls;\n }\n\n deps.push(dep);\n }\n }\n\n if (!deps.length) {\n return null;\n }\n\n const res: PackageFileContent<ComposerManagerData> = { deps };\n\n if (composerJsonType) {\n res.managerData = { composerJsonType };\n }\n\n if (require.php) {\n res.extractedConstraints = { php: require.php };\n }\n\n if (lockfile) {\n res.lockFiles = [lockfileName];\n }\n\n return res;\n });\nexport type ComposerExtract = z.infer<typeof ComposerExtract>;\n"],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ const perlVersionMatch = query.sym("requires").alt(query.sym("perl"), query.str(
|
|
|
12
12
|
...ctx,
|
|
13
13
|
perlVersion
|
|
14
14
|
}))).op(";").handler((ctx) => {
|
|
15
|
+
// v8 ignore else -- the matched alternatives above always set it
|
|
15
16
|
if (ctx.perlVersion) ctx.deps.push({
|
|
16
17
|
depName: "perl",
|
|
17
18
|
packageName: "Perl/perl5",
|
|
@@ -44,6 +45,7 @@ const moduleMatch = query.alt(requirementMatch, phasedRequiresMatch).str((ctx, {
|
|
|
44
45
|
delete ctx.tempPhase;
|
|
45
46
|
delete ctx.depName;
|
|
46
47
|
delete ctx.currentValue;
|
|
48
|
+
// v8 ignore else -- the handler only runs once a module name matched
|
|
47
49
|
if (depName) {
|
|
48
50
|
const dep = { depName };
|
|
49
51
|
if (currentValue) dep.currentValue = currentValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","names":["q","perlVersioning.id","query"],"sources":["../../../../lib/modules/manager/cpanfile/parser.ts"],"sourcesContent":["import { query as q } from '@renovatebot/good-enough-parser';\nimport { regEx } from '../../../util/regex.ts';\nimport { CpanDatasource } from '../../datasource/cpan/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport * as perlVersioning from '../../versioning/perl/index.ts';\nimport type { PackageDependency } from '../types.ts';\nimport { cpanfile } from './language.ts';\n\ninterface Ctx {\n deps: PackageDependency[];\n\n perlVersion?: string;\n\n phase?: string;\n tempPhase?: string;\n\n depName?: string;\n currentValue?: string;\n}\n\n// requires perl, '5.36.1';\n// requires 'perl' => 5.036001;\nconst perlVersionMatch = q\n .sym<Ctx>('requires')\n .alt(q.sym('perl'), q.str('perl'))\n .alt(q.op(','), q.op('=>'))\n .alt(\n q.num<Ctx>((ctx, { value: perlVersion }) => ({ ...ctx, perlVersion })),\n q.str<Ctx>((ctx, { value: perlVersion }) => ({ ...ctx, perlVersion })),\n )\n .op(';')\n .handler((ctx) => {\n if (ctx.perlVersion) {\n ctx.deps.push({\n depName: 'perl',\n packageName: 'Perl/perl5',\n currentValue: ctx.perlVersion,\n datasource: GithubTagsDatasource.id,\n versioning: perlVersioning.id,\n extractVersion: '^v(?<version>\\\\S+)',\n });\n }\n return ctx;\n });\n\nconst requirementMatch = q.sym<Ctx>(\n regEx(/^(?:requires|recommends|suggests)$/),\n);\n\nconst phasedRequiresMatch = q.sym<Ctx>(\n regEx(/^(?:configure|build|test|author)_requires$/),\n (ctx, { value: phase }) => {\n ctx.tempPhase = phase\n .replace(regEx(/_requires/), '')\n .replace(regEx(/author/), 'develop');\n return ctx;\n },\n);\n\n// requires 'Foo::Bar';\n//\n// requires 'Foo::Bar', '1.23';\n// recommends 'Foo::Bar', '1.23';\n// suggests 'Foo::Bar', '1.23';\n//\n// configure_requires 'Foo::Bar' => 1.023;\n// build_requires 'Foo::Bar' => 1.023;\n// test_requires 'Foo::Bar' => 1.023;\n// author_requires 'Foo::Bar' => 1.023;\nconst moduleMatch = q\n .alt(requirementMatch, phasedRequiresMatch)\n .str((ctx, { value: depName }) => ({ ...ctx, depName }))\n .opt(\n q.alt<Ctx>(q.op(','), q.op('=>')).alt(\n q.num<Ctx>((ctx, { value: currentValue }) => ({ ...ctx, currentValue })),\n q.str<Ctx>((ctx, { value }) => {\n const currentValue = value.replace(\n regEx(/^(?:\\s*(?:==|>=|>))?\\s*v?/),\n '',\n );\n return { ...ctx, currentValue };\n }),\n ),\n )\n .op(';')\n .handler((ctx) => {\n const { phase, tempPhase, depName, currentValue } = ctx;\n\n delete ctx.tempPhase;\n delete ctx.depName;\n delete ctx.currentValue;\n\n if (depName) {\n const dep: PackageDependency = {\n depName,\n };\n if (currentValue) {\n dep.currentValue = currentValue;\n } else {\n dep.skipReason = 'unspecified-version';\n }\n if (phase) {\n dep.depType = phase;\n } else if (tempPhase) {\n dep.depType = tempPhase;\n }\n\n dep.datasource = CpanDatasource.id;\n ctx.deps.push(dep);\n }\n\n return ctx;\n });\n\nconst phaseRegex = regEx(/^(?:configure|build|test|runtime|develop)/);\n\nconst phaseMatch = q.alt<Ctx>(\n q.sym(phaseRegex, (ctx, { value: phase }) => ({ ...ctx, phase })),\n q.str(phaseRegex, (ctx, { value: phase }) => ({ ...ctx, phase })),\n);\n\n// on 'configure' => sub {\n// on build => sub {\n// on 'test' => sub {\n// on runtime => sub {\n// on 'develop' => sub {\nconst onMatch = q\n .sym<Ctx>('on')\n .join(phaseMatch)\n .op('=>')\n .sym('sub')\n .tree({\n type: 'wrapped-tree',\n maxDepth: 1,\n search: moduleMatch,\n })\n .handler((ctx) => {\n delete ctx.phase;\n return ctx;\n });\n\nconst query = q.tree<Ctx>({\n type: 'root-tree',\n maxDepth: 4,\n search: q.alt<Ctx>(perlVersionMatch, moduleMatch, onMatch),\n});\n\nexport function parse(\n content: string,\n): Pick<Ctx, 'deps' | 'perlVersion'> | null {\n return cpanfile.query(content, query, {\n deps: [],\n });\n}\n"],"mappings":";;;;;;;AAsBA,MAAM,mBAAmBA,MACtB,IAAS,UAAU,CAAC,CACpB,IAAIA,MAAE,IAAI,MAAM,GAAGA,MAAE,IAAI,MAAM,CAAC,CAAC,CACjC,IAAIA,MAAE,GAAG,GAAG,GAAGA,MAAE,GAAG,IAAI,CAAC,CAAC,CAC1B,IACCA,MAAE,KAAU,KAAK,EAAE,OAAO,mBAAmB;CAAE,GAAG;CAAK;AAAY,EAAE,GACrEA,MAAE,KAAU,KAAK,EAAE,OAAO,mBAAmB;CAAE,GAAG;CAAK;AAAY,EAAE,CACvE,CAAC,CACA,GAAG,GAAG,CAAC,CACP,SAAS,QAAQ
|
|
1
|
+
{"version":3,"file":"parser.js","names":["q","perlVersioning.id","query"],"sources":["../../../../lib/modules/manager/cpanfile/parser.ts"],"sourcesContent":["import { query as q } from '@renovatebot/good-enough-parser';\nimport { regEx } from '../../../util/regex.ts';\nimport { CpanDatasource } from '../../datasource/cpan/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport * as perlVersioning from '../../versioning/perl/index.ts';\nimport type { PackageDependency } from '../types.ts';\nimport { cpanfile } from './language.ts';\n\ninterface Ctx {\n deps: PackageDependency[];\n\n perlVersion?: string;\n\n phase?: string;\n tempPhase?: string;\n\n depName?: string;\n currentValue?: string;\n}\n\n// requires perl, '5.36.1';\n// requires 'perl' => 5.036001;\nconst perlVersionMatch = q\n .sym<Ctx>('requires')\n .alt(q.sym('perl'), q.str('perl'))\n .alt(q.op(','), q.op('=>'))\n .alt(\n q.num<Ctx>((ctx, { value: perlVersion }) => ({ ...ctx, perlVersion })),\n q.str<Ctx>((ctx, { value: perlVersion }) => ({ ...ctx, perlVersion })),\n )\n .op(';')\n .handler((ctx) => {\n // v8 ignore else -- the matched alternatives above always set it\n if (ctx.perlVersion) {\n ctx.deps.push({\n depName: 'perl',\n packageName: 'Perl/perl5',\n currentValue: ctx.perlVersion,\n datasource: GithubTagsDatasource.id,\n versioning: perlVersioning.id,\n extractVersion: '^v(?<version>\\\\S+)',\n });\n }\n return ctx;\n });\n\nconst requirementMatch = q.sym<Ctx>(\n regEx(/^(?:requires|recommends|suggests)$/),\n);\n\nconst phasedRequiresMatch = q.sym<Ctx>(\n regEx(/^(?:configure|build|test|author)_requires$/),\n (ctx, { value: phase }) => {\n ctx.tempPhase = phase\n .replace(regEx(/_requires/), '')\n .replace(regEx(/author/), 'develop');\n return ctx;\n },\n);\n\n// requires 'Foo::Bar';\n//\n// requires 'Foo::Bar', '1.23';\n// recommends 'Foo::Bar', '1.23';\n// suggests 'Foo::Bar', '1.23';\n//\n// configure_requires 'Foo::Bar' => 1.023;\n// build_requires 'Foo::Bar' => 1.023;\n// test_requires 'Foo::Bar' => 1.023;\n// author_requires 'Foo::Bar' => 1.023;\nconst moduleMatch = q\n .alt(requirementMatch, phasedRequiresMatch)\n .str((ctx, { value: depName }) => ({ ...ctx, depName }))\n .opt(\n q.alt<Ctx>(q.op(','), q.op('=>')).alt(\n q.num<Ctx>((ctx, { value: currentValue }) => ({ ...ctx, currentValue })),\n q.str<Ctx>((ctx, { value }) => {\n const currentValue = value.replace(\n regEx(/^(?:\\s*(?:==|>=|>))?\\s*v?/),\n '',\n );\n return { ...ctx, currentValue };\n }),\n ),\n )\n .op(';')\n .handler((ctx) => {\n const { phase, tempPhase, depName, currentValue } = ctx;\n\n delete ctx.tempPhase;\n delete ctx.depName;\n delete ctx.currentValue;\n\n // v8 ignore else -- the handler only runs once a module name matched\n if (depName) {\n const dep: PackageDependency = {\n depName,\n };\n if (currentValue) {\n dep.currentValue = currentValue;\n } else {\n dep.skipReason = 'unspecified-version';\n }\n if (phase) {\n dep.depType = phase;\n } else if (tempPhase) {\n dep.depType = tempPhase;\n }\n\n dep.datasource = CpanDatasource.id;\n ctx.deps.push(dep);\n }\n\n return ctx;\n });\n\nconst phaseRegex = regEx(/^(?:configure|build|test|runtime|develop)/);\n\nconst phaseMatch = q.alt<Ctx>(\n q.sym(phaseRegex, (ctx, { value: phase }) => ({ ...ctx, phase })),\n q.str(phaseRegex, (ctx, { value: phase }) => ({ ...ctx, phase })),\n);\n\n// on 'configure' => sub {\n// on build => sub {\n// on 'test' => sub {\n// on runtime => sub {\n// on 'develop' => sub {\nconst onMatch = q\n .sym<Ctx>('on')\n .join(phaseMatch)\n .op('=>')\n .sym('sub')\n .tree({\n type: 'wrapped-tree',\n maxDepth: 1,\n search: moduleMatch,\n })\n .handler((ctx) => {\n delete ctx.phase;\n return ctx;\n });\n\nconst query = q.tree<Ctx>({\n type: 'root-tree',\n maxDepth: 4,\n search: q.alt<Ctx>(perlVersionMatch, moduleMatch, onMatch),\n});\n\nexport function parse(\n content: string,\n): Pick<Ctx, 'deps' | 'perlVersion'> | null {\n return cpanfile.query(content, query, {\n deps: [],\n });\n}\n"],"mappings":";;;;;;;AAsBA,MAAM,mBAAmBA,MACtB,IAAS,UAAU,CAAC,CACpB,IAAIA,MAAE,IAAI,MAAM,GAAGA,MAAE,IAAI,MAAM,CAAC,CAAC,CACjC,IAAIA,MAAE,GAAG,GAAG,GAAGA,MAAE,GAAG,IAAI,CAAC,CAAC,CAC1B,IACCA,MAAE,KAAU,KAAK,EAAE,OAAO,mBAAmB;CAAE,GAAG;CAAK;AAAY,EAAE,GACrEA,MAAE,KAAU,KAAK,EAAE,OAAO,mBAAmB;CAAE,GAAG;CAAK;AAAY,EAAE,CACvE,CAAC,CACA,GAAG,GAAG,CAAC,CACP,SAAS,QAAQ;;CAEhB,IAAI,IAAI,aACN,IAAI,KAAK,KAAK;EACZ,SAAS;EACT,aAAa;EACb,cAAc,IAAI;EAClB,YAAY,qBAAqB;EACjC,YAAYC;EACZ,gBAAgB;CAClB,CAAC;CAEH,OAAO;AACT,CAAC;AAEH,MAAM,mBAAmBD,MAAE,IACzB,MAAM,oCAAoC,CAC5C;AAEA,MAAM,sBAAsBA,MAAE,IAC5B,MAAM,4CAA4C,IACjD,KAAK,EAAE,OAAO,YAAY;CACzB,IAAI,YAAY,MACb,QAAQ,MAAM,WAAW,GAAG,EAAE,CAAC,CAC/B,QAAQ,MAAM,QAAQ,GAAG,SAAS;CACrC,OAAO;AACT,CACF;AAYA,MAAM,cAAcA,MACjB,IAAI,kBAAkB,mBAAmB,CAAC,CAC1C,KAAK,KAAK,EAAE,OAAO,eAAe;CAAE,GAAG;CAAK;AAAQ,EAAE,CAAC,CACvD,IACCA,MAAE,IAASA,MAAE,GAAG,GAAG,GAAGA,MAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAChCA,MAAE,KAAU,KAAK,EAAE,OAAO,oBAAoB;CAAE,GAAG;CAAK;AAAa,EAAE,GACvEA,MAAE,KAAU,KAAK,EAAE,YAAY;CAC7B,MAAM,eAAe,MAAM,QACzB,MAAM,2BAA2B,GACjC,EACF;CACA,OAAO;EAAE,GAAG;EAAK;CAAa;AAChC,CAAC,CACH,CACF,CAAC,CACA,GAAG,GAAG,CAAC,CACP,SAAS,QAAQ;CAChB,MAAM,EAAE,OAAO,WAAW,SAAS,iBAAiB;CAEpD,OAAO,IAAI;CACX,OAAO,IAAI;CACX,OAAO,IAAI;;CAGX,IAAI,SAAS;EACX,MAAM,MAAyB,EAC7B,QACF;EACA,IAAI,cACF,IAAI,eAAe;OAEnB,IAAI,aAAa;EAEnB,IAAI,OACF,IAAI,UAAU;OACT,IAAI,WACT,IAAI,UAAU;EAGhB,IAAI,aAAa,eAAe;EAChC,IAAI,KAAK,KAAK,GAAG;CACnB;CAEA,OAAO;AACT,CAAC;AAEH,MAAM,aAAa,MAAM,2CAA2C;AAEpE,MAAM,aAAaA,MAAE,IACnBA,MAAE,IAAI,aAAa,KAAK,EAAE,OAAO,aAAa;CAAE,GAAG;CAAK;AAAM,EAAE,GAChEA,MAAE,IAAI,aAAa,KAAK,EAAE,OAAO,aAAa;CAAE,GAAG;CAAK;AAAM,EAAE,CAClE;AAOA,MAAM,UAAUA,MACb,IAAS,IAAI,CAAC,CACd,KAAK,UAAU,CAAC,CAChB,GAAG,IAAI,CAAC,CACR,IAAI,KAAK,CAAC,CACV,KAAK;CACJ,MAAM;CACN,UAAU;CACV,QAAQ;AACV,CAAC,CAAC,CACD,SAAS,QAAQ;CAChB,OAAO,IAAI;CACX,OAAO;AACT,CAAC;AAEH,MAAME,UAAQF,MAAE,KAAU;CACxB,MAAM;CACN,UAAU;CACV,QAAQA,MAAE,IAAS,kBAAkB,aAAa,OAAO;AAC3D,CAAC;AAED,SAAgB,MACd,SAC0C;CAC1C,OAAO,SAAS,MAAM,SAASE,SAAO,EACpC,MAAM,CAAC,EACT,CAAC;AACH"}
|
|
@@ -126,7 +126,9 @@ function extractPackageFile(content) {
|
|
|
126
126
|
};
|
|
127
127
|
const mavenRepos = data["mvn/repos"];
|
|
128
128
|
if (isPlainObject(mavenRepos)) {
|
|
129
|
-
for (const [repoName, repoSpec] of Object.entries(mavenRepos))
|
|
129
|
+
for (const [repoName, repoSpec] of Object.entries(mavenRepos))
|
|
130
|
+
// v8 ignore else -- object keys are always strings
|
|
131
|
+
if (isString(repoName)) {
|
|
130
132
|
if (isPlainObject(repoSpec) && isString(repoSpec.url)) registryMap[repoName] = repoSpec.url;
|
|
131
133
|
else if (isString(repoSpec) && repoSpec === "nil") delete registryMap[repoName];
|
|
132
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/deps-edn/extract.ts"],"sourcesContent":["import { isPlainObject, isString } from '@sindresorhus/is';\nimport { regEx } from '../../../util/regex.ts';\nimport { isHttpUrl } from '../../../util/url.ts';\nimport { BitbucketTagsDatasource } from '../../datasource/bitbucket-tags/index.ts';\nimport { CLOJARS_REPO } from '../../datasource/clojure/common.ts';\nimport { ClojureDatasource } from '../../datasource/clojure/index.ts';\nimport { GitRefsDatasource } from '../../datasource/git-refs/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { GitlabTagsDatasource } from '../../datasource/gitlab-tags/index.ts';\nimport { MAVEN_REPO } from '../../datasource/maven/common.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\nimport { parseDepsEdnFile } from './parser.ts';\nimport type {\n ParsedEdnData,\n ParsedEdnMetadata,\n ParsedEdnRecord,\n} from './types.ts';\n\nconst dependencyRegex = regEx(\n /^(?<groupId>[a-zA-Z][-_a-zA-Z0-9]*(?:\\.[a-zA-Z0-9][-_a-zA-Z0-9]*)*)(?:\\/(?<artifactId>[a-zA-Z][-_a-zA-Z0-9]*(?:\\.[a-zA-Z0-9][-_a-zA-Z0-9]*)*))?$/,\n);\n\nfunction getPackageName(depName: string): string | null {\n const matchGroups = dependencyRegex.exec(depName)?.groups;\n if (matchGroups) {\n const groupId = matchGroups.groupId;\n const artifactId = matchGroups.artifactId\n ? matchGroups.artifactId\n : groupId;\n return `${groupId}:${artifactId}`;\n }\n\n return null;\n}\n\nconst githubDependencyRegex = regEx(\n /^(?:com|io)\\.github\\.(?<packageName>[^/]+\\/[^/]+)$/,\n);\nconst gitlabDependencyRegex = regEx(\n /^(?:com|io)\\.gitlab\\.(?<packageName>[^/]+\\/[^/]+)$/,\n);\nconst bitbucketDependencyRegex = regEx(\n /^(?:org|io)\\.bitbucket\\.(?<packageName>[^/]+\\/[^/]+)$/,\n);\n\nfunction resolveGitPackageFromEdnKey(\n dep: PackageDependency,\n key: string,\n): void {\n if (dep.datasource) {\n return;\n }\n\n const githubDependencyGroups = githubDependencyRegex.exec(key)?.groups;\n if (githubDependencyGroups?.packageName) {\n dep.datasource = GithubTagsDatasource.id;\n dep.packageName = githubDependencyGroups.packageName;\n return;\n }\n\n const gitlabDependencyGroups = gitlabDependencyRegex.exec(key)?.groups;\n if (gitlabDependencyGroups?.packageName) {\n dep.datasource = GitlabTagsDatasource.id;\n dep.packageName = gitlabDependencyGroups.packageName;\n return;\n }\n\n const bitbucketDependencyGroups = bitbucketDependencyRegex.exec(key)?.groups;\n if (bitbucketDependencyGroups?.packageName) {\n dep.datasource = BitbucketTagsDatasource.id;\n dep.packageName = bitbucketDependencyGroups.packageName;\n return;\n }\n}\n\nconst githubUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)github\\.com[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\nconst gitlabUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)gitlab\\.com[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\nconst bitbucketUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)bitbucket\\.org[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\n\nfunction resolveGitPackageFromEdnVal(\n dep: PackageDependency,\n val: ParsedEdnRecord,\n): void {\n const gitUrl = val['git/url'];\n if (!isString(gitUrl)) {\n return;\n }\n\n const githubMatchGroups = githubUrlRegex.exec(gitUrl)?.groups;\n if (githubMatchGroups) {\n dep.datasource = GithubTagsDatasource.id;\n dep.packageName = githubMatchGroups.packageName;\n dep.sourceUrl = `https://github.com/${dep.packageName}`;\n return;\n }\n\n const gitlabMatchGroups = gitlabUrlRegex.exec(gitUrl)?.groups;\n const bitbucketMatchGroups = bitbucketUrlRegex.exec(gitUrl)?.groups;\n\n if (gitlabMatchGroups) {\n dep.datasource = GitlabTagsDatasource.id;\n dep.packageName = gitlabMatchGroups.packageName;\n dep.sourceUrl = `https://gitlab.com/${dep.packageName}`;\n return;\n }\n\n if (bitbucketMatchGroups) {\n dep.datasource = GitlabTagsDatasource.id;\n dep.packageName = bitbucketMatchGroups.packageName;\n dep.sourceUrl = `https://bitbucket.org/${dep.packageName}`;\n return;\n }\n\n dep.datasource = GitRefsDatasource.id;\n dep.packageName = gitUrl;\n if (isHttpUrl(gitUrl)) {\n dep.sourceUrl = gitUrl.replace(regEx(/\\.git$/), '');\n }\n}\n\nfunction extractDependency(\n key: string,\n val: ParsedEdnData,\n metadata: ParsedEdnMetadata,\n mavenRegistries: string[],\n depType?: string,\n): PackageDependency | null {\n if (!isPlainObject(val)) {\n return null;\n }\n\n const packageName = getPackageName(key);\n if (!packageName) {\n return null;\n }\n const depName = key;\n\n const dep: PackageDependency = {\n depName,\n packageName,\n currentValue: null,\n ...metadata.get(val),\n };\n\n if (depType) {\n dep.depType = depType;\n }\n\n const mvnVersion = val['mvn/version'];\n if (isString(mvnVersion)) {\n dep.datasource = ClojureDatasource.id;\n dep.currentValue = mvnVersion;\n dep.packageName = packageName.replace('/', ':');\n dep.registryUrls = [...mavenRegistries];\n return dep;\n }\n\n resolveGitPackageFromEdnVal(dep, val);\n resolveGitPackageFromEdnKey(dep, key);\n\n if (dep.datasource) {\n const gitTag = val['git/tag'];\n if (isString(gitTag)) {\n dep.currentValue = gitTag;\n }\n\n const gitSha = val['git/sha'] ?? val.sha;\n if (isString(gitSha)) {\n dep.currentDigest = gitSha;\n dep.currentDigestShort = gitSha.slice(0, 7);\n }\n\n return dep;\n }\n\n return null;\n}\n\nfunction extractSection(\n section: ParsedEdnData,\n metadata: ParsedEdnMetadata,\n mavenRegistries: string[],\n depType?: string,\n): PackageDependency[] {\n const deps: PackageDependency[] = [];\n if (isPlainObject(section)) {\n for (const [key, val] of Object.entries(section)) {\n const dep = extractDependency(\n key,\n val,\n metadata,\n mavenRegistries,\n depType,\n );\n if (dep) {\n deps.push(dep);\n }\n }\n }\n return deps;\n}\n\nexport function extractPackageFile(content: string): PackageFileContent | null {\n const parsed = parseDepsEdnFile(content);\n if (!parsed) {\n return null;\n }\n const { data, metadata } = parsed;\n\n const deps: PackageDependency[] = [];\n\n // See: https://clojure.org/reference/deps_and_cli#_modifying_the_default_repositories\n const registryMap: Record<string, string> = {\n clojars: CLOJARS_REPO,\n central: MAVEN_REPO,\n };\n const mavenRepos = data['mvn/repos'];\n if (isPlainObject(mavenRepos)) {\n for (const [repoName, repoSpec] of Object.entries(mavenRepos)) {\n if (isString(repoName)) {\n if (isPlainObject(repoSpec) && isString(repoSpec.url)) {\n registryMap[repoName] = repoSpec.url;\n } else if (isString(repoSpec) && repoSpec === 'nil') {\n delete registryMap[repoName];\n }\n }\n }\n }\n const mavenRegistries: string[] = Object.values(registryMap);\n\n deps.push(...extractSection(data.deps, metadata, mavenRegistries));\n\n const aliases = data.aliases;\n if (isPlainObject(aliases)) {\n for (const [depType, aliasSection] of Object.entries(aliases)) {\n if (isPlainObject(aliasSection)) {\n deps.push(\n ...extractSection(\n aliasSection['extra-deps'],\n metadata,\n mavenRegistries,\n depType,\n ),\n );\n deps.push(\n ...extractSection(\n aliasSection['override-deps'],\n metadata,\n mavenRegistries,\n depType,\n ),\n );\n }\n }\n }\n\n return { deps };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/deps-edn/extract.ts"],"sourcesContent":["import { isPlainObject, isString } from '@sindresorhus/is';\nimport { regEx } from '../../../util/regex.ts';\nimport { isHttpUrl } from '../../../util/url.ts';\nimport { BitbucketTagsDatasource } from '../../datasource/bitbucket-tags/index.ts';\nimport { CLOJARS_REPO } from '../../datasource/clojure/common.ts';\nimport { ClojureDatasource } from '../../datasource/clojure/index.ts';\nimport { GitRefsDatasource } from '../../datasource/git-refs/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { GitlabTagsDatasource } from '../../datasource/gitlab-tags/index.ts';\nimport { MAVEN_REPO } from '../../datasource/maven/common.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\nimport { parseDepsEdnFile } from './parser.ts';\nimport type {\n ParsedEdnData,\n ParsedEdnMetadata,\n ParsedEdnRecord,\n} from './types.ts';\n\nconst dependencyRegex = regEx(\n /^(?<groupId>[a-zA-Z][-_a-zA-Z0-9]*(?:\\.[a-zA-Z0-9][-_a-zA-Z0-9]*)*)(?:\\/(?<artifactId>[a-zA-Z][-_a-zA-Z0-9]*(?:\\.[a-zA-Z0-9][-_a-zA-Z0-9]*)*))?$/,\n);\n\nfunction getPackageName(depName: string): string | null {\n const matchGroups = dependencyRegex.exec(depName)?.groups;\n if (matchGroups) {\n const groupId = matchGroups.groupId;\n const artifactId = matchGroups.artifactId\n ? matchGroups.artifactId\n : groupId;\n return `${groupId}:${artifactId}`;\n }\n\n return null;\n}\n\nconst githubDependencyRegex = regEx(\n /^(?:com|io)\\.github\\.(?<packageName>[^/]+\\/[^/]+)$/,\n);\nconst gitlabDependencyRegex = regEx(\n /^(?:com|io)\\.gitlab\\.(?<packageName>[^/]+\\/[^/]+)$/,\n);\nconst bitbucketDependencyRegex = regEx(\n /^(?:org|io)\\.bitbucket\\.(?<packageName>[^/]+\\/[^/]+)$/,\n);\n\nfunction resolveGitPackageFromEdnKey(\n dep: PackageDependency,\n key: string,\n): void {\n if (dep.datasource) {\n return;\n }\n\n const githubDependencyGroups = githubDependencyRegex.exec(key)?.groups;\n if (githubDependencyGroups?.packageName) {\n dep.datasource = GithubTagsDatasource.id;\n dep.packageName = githubDependencyGroups.packageName;\n return;\n }\n\n const gitlabDependencyGroups = gitlabDependencyRegex.exec(key)?.groups;\n if (gitlabDependencyGroups?.packageName) {\n dep.datasource = GitlabTagsDatasource.id;\n dep.packageName = gitlabDependencyGroups.packageName;\n return;\n }\n\n const bitbucketDependencyGroups = bitbucketDependencyRegex.exec(key)?.groups;\n if (bitbucketDependencyGroups?.packageName) {\n dep.datasource = BitbucketTagsDatasource.id;\n dep.packageName = bitbucketDependencyGroups.packageName;\n return;\n }\n}\n\nconst githubUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)github\\.com[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\nconst gitlabUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)gitlab\\.com[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\nconst bitbucketUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)bitbucket\\.org[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\n\nfunction resolveGitPackageFromEdnVal(\n dep: PackageDependency,\n val: ParsedEdnRecord,\n): void {\n const gitUrl = val['git/url'];\n if (!isString(gitUrl)) {\n return;\n }\n\n const githubMatchGroups = githubUrlRegex.exec(gitUrl)?.groups;\n if (githubMatchGroups) {\n dep.datasource = GithubTagsDatasource.id;\n dep.packageName = githubMatchGroups.packageName;\n dep.sourceUrl = `https://github.com/${dep.packageName}`;\n return;\n }\n\n const gitlabMatchGroups = gitlabUrlRegex.exec(gitUrl)?.groups;\n const bitbucketMatchGroups = bitbucketUrlRegex.exec(gitUrl)?.groups;\n\n if (gitlabMatchGroups) {\n dep.datasource = GitlabTagsDatasource.id;\n dep.packageName = gitlabMatchGroups.packageName;\n dep.sourceUrl = `https://gitlab.com/${dep.packageName}`;\n return;\n }\n\n if (bitbucketMatchGroups) {\n dep.datasource = GitlabTagsDatasource.id;\n dep.packageName = bitbucketMatchGroups.packageName;\n dep.sourceUrl = `https://bitbucket.org/${dep.packageName}`;\n return;\n }\n\n dep.datasource = GitRefsDatasource.id;\n dep.packageName = gitUrl;\n if (isHttpUrl(gitUrl)) {\n dep.sourceUrl = gitUrl.replace(regEx(/\\.git$/), '');\n }\n}\n\nfunction extractDependency(\n key: string,\n val: ParsedEdnData,\n metadata: ParsedEdnMetadata,\n mavenRegistries: string[],\n depType?: string,\n): PackageDependency | null {\n if (!isPlainObject(val)) {\n return null;\n }\n\n const packageName = getPackageName(key);\n if (!packageName) {\n return null;\n }\n const depName = key;\n\n const dep: PackageDependency = {\n depName,\n packageName,\n currentValue: null,\n ...metadata.get(val),\n };\n\n if (depType) {\n dep.depType = depType;\n }\n\n const mvnVersion = val['mvn/version'];\n if (isString(mvnVersion)) {\n dep.datasource = ClojureDatasource.id;\n dep.currentValue = mvnVersion;\n dep.packageName = packageName.replace('/', ':');\n dep.registryUrls = [...mavenRegistries];\n return dep;\n }\n\n resolveGitPackageFromEdnVal(dep, val);\n resolveGitPackageFromEdnKey(dep, key);\n\n if (dep.datasource) {\n const gitTag = val['git/tag'];\n if (isString(gitTag)) {\n dep.currentValue = gitTag;\n }\n\n const gitSha = val['git/sha'] ?? val.sha;\n if (isString(gitSha)) {\n dep.currentDigest = gitSha;\n dep.currentDigestShort = gitSha.slice(0, 7);\n }\n\n return dep;\n }\n\n return null;\n}\n\nfunction extractSection(\n section: ParsedEdnData,\n metadata: ParsedEdnMetadata,\n mavenRegistries: string[],\n depType?: string,\n): PackageDependency[] {\n const deps: PackageDependency[] = [];\n if (isPlainObject(section)) {\n for (const [key, val] of Object.entries(section)) {\n const dep = extractDependency(\n key,\n val,\n metadata,\n mavenRegistries,\n depType,\n );\n if (dep) {\n deps.push(dep);\n }\n }\n }\n return deps;\n}\n\nexport function extractPackageFile(content: string): PackageFileContent | null {\n const parsed = parseDepsEdnFile(content);\n if (!parsed) {\n return null;\n }\n const { data, metadata } = parsed;\n\n const deps: PackageDependency[] = [];\n\n // See: https://clojure.org/reference/deps_and_cli#_modifying_the_default_repositories\n const registryMap: Record<string, string> = {\n clojars: CLOJARS_REPO,\n central: MAVEN_REPO,\n };\n const mavenRepos = data['mvn/repos'];\n if (isPlainObject(mavenRepos)) {\n for (const [repoName, repoSpec] of Object.entries(mavenRepos)) {\n // v8 ignore else -- object keys are always strings\n if (isString(repoName)) {\n if (isPlainObject(repoSpec) && isString(repoSpec.url)) {\n registryMap[repoName] = repoSpec.url;\n // NOTE: any other repo spec is left alone. A coverage-ignore hint\n // cannot suppress the implicit else on an `else if`.\n } else if (isString(repoSpec) && repoSpec === 'nil') {\n delete registryMap[repoName];\n }\n }\n }\n }\n const mavenRegistries: string[] = Object.values(registryMap);\n\n deps.push(...extractSection(data.deps, metadata, mavenRegistries));\n\n const aliases = data.aliases;\n if (isPlainObject(aliases)) {\n for (const [depType, aliasSection] of Object.entries(aliases)) {\n if (isPlainObject(aliasSection)) {\n deps.push(\n ...extractSection(\n aliasSection['extra-deps'],\n metadata,\n mavenRegistries,\n depType,\n ),\n );\n deps.push(\n ...extractSection(\n aliasSection['override-deps'],\n metadata,\n mavenRegistries,\n depType,\n ),\n );\n }\n }\n }\n\n return { deps };\n}\n"],"mappings":"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"}
|
|
@@ -26,12 +26,10 @@ function extractPackageFile(content, packageFile, config) {
|
|
|
26
26
|
const dep = getDep(currentFrom, true, config.registryAliases);
|
|
27
27
|
dep.depType = "docker";
|
|
28
28
|
dep.replaceString = replaceString;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
dep.autoReplaceStringTemplate = `"${dep.autoReplaceStringTemplate.replace(d, nd)}"`;
|
|
34
|
-
}
|
|
29
|
+
const d = "@{{newDigest}}";
|
|
30
|
+
const c = firstLineMatch.groups.leading.length + 1;
|
|
31
|
+
const nd = `\\\n${" ".repeat(c)}${d}`;
|
|
32
|
+
dep.autoReplaceStringTemplate = `"${dep.autoReplaceStringTemplate.replace(d, nd)}"`;
|
|
35
33
|
deps.push(dep);
|
|
36
34
|
}
|
|
37
35
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/droneci/extract.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport { getDep } from '../dockerfile/extract.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n config: ExtractConfig,\n): PackageFileContent | null {\n const deps: PackageDependency[] = [];\n try {\n const lines = content.split(newlineRegex);\n for (let lineNumber = 0; lineNumber < lines.length; lineNumber += 1) {\n const line = lines[lineNumber];\n\n const firstLineMatch = regEx(\n /^(?<leading>\\s* image:\\s*)(?<replaceString>['\"](?<currentFrom>[^\\s'\"]+)\\\\)$/,\n ).exec(line);\n\n if (firstLineMatch?.groups) {\n let currentFrom = firstLineMatch.groups.currentFrom;\n let replaceString = firstLineMatch.groups.replaceString;\n\n for (let i = lineNumber + 1; i < lines.length; i += 1) {\n const internalLine = lines[i];\n const middleLineMatch = regEx(\n /^(?<replaceString>\\s*(?<currentFrom>[^\\s'\"]+)\\\\)$/,\n ).exec(internalLine);\n if (middleLineMatch?.groups) {\n currentFrom += middleLineMatch.groups.currentFrom;\n replaceString += `\\n${middleLineMatch.groups.replaceString}`;\n } else {\n const finalLineMatch = regEx(\n /^(?<replaceString>\\s*(?<currentFrom>[^\\s'\"]+)['\"])$/,\n ).exec(internalLine);\n if (finalLineMatch?.groups) {\n currentFrom += finalLineMatch.groups.currentFrom;\n replaceString += `\\n${finalLineMatch.groups.replaceString}`;\n\n const dep = getDep(currentFrom, true, config.registryAliases);\n dep.depType = 'docker';\n dep.replaceString = replaceString;\n
|
|
1
|
+
{"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/droneci/extract.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport { getDep } from '../dockerfile/extract.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n config: ExtractConfig,\n): PackageFileContent | null {\n const deps: PackageDependency[] = [];\n try {\n const lines = content.split(newlineRegex);\n for (let lineNumber = 0; lineNumber < lines.length; lineNumber += 1) {\n const line = lines[lineNumber];\n\n const firstLineMatch = regEx(\n /^(?<leading>\\s* image:\\s*)(?<replaceString>['\"](?<currentFrom>[^\\s'\"]+)\\\\)$/,\n ).exec(line);\n\n if (firstLineMatch?.groups) {\n let currentFrom = firstLineMatch.groups.currentFrom;\n let replaceString = firstLineMatch.groups.replaceString;\n\n for (let i = lineNumber + 1; i < lines.length; i += 1) {\n const internalLine = lines[i];\n const middleLineMatch = regEx(\n /^(?<replaceString>\\s*(?<currentFrom>[^\\s'\"]+)\\\\)$/,\n ).exec(internalLine);\n if (middleLineMatch?.groups) {\n currentFrom += middleLineMatch.groups.currentFrom;\n replaceString += `\\n${middleLineMatch.groups.replaceString}`;\n } else {\n const finalLineMatch = regEx(\n /^(?<replaceString>\\s*(?<currentFrom>[^\\s'\"]+)['\"])$/,\n ).exec(internalLine);\n if (finalLineMatch?.groups) {\n currentFrom += finalLineMatch.groups.currentFrom;\n replaceString += `\\n${finalLineMatch.groups.replaceString}`;\n\n const dep = getDep(currentFrom, true, config.registryAliases);\n dep.depType = 'docker';\n dep.replaceString = replaceString;\n const d = '@{{newDigest}}';\n const c = firstLineMatch.groups.leading.length + 1;\n const nd = `\\\\\\n${' '.repeat(c)}${d}`;\n // getDep always set it, see second parameter\n const replaced = dep.autoReplaceStringTemplate!.replace(d, nd);\n dep.autoReplaceStringTemplate = `\"${replaced}\"`;\n deps.push(dep);\n }\n break;\n }\n }\n } else {\n const match = regEx(\n /^\\s* image:\\s*'?\"?(?<currentFrom>[^\\s'\"]+)'?\"?\\s*$/,\n ).exec(line);\n if (match?.groups) {\n const dep = getDep(\n match.groups.currentFrom,\n true,\n config.registryAliases,\n );\n dep.depType = 'docker';\n deps.push(dep);\n }\n }\n }\n } catch (err) /* istanbul ignore next */ {\n logger.debug({ err, packageFile }, 'Error extracting DroneCI images');\n }\n if (!deps.length) {\n return null;\n }\n return { deps };\n}\n"],"mappings":";;;;AASA,SAAgB,mBACd,SACA,aACA,QAC2B;CAC3B,MAAM,OAA4B,CAAC;CACnC,IAAI;EACF,MAAM,QAAQ,QAAQ,MAAM,YAAY;EACxC,KAAK,IAAI,aAAa,GAAG,aAAa,MAAM,QAAQ,cAAc,GAAG;GACnE,MAAM,OAAO,MAAM;GAEnB,MAAM,iBAAiB,MACrB,6EACF,CAAC,CAAC,KAAK,IAAI;GAEX,IAAI,gBAAgB,QAAQ;IAC1B,IAAI,cAAc,eAAe,OAAO;IACxC,IAAI,gBAAgB,eAAe,OAAO;IAE1C,KAAK,IAAI,IAAI,aAAa,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;KACrD,MAAM,eAAe,MAAM;KAC3B,MAAM,kBAAkB,MACtB,mDACF,CAAC,CAAC,KAAK,YAAY;KACnB,IAAI,iBAAiB,QAAQ;MAC3B,eAAe,gBAAgB,OAAO;MACtC,iBAAiB,KAAK,gBAAgB,OAAO;KAC/C,OAAO;MACL,MAAM,iBAAiB,MACrB,qDACF,CAAC,CAAC,KAAK,YAAY;MACnB,IAAI,gBAAgB,QAAQ;OAC1B,eAAe,eAAe,OAAO;OACrC,iBAAiB,KAAK,eAAe,OAAO;OAE5C,MAAM,MAAM,OAAO,aAAa,MAAM,OAAO,eAAe;OAC5D,IAAI,UAAU;OACd,IAAI,gBAAgB;OACpB,MAAM,IAAI;OACV,MAAM,IAAI,eAAe,OAAO,QAAQ,SAAS;OACjD,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI;OAGlC,IAAI,4BAA4B,IADf,IAAI,0BAA2B,QAAQ,GAAG,EAChB,EAAE;OAC7C,KAAK,KAAK,GAAG;MACf;MACA;KACF;IACF;GACF,OAAO;IACL,MAAM,QAAQ,MACZ,oDACF,CAAC,CAAC,KAAK,IAAI;IACX,IAAI,OAAO,QAAQ;KACjB,MAAM,MAAM,OACV,MAAM,OAAO,aACb,MACA,OAAO,eACT;KACA,IAAI,UAAU;KACd,KAAK,KAAK,GAAG;IACf;GACF;EACF;CACF,SAAS,gCAAgC;EACvC,OAAO,MAAM;GAAE;GAAK;EAAY,GAAG,iCAAiC;CACtE;CACA,IAAI,CAAC,KAAK,QACR,OAAO;CAET,OAAO,EAAE,KAAK;AAChB"}
|
|
@@ -6,10 +6,10 @@ hashMap.set("ant", "2df5943cf0ed19a21b94df13729dbb925655548130caf37e3e22bebaed51
|
|
|
6
6
|
hashMap.set("apm", "ca7c2342c04489253cd8f38d294a4c1428010115c2be22b3e0812dacf9881244");
|
|
7
7
|
hashMap.set("argocd", "cff9cd22257bc460ae4b9936570bf0ed5585f280a55d26629deaeeb0bfee8eb5");
|
|
8
8
|
hashMap.set("asdf", "430eb99b58171700c8a59c78b9e648575e9b176b781d90dd10a710f7b69015bb");
|
|
9
|
-
hashMap.set("azure-pipelines", "
|
|
9
|
+
hashMap.set("azure-pipelines", "a051fe5e7e4fef8208b5864131a2b52b4ae319936f1dd8ee5a4e1ef11359ec09");
|
|
10
10
|
hashMap.set("batect", "375d39b432013bedb1330cf40a2199dd822751b28578214f219e7bab98594b8d");
|
|
11
11
|
hashMap.set("batect-wrapper", "d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939");
|
|
12
|
-
hashMap.set("bazel", "
|
|
12
|
+
hashMap.set("bazel", "e5f354a1370b544c6e220880f11cfc11a2e95d2d172dae7d008ef0f65e8693ef");
|
|
13
13
|
hashMap.set("bazel-module", "9fbba0339f9f7785d52ab85c5f0f6385003093c063483c13feccba13ae438bef");
|
|
14
14
|
hashMap.set("bazelisk", "770f75a746dc6ba90c518788d5987d7df4243ef9eee122d1bb0556a93d6e1b11");
|
|
15
15
|
hashMap.set("bicep", "7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db");
|
|
@@ -19,31 +19,31 @@ hashMap.set("buildkite", "b8b404f53cd5d61c39153fddf93945e621471c4ac6aa9960c881cd
|
|
|
19
19
|
hashMap.set("buildpacks", "6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f");
|
|
20
20
|
hashMap.set("bun", "684f46dd3cef4d30f9e4ae97c384a38d032ebf3d0bfe9b471ab1772c7b26827a");
|
|
21
21
|
hashMap.set("bun-version", "df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4");
|
|
22
|
-
hashMap.set("bundler", "
|
|
22
|
+
hashMap.set("bundler", "6e4784dd98c1f86ef64cc8cbf3128df48aebf920032d7792b54fdedd3dd9d4d5");
|
|
23
23
|
hashMap.set("cake", "9ebd8b481220b30a8860121d26184540a1a2fcc05ef780df9295dea39b386fad");
|
|
24
24
|
hashMap.set("cargo", "63721e2683b30cffc5ba87c75f919dc61a555f7741fa479f7446ef98c0ae9d5d");
|
|
25
25
|
hashMap.set("cdnurl", "9a81c8e3c6ad6c788498c99fc1067ffdfcd92a427c3afaf8c0130975d83131f2");
|
|
26
26
|
hashMap.set("circleci", "91cbeb33ea20f9838e2c81a1195eb806f0b38fa282bc3679f62552f20575ca85");
|
|
27
27
|
hashMap.set("cloudbuild", "f4e40388944652c8a19f8518771ac8d3f3c4ccf81ddef0e68b463aca833cb73c");
|
|
28
28
|
hashMap.set("cocoapods", "f832e2beef885bb3fd697ed9bb3e8cd742926bfec37ff41212edd2dbb4edb3ba");
|
|
29
|
-
hashMap.set("composer", "
|
|
29
|
+
hashMap.set("composer", "99ad5e0c0b479ae571e8f018e6d312c0e418f4800a6583b997b0e32d9058e9bd");
|
|
30
30
|
hashMap.set("conan", "8d46e9a30ae628e26118aea10a98d1b846f7c5d96d51ce24693437d555f6d125");
|
|
31
31
|
hashMap.set("copier", "10ae4d7f8ff35faf3a3f9f25bf4c969ea960e19aaf8c012aee11f93f4d10533e");
|
|
32
32
|
hashMap.set("cpanfile", "07813fec3f3c2197056500e9266a0553b9774c02f2c74d5ca2e213188c7c12d3");
|
|
33
33
|
hashMap.set("crossplane", "5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40");
|
|
34
34
|
hashMap.set("crow", "eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0");
|
|
35
35
|
hashMap.set("deno", "917fdbfbad58fd7f57933646a760d91768368df563ce5eaf34a2bba165164a12");
|
|
36
|
-
hashMap.set("deps-edn", "
|
|
36
|
+
hashMap.set("deps-edn", "8a35b7e6e5ec375d8411cd40fa8eed836ba5aab02efe8ed8819861b41490da1b");
|
|
37
37
|
hashMap.set("devbox", "a40050cc61bd9b5d500ec111abb17bb15d5f82ab5b7699f66f628307ba8382c9");
|
|
38
38
|
hashMap.set("devcontainer", "24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec");
|
|
39
|
-
hashMap.set("docker-compose", "
|
|
40
|
-
hashMap.set("dockerfile", "
|
|
39
|
+
hashMap.set("docker-compose", "d806fc9ff52673b78587c6c58789b66987b046e3fd0b16e4f6d57aca078e9bca");
|
|
40
|
+
hashMap.set("dockerfile", "e491725880d930dfd0d58db135b31c0cc5bb6ff5e87f9e813c78bc0cf03b580c");
|
|
41
41
|
hashMap.set("droneci", "e2039bb37c2d63c53027b188d1f0faa7c8923dcbfe6cf3851fba8d4e9f43a358");
|
|
42
42
|
hashMap.set("fleet", "4942d52e82f35c41e2d46cf76f426e2d91b350338cfc0bbcb97e8aaae2a1ac0b");
|
|
43
|
-
hashMap.set("flux", "
|
|
43
|
+
hashMap.set("flux", "aad8c786c4a2b5820663027452eeb8fe84c3af8c8399261e85f0eade2e484fe8");
|
|
44
44
|
hashMap.set("fvm", "9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90");
|
|
45
45
|
hashMap.set("git-submodules", "df8bb92b2906d8cddda2d4b302ee503f8002e3554d32d74cef2f584fe891f38f");
|
|
46
|
-
hashMap.set("github-actions", "
|
|
46
|
+
hashMap.set("github-actions", "cf5340c54bb22a81bbc38c55daf69f6b0556574e8603f09e5f7ddd21e0aec176");
|
|
47
47
|
hashMap.set("gitlabci", "a5e1e66ef461e1c1e71062f85f35a212417e23627f4b002810f9a98295d6e672");
|
|
48
48
|
hashMap.set("gitlabci-include", "8860a15ab516fde00694f9bd9bf56fce4addafe5a55b5ddb9a4ec477d301d351");
|
|
49
49
|
hashMap.set("glasskube", "93e7b9000a17efa15a1abaaf320b5af9169b1ecd828fc0c881d98570ef9d9e30");
|
|
@@ -98,14 +98,14 @@ hashMap.set("renovate-config", "ca60beee2e3b871ea1216fa9df9a501f7ed355fe7da29e12
|
|
|
98
98
|
hashMap.set("ruby-version", "2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97");
|
|
99
99
|
hashMap.set("runtime-version", "b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160");
|
|
100
100
|
hashMap.set("rust-toolchain", "6ace53db02874d73620d2d872291839820a512a9529c42d174358c692e5db720");
|
|
101
|
-
hashMap.set("sbt", "
|
|
101
|
+
hashMap.set("sbt", "e1eb5c7f0171a9bb1b6bd4a36a91039a31b6c84e0983d91d930be31a69506d9e");
|
|
102
102
|
hashMap.set("scalafmt", "9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f");
|
|
103
103
|
hashMap.set("setup-cfg", "4a3a7c812d34739c07685691e7e64c7d3127f9d7d4aff99dc45a25df97ed9745");
|
|
104
104
|
hashMap.set("smithy", "9641b91d065ffb63be0dd888139a0402dba41e550f8b44c592db9daf52109100");
|
|
105
105
|
hashMap.set("sveltos", "60dd75bb53ace31217211100d622fdb65068c6162758b6ae7103a6ce8bdc9f90");
|
|
106
106
|
hashMap.set("swift", "5ebd875ee7a541b4725f6263789ea9a7c77a4b7c40b2119f894e67b588cfa672");
|
|
107
107
|
hashMap.set("tekton", "33948f5bdf7553909fa63744adb26da97ddf366e9499bccab1250879570267c9");
|
|
108
|
-
hashMap.set("terraform", "
|
|
108
|
+
hashMap.set("terraform", "119a23583e7888eb362bfc0f9abd6c37feafbc1e21affb12c3d4d87e3734064f");
|
|
109
109
|
hashMap.set("terraform-version", "ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa");
|
|
110
110
|
hashMap.set("terragrunt", "ffcbaa67dd65f064d43f8c121c1006115eab1879c4bd38de263b9b90a009c118");
|
|
111
111
|
hashMap.set("terragrunt-version", "eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d");
|