diff --git a/lib/modules/datasource/conan/index.ts b/lib/modules/datasource/conan/index.ts index b4fae4da514b3c3e37dfb28f744337c45c966f87..dd3fb0a12b4c99f6457147108ea779bc40c1d2ba 100644 --- a/lib/modules/datasource/conan/index.ts +++ b/lib/modules/datasource/conan/index.ts @@ -3,7 +3,7 @@ import { logger } from '../../../logger'; import { cache } from '../../../util/cache/package/decorator'; import { GithubHttp } from '../../../util/http/github'; import { ensureTrailingSlash, joinUrlParts } from '../../../util/url'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import * as allVersioning from '../../versioning'; import { Datasource } from '../datasource'; import type { @@ -58,7 +58,7 @@ export class ConanDatasource extends Datasource { const res = await this.githubHttp.get(url, { headers: { accept: 'application/vnd.github.v3.raw' }, }); - const doc = load(res.body, { + const doc = parseSingleYaml(res.body, { json: true, }) as ConanYAML; return { diff --git a/lib/modules/datasource/custom/formats/yaml.ts b/lib/modules/datasource/custom/formats/yaml.ts index f20f32d13000453e0671afc2275faec4b519e197..541eb2a9d47bd6a91019da84d38ed73f02715d56 100644 --- a/lib/modules/datasource/custom/formats/yaml.ts +++ b/lib/modules/datasource/custom/formats/yaml.ts @@ -1,18 +1,18 @@ import { readLocalFile } from '../../../../util/fs'; import type { Http } from '../../../../util/http'; -import { load } from '../../../../util/yaml'; +import { parseSingleYaml } from '../../../../util/yaml'; import type { CustomDatasourceFetcher } from './types'; export class YamlFetcher implements CustomDatasourceFetcher { async fetch(http: Http, registryURL: string): Promise<unknown> { const response = await http.get(registryURL); - return load(response.body); + return parseSingleYaml(response.body); } async readFile(registryURL: string): Promise<unknown> { const fileContent = await readLocalFile(registryURL, 'utf8'); - return load(fileContent!); + return parseSingleYaml(fileContent!); } } diff --git a/lib/modules/datasource/helm/common.spec.ts b/lib/modules/datasource/helm/common.spec.ts index 63db19e8c4ed45fcd914dba6ed4ccd269c6c3389..09ad126e72b396da401e2450543d2079df1a6847 100644 --- a/lib/modules/datasource/helm/common.spec.ts +++ b/lib/modules/datasource/helm/common.spec.ts @@ -1,10 +1,10 @@ import { Fixtures } from '../../../../test/fixtures'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import { findSourceUrl } from './common'; import type { HelmRepository } from './types'; // Truncated index.yaml file -const repo = load(Fixtures.get('sample.yaml'), { +const repo = parseSingleYaml(Fixtures.get('sample.yaml'), { json: true, }) as HelmRepository; diff --git a/lib/modules/datasource/helm/index.ts b/lib/modules/datasource/helm/index.ts index aeff449f255eee7e7736bb87d42e4158c9240438..20c691794a21d22571cebd919cc30ed40af45335 100644 --- a/lib/modules/datasource/helm/index.ts +++ b/lib/modules/datasource/helm/index.ts @@ -3,7 +3,7 @@ import { logger } from '../../../logger'; import { cache } from '../../../util/cache/package/decorator'; import type { HttpResponse } from '../../../util/http/types'; import { ensureTrailingSlash } from '../../../util/url'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import * as helmVersioning from '../../versioning/helm'; import { Datasource } from '../datasource'; import type { GetReleasesConfig, ReleaseResult } from '../types'; @@ -48,7 +48,7 @@ export class HelmDatasource extends Datasource { this.handleGenericErrors(err); } try { - const doc = load(res.body, { + const doc = parseSingleYaml(res.body, { json: true, }) as HelmRepository; if (!is.plainObject<HelmRepository>(doc)) { diff --git a/lib/modules/manager/argocd/extract.ts b/lib/modules/manager/argocd/extract.ts index 8553a748f064f401bd1f9c7700c213989791af46..cd3b44d8543d1c88065754d6d1d82f23eedf79f3 100644 --- a/lib/modules/manager/argocd/extract.ts +++ b/lib/modules/manager/argocd/extract.ts @@ -2,7 +2,7 @@ import is from '@sindresorhus/is'; import { logger } from '../../../logger'; import { coerceArray } from '../../../util/array'; import { trimTrailingSlash } from '../../../util/url'; -import { loadAll } from '../../../util/yaml'; +import { parseYaml } from '../../../util/yaml'; import { DockerDatasource } from '../../datasource/docker'; import { GitTagsDatasource } from '../../datasource/git-tags'; import { HelmDatasource } from '../../datasource/helm'; @@ -33,7 +33,7 @@ export function extractPackageFile( let definitions: ApplicationDefinition[]; try { - definitions = loadAll(content) as ApplicationDefinition[]; + definitions = parseYaml(content) as ApplicationDefinition[]; } catch (err) { logger.debug({ err, packageFile }, 'Failed to parse ArgoCD definition.'); return null; diff --git a/lib/modules/manager/azure-pipelines/extract.ts b/lib/modules/manager/azure-pipelines/extract.ts index b5d353dec58c98a98e103128c751fdc9998a2720..5f2a1c7f2c81a5acc3d809b22e9dd4fe016a2d6c 100644 --- a/lib/modules/manager/azure-pipelines/extract.ts +++ b/lib/modules/manager/azure-pipelines/extract.ts @@ -3,7 +3,7 @@ import { logger } from '../../../logger'; import { coerceArray } from '../../../util/array'; import { regEx } from '../../../util/regex'; import { joinUrlParts } from '../../../util/url'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import { AzurePipelinesTasksDatasource } from '../../datasource/azure-pipelines-tasks'; import { GitTagsDatasource } from '../../datasource/git-tags'; import { getDep } from '../dockerfile/extract'; @@ -106,7 +106,7 @@ export function parseAzurePipelines( ): AzurePipelines | null { let pkg: AzurePipelines | null = null; try { - pkg = load(content, { json: true }) as AzurePipelines; + pkg = parseSingleYaml(content, { json: true }) as AzurePipelines; } catch (err) /* istanbul ignore next */ { logger.debug({ packageFile, err }, 'Error parsing azure-pipelines content'); return null; diff --git a/lib/modules/manager/batect/extract.ts b/lib/modules/manager/batect/extract.ts index fd9f4c4a03d784641be207ef32750dead72841e3..9f84b903a64e1aa48ed2ff035ce3cf86fc076947 100644 --- a/lib/modules/manager/batect/extract.ts +++ b/lib/modules/manager/batect/extract.ts @@ -2,7 +2,7 @@ import is from '@sindresorhus/is'; import upath from 'upath'; import { logger } from '../../../logger'; import { readLocalFile } from '../../../util/fs'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import { GitTagsDatasource } from '../../datasource/git-tags'; import { id as dockerVersioning } from '../../versioning/docker'; import { id as semverVersioning } from '../../versioning/semver'; @@ -17,7 +17,7 @@ import type { } from './types'; function loadConfig(content: string): BatectConfig { - const config = load(content); + const config = parseSingleYaml(content); if (typeof config !== 'object') { throw new Error( diff --git a/lib/modules/manager/cloudbuild/extract.ts b/lib/modules/manager/cloudbuild/extract.ts index 6f04657b95545e333fee93fa842f42a1fa0ad371..92f08454da77de0f50e6d1c4f8dc07221016391b 100644 --- a/lib/modules/manager/cloudbuild/extract.ts +++ b/lib/modules/manager/cloudbuild/extract.ts @@ -1,6 +1,6 @@ import is from '@sindresorhus/is'; import { logger } from '../../../logger'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import { getDep } from '../dockerfile/extract'; import type { PackageDependency, PackageFileContent } from '../types'; @@ -11,7 +11,7 @@ export function extractPackageFile( const deps: PackageDependency[] = []; try { // TODO: fix types - const doc: any = load(content); + const doc: any = parseSingleYaml(content); if (doc?.steps && is.array(doc.steps)) { for (const step of doc.steps) { if (step.name) { diff --git a/lib/modules/manager/crossplane/extract.ts b/lib/modules/manager/crossplane/extract.ts index 605a70fdf540c55b5364de0fd749bd1082d15acc..993dbdadf961d01ee2020d04674e40ba5d7ec5fe 100644 --- a/lib/modules/manager/crossplane/extract.ts +++ b/lib/modules/manager/crossplane/extract.ts @@ -1,5 +1,5 @@ import { logger } from '../../../logger'; -import { loadAll } from '../../../util/yaml'; +import { parseYaml } from '../../../util/yaml'; import { getDep } from '../dockerfile/extract'; import type { ExtractConfig, @@ -21,7 +21,7 @@ export function extractPackageFile( let list = []; try { - list = loadAll(content); + list = parseYaml(content); } catch (err) { logger.debug( { err, packageFile }, diff --git a/lib/modules/manager/docker-compose/extract.ts b/lib/modules/manager/docker-compose/extract.ts index 06ccb814744e219e4737df136a85aea2bd8b996f..03761162e804380d7ff78212612b049a5d3d9109 100644 --- a/lib/modules/manager/docker-compose/extract.ts +++ b/lib/modules/manager/docker-compose/extract.ts @@ -1,7 +1,7 @@ import is from '@sindresorhus/is'; import { logger } from '../../../logger'; import { newlineRegex, regEx } from '../../../util/regex'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import { getDep } from '../dockerfile/extract'; import type { ExtractConfig, PackageFileContent } from '../types'; import type { DockerComposeConfig } from './types'; @@ -37,7 +37,7 @@ export function extractPackageFile( let config: DockerComposeConfig; try { // TODO: fix me (#9610) - config = load(content, { json: true }) as DockerComposeConfig; + config = parseSingleYaml(content, { json: true }) as DockerComposeConfig; if (!config) { logger.debug( { packageFile }, diff --git a/lib/modules/manager/fleet/extract.ts b/lib/modules/manager/fleet/extract.ts index cee52e074f950ae798924e66fef020f2bd54e375..06b6b3ef2e9411d9405a6d7f97b2b8c56ce42392 100644 --- a/lib/modules/manager/fleet/extract.ts +++ b/lib/modules/manager/fleet/extract.ts @@ -1,7 +1,7 @@ import is from '@sindresorhus/is'; import { logger } from '../../../logger'; import { regEx } from '../../../util/regex'; -import { loadAll } from '../../../util/yaml'; +import { parseYaml } from '../../../util/yaml'; import { GitTagsDatasource } from '../../datasource/git-tags'; import { HelmDatasource } from '../../datasource/helm'; import { checkIfStringIsPath } from '../terraform/util'; @@ -120,7 +120,7 @@ export function extractPackageFile( try { if (regEx('fleet.ya?ml').test(packageFile)) { // TODO: fix me (#9610) - const docs = loadAll(content, null, { json: true }) as FleetFile[]; + const docs = parseYaml(content, null, { json: true }) as FleetFile[]; const fleetDeps = docs .filter((doc) => is.truthy(doc?.helm)) .flatMap((doc) => extractFleetFile(doc)); @@ -128,7 +128,7 @@ export function extractPackageFile( deps.push(...fleetDeps); } else { // TODO: fix me (#9610) - const docs = loadAll(content, null, { json: true }) as GitRepo[]; + const docs = parseYaml(content, null, { json: true }) as GitRepo[]; const gitRepoDeps = docs .filter((doc) => doc.kind === 'GitRepo') // ensure only GitRepo manifests are processed .flatMap((doc) => extractGitRepo(doc)); diff --git a/lib/modules/manager/flux/extract.ts b/lib/modules/manager/flux/extract.ts index 036c1a46f142c7f7c07d4561e4d25c8256499c2a..b5c6469392e24a03a3046f5260c368da356c39ba 100644 --- a/lib/modules/manager/flux/extract.ts +++ b/lib/modules/manager/flux/extract.ts @@ -2,7 +2,7 @@ import is from '@sindresorhus/is'; import { logger } from '../../../logger'; import { readLocalFile } from '../../../util/fs'; import { regEx } from '../../../util/regex'; -import { loadAll } from '../../../util/yaml'; +import { parseYaml } from '../../../util/yaml'; import { BitbucketTagsDatasource } from '../../datasource/bitbucket-tags'; import { DockerDatasource } from '../../datasource/docker'; import { GitRefsDatasource } from '../../datasource/git-refs'; @@ -52,7 +52,7 @@ function readManifest( }; let resources: FluxResource[]; try { - resources = loadAll(content, null, { json: true }) as FluxResource[]; + resources = parseYaml(content, null, { json: true }) as FluxResource[]; } catch (err) { logger.debug({ err, packageFile }, 'Failed to parse Flux manifest'); return null; diff --git a/lib/modules/manager/github-actions/extract.ts b/lib/modules/manager/github-actions/extract.ts index e0415683c9a1c26ad6f3f89ea08acb478548af8e..d8fff7ea0825f505bfc2976cac5cf8e1e59a7220 100644 --- a/lib/modules/manager/github-actions/extract.ts +++ b/lib/modules/manager/github-actions/extract.ts @@ -3,7 +3,7 @@ import { GlobalConfig } from '../../../config/global'; import { logger } from '../../../logger'; import { isNotNullOrUndefined } from '../../../util/array'; import { newlineRegex, regEx } from '../../../util/regex'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import { GithubRunnersDatasource } from '../../datasource/github-runners'; import { GithubTagsDatasource } from '../../datasource/github-tags'; import * as dockerVersioning from '../../versioning/docker'; @@ -166,7 +166,7 @@ function extractWithYAMLParser( let pkg: Workflow; try { - pkg = load(content, { json: true }) as Workflow; + pkg = parseSingleYaml(content, { json: true }) as Workflow; } catch (err) { logger.debug( { packageFile, err }, diff --git a/lib/modules/manager/gitlabci-include/common.spec.ts b/lib/modules/manager/gitlabci-include/common.spec.ts index c71f0cf03fb05fa88d3057f40560dcc89f38bc73..40528525a69fcc8ad61b255bc1c16f492c848428 100644 --- a/lib/modules/manager/gitlabci-include/common.spec.ts +++ b/lib/modules/manager/gitlabci-include/common.spec.ts @@ -1,5 +1,5 @@ import { Fixtures } from '../../../../test/fixtures'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import type { GitlabPipeline } from '../gitlabci/types'; import { replaceReferenceTags } from '../gitlabci/utils'; import { @@ -10,7 +10,7 @@ import { } from './common'; const yamlFileMultiConfig = Fixtures.get('gitlab-ci.1.yaml'); -const pipeline = load( +const pipeline = parseSingleYaml( replaceReferenceTags(yamlFileMultiConfig), ) as GitlabPipeline; const includeLocal = { local: 'something' }; diff --git a/lib/modules/manager/gitlabci-include/extract.ts b/lib/modules/manager/gitlabci-include/extract.ts index b38d730e485e2c61ad5f7a75e2e989348138b540..95a98dc87af54de350a9e94f3498925c50a9ec8e 100644 --- a/lib/modules/manager/gitlabci-include/extract.ts +++ b/lib/modules/manager/gitlabci-include/extract.ts @@ -2,7 +2,7 @@ import is from '@sindresorhus/is'; import { GlobalConfig } from '../../../config/global'; import { logger } from '../../../logger'; import { regEx } from '../../../util/regex'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import { GitlabTagsDatasource } from '../../datasource/gitlab-tags'; import type { GitlabInclude, @@ -71,7 +71,7 @@ export function extractPackageFile( const platform = GlobalConfig.get('platform'); const endpoint = GlobalConfig.get('endpoint'); try { - const doc = load(replaceReferenceTags(content), { + const doc = parseSingleYaml(replaceReferenceTags(content), { json: true, }) as GitlabPipeline; const includes = getAllIncludeProjects(doc); diff --git a/lib/modules/manager/gitlabci/extract.ts b/lib/modules/manager/gitlabci/extract.ts index a520e0349a74c5cf6d7d35975c3d84ce8d39a986..8f5a6ce0164751f9ed529808ad6feec92b32139f 100644 --- a/lib/modules/manager/gitlabci/extract.ts +++ b/lib/modules/manager/gitlabci/extract.ts @@ -2,7 +2,7 @@ import is from '@sindresorhus/is'; import { logger } from '../../../logger'; import { readLocalFile } from '../../../util/fs'; import { trimLeadingSlash } from '../../../util/url'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import type { ExtractConfig, PackageDependency, @@ -83,7 +83,7 @@ export function extractPackageFile( ): PackageFileContent | null { let deps: PackageDependency[] = []; try { - const doc = load(replaceReferenceTags(content), { + const doc = parseSingleYaml(replaceReferenceTags(content), { json: true, }) as Record<string, Image | Services | Job>; if (is.object(doc)) { @@ -146,7 +146,7 @@ export async function extractAllPackageFiles( } let doc: GitlabPipeline; try { - doc = load(replaceReferenceTags(content), { + doc = parseSingleYaml(replaceReferenceTags(content), { json: true, }) as GitlabPipeline; } catch (err) { diff --git a/lib/modules/manager/helm-requirements/extract.ts b/lib/modules/manager/helm-requirements/extract.ts index 52834af8251d67924d7c2d42b3ed016d6d6c5b0e..8d42bcd4b552727c98d979d208174953631a0a28 100644 --- a/lib/modules/manager/helm-requirements/extract.ts +++ b/lib/modules/manager/helm-requirements/extract.ts @@ -1,6 +1,6 @@ import is from '@sindresorhus/is'; import { logger } from '../../../logger'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import { HelmDatasource } from '../../datasource/helm'; import type { ExtractConfig, @@ -17,7 +17,7 @@ export function extractPackageFile( // TODO: fix type let doc: any; try { - doc = load(content, { json: true }); // TODO #9610 + doc = parseSingleYaml(content, { json: true }); // TODO #9610 } catch (err) { logger.debug({ packageFile }, `Failed to parse helm requirements.yaml`); return null; diff --git a/lib/modules/manager/helm-values/extract.ts b/lib/modules/manager/helm-values/extract.ts index e75026dec80a47d62a77da40094a8a181c07e627..61437fdbb79571efd78b93cd90663ccaef7e577b 100644 --- a/lib/modules/manager/helm-values/extract.ts +++ b/lib/modules/manager/helm-values/extract.ts @@ -1,5 +1,5 @@ import { logger } from '../../../logger'; -import { loadAll } from '../../../util/yaml'; +import { parseYaml } from '../../../util/yaml'; import { id as dockerVersioning } from '../../versioning/docker'; import { getDep } from '../dockerfile/extract'; import type { PackageDependency, PackageFileContent } from '../types'; @@ -66,7 +66,7 @@ export function extractPackageFile( // a parser that allows extracting line numbers would be preferable, with // the current approach we need to match anything we find again during the update // TODO: fix me (#9610) - parsedContent = loadAll(content, null, { json: true }) as any; + parsedContent = parseYaml(content, null, { json: true }) as any; } catch (err) { logger.debug({ err, packageFile }, 'Failed to parse helm-values YAML'); return null; diff --git a/lib/modules/manager/helmfile/extract.ts b/lib/modules/manager/helmfile/extract.ts index 0ca299a2232b7aeaa3d44fdc792f82529746e8fb..379073c0c08f84e9690f18b0327c47d91f57befd 100644 --- a/lib/modules/manager/helmfile/extract.ts +++ b/lib/modules/manager/helmfile/extract.ts @@ -1,7 +1,7 @@ import is from '@sindresorhus/is'; import { logger } from '../../../logger'; import { regEx } from '../../../util/regex'; -import { loadAll } from '../../../util/yaml'; +import { parseYaml } from '../../../util/yaml'; import { DockerDatasource } from '../../datasource/docker'; import { HelmDatasource } from '../../datasource/helm'; import type { @@ -35,7 +35,7 @@ export async function extractPackageFile( // Record kustomization usage for all deps, since updating artifacts is run on the helmfile.yaml as a whole. let needKustomize = false; try { - docs = loadAll(content, null, { + docs = parseYaml(content, null, { removeTemplates: true, json: true, }) as Doc[]; diff --git a/lib/modules/manager/helmsman/extract.ts b/lib/modules/manager/helmsman/extract.ts index f776cd0b2f0a45dbe1083f3d7c7161e577485e8a..697c2fdf4403a97caab3d66417d94906cbb2bb05 100644 --- a/lib/modules/manager/helmsman/extract.ts +++ b/lib/modules/manager/helmsman/extract.ts @@ -1,7 +1,7 @@ import is from '@sindresorhus/is'; import { logger } from '../../../logger'; import { regEx } from '../../../util/regex'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import { DockerDatasource } from '../../datasource/docker'; import { HelmDatasource } from '../../datasource/helm'; import type { @@ -69,7 +69,7 @@ export function extractPackageFile( ): PackageFileContent | null { try { // TODO: fix me (#9610) - const doc = load(content, { + const doc = parseSingleYaml(content, { json: true, }) as HelmsmanDocument; if (!doc.apps) { diff --git a/lib/modules/manager/helmv3/artifacts.ts b/lib/modules/manager/helmv3/artifacts.ts index 7f7df8d6c600b48b7b80a1312a941be7623016f3..0228d5f9d82da3baa21f54c4ac05146ecc7fb96b 100644 --- a/lib/modules/manager/helmv3/artifacts.ts +++ b/lib/modules/manager/helmv3/artifacts.ts @@ -114,9 +114,11 @@ export async function updateArtifacts({ } try { // get repositories and registries defined in the package file - const packages = yaml.load(newPackageFileContent) as ChartDefinition; //TODO #9610 + const packages = yaml.parseSingleYaml( + newPackageFileContent, + ) as ChartDefinition; //TODO #9610 const locks = existingLockFileContent - ? (yaml.load(existingLockFileContent) as ChartDefinition) + ? (yaml.parseSingleYaml(existingLockFileContent) as ChartDefinition) : { dependencies: [] }; //TODO #9610 const chartDefinitions: ChartDefinition[] = []; diff --git a/lib/modules/manager/helmv3/extract.ts b/lib/modules/manager/helmv3/extract.ts index f6d9e9d4649ad28f418eb12be88e8d9efba2eb86..758b5d66b5112653608e07a9d62f4d10b19de6b8 100644 --- a/lib/modules/manager/helmv3/extract.ts +++ b/lib/modules/manager/helmv3/extract.ts @@ -1,7 +1,7 @@ import is from '@sindresorhus/is'; import { logger } from '../../../logger'; import { getSiblingFileName, localPathExists } from '../../../util/fs'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import { HelmDatasource } from '../../datasource/helm'; import type { ExtractConfig, @@ -23,7 +23,7 @@ export async function extractPackageFile( }; try { // TODO: fix me (#9610) - chart = load(content, { json: true }) as any; + chart = parseSingleYaml(content, { json: true }) as any; if (!(chart?.apiVersion && chart.name && chart.version)) { logger.debug( { packageFile }, diff --git a/lib/modules/manager/jenkins/extract.ts b/lib/modules/manager/jenkins/extract.ts index 51d3fa54acaca81cadee10df27f1006bb3f91649..161b356f3768789f4e28ba574247db74f783071e 100644 --- a/lib/modules/manager/jenkins/extract.ts +++ b/lib/modules/manager/jenkins/extract.ts @@ -2,7 +2,7 @@ import is from '@sindresorhus/is'; import { logger } from '../../../logger'; import { isSkipComment } from '../../../util/ignore'; import { newlineRegex, regEx } from '../../../util/regex'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import { JenkinsPluginsDatasource } from '../../datasource/jenkins-plugins'; import * as mavenVersioning from '../../versioning/maven'; import type { PackageDependency, PackageFileContent } from '../types'; @@ -57,7 +57,7 @@ function extractYaml( const deps: PackageDependency[] = []; try { - const doc = load(content, { json: true }) as JenkinsPlugins; + const doc = parseSingleYaml(content, { json: true }) as JenkinsPlugins; if (is.nonEmptyArray(doc?.plugins)) { for (const plugin of doc.plugins) { if (plugin.artifactId) { diff --git a/lib/modules/manager/kubernetes/extract.ts b/lib/modules/manager/kubernetes/extract.ts index 9920f16007281c6569ec6d1070e078b040fda46e..69a819184ea3225c8fd42eeaf58c5cbb301958c7 100644 --- a/lib/modules/manager/kubernetes/extract.ts +++ b/lib/modules/manager/kubernetes/extract.ts @@ -1,7 +1,7 @@ import is from '@sindresorhus/is'; import { logger } from '../../../logger'; import { newlineRegex, regEx } from '../../../util/regex'; -import { loadAll } from '../../../util/yaml'; +import { parseYaml } from '../../../util/yaml'; import { KubernetesApiDatasource, supportedApis, @@ -70,7 +70,7 @@ function extractApis( let doc: KubernetesConfiguration[]; try { - doc = loadAll(content) as KubernetesConfiguration[]; + doc = parseYaml(content) as KubernetesConfiguration[]; } catch (err) { logger.debug({ err, packageFile }, 'Failed to parse Kubernetes manifest.'); return []; diff --git a/lib/modules/manager/kustomize/extract.ts b/lib/modules/manager/kustomize/extract.ts index bca4d553c03da7bf001da751fbbdb8c3b344067e..60ad65dbeaa7a7af932ce193ec4a62fdd1637ef4 100644 --- a/lib/modules/manager/kustomize/extract.ts +++ b/lib/modules/manager/kustomize/extract.ts @@ -2,7 +2,7 @@ import is from '@sindresorhus/is'; import { logger } from '../../../logger'; import { coerceArray } from '../../../util/array'; import { regEx } from '../../../util/regex'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import { DockerDatasource } from '../../datasource/docker'; import { GitTagsDatasource } from '../../datasource/git-tags'; import { GithubTagsDatasource } from '../../datasource/github-tags'; @@ -158,7 +158,7 @@ export function parseKustomize( ): Kustomize | null { let pkg: Kustomize | null = null; try { - pkg = load(content, { json: true }) as Kustomize; + pkg = parseSingleYaml(content, { json: true }) as Kustomize; } catch (e) /* istanbul ignore next */ { logger.debug({ packageFile }, 'Error parsing kustomize file'); return null; diff --git a/lib/modules/manager/npm/extract/pnpm.spec.ts b/lib/modules/manager/npm/extract/pnpm.spec.ts index 590a941f9f33237337e3905b6eae6749786289c6..5a18700e4a1f6a30cc19f8ca2a9c12ddfd5c1586 100644 --- a/lib/modules/manager/npm/extract/pnpm.spec.ts +++ b/lib/modules/manager/npm/extract/pnpm.spec.ts @@ -42,7 +42,7 @@ describe('modules/manager/npm/extract/pnpm', () => { }); it('detects errors when opening pnpm-workspace.yml file', async () => { - jest.spyOn(yaml, 'load').mockImplementationOnce(() => { + jest.spyOn(yaml, 'parseSingleYaml').mockImplementationOnce(() => { throw new Error(); }); diff --git a/lib/modules/manager/npm/extract/pnpm.ts b/lib/modules/manager/npm/extract/pnpm.ts index d358212cdbc8408bee5d6879799b86db276d2d89..dc87f14e0d71580c93bedcd76d93b17eefcbca77 100644 --- a/lib/modules/manager/npm/extract/pnpm.ts +++ b/lib/modules/manager/npm/extract/pnpm.ts @@ -9,7 +9,7 @@ import { localPathExists, readLocalFile, } from '../../../../util/fs'; -import { load } from '../../../../util/yaml'; +import { parseSingleYaml } from '../../../../util/yaml'; import type { PackageFile } from '../../types'; import type { PnpmDependencySchema, PnpmLockFile } from '../post-update/types'; import type { NpmManagerData } from '../types'; @@ -24,7 +24,7 @@ export async function extractPnpmFilters( ): Promise<string[] | undefined> { try { // TODO #22198 - const contents = load((await readLocalFile(fileName, 'utf8'))!, { + const contents = parseSingleYaml((await readLocalFile(fileName, 'utf8'))!, { json: true, }) as PnpmWorkspaceFile; if ( @@ -148,7 +148,7 @@ export async function getPnpmLock(filePath: string): Promise<LockFile> { throw new Error('Unable to read pnpm-lock.yaml'); } - const lockParsed = load(pnpmLockRaw); + const lockParsed = parseSingleYaml(pnpmLockRaw); if (!isPnpmLockfile(lockParsed)) { throw new Error('Invalid or empty lockfile'); } diff --git a/lib/modules/manager/npm/post-update/index.ts b/lib/modules/manager/npm/post-update/index.ts index fa318343b0528a54348bbab34400b03f09e3abab..19f23356714780c32cebd534f587f42e4219e656 100644 --- a/lib/modules/manager/npm/post-update/index.ts +++ b/lib/modules/manager/npm/post-update/index.ts @@ -17,7 +17,7 @@ import type { FileChange } from '../../../../util/git/types'; import * as hostRules from '../../../../util/host-rules'; import { newlineRegex, regEx } from '../../../../util/regex'; import { ensureTrailingSlash } from '../../../../util/url'; -import { dump, load } from '../../../../util/yaml'; +import { dump, parseSingleYaml } from '../../../../util/yaml'; import { NpmDatasource } from '../../../datasource/npm'; import { scm } from '../../../platform/scm'; import type { PackageFile, PostUpdateConfig, Upgrade } from '../../types'; @@ -390,8 +390,9 @@ export async function updateYarnBinary( return existingYarnrcYmlContent; } - const oldYarnPath = (load(yarnrcYml) as YarnRcYmlFile)?.yarnPath; - const newYarnPath = (load(newYarnrcYml) as YarnRcYmlFile)?.yarnPath; + const oldYarnPath = (parseSingleYaml(yarnrcYml) as YarnRcYmlFile)?.yarnPath; + const newYarnPath = (parseSingleYaml(newYarnrcYml) as YarnRcYmlFile) + ?.yarnPath; if ( !is.nonEmptyStringAndNotWhitespace(oldYarnPath) || !is.nonEmptyStringAndNotWhitespace(newYarnPath) @@ -568,10 +569,9 @@ export async function getAdditionalFiles( existingYarnrcYmlContent = await readLocalFile(yarnRcYmlFilename, 'utf8'); if (existingYarnrcYmlContent) { try { - const existingYarnrRcYml = load(existingYarnrcYmlContent) as Record< - string, - unknown - >; + const existingYarnrRcYml = parseSingleYaml( + existingYarnrcYmlContent, + ) as Record<string, unknown>; const updatedYarnYrcYml = deepmerge( existingYarnrRcYml, additionalYarnRcYml, diff --git a/lib/modules/manager/npm/post-update/pnpm.ts b/lib/modules/manager/npm/post-update/pnpm.ts index 9cbffebfdef9192163f73202b5efee4012dbcb21..31989b62caff164ffd12b3c47958a7ad09cb929b 100644 --- a/lib/modules/manager/npm/post-update/pnpm.ts +++ b/lib/modules/manager/npm/post-update/pnpm.ts @@ -10,7 +10,7 @@ import type { ToolConstraint, } from '../../../../util/exec/types'; import { deleteLocalFile, readLocalFile } from '../../../../util/fs'; -import { load } from '../../../../util/yaml'; +import { parseSingleYaml } from '../../../../util/yaml'; import type { PostUpdateConfig, Upgrade } from '../../types'; import { getNodeToolConstraint } from './node-version'; import type { GenerateLockFileResult, PnpmLockFile } from './types'; @@ -126,7 +126,7 @@ export async function getConstraintFromLockFile( if (!lockfileContent) { return null; } - const pnpmLock = load(lockfileContent) as PnpmLockFile; + const pnpmLock = parseSingleYaml(lockfileContent) as PnpmLockFile; if (!is.number(pnpmLock?.lockfileVersion)) { return null; } diff --git a/lib/modules/manager/pre-commit/extract.ts b/lib/modules/manager/pre-commit/extract.ts index 345e3d66d9e864eb4ac400e81f31fd65727ce988..fb183b8828f8fa18e51c857fd4e591d61360bcc7 100644 --- a/lib/modules/manager/pre-commit/extract.ts +++ b/lib/modules/manager/pre-commit/extract.ts @@ -4,7 +4,7 @@ import type { SkipReason } from '../../../types'; import { detectPlatform } from '../../../util/common'; import { find } from '../../../util/host-rules'; import { regEx } from '../../../util/regex'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import { GithubTagsDatasource } from '../../datasource/github-tags'; import { GitlabTagsDatasource } from '../../datasource/gitlab-tags'; import type { PackageDependency, PackageFileContent } from '../types'; @@ -158,7 +158,7 @@ export function extractPackageFile( type ParsedContent = Record<string, unknown> | PreCommitConfig; let parsedContent: ParsedContent; try { - parsedContent = load(content, { json: true }) as ParsedContent; + parsedContent = parseSingleYaml(content, { json: true }) as ParsedContent; } catch (err) { logger.debug( { filename: packageFile, err }, diff --git a/lib/modules/manager/tekton/extract.ts b/lib/modules/manager/tekton/extract.ts index 9c4ab35d74ec1b77840a197da49c342a75026b81..e6973d3df1f01e7bd87a75c6dce3ffdf5b13528e 100644 --- a/lib/modules/manager/tekton/extract.ts +++ b/lib/modules/manager/tekton/extract.ts @@ -1,7 +1,7 @@ import is from '@sindresorhus/is'; import { logger } from '../../../logger'; import { coerceArray } from '../../../util/array'; -import { loadAll } from '../../../util/yaml'; +import { parseYaml } from '../../../util/yaml'; import { getDep } from '../dockerfile/extract'; import type { PackageDependency, PackageFileContent } from '../types'; import type { @@ -19,7 +19,7 @@ export function extractPackageFile( const deps: PackageDependency[] = []; let docs: TektonResource[]; try { - docs = loadAll(content) as TektonResource[]; + docs = parseYaml(content) as TektonResource[]; } catch (err) { logger.debug( { err, packageFile }, diff --git a/lib/modules/manager/travis/extract.ts b/lib/modules/manager/travis/extract.ts index 9427813c07aed74934c915fbdfe4d3a1c0a2ac11..11000afffbddfc0df2132af8cb33c75fdf05193d 100644 --- a/lib/modules/manager/travis/extract.ts +++ b/lib/modules/manager/travis/extract.ts @@ -1,6 +1,6 @@ import is from '@sindresorhus/is'; import { logger } from '../../../logger'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import { GithubTagsDatasource } from '../../datasource/github-tags'; import type { PackageDependency, PackageFileContent } from '../types'; import type { TravisMatrixItem, TravisYaml } from './types'; @@ -11,7 +11,7 @@ export function extractPackageFile( ): PackageFileContent | null { let doc: TravisYaml; try { - doc = load(content, { + doc = parseSingleYaml(content, { json: true, }) as TravisYaml; } catch (err) { diff --git a/lib/modules/manager/velaci/extract.ts b/lib/modules/manager/velaci/extract.ts index 6be65899f03bfb3482955c048754bab2eb1c425d..7446933e69982e32040d0717e73c90f12eeb13f6 100644 --- a/lib/modules/manager/velaci/extract.ts +++ b/lib/modules/manager/velaci/extract.ts @@ -1,6 +1,6 @@ import { logger } from '../../../logger'; import { coerceArray } from '../../../util/array'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import { getDep } from '../dockerfile/extract'; import type { PackageDependency, PackageFileContent } from '../types'; import type { VelaPipelineConfiguration } from './types'; @@ -12,7 +12,7 @@ export function extractPackageFile( let doc: VelaPipelineConfiguration | undefined; try { - doc = load(file, { json: true }) as VelaPipelineConfiguration; + doc = parseSingleYaml(file, { json: true }) as VelaPipelineConfiguration; } catch (err) { logger.debug({ err, packageFile }, 'Failed to parse Vela file.'); return null; diff --git a/lib/modules/manager/woodpecker/extract.ts b/lib/modules/manager/woodpecker/extract.ts index a5fabef1c75bb437ad9ca71d9ed209cf3f62c9a7..2bc5969dfe25f8efc41fba2463c779e536ba0179 100644 --- a/lib/modules/manager/woodpecker/extract.ts +++ b/lib/modules/manager/woodpecker/extract.ts @@ -1,6 +1,6 @@ import is from '@sindresorhus/is'; import { logger } from '../../../logger'; -import { load } from '../../../util/yaml'; +import { parseSingleYaml } from '../../../util/yaml'; import { getDep } from '../dockerfile/extract'; import type { ExtractConfig, PackageFileContent } from '../types'; import type { WoodpeckerConfig } from './types'; @@ -23,7 +23,7 @@ export function extractPackageFile( let config: WoodpeckerConfig; try { // TODO: fix me (#9610) - config = load(content, { json: true }) as WoodpeckerConfig; + config = parseSingleYaml(content, { json: true }) as WoodpeckerConfig; if (!config) { logger.debug( { packageFile }, diff --git a/lib/util/schema-utils.ts b/lib/util/schema-utils.ts index 28698d2c8f81beda5ec66d4fb58b7450a62d86d7..f4ad31e03150806740d1143d7af9f4caba9e8f2e 100644 --- a/lib/util/schema-utils.ts +++ b/lib/util/schema-utils.ts @@ -3,7 +3,7 @@ import { DateTime } from 'luxon'; import type { JsonArray, JsonValue } from 'type-fest'; import { z } from 'zod'; import { parse as parseToml } from './toml'; -import { load, loadAll } from './yaml'; +import { parseSingleYaml, parseYaml } from './yaml'; interface ErrorContext<T> { error: z.ZodError; @@ -228,7 +228,7 @@ export const UtcDate = z export const Yaml = z.string().transform((str, ctx): JsonValue => { try { - return load(str, { json: true }) as JsonValue; + return parseSingleYaml(str, { json: true }) as JsonValue; } catch (e) { ctx.addIssue({ code: 'custom', message: 'Invalid YAML' }); return z.NEVER; @@ -237,7 +237,7 @@ export const Yaml = z.string().transform((str, ctx): JsonValue => { export const MultidocYaml = z.string().transform((str, ctx): JsonArray => { try { - return loadAll(str, null, { json: true }) as JsonArray; + return parseYaml(str, null, { json: true }) as JsonArray; } catch (e) { ctx.addIssue({ code: 'custom', message: 'Invalid YAML' }); return z.NEVER; diff --git a/lib/util/yaml.spec.ts b/lib/util/yaml.spec.ts index 39b1ba55a07d6d9cf7bf7dc51883f181ea271440..b09331b7d3474b9018db13929d61e0fc712dffc5 100644 --- a/lib/util/yaml.spec.ts +++ b/lib/util/yaml.spec.ts @@ -1,15 +1,15 @@ import { codeBlock } from 'common-tags'; -import { load, loadAll } from './yaml'; +import { parseSingleYaml, parseYaml } from './yaml'; describe('util/yaml', () => { describe('loadAll', () => { it('should return empty array for empty string', () => { - expect(loadAll(``)).toEqual([]); + expect(parseYaml(``)).toEqual([]); }); it('should parse content with single document', () => { expect( - loadAll(codeBlock` + parseYaml(codeBlock` myObject: aString: value `), @@ -24,7 +24,7 @@ describe('util/yaml', () => { it('should parse content with multiple documents', () => { expect( - loadAll(codeBlock` + parseYaml(codeBlock` myObject: aString: value --- @@ -44,7 +44,7 @@ describe('util/yaml', () => { it('should parse content with templates', () => { expect( - loadAll( + parseYaml( codeBlock` myObject: aString: {{ value }} @@ -69,12 +69,12 @@ describe('util/yaml', () => { describe('load', () => { it('should return undefined', () => { - expect(load(``)).toBeUndefined(); + expect(parseSingleYaml(``)).toBeUndefined(); }); it('should parse content with single document', () => { expect( - load(codeBlock` + parseSingleYaml(codeBlock` myObject: aString: value `), @@ -87,7 +87,7 @@ describe('util/yaml', () => { it('should parse content with multiple documents', () => { expect(() => - load(codeBlock` + parseSingleYaml(codeBlock` myObject: aString: value --- @@ -98,7 +98,7 @@ describe('util/yaml', () => { it('should parse content with template', () => { expect( - load( + parseSingleYaml( codeBlock` myObject: aString: {{value}} diff --git a/lib/util/yaml.ts b/lib/util/yaml.ts index 620c330dfacb372792e7ce262606dd5201e7be2d..8921803f2975ba76dbb4c6f1824f084b91e66cf5 100644 --- a/lib/util/yaml.ts +++ b/lib/util/yaml.ts @@ -11,7 +11,7 @@ interface YamlOptions extends LoadOptions { removeTemplates?: boolean; } -export function loadAll( +export function parseYaml( content: string, iterator?: null | undefined, options?: YamlOptions, @@ -21,7 +21,10 @@ export function loadAll( return multiple(massagedContent, iterator, options); } -export function load(content: string, options?: YamlOptions): unknown { +export function parseSingleYaml( + content: string, + options?: YamlOptions, +): unknown { const massagedContent = massageContent(content, options); return single(massagedContent, options); } diff --git a/lib/workers/global/config/parse/file.ts b/lib/workers/global/config/parse/file.ts index 693ff6467235c1b1d3ffb3f516c33e94e24bf290..5de5c61bb23370146b65a5eb1ff555bc4b707d6a 100644 --- a/lib/workers/global/config/parse/file.ts +++ b/lib/workers/global/config/parse/file.ts @@ -7,7 +7,7 @@ import type { AllConfig, RenovateConfig } from '../../../../config/types'; import { logger } from '../../../../logger'; import { parseJson } from '../../../../util/common'; import { readSystemFile } from '../../../../util/fs'; -import { load } from '../../../../util/yaml'; +import { parseSingleYaml } from '../../../../util/yaml'; export async function getParsedContent(file: string): Promise<RenovateConfig> { if (upath.basename(file) === '.renovaterc') { @@ -16,7 +16,7 @@ export async function getParsedContent(file: string): Promise<RenovateConfig> { switch (upath.extname(file)) { case '.yaml': case '.yml': - return load(await readSystemFile(file, 'utf8'), { + return parseSingleYaml(await readSystemFile(file, 'utf8'), { json: true, }) as RenovateConfig; case '.json5':