renovate 43.263.1 → 43.263.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/app-strings.js +1 -1
- package/dist/config/app-strings.js.map +1 -1
- package/dist/config/decrypt/bcpgp.js +7 -4
- package/dist/config/decrypt/bcpgp.js.map +1 -1
- package/dist/config/migration.js +4 -6
- package/dist/config/migration.js.map +1 -1
- package/dist/config/options/index.js +1 -1
- package/dist/config/options/index.js.map +1 -1
- package/dist/config/validation-helpers/match-base-branches.js +4 -6
- package/dist/config/validation-helpers/match-base-branches.js.map +1 -1
- package/dist/config/validation-helpers/regex-glob-matchers.js +4 -6
- package/dist/config/validation-helpers/regex-glob-matchers.js.map +1 -1
- package/dist/config/validation-helpers/utils.js +2 -4
- package/dist/config/validation-helpers/utils.js.map +1 -1
- package/dist/config/validation.js +4 -6
- package/dist/config/validation.js.map +1 -1
- package/dist/config-validator.js +1 -3
- package/dist/config-validator.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/datasource/artifactory/index.js +6 -8
- package/dist/modules/datasource/artifactory/index.js.map +1 -1
- package/dist/modules/datasource/aws-machine-image/index.js +1 -2
- package/dist/modules/datasource/aws-machine-image/index.js.map +1 -1
- package/dist/modules/datasource/azure-pipelines-tasks/index.js +2 -3
- package/dist/modules/datasource/azure-pipelines-tasks/index.js.map +1 -1
- package/dist/modules/datasource/conda/index.js +1 -3
- package/dist/modules/datasource/conda/index.js.map +1 -1
- package/dist/modules/datasource/dart-version/index.js +1 -2
- package/dist/modules/datasource/dart-version/index.js.map +1 -1
- package/dist/modules/datasource/datasource.js +1 -3
- package/dist/modules/datasource/datasource.js.map +1 -1
- package/dist/modules/datasource/devbox/index.js +1 -3
- package/dist/modules/datasource/devbox/index.js.map +1 -1
- package/dist/modules/datasource/docker/ecr.js +2 -1
- package/dist/modules/datasource/docker/ecr.js.map +1 -1
- package/dist/modules/datasource/docker/index.js +1 -1
- package/dist/modules/datasource/docker/index.js.map +1 -1
- package/dist/modules/datasource/galaxy-collection/index.js +1 -1
- package/dist/modules/datasource/galaxy-collection/index.js.map +1 -1
- package/dist/modules/datasource/go/releases-goproxy.js +2 -2
- package/dist/modules/datasource/go/releases-goproxy.js.map +1 -1
- package/dist/modules/datasource/java-version/index.js +1 -3
- package/dist/modules/datasource/java-version/index.js.map +1 -1
- package/dist/modules/datasource/maven/util.js +2 -1
- package/dist/modules/datasource/maven/util.js.map +1 -1
- package/dist/modules/datasource/nuget/common.js +6 -4
- package/dist/modules/datasource/nuget/common.js.map +1 -1
- package/dist/modules/datasource/util.js +3 -2
- package/dist/modules/datasource/util.js.map +1 -1
- package/dist/modules/manager/azure-pipelines/extract.js +1 -1
- package/dist/modules/manager/azure-pipelines/extract.js.map +1 -1
- package/dist/modules/manager/bazel/extract.js +1 -3
- package/dist/modules/manager/bazel/extract.js.map +1 -1
- package/dist/modules/manager/bazel/parser.js +1 -1
- package/dist/modules/manager/bazel/parser.js.map +1 -1
- package/dist/modules/manager/buildpacks/extract.js +1 -1
- package/dist/modules/manager/buildpacks/extract.js.map +1 -1
- package/dist/modules/manager/bundler/common.js +23 -25
- package/dist/modules/manager/bundler/common.js.map +1 -1
- package/dist/modules/manager/bundler/extract.js +2 -6
- package/dist/modules/manager/bundler/extract.js.map +1 -1
- package/dist/modules/manager/cargo/extract.js +4 -6
- package/dist/modules/manager/cargo/extract.js.map +1 -1
- package/dist/modules/manager/dockerfile/extract.js +3 -3
- package/dist/modules/manager/dockerfile/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 +2 -1
- package/dist/modules/manager/flux/extract.js.map +1 -1
- package/dist/modules/manager/github-actions/parse.js +1 -1
- package/dist/modules/manager/github-actions/parse.js.map +1 -1
- package/dist/modules/manager/gradle/extract/catalog.js +4 -3
- package/dist/modules/manager/gradle/extract/catalog.js.map +1 -1
- package/dist/modules/manager/gradle/extract.js +2 -2
- package/dist/modules/manager/gradle/extract.js.map +1 -1
- package/dist/modules/manager/gradle/parser/common.js +1 -1
- package/dist/modules/manager/gradle/parser/common.js.map +1 -1
- package/dist/modules/manager/gradle/parser/handlers.js +1 -1
- package/dist/modules/manager/gradle/parser/handlers.js.map +1 -1
- package/dist/modules/manager/helm-values/extract.js.map +1 -1
- package/dist/modules/manager/helmfile/extract.js +1 -1
- package/dist/modules/manager/helmfile/extract.js.map +1 -1
- package/dist/modules/manager/maven/extract.js.map +1 -1
- package/dist/modules/manager/maven/update.js +2 -1
- package/dist/modules/manager/maven/update.js.map +1 -1
- package/dist/modules/manager/mise/utils.js +5 -7
- package/dist/modules/manager/mise/utils.js.map +1 -1
- package/dist/modules/manager/npm/extract/common/overrides.js +1 -1
- package/dist/modules/manager/npm/extract/common/overrides.js.map +1 -1
- package/dist/modules/manager/npm/extract/yarn.js +1 -1
- package/dist/modules/manager/npm/extract/yarn.js.map +1 -1
- package/dist/modules/manager/npm/npmrc.js +1 -3
- package/dist/modules/manager/npm/npmrc.js.map +1 -1
- package/dist/modules/manager/npm/update/dependency/common.js +2 -3
- package/dist/modules/manager/npm/update/dependency/common.js.map +1 -1
- package/dist/modules/manager/npm/update/dependency/index.js +1 -1
- package/dist/modules/manager/npm/update/dependency/index.js.map +1 -1
- package/dist/modules/manager/npm/update/dependency/pnpm.js +1 -1
- package/dist/modules/manager/npm/update/dependency/pnpm.js.map +1 -1
- package/dist/modules/manager/npm/update/dependency/yarn.js +1 -1
- package/dist/modules/manager/npm/update/dependency/yarn.js.map +1 -1
- package/dist/modules/manager/osgi/extract.js +1 -1
- package/dist/modules/manager/osgi/extract.js.map +1 -1
- package/dist/modules/manager/pep621/processors/uv.js +1 -1
- package/dist/modules/manager/pep621/processors/uv.js.map +1 -1
- package/dist/modules/manager/pep621/schema.js.map +1 -1
- package/dist/modules/manager/pip_setup/extract.js +1 -1
- package/dist/modules/manager/pip_setup/extract.js.map +1 -1
- package/dist/modules/manager/pipenv/artifacts.js.map +1 -1
- package/dist/modules/manager/poetry/schema.js +2 -2
- package/dist/modules/manager/poetry/schema.js.map +1 -1
- package/dist/modules/manager/pub/artifacts.js +4 -6
- package/dist/modules/manager/pub/artifacts.js.map +1 -1
- package/dist/modules/manager/pub/utils.js +2 -2
- package/dist/modules/manager/pub/utils.js.map +1 -1
- package/dist/modules/manager/puppet/common.js +4 -6
- package/dist/modules/manager/puppet/common.js.map +1 -1
- package/dist/modules/manager/sbt/extract.js +1 -1
- package/dist/modules/manager/sbt/extract.js.map +1 -1
- package/dist/modules/manager/sbt/util.js +4 -2
- package/dist/modules/manager/sbt/util.js.map +1 -1
- package/dist/modules/manager/terraform/lockfile/util.js +1 -1
- package/dist/modules/manager/terraform/lockfile/util.js.map +1 -1
- package/dist/modules/platform/azure/index.js +15 -19
- package/dist/modules/platform/azure/index.js.map +1 -1
- package/dist/modules/platform/azure/issue.js +4 -2
- package/dist/modules/platform/azure/issue.js.map +1 -1
- package/dist/modules/platform/bitbucket/index.js +1 -3
- package/dist/modules/platform/bitbucket/index.js.map +1 -1
- package/dist/modules/platform/forgejo/index.js +5 -3
- package/dist/modules/platform/forgejo/index.js.map +1 -1
- package/dist/modules/platform/gerrit/scm.js +5 -7
- package/dist/modules/platform/gerrit/scm.js.map +1 -1
- package/dist/modules/platform/gitea/index.js +5 -3
- package/dist/modules/platform/gitea/index.js.map +1 -1
- package/dist/modules/platform/github/index.js +5 -7
- package/dist/modules/platform/github/index.js.map +1 -1
- package/dist/modules/platform/github/pr.js +1 -1
- package/dist/modules/platform/github/pr.js.map +1 -1
- package/dist/modules/platform/github/schema.d.ts +4 -4
- package/dist/modules/platform/gitlab/index.js +2 -1
- package/dist/modules/platform/gitlab/index.js.map +1 -1
- package/dist/modules/platform/utils/pr-body.js +2 -1
- package/dist/modules/platform/utils/pr-body.js.map +1 -1
- package/dist/modules/versioning/apk/index.js +3 -3
- package/dist/modules/versioning/apk/index.js.map +1 -1
- package/dist/modules/versioning/composer/index.js +4 -7
- package/dist/modules/versioning/composer/index.js.map +1 -1
- package/dist/modules/versioning/conan/common.js +4 -6
- package/dist/modules/versioning/conan/common.js.map +1 -1
- package/dist/modules/versioning/conan/index.js +1 -3
- package/dist/modules/versioning/conan/index.js.map +1 -1
- package/dist/modules/versioning/conan/range.js +4 -5
- package/dist/modules/versioning/conan/range.js.map +1 -1
- package/dist/modules/versioning/conda/index.js +1 -1
- package/dist/modules/versioning/conda/index.js.map +1 -1
- package/dist/modules/versioning/gradle/index.js +7 -3
- package/dist/modules/versioning/gradle/index.js.map +1 -1
- package/dist/modules/versioning/hermit/index.js +2 -2
- package/dist/modules/versioning/hermit/index.js.map +1 -1
- package/dist/modules/versioning/ivy/index.js +1 -1
- package/dist/modules/versioning/ivy/index.js.map +1 -1
- package/dist/modules/versioning/maven/compare.js +4 -6
- package/dist/modules/versioning/maven/compare.js.map +1 -1
- package/dist/modules/versioning/npm/range.js +5 -7
- package/dist/modules/versioning/npm/range.js.map +1 -1
- package/dist/modules/versioning/nuget/version.js +6 -6
- package/dist/modules/versioning/nuget/version.js.map +1 -1
- package/dist/modules/versioning/pep440/index.js +1 -1
- package/dist/modules/versioning/pep440/index.js.map +1 -1
- package/dist/modules/versioning/pep440/range.js +2 -6
- package/dist/modules/versioning/pep440/range.js.map +1 -1
- package/dist/modules/versioning/poetry/index.js +1 -1
- package/dist/modules/versioning/poetry/index.js.map +1 -1
- package/dist/modules/versioning/pvp/index.js +2 -2
- package/dist/modules/versioning/pvp/index.js.map +1 -1
- package/dist/modules/versioning/rpm/index.js +4 -3
- package/dist/modules/versioning/rpm/index.js.map +1 -1
- package/dist/modules/versioning/ruby/range.js +2 -2
- package/dist/modules/versioning/ruby/range.js.map +1 -1
- package/dist/modules/versioning/ruby/strategies/bump.js +1 -1
- package/dist/modules/versioning/ruby/strategies/bump.js.map +1 -1
- package/dist/modules/versioning/ruby/strategies/replace.js +13 -12
- package/dist/modules/versioning/ruby/strategies/replace.js.map +1 -1
- package/dist/modules/versioning/ruby/version.js +1 -1
- package/dist/modules/versioning/ruby/version.js.map +1 -1
- package/dist/modules/versioning/rust-release-channel/index.js +1 -1
- package/dist/modules/versioning/rust-release-channel/index.js.map +1 -1
- package/dist/modules/versioning/rust-release-channel/util.js +4 -4
- package/dist/modules/versioning/rust-release-channel/util.js.map +1 -1
- package/dist/util/common.js +1 -3
- package/dist/util/common.js.map +1 -1
- package/dist/util/exec/common.js +4 -6
- package/dist/util/exec/common.js.map +1 -1
- package/dist/util/exec/containerbase.js +1 -3
- package/dist/util/exec/containerbase.js.map +1 -1
- package/dist/util/git/instrument.js +3 -3
- package/dist/util/git/instrument.js.map +1 -1
- package/dist/util/github/graphql/datasource-fetcher.js +5 -4
- package/dist/util/github/graphql/datasource-fetcher.js.map +1 -1
- package/dist/util/http/cache/package-http-cache-provider.js.map +1 -1
- package/dist/util/http/github.js +3 -2
- package/dist/util/http/github.js.map +1 -1
- package/dist/util/http/http.d.ts +1 -1
- package/dist/util/http/http.js.map +1 -1
- package/dist/util/result.d.ts +8 -8
- package/dist/util/result.js +1 -1
- package/dist/util/result.js.map +1 -1
- package/dist/util/url.js +2 -2
- package/dist/util/url.js.map +1 -1
- package/dist/workers/global/config/parse/cli.js +18 -20
- package/dist/workers/global/config/parse/cli.js.map +1 -1
- package/dist/workers/global/config/parse/env.js +3 -5
- package/dist/workers/global/config/parse/env.js.map +1 -1
- package/dist/workers/repository/config-migration/branch/index.js +3 -5
- package/dist/workers/repository/config-migration/branch/index.js.map +1 -1
- package/dist/workers/repository/init/merge.js +2 -3
- package/dist/workers/repository/init/merge.js.map +1 -1
- package/dist/workers/repository/onboarding/branch/check.js +7 -9
- package/dist/workers/repository/onboarding/branch/check.js.map +1 -1
- package/dist/workers/repository/onboarding/branch/index.js +4 -8
- package/dist/workers/repository/onboarding/branch/index.js.map +1 -1
- package/dist/workers/repository/onboarding/branch/onboarding-branch-cache.js +2 -2
- package/dist/workers/repository/onboarding/branch/onboarding-branch-cache.js.map +1 -1
- package/dist/workers/repository/process/extract-update.js.map +1 -1
- package/dist/workers/repository/process/fetch.js.map +1 -1
- package/dist/workers/repository/process/libyear.js +1 -3
- package/dist/workers/repository/process/libyear.js.map +1 -1
- package/dist/workers/repository/process/lookup/filter-checks.js +9 -11
- package/dist/workers/repository/process/lookup/filter-checks.js.map +1 -1
- package/dist/workers/repository/process/lookup/index.js +5 -8
- package/dist/workers/repository/process/lookup/index.js.map +1 -1
- package/dist/workers/repository/process/vulnerabilities.js +3 -3
- package/dist/workers/repository/process/vulnerabilities.js.map +1 -1
- package/dist/workers/repository/reconfigure/index.js +3 -5
- package/dist/workers/repository/reconfigure/index.js.map +1 -1
- package/dist/workers/repository/update/branch/bump-versions.js +1 -1
- package/dist/workers/repository/update/branch/bump-versions.js.map +1 -1
- package/dist/workers/repository/update/branch/get-updated.js +3 -5
- package/dist/workers/repository/update/branch/get-updated.js.map +1 -1
- package/dist/workers/repository/update/pr/body/updates-table.js +1 -3
- package/dist/workers/repository/update/pr/body/updates-table.js.map +1 -1
- package/dist/workers/repository/update/pr/changelog/common.js +1 -1
- package/dist/workers/repository/update/pr/changelog/common.js.map +1 -1
- package/dist/workers/repository/update/pr/index.js +6 -7
- package/dist/workers/repository/update/pr/index.js.map +1 -1
- package/dist/workers/repository/updates/flatten.js +1 -1
- package/dist/workers/repository/updates/flatten.js.map +1 -1
- package/dist/workers/repository/updates/generate.js +1 -1
- package/dist/workers/repository/updates/generate.js.map +1 -1
- package/package.json +2 -2
- package/renovate-schema.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","names":[],"sources":["../../../../../lib/modules/manager/gradle/parser/handlers.ts"],"sourcesContent":["import upath from 'upath';\nimport { logger } from '../../../../logger/index.ts';\nimport { getSiblingFileName } from '../../../../util/fs/index.ts';\nimport { regEx } from '../../../../util/regex.ts';\nimport { parseUrl } from '../../../../util/url.ts';\nimport type { PackageDependency } from '../../types.ts';\nimport type { parseGradle as parseGradleCallback } from '../parser.ts';\nimport type {\n ContentDescriptorMatcher,\n ContentDescriptorSpec,\n Ctx,\n GradleManagerData,\n} from '../types.ts';\nimport { isDependencyString, parseDependencyString } from '../utils.ts';\nimport {\n GRADLE_PLUGINS,\n GRADLE_TEST_SUITES,\n findVariable,\n interpolateString,\n loadFromTokenMap,\n} from './common.ts';\n\n// needed to break circular dependency\nlet parseGradle: typeof parseGradleCallback;\nexport function setParseGradleFunc(func: typeof parseGradleCallback): void {\n parseGradle = func;\n}\n\nexport function handleAssignment(ctx: Ctx): Ctx {\n const key = loadFromTokenMap(ctx, 'keyToken')[0].value;\n const valTokens = loadFromTokenMap(ctx, 'valToken');\n\n if (valTokens.length > 1) {\n // = template string with multiple variables\n ctx.tokenMap.templateStringTokens = valTokens;\n handleDepString(ctx);\n delete ctx.tokenMap.templateStringTokens;\n } else if (valTokens[0].type === 'symbol') {\n // foo = bar || foo = \"${bar}\"\n const varData = findVariable(valTokens[0].value, ctx);\n if (varData) {\n ctx.globalVars[key] = { ...varData };\n }\n } else {\n // = string value\n const dep = parseDependencyString(valTokens[0].value);\n if (dep) {\n dep.sharedVariableName = key;\n dep.managerData = {\n fileReplacePosition: valTokens[0].offset + dep.depName!.length + 1,\n packageFile: ctx.packageFile,\n };\n ctx.deps.push(dep);\n }\n\n ctx.globalVars[key] = {\n key,\n value: valTokens[0].value,\n fileReplacePosition: valTokens[0].offset,\n packageFile: ctx.packageFile,\n };\n }\n\n return ctx;\n}\n\nexport function handleDepString(ctx: Ctx): Ctx {\n const stringTokens = loadFromTokenMap(ctx, 'templateStringTokens');\n\n const templateString = interpolateString(stringTokens, ctx);\n if (!templateString) {\n return ctx;\n }\n\n const dep = parseDependencyString(templateString);\n if (!dep) {\n return ctx;\n }\n\n let packageFile: string | undefined;\n let fileReplacePosition: number | undefined;\n for (const token of stringTokens) {\n if (token.type === 'symbol') {\n const varData = findVariable(token.value, ctx);\n if (varData) {\n packageFile = varData.packageFile;\n fileReplacePosition = varData.fileReplacePosition;\n if (varData.value === dep.currentValue) {\n dep.managerData = { fileReplacePosition, packageFile };\n dep.sharedVariableName = varData.key;\n }\n }\n }\n }\n\n if (!dep.managerData) {\n const lastToken = stringTokens[stringTokens.length - 1];\n if (\n lastToken?.type === 'string-value' &&\n dep.currentValue &&\n lastToken.value.includes(dep.currentValue)\n ) {\n packageFile = ctx.packageFile;\n if (stringTokens.length === 1) {\n fileReplacePosition = lastToken.offset + dep.depName!.length + 1;\n } else {\n fileReplacePosition =\n lastToken.offset + lastToken.value.lastIndexOf(dep.currentValue);\n }\n delete dep.sharedVariableName;\n } else {\n dep.skipReason = 'contains-variable';\n }\n dep.managerData = { fileReplacePosition, packageFile };\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nexport function handleKotlinShortNotationDep(ctx: Ctx): Ctx {\n const moduleNameTokens = loadFromTokenMap(ctx, 'artifactId');\n const versionTokens = loadFromTokenMap(ctx, 'version');\n\n const moduleName = interpolateString(moduleNameTokens, ctx);\n const versionValue = interpolateString(versionTokens, ctx);\n if (!moduleName || !versionValue) {\n return ctx;\n }\n\n const groupIdArtifactId = `org.jetbrains.kotlin:kotlin-${moduleName}`;\n const dep = parseDependencyString(`${groupIdArtifactId}:${versionValue}`);\n if (!dep) {\n return ctx;\n }\n\n dep.depName = moduleName;\n dep.packageName = groupIdArtifactId;\n dep.managerData = {\n fileReplacePosition: versionTokens[0].offset,\n packageFile: ctx.packageFile,\n };\n\n if (versionTokens.length > 1) {\n // = template string with multiple variables\n dep.skipReason = 'unspecified-version';\n } else if (versionTokens[0].type === 'symbol') {\n const varData = findVariable(versionTokens[0].value, ctx);\n if (varData) {\n dep.sharedVariableName = varData.key;\n dep.currentValue = varData.value;\n dep.managerData = {\n fileReplacePosition: varData.fileReplacePosition,\n packageFile: varData.packageFile,\n };\n }\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nexport function handleLongFormDep(ctx: Ctx): Ctx {\n const groupIdTokens = loadFromTokenMap(ctx, 'groupId');\n const artifactIdTokens = loadFromTokenMap(ctx, 'artifactId');\n const versionTokens = loadFromTokenMap(ctx, 'version');\n\n const groupId = interpolateString(groupIdTokens, ctx);\n const artifactId = interpolateString(artifactIdTokens, ctx);\n const version = interpolateString(versionTokens, ctx);\n if (!groupId || !artifactId || !version) {\n return ctx;\n }\n\n // Special handling: 3 independent dependencies mismatched as groupId, artifactId, version\n if (\n isDependencyString(groupId) &&\n isDependencyString(artifactId) &&\n isDependencyString(version)\n ) {\n ctx.tokenMap.templateStringTokens = groupIdTokens;\n handleDepString(ctx);\n ctx.tokenMap.templateStringTokens = artifactIdTokens;\n handleDepString(ctx);\n ctx.tokenMap.templateStringTokens = versionTokens;\n handleDepString(ctx);\n\n return ctx;\n }\n\n const dep = parseDependencyString([groupId, artifactId, version].join(':'));\n if (!dep) {\n return ctx;\n }\n\n const methodName = ctx.tokenMap.methodName ?? null;\n if (versionTokens.length > 1) {\n // = template string with multiple variables\n dep.skipReason = 'unspecified-version';\n } else if (versionTokens[0].type === 'symbol') {\n const varData = findVariable(versionTokens[0].value, ctx);\n if (varData) {\n dep.sharedVariableName = varData.key;\n dep.managerData = {\n fileReplacePosition: varData.fileReplacePosition,\n packageFile: varData.packageFile,\n };\n }\n } else {\n // = string value\n if (methodName?.[0]?.value === 'dependencySet') {\n dep.sharedVariableName = `${groupId}:${version}`;\n }\n dep.managerData = {\n fileReplacePosition: versionTokens[0].offset,\n packageFile: ctx.packageFile,\n };\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nexport function handlePlugin(ctx: Ctx): Ctx {\n const methodName = loadFromTokenMap(ctx, 'methodName')[0];\n const pluginNameTokens = loadFromTokenMap(ctx, 'pluginName');\n const pluginVersion = loadFromTokenMap(ctx, 'version');\n\n const plugin = interpolateString(pluginNameTokens, ctx);\n if (!plugin) {\n return ctx;\n }\n\n const depName =\n methodName.value === 'kotlin' ? `org.jetbrains.kotlin.${plugin}` : plugin;\n const packageName = `${depName}:${depName}.gradle.plugin`;\n\n const dep: PackageDependency<GradleManagerData> = {\n depType: 'plugin',\n depName,\n packageName,\n commitMessageTopic: `plugin ${depName}`,\n currentValue: pluginVersion[0].value,\n managerData: {\n fileReplacePosition: pluginVersion[0].offset,\n packageFile: ctx.packageFile,\n },\n };\n\n if (pluginVersion.length > 1) {\n // = template string with multiple variables\n dep.skipReason = 'unspecified-version';\n } else if (pluginVersion[0].type === 'symbol') {\n const varData = findVariable(pluginVersion[0].value, ctx);\n if (varData) {\n dep.sharedVariableName = varData.key;\n dep.currentValue = varData.value;\n dep.managerData = {\n fileReplacePosition: varData.fileReplacePosition,\n packageFile: varData.packageFile,\n };\n } else {\n dep.skipReason = 'unspecified-version';\n }\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nfunction isValidContentDescriptorRegex(\n fieldName: string,\n pattern: string,\n): boolean {\n try {\n regEx(pattern);\n } catch {\n logger.debug(\n `Skipping content descriptor with unsupported regExp pattern for ${fieldName}: ${pattern}`,\n );\n return false;\n }\n\n return true;\n}\n\nexport function handleRegistryContent(ctx: Ctx): Ctx {\n const methodName = loadFromTokenMap(ctx, 'methodName')[0].value;\n let groupId = loadFromTokenMap(ctx, 'groupId')[0].value;\n\n let matcher: ContentDescriptorMatcher = 'simple';\n if (methodName.includes('Regex')) {\n matcher = 'regex';\n groupId = `^${groupId}$`.replaceAll('\\\\\\\\', '\\\\');\n if (!isValidContentDescriptorRegex('group', groupId)) {\n return ctx;\n }\n } else if (methodName.includes('AndSubgroups')) {\n matcher = 'subgroup';\n }\n\n const mode = methodName.startsWith('include') ? 'include' : 'exclude';\n const spec: ContentDescriptorSpec = { mode, matcher, groupId };\n\n if (methodName.includes('Module') || methodName.includes('Version')) {\n spec.artifactId = loadFromTokenMap(ctx, 'artifactId')[0].value;\n if (matcher === 'regex') {\n spec.artifactId = `^${spec.artifactId}$`.replaceAll('\\\\\\\\', '\\\\');\n if (!isValidContentDescriptorRegex('module', spec.artifactId)) {\n return ctx;\n }\n }\n }\n\n if (methodName.includes('Version')) {\n spec.version = loadFromTokenMap(ctx, 'version')[0].value;\n if (matcher === 'regex') {\n spec.version = `^${spec.version}$`.replaceAll('\\\\\\\\', '\\\\');\n if (!isValidContentDescriptorRegex('version', spec.version)) {\n return ctx;\n }\n }\n }\n\n ctx.tmpRegistryContent.push(spec);\n\n return ctx;\n}\n\nfunction isPluginRegistry(ctx: Ctx): boolean {\n if (ctx.tokenMap.registryScope) {\n const registryScope = loadFromTokenMap(ctx, 'registryScope')[0].value;\n return registryScope === 'pluginManagement';\n }\n\n return false;\n}\n\nfunction isExclusiveRegistry(ctx: Ctx): boolean {\n if (ctx.tokenMap.registryType) {\n const registryType = loadFromTokenMap(ctx, 'registryType')[0].value;\n return registryType === 'exclusiveContent';\n }\n\n return false;\n}\n\nexport function handleRegistryUrl(ctx: Ctx): Ctx {\n let localVariables = ctx.globalVars;\n\n if (!ctx.tokenMap.registryUrl) {\n return ctx;\n }\n\n if (ctx.tokenMap.name) {\n const nameTokens = loadFromTokenMap(ctx, 'name');\n const nameValue = interpolateString(nameTokens, ctx, localVariables);\n if (nameValue) {\n localVariables = {\n ...localVariables,\n name: {\n key: 'name',\n value: nameValue,\n },\n };\n }\n }\n\n let registryUrl = interpolateString(\n loadFromTokenMap(ctx, 'registryUrl'),\n ctx,\n localVariables,\n );\n if (registryUrl) {\n registryUrl = registryUrl.replace(regEx(/\\\\/g), '');\n const url = parseUrl(registryUrl);\n if (url?.host && url.protocol) {\n const registryType = isExclusiveRegistry(ctx) ? 'exclusive' : 'regular';\n if (registryType === 'exclusive' && !ctx.tmpRegistryContent.length) {\n logger.debug(\n `Skipping exclusive registry ${registryUrl} with unsupported content descriptors`,\n );\n return ctx;\n }\n\n ctx.registryUrls.push({\n registryUrl,\n registryType,\n scope: isPluginRegistry(ctx) ? 'plugin' : 'dep',\n content: ctx.tmpRegistryContent,\n });\n }\n }\n\n return ctx;\n}\n\nexport function handleCatalogLongFormDep(ctx: Ctx): Ctx {\n const groupIdTokens = loadFromTokenMap(ctx, 'groupId');\n const artifactIdTokens = loadFromTokenMap(ctx, 'artifactId');\n\n const groupId = interpolateString(groupIdTokens, ctx);\n const artifactId = interpolateString(artifactIdTokens, ctx);\n if (!groupId || !artifactId) {\n return ctx;\n }\n\n const aliasToken = loadFromTokenMap(ctx, 'alias')[0];\n const key = `libs.${aliasToken.value.replace(regEx(/[-_]/g), '.')}`;\n\n ctx.globalVars[key] = {\n key,\n value: `${groupId}:${artifactId}`,\n fileReplacePosition: aliasToken.offset,\n packageFile: ctx.packageFile,\n };\n\n if (ctx.tokenMap.version) {\n const version = interpolateString(loadFromTokenMap(ctx, 'version'), ctx);\n if (version) {\n handleLongFormDep(ctx);\n }\n }\n\n return ctx;\n}\n\nexport function handleCatalogDepString(ctx: Ctx): Ctx {\n const templateStringTokens = loadFromTokenMap(ctx, 'templateStringTokens');\n const templateString = interpolateString(templateStringTokens, ctx);\n if (!templateString) {\n return ctx;\n }\n\n const aliasToken = loadFromTokenMap(ctx, 'alias')[0];\n const key = `libs.${aliasToken.value.replace(regEx(/[-_]/g), '.')}`;\n\n ctx.globalVars[key] = {\n key,\n value: templateString,\n fileReplacePosition: aliasToken.offset,\n packageFile: ctx.packageFile,\n };\n\n return handleDepString(ctx);\n}\n\nexport function handleApplyFrom(ctx: Ctx): Ctx {\n let scriptFile = interpolateString(loadFromTokenMap(ctx, 'scriptFile'), ctx);\n if (!scriptFile) {\n return ctx;\n }\n\n if (ctx.tokenMap.parentPath) {\n const parentPath = interpolateString(\n loadFromTokenMap(ctx, 'parentPath'),\n ctx,\n );\n if (parentPath && scriptFile) {\n scriptFile = upath.join(parentPath, scriptFile);\n }\n }\n\n if (ctx.recursionDepth > 2) {\n logger.debug(`Max recursion depth reached in script file: ${scriptFile}`);\n return ctx;\n }\n\n if (!regEx(/\\.gradle(\\.kts)?$/).test(scriptFile)) {\n logger.debug({ scriptFile }, `Only Gradle files can be included`);\n return ctx;\n }\n\n const scriptFilePath = getSiblingFileName(ctx.packageFile, scriptFile);\n if (!ctx.fileContents[scriptFilePath]) {\n logger.debug(`Failed to process included Gradle file ${scriptFilePath}`);\n return ctx;\n }\n\n const matchResult = parseGradle(\n // TODO #22198\n ctx.fileContents[scriptFilePath],\n ctx.globalVars,\n scriptFilePath,\n ctx.fileContents,\n ctx.recursionDepth + 1,\n );\n\n ctx.deps.push(...matchResult.deps);\n ctx.globalVars = { ...ctx.globalVars, ...matchResult.vars };\n ctx.registryUrls.push(...matchResult.urls);\n\n return ctx;\n}\n\nexport function handleImplicitDep(ctx: Ctx): Ctx {\n const implicitDepName = loadFromTokenMap(ctx, 'implicitDepName')[0].value;\n const versionTokens = loadFromTokenMap(ctx, 'version');\n const versionValue = interpolateString(versionTokens, ctx);\n if (!versionValue) {\n return ctx;\n }\n\n const isImplicitGradlePlugin = implicitDepName in GRADLE_PLUGINS;\n const groupIdArtifactId = isImplicitGradlePlugin\n ? GRADLE_PLUGINS[implicitDepName as keyof typeof GRADLE_PLUGINS][1]\n : GRADLE_TEST_SUITES[implicitDepName as keyof typeof GRADLE_TEST_SUITES];\n\n const dep = parseDependencyString(`${groupIdArtifactId}:${versionValue}`);\n if (!dep) {\n return ctx;\n }\n\n dep.depName = implicitDepName;\n dep.packageName = groupIdArtifactId;\n dep.managerData = {\n fileReplacePosition: versionTokens[0].offset,\n packageFile: ctx.packageFile,\n };\n\n if (versionTokens.length > 1) {\n // = template string with multiple variables\n dep.skipReason = 'unspecified-version';\n } else if (versionTokens[0].type === 'symbol') {\n const varData = findVariable(versionTokens[0].value, ctx);\n if (varData) {\n dep.sharedVariableName = varData.key;\n dep.currentValue = varData.value;\n dep.managerData = {\n fileReplacePosition: varData.fileReplacePosition,\n packageFile: varData.packageFile,\n };\n }\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"handlers.js","names":[],"sources":["../../../../../lib/modules/manager/gradle/parser/handlers.ts"],"sourcesContent":["import upath from 'upath';\nimport { logger } from '../../../../logger/index.ts';\nimport { getSiblingFileName } from '../../../../util/fs/index.ts';\nimport { regEx } from '../../../../util/regex.ts';\nimport { parseUrl } from '../../../../util/url.ts';\nimport type { PackageDependency } from '../../types.ts';\nimport type { parseGradle as parseGradleCallback } from '../parser.ts';\nimport type {\n ContentDescriptorMatcher,\n ContentDescriptorSpec,\n Ctx,\n GradleManagerData,\n} from '../types.ts';\nimport { isDependencyString, parseDependencyString } from '../utils.ts';\nimport {\n GRADLE_PLUGINS,\n GRADLE_TEST_SUITES,\n findVariable,\n interpolateString,\n loadFromTokenMap,\n} from './common.ts';\n\n// needed to break circular dependency\nlet parseGradle: typeof parseGradleCallback;\nexport function setParseGradleFunc(func: typeof parseGradleCallback): void {\n parseGradle = func;\n}\n\nexport function handleAssignment(ctx: Ctx): Ctx {\n const key = loadFromTokenMap(ctx, 'keyToken')[0].value;\n const valTokens = loadFromTokenMap(ctx, 'valToken');\n\n if (valTokens.length > 1) {\n // = template string with multiple variables\n ctx.tokenMap.templateStringTokens = valTokens;\n handleDepString(ctx);\n delete ctx.tokenMap.templateStringTokens;\n } else if (valTokens[0].type === 'symbol') {\n // foo = bar || foo = \"${bar}\"\n const varData = findVariable(valTokens[0].value, ctx);\n if (varData) {\n ctx.globalVars[key] = { ...varData };\n }\n } else {\n // = string value\n const dep = parseDependencyString(valTokens[0].value);\n if (dep) {\n dep.sharedVariableName = key;\n dep.managerData = {\n fileReplacePosition: valTokens[0].offset + dep.depName!.length + 1,\n packageFile: ctx.packageFile,\n };\n ctx.deps.push(dep);\n }\n\n ctx.globalVars[key] = {\n key,\n value: valTokens[0].value,\n fileReplacePosition: valTokens[0].offset,\n packageFile: ctx.packageFile,\n };\n }\n\n return ctx;\n}\n\nexport function handleDepString(ctx: Ctx): Ctx {\n const stringTokens = loadFromTokenMap(ctx, 'templateStringTokens');\n\n const templateString = interpolateString(stringTokens, ctx);\n if (!templateString) {\n return ctx;\n }\n\n const dep = parseDependencyString(templateString);\n if (!dep) {\n return ctx;\n }\n\n let packageFile: string | undefined;\n let fileReplacePosition: number | undefined;\n for (const token of stringTokens) {\n if (token.type === 'symbol') {\n const varData = findVariable(token.value, ctx);\n if (varData) {\n packageFile = varData.packageFile;\n fileReplacePosition = varData.fileReplacePosition;\n if (varData.value === dep.currentValue) {\n dep.managerData = { fileReplacePosition, packageFile };\n dep.sharedVariableName = varData.key;\n }\n }\n }\n }\n\n if (!dep.managerData) {\n const lastToken = stringTokens.at(-1);\n if (\n lastToken?.type === 'string-value' &&\n dep.currentValue &&\n lastToken.value.includes(dep.currentValue)\n ) {\n packageFile = ctx.packageFile;\n if (stringTokens.length === 1) {\n fileReplacePosition = lastToken.offset + dep.depName!.length + 1;\n } else {\n fileReplacePosition =\n lastToken.offset + lastToken.value.lastIndexOf(dep.currentValue);\n }\n delete dep.sharedVariableName;\n } else {\n dep.skipReason = 'contains-variable';\n }\n dep.managerData = { fileReplacePosition, packageFile };\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nexport function handleKotlinShortNotationDep(ctx: Ctx): Ctx {\n const moduleNameTokens = loadFromTokenMap(ctx, 'artifactId');\n const versionTokens = loadFromTokenMap(ctx, 'version');\n\n const moduleName = interpolateString(moduleNameTokens, ctx);\n const versionValue = interpolateString(versionTokens, ctx);\n if (!moduleName || !versionValue) {\n return ctx;\n }\n\n const groupIdArtifactId = `org.jetbrains.kotlin:kotlin-${moduleName}`;\n const dep = parseDependencyString(`${groupIdArtifactId}:${versionValue}`);\n if (!dep) {\n return ctx;\n }\n\n dep.depName = moduleName;\n dep.packageName = groupIdArtifactId;\n dep.managerData = {\n fileReplacePosition: versionTokens[0].offset,\n packageFile: ctx.packageFile,\n };\n\n if (versionTokens.length > 1) {\n // = template string with multiple variables\n dep.skipReason = 'unspecified-version';\n } else if (versionTokens[0].type === 'symbol') {\n const varData = findVariable(versionTokens[0].value, ctx);\n if (varData) {\n dep.sharedVariableName = varData.key;\n dep.currentValue = varData.value;\n dep.managerData = {\n fileReplacePosition: varData.fileReplacePosition,\n packageFile: varData.packageFile,\n };\n }\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nexport function handleLongFormDep(ctx: Ctx): Ctx {\n const groupIdTokens = loadFromTokenMap(ctx, 'groupId');\n const artifactIdTokens = loadFromTokenMap(ctx, 'artifactId');\n const versionTokens = loadFromTokenMap(ctx, 'version');\n\n const groupId = interpolateString(groupIdTokens, ctx);\n const artifactId = interpolateString(artifactIdTokens, ctx);\n const version = interpolateString(versionTokens, ctx);\n if (!groupId || !artifactId || !version) {\n return ctx;\n }\n\n // Special handling: 3 independent dependencies mismatched as groupId, artifactId, version\n if (\n isDependencyString(groupId) &&\n isDependencyString(artifactId) &&\n isDependencyString(version)\n ) {\n ctx.tokenMap.templateStringTokens = groupIdTokens;\n handleDepString(ctx);\n ctx.tokenMap.templateStringTokens = artifactIdTokens;\n handleDepString(ctx);\n ctx.tokenMap.templateStringTokens = versionTokens;\n handleDepString(ctx);\n\n return ctx;\n }\n\n const dep = parseDependencyString([groupId, artifactId, version].join(':'));\n if (!dep) {\n return ctx;\n }\n\n const methodName = ctx.tokenMap.methodName ?? null;\n if (versionTokens.length > 1) {\n // = template string with multiple variables\n dep.skipReason = 'unspecified-version';\n } else if (versionTokens[0].type === 'symbol') {\n const varData = findVariable(versionTokens[0].value, ctx);\n if (varData) {\n dep.sharedVariableName = varData.key;\n dep.managerData = {\n fileReplacePosition: varData.fileReplacePosition,\n packageFile: varData.packageFile,\n };\n }\n } else {\n // = string value\n if (methodName?.[0]?.value === 'dependencySet') {\n dep.sharedVariableName = `${groupId}:${version}`;\n }\n dep.managerData = {\n fileReplacePosition: versionTokens[0].offset,\n packageFile: ctx.packageFile,\n };\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nexport function handlePlugin(ctx: Ctx): Ctx {\n const methodName = loadFromTokenMap(ctx, 'methodName')[0];\n const pluginNameTokens = loadFromTokenMap(ctx, 'pluginName');\n const pluginVersion = loadFromTokenMap(ctx, 'version');\n\n const plugin = interpolateString(pluginNameTokens, ctx);\n if (!plugin) {\n return ctx;\n }\n\n const depName =\n methodName.value === 'kotlin' ? `org.jetbrains.kotlin.${plugin}` : plugin;\n const packageName = `${depName}:${depName}.gradle.plugin`;\n\n const dep: PackageDependency<GradleManagerData> = {\n depType: 'plugin',\n depName,\n packageName,\n commitMessageTopic: `plugin ${depName}`,\n currentValue: pluginVersion[0].value,\n managerData: {\n fileReplacePosition: pluginVersion[0].offset,\n packageFile: ctx.packageFile,\n },\n };\n\n if (pluginVersion.length > 1) {\n // = template string with multiple variables\n dep.skipReason = 'unspecified-version';\n } else if (pluginVersion[0].type === 'symbol') {\n const varData = findVariable(pluginVersion[0].value, ctx);\n if (varData) {\n dep.sharedVariableName = varData.key;\n dep.currentValue = varData.value;\n dep.managerData = {\n fileReplacePosition: varData.fileReplacePosition,\n packageFile: varData.packageFile,\n };\n } else {\n dep.skipReason = 'unspecified-version';\n }\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nfunction isValidContentDescriptorRegex(\n fieldName: string,\n pattern: string,\n): boolean {\n try {\n regEx(pattern);\n } catch {\n logger.debug(\n `Skipping content descriptor with unsupported regExp pattern for ${fieldName}: ${pattern}`,\n );\n return false;\n }\n\n return true;\n}\n\nexport function handleRegistryContent(ctx: Ctx): Ctx {\n const methodName = loadFromTokenMap(ctx, 'methodName')[0].value;\n let groupId = loadFromTokenMap(ctx, 'groupId')[0].value;\n\n let matcher: ContentDescriptorMatcher = 'simple';\n if (methodName.includes('Regex')) {\n matcher = 'regex';\n groupId = `^${groupId}$`.replaceAll('\\\\\\\\', '\\\\');\n if (!isValidContentDescriptorRegex('group', groupId)) {\n return ctx;\n }\n } else if (methodName.includes('AndSubgroups')) {\n matcher = 'subgroup';\n }\n\n const mode = methodName.startsWith('include') ? 'include' : 'exclude';\n const spec: ContentDescriptorSpec = { mode, matcher, groupId };\n\n if (methodName.includes('Module') || methodName.includes('Version')) {\n spec.artifactId = loadFromTokenMap(ctx, 'artifactId')[0].value;\n if (matcher === 'regex') {\n spec.artifactId = `^${spec.artifactId}$`.replaceAll('\\\\\\\\', '\\\\');\n if (!isValidContentDescriptorRegex('module', spec.artifactId)) {\n return ctx;\n }\n }\n }\n\n if (methodName.includes('Version')) {\n spec.version = loadFromTokenMap(ctx, 'version')[0].value;\n if (matcher === 'regex') {\n spec.version = `^${spec.version}$`.replaceAll('\\\\\\\\', '\\\\');\n if (!isValidContentDescriptorRegex('version', spec.version)) {\n return ctx;\n }\n }\n }\n\n ctx.tmpRegistryContent.push(spec);\n\n return ctx;\n}\n\nfunction isPluginRegistry(ctx: Ctx): boolean {\n if (ctx.tokenMap.registryScope) {\n const registryScope = loadFromTokenMap(ctx, 'registryScope')[0].value;\n return registryScope === 'pluginManagement';\n }\n\n return false;\n}\n\nfunction isExclusiveRegistry(ctx: Ctx): boolean {\n if (ctx.tokenMap.registryType) {\n const registryType = loadFromTokenMap(ctx, 'registryType')[0].value;\n return registryType === 'exclusiveContent';\n }\n\n return false;\n}\n\nexport function handleRegistryUrl(ctx: Ctx): Ctx {\n let localVariables = ctx.globalVars;\n\n if (!ctx.tokenMap.registryUrl) {\n return ctx;\n }\n\n if (ctx.tokenMap.name) {\n const nameTokens = loadFromTokenMap(ctx, 'name');\n const nameValue = interpolateString(nameTokens, ctx, localVariables);\n if (nameValue) {\n localVariables = {\n ...localVariables,\n name: {\n key: 'name',\n value: nameValue,\n },\n };\n }\n }\n\n let registryUrl = interpolateString(\n loadFromTokenMap(ctx, 'registryUrl'),\n ctx,\n localVariables,\n );\n if (registryUrl) {\n registryUrl = registryUrl.replace(regEx(/\\\\/g), '');\n const url = parseUrl(registryUrl);\n if (url?.host && url.protocol) {\n const registryType = isExclusiveRegistry(ctx) ? 'exclusive' : 'regular';\n if (registryType === 'exclusive' && !ctx.tmpRegistryContent.length) {\n logger.debug(\n `Skipping exclusive registry ${registryUrl} with unsupported content descriptors`,\n );\n return ctx;\n }\n\n ctx.registryUrls.push({\n registryUrl,\n registryType,\n scope: isPluginRegistry(ctx) ? 'plugin' : 'dep',\n content: ctx.tmpRegistryContent,\n });\n }\n }\n\n return ctx;\n}\n\nexport function handleCatalogLongFormDep(ctx: Ctx): Ctx {\n const groupIdTokens = loadFromTokenMap(ctx, 'groupId');\n const artifactIdTokens = loadFromTokenMap(ctx, 'artifactId');\n\n const groupId = interpolateString(groupIdTokens, ctx);\n const artifactId = interpolateString(artifactIdTokens, ctx);\n if (!groupId || !artifactId) {\n return ctx;\n }\n\n const aliasToken = loadFromTokenMap(ctx, 'alias')[0];\n const key = `libs.${aliasToken.value.replace(regEx(/[-_]/g), '.')}`;\n\n ctx.globalVars[key] = {\n key,\n value: `${groupId}:${artifactId}`,\n fileReplacePosition: aliasToken.offset,\n packageFile: ctx.packageFile,\n };\n\n if (ctx.tokenMap.version) {\n const version = interpolateString(loadFromTokenMap(ctx, 'version'), ctx);\n if (version) {\n handleLongFormDep(ctx);\n }\n }\n\n return ctx;\n}\n\nexport function handleCatalogDepString(ctx: Ctx): Ctx {\n const templateStringTokens = loadFromTokenMap(ctx, 'templateStringTokens');\n const templateString = interpolateString(templateStringTokens, ctx);\n if (!templateString) {\n return ctx;\n }\n\n const aliasToken = loadFromTokenMap(ctx, 'alias')[0];\n const key = `libs.${aliasToken.value.replace(regEx(/[-_]/g), '.')}`;\n\n ctx.globalVars[key] = {\n key,\n value: templateString,\n fileReplacePosition: aliasToken.offset,\n packageFile: ctx.packageFile,\n };\n\n return handleDepString(ctx);\n}\n\nexport function handleApplyFrom(ctx: Ctx): Ctx {\n let scriptFile = interpolateString(loadFromTokenMap(ctx, 'scriptFile'), ctx);\n if (!scriptFile) {\n return ctx;\n }\n\n if (ctx.tokenMap.parentPath) {\n const parentPath = interpolateString(\n loadFromTokenMap(ctx, 'parentPath'),\n ctx,\n );\n if (parentPath && scriptFile) {\n scriptFile = upath.join(parentPath, scriptFile);\n }\n }\n\n if (ctx.recursionDepth > 2) {\n logger.debug(`Max recursion depth reached in script file: ${scriptFile}`);\n return ctx;\n }\n\n if (!regEx(/\\.gradle(\\.kts)?$/).test(scriptFile)) {\n logger.debug({ scriptFile }, `Only Gradle files can be included`);\n return ctx;\n }\n\n const scriptFilePath = getSiblingFileName(ctx.packageFile, scriptFile);\n if (!ctx.fileContents[scriptFilePath]) {\n logger.debug(`Failed to process included Gradle file ${scriptFilePath}`);\n return ctx;\n }\n\n const matchResult = parseGradle(\n // TODO #22198\n ctx.fileContents[scriptFilePath],\n ctx.globalVars,\n scriptFilePath,\n ctx.fileContents,\n ctx.recursionDepth + 1,\n );\n\n ctx.deps.push(...matchResult.deps);\n ctx.globalVars = { ...ctx.globalVars, ...matchResult.vars };\n ctx.registryUrls.push(...matchResult.urls);\n\n return ctx;\n}\n\nexport function handleImplicitDep(ctx: Ctx): Ctx {\n const implicitDepName = loadFromTokenMap(ctx, 'implicitDepName')[0].value;\n const versionTokens = loadFromTokenMap(ctx, 'version');\n const versionValue = interpolateString(versionTokens, ctx);\n if (!versionValue) {\n return ctx;\n }\n\n const isImplicitGradlePlugin = implicitDepName in GRADLE_PLUGINS;\n const groupIdArtifactId = isImplicitGradlePlugin\n ? GRADLE_PLUGINS[implicitDepName as keyof typeof GRADLE_PLUGINS][1]\n : GRADLE_TEST_SUITES[implicitDepName as keyof typeof GRADLE_TEST_SUITES];\n\n const dep = parseDependencyString(`${groupIdArtifactId}:${versionValue}`);\n if (!dep) {\n return ctx;\n }\n\n dep.depName = implicitDepName;\n dep.packageName = groupIdArtifactId;\n dep.managerData = {\n fileReplacePosition: versionTokens[0].offset,\n packageFile: ctx.packageFile,\n };\n\n if (versionTokens.length > 1) {\n // = template string with multiple variables\n dep.skipReason = 'unspecified-version';\n } else if (versionTokens[0].type === 'symbol') {\n const varData = findVariable(versionTokens[0].value, ctx);\n if (varData) {\n dep.sharedVariableName = varData.key;\n dep.currentValue = varData.value;\n dep.managerData = {\n fileReplacePosition: varData.fileReplacePosition,\n packageFile: varData.packageFile,\n };\n }\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","names":["dockerVersioning"],"sources":["../../../../lib/modules/manager/helm-values/extract.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { parseYaml } from '../../../util/yaml.ts';\nimport { id as dockerVersioning } from '../../versioning/docker/index.ts';\nimport { getDep } from '../dockerfile/extract.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\nimport type { HelmDockerImageDependency } from './types.ts';\nimport {\n matchesHelmValuesDockerHeuristic,\n matchesHelmValuesInlineImage,\n} from './util.ts';\n\nfunction getHelmDep(\n registry: string,\n repository: string,\n tag: string,\n registryAliases: Record<string, string> | undefined,\n): PackageDependency {\n const dep = getDep(`${registry}${repository}:${tag}`, false, registryAliases);\n dep.replaceString = tag;\n dep.versioning = dockerVersioning;\n dep.autoReplaceStringTemplate =\n '{{newValue}}{{#if newDigest}}@{{newDigest}}{{/if}}';\n return dep;\n}\n\n/**\n * Recursively find all supported dependencies in the yaml object.\n *\n * @param parsedContent\n */\nexport function findDependencies(\n parsedContent: Record<string, unknown> | HelmDockerImageDependency,\n registryAliases: Record<string, string> | undefined,\n): PackageDependency[] {\n return findDependenciesInternal(parsedContent, [], registryAliases);\n}\nexport function findDependenciesInternal(\n parsedContent: Record<string, unknown> | HelmDockerImageDependency,\n packageDependencies: PackageDependency[],\n registryAliases: Record<string, string> | undefined,\n): PackageDependency[] {\n if (!parsedContent || typeof parsedContent !== 'object') {\n return packageDependencies;\n }\n\n Object.entries(parsedContent).forEach(([key, value]) => {\n if (matchesHelmValuesDockerHeuristic(key, value)) {\n const currentItem = value;\n\n let registry = currentItem.registry;\n registry = registry ? `${registry}/` : '';\n const repository = String(currentItem.repository);\n const tag = `${currentItem.tag ?? currentItem.version}`;\n packageDependencies.push(\n getHelmDep(registry, repository, tag, registryAliases),\n );\n } else if (matchesHelmValuesInlineImage(key, value)) {\n packageDependencies.push(getDep(value, true, registryAliases));\n } else {\n findDependenciesInternal(\n value as Record<string, unknown>,\n packageDependencies,\n registryAliases,\n );\n }\n });\n return packageDependencies;\n}\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n config: ExtractConfig,\n): PackageFileContent | null {\n let parsedContent: Record<string, unknown>[] | HelmDockerImageDependency[];\n try {\n // a parser that allows extracting line numbers would be preferable, with\n // the current approach we need to match anything we find again during the update\n // TODO: fix me (#9610)\n parsedContent = parseYaml(content) as any;\n } catch (err) {\n logger.debug({ err, packageFile }, 'Failed to parse helm-values YAML');\n return null;\n }\n try {\n const deps: PackageDependency
|
|
1
|
+
{"version":3,"file":"extract.js","names":["dockerVersioning"],"sources":["../../../../lib/modules/manager/helm-values/extract.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { parseYaml } from '../../../util/yaml.ts';\nimport { id as dockerVersioning } from '../../versioning/docker/index.ts';\nimport { getDep } from '../dockerfile/extract.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\nimport type { HelmDockerImageDependency } from './types.ts';\nimport {\n matchesHelmValuesDockerHeuristic,\n matchesHelmValuesInlineImage,\n} from './util.ts';\n\nfunction getHelmDep(\n registry: string,\n repository: string,\n tag: string,\n registryAliases: Record<string, string> | undefined,\n): PackageDependency {\n const dep = getDep(`${registry}${repository}:${tag}`, false, registryAliases);\n dep.replaceString = tag;\n dep.versioning = dockerVersioning;\n dep.autoReplaceStringTemplate =\n '{{newValue}}{{#if newDigest}}@{{newDigest}}{{/if}}';\n return dep;\n}\n\n/**\n * Recursively find all supported dependencies in the yaml object.\n *\n * @param parsedContent\n */\nexport function findDependencies(\n parsedContent: Record<string, unknown> | HelmDockerImageDependency,\n registryAliases: Record<string, string> | undefined,\n): PackageDependency[] {\n return findDependenciesInternal(parsedContent, [], registryAliases);\n}\nexport function findDependenciesInternal(\n parsedContent: Record<string, unknown> | HelmDockerImageDependency,\n packageDependencies: PackageDependency[],\n registryAliases: Record<string, string> | undefined,\n): PackageDependency[] {\n if (!parsedContent || typeof parsedContent !== 'object') {\n return packageDependencies;\n }\n\n Object.entries(parsedContent).forEach(([key, value]) => {\n if (matchesHelmValuesDockerHeuristic(key, value)) {\n const currentItem = value;\n\n let registry = currentItem.registry;\n registry = registry ? `${registry}/` : '';\n const repository = String(currentItem.repository);\n const tag = `${currentItem.tag ?? currentItem.version}`;\n packageDependencies.push(\n getHelmDep(registry, repository, tag, registryAliases),\n );\n } else if (matchesHelmValuesInlineImage(key, value)) {\n packageDependencies.push(getDep(value, true, registryAliases));\n } else {\n findDependenciesInternal(\n value as Record<string, unknown>,\n packageDependencies,\n registryAliases,\n );\n }\n });\n return packageDependencies;\n}\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n config: ExtractConfig,\n): PackageFileContent | null {\n let parsedContent: Record<string, unknown>[] | HelmDockerImageDependency[];\n try {\n // a parser that allows extracting line numbers would be preferable, with\n // the current approach we need to match anything we find again during the update\n // TODO: fix me (#9610)\n parsedContent = parseYaml(content) as any;\n } catch (err) {\n logger.debug({ err, packageFile }, 'Failed to parse helm-values YAML');\n return null;\n }\n try {\n const deps: PackageDependency[] = [];\n\n for (const con of parsedContent) {\n deps.push(...findDependencies(con, config.registryAliases));\n }\n\n if (deps.length) {\n return { deps };\n }\n } catch (err) /* istanbul ignore next */ {\n logger.debug(\n { err, packageFile },\n 'Error parsing helm-values parsed content',\n );\n }\n return null;\n}\n"],"mappings":";;;;;;AAeA,SAAS,WACP,UACA,YACA,KACA,iBACmB;CACnB,MAAM,MAAM,OAAO,GAAG,WAAW,WAAW,GAAG,OAAO,OAAO,eAAe;CAC5E,IAAI,gBAAgB;CACpB,IAAI,aAAaA;CACjB,IAAI,4BACF;CACF,OAAO;AACT;;;;;;AAOA,SAAgB,iBACd,eACA,iBACqB;CACrB,OAAO,yBAAyB,eAAe,CAAC,GAAG,eAAe;AACpE;AACA,SAAgB,yBACd,eACA,qBACA,iBACqB;CACrB,IAAI,CAAC,iBAAiB,OAAO,kBAAkB,UAC7C,OAAO;CAGT,OAAO,QAAQ,aAAa,CAAC,CAAC,SAAS,CAAC,KAAK,WAAW;EACtD,IAAI,iCAAiC,KAAK,KAAK,GAAG;GAChD,MAAM,cAAc;GAEpB,IAAI,WAAW,YAAY;GAC3B,WAAW,WAAW,GAAG,SAAS,KAAK;GACvC,MAAM,aAAa,OAAO,YAAY,UAAU;GAChD,MAAM,MAAM,GAAG,YAAY,OAAO,YAAY;GAC9C,oBAAoB,KAClB,WAAW,UAAU,YAAY,KAAK,eAAe,CACvD;EACF,OAAO,IAAI,6BAA6B,KAAK,KAAK,GAChD,oBAAoB,KAAK,OAAO,OAAO,MAAM,eAAe,CAAC;OAE7D,yBACE,OACA,qBACA,eACF;CAEJ,CAAC;CACD,OAAO;AACT;AAEA,SAAgB,mBACd,SACA,aACA,QAC2B;CAC3B,IAAI;CACJ,IAAI;EAIF,gBAAgB,UAAU,OAAO;CACnC,SAAS,KAAK;EACZ,OAAO,MAAM;GAAE;GAAK;EAAY,GAAG,kCAAkC;EACrE,OAAO;CACT;CACA,IAAI;EACF,MAAM,OAA4B,CAAC;EAEnC,KAAK,MAAM,OAAO,eAChB,KAAK,KAAK,GAAG,iBAAiB,KAAK,OAAO,eAAe,CAAC;EAG5D,IAAI,KAAK,QACP,OAAO,EAAE,KAAK;CAElB,SAAS,iCAAgC;EACvC,OAAO,MACL;GAAE;GAAK;EAAY,GACnB,0CACF;CACF;CACA,OAAO;AACT"}
|
|
@@ -12,7 +12,7 @@ import { isEmptyArray, isString } from "@sindresorhus/is";
|
|
|
12
12
|
//#region lib/modules/manager/helmfile/extract.ts
|
|
13
13
|
function isValidChartName(name, oci) {
|
|
14
14
|
if (oci) return !!name && !regEx(/[!@#$%^&*(),.?":{}|<>A-Z]/).test(name);
|
|
15
|
-
|
|
15
|
+
return !!name && !regEx(/[!@#$%^&*(),.?":{}/|<>A-Z]/).test(name);
|
|
16
16
|
}
|
|
17
17
|
function isLocalPath(possiblePath) {
|
|
18
18
|
return [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","names":["Document"],"sources":["../../../../lib/modules/manager/helmfile/extract.ts"],"sourcesContent":["import { isEmptyArray, isString } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { coerceArray } from '../../../util/array.ts';\nimport { coerceObject } from '../../../util/object.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { parseYaml } from '../../../util/yaml.ts';\nimport { DockerDatasource } from '../../datasource/docker/index.ts';\nimport { HelmDatasource } from '../../datasource/helm/index.ts';\nimport { isOCIRegistry, removeOCIPrefix } from '../helmv3/oci.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\nimport type { Doc, HelmRepository } from './schema.ts';\nimport { Doc as Document } from './schema.ts';\nimport {\n kustomizationsKeysUsed,\n localChartHasKustomizationsYaml,\n} from './utils.ts';\n\nfunction isValidChartName(name: string | undefined, oci: boolean): boolean {\n if (oci) {\n return !!name && !regEx(/[!@#$%^&*(),.?\":{}|<>A-Z]/).test(name);\n }
|
|
1
|
+
{"version":3,"file":"extract.js","names":["Document"],"sources":["../../../../lib/modules/manager/helmfile/extract.ts"],"sourcesContent":["import { isEmptyArray, isString } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { coerceArray } from '../../../util/array.ts';\nimport { coerceObject } from '../../../util/object.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { parseYaml } from '../../../util/yaml.ts';\nimport { DockerDatasource } from '../../datasource/docker/index.ts';\nimport { HelmDatasource } from '../../datasource/helm/index.ts';\nimport { isOCIRegistry, removeOCIPrefix } from '../helmv3/oci.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\nimport type { Doc, HelmRepository } from './schema.ts';\nimport { Doc as Document } from './schema.ts';\nimport {\n kustomizationsKeysUsed,\n localChartHasKustomizationsYaml,\n} from './utils.ts';\n\nfunction isValidChartName(name: string | undefined, oci: boolean): boolean {\n if (oci) {\n return !!name && !regEx(/[!@#$%^&*(),.?\":{}|<>A-Z]/).test(name);\n }\n return !!name && !regEx(/[!@#$%^&*(),.?\":{}/|<>A-Z]/).test(name);\n}\n\nfunction isLocalPath(possiblePath: string): boolean {\n return ['./', '../', '/'].some((localPrefix) =>\n possiblePath.startsWith(localPrefix),\n );\n}\n\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n config: ExtractConfig,\n): Promise<PackageFileContent | null> {\n const deps: PackageDependency[] = [];\n let registryData: Record<string, HelmRepository> = {};\n // Record kustomization usage for all deps, since updating artifacts is run on the helmfile.yaml as a whole.\n let needKustomize = false;\n const docs: Doc[] = parseYaml(content, {\n customSchema: Document,\n failureBehaviour: 'filter',\n removeTemplates: true,\n });\n\n for (const doc of docs) {\n // Always check for repositories in the current document and override the existing ones if any (as YAML does)\n if (doc.repositories) {\n registryData = {};\n for (const repo of doc.repositories) {\n if (repo.url?.startsWith('git+')) {\n logger.debug(\n { repo, packageFile },\n `Skipping unsupported helm-git repository.`,\n );\n continue;\n }\n registryData[repo.name] = repo;\n }\n logger.debug(\n { registryAliases: registryData, packageFile },\n `repositories discovered.`,\n );\n }\n\n for (const dep of [\n ...coerceArray(doc.releases),\n ...Object.values(coerceObject(doc.templates)),\n ]) {\n let depName = dep.chart;\n let packageName: string | null = null;\n let repoName: string | null = null;\n\n // If it starts with ./ ../ or / then it's a local path\n if (isLocalPath(dep.chart)) {\n if (\n kustomizationsKeysUsed(dep) ||\n (await localChartHasKustomizationsYaml(dep, packageFile))\n ) {\n needKustomize = true;\n }\n deps.push({\n depName: dep.name,\n skipReason: 'local-chart',\n });\n continue;\n }\n\n if (isOCIRegistry(dep.chart)) {\n packageName = depName = removeOCIPrefix(dep.chart);\n } else {\n if (dep.chart.includes('/')) {\n const v = dep.chart.split('/');\n repoName = v.shift()!;\n depName = v.join('/');\n } else {\n repoName = dep.chart;\n }\n if (registryData[repoName]?.oci) {\n const alias = registryData[repoName]?.url;\n if (alias) {\n packageName = `${alias}/${depName}`;\n }\n repoName = null;\n }\n }\n\n if (!isString(dep.version)) {\n deps.push({\n depName,\n skipReason: 'invalid-version',\n });\n continue;\n }\n\n const res: PackageDependency = {\n depName,\n currentValue: dep.version,\n };\n if (kustomizationsKeysUsed(dep)) {\n needKustomize = true;\n }\n if (packageName) {\n res.datasource = DockerDatasource.id;\n res.packageName = packageName;\n } else if (repoName) {\n res.registryUrls = [registryData[repoName]?.url]\n .concat([config.registryAliases?.[repoName]] as string[])\n .filter(isString);\n }\n\n // By definition on helm the chart name should be lowercase letter + number + -\n // However helmfile support templating of that field\n if (\n !isValidChartName(\n isOCIRegistry(dep.chart)\n ? depName.slice(depName.lastIndexOf('/') + 1)\n : depName,\n !!packageName,\n )\n ) {\n res.skipReason = 'unsupported-chart-type';\n }\n\n // Skip in case we cannot locate the registry\n if (\n res.datasource !== DockerDatasource.id &&\n isEmptyArray(res.registryUrls)\n ) {\n res.skipReason = 'unknown-registry';\n }\n\n deps.push(res);\n }\n }\n\n return deps.length\n ? {\n deps,\n datasource: HelmDatasource.id,\n ...(needKustomize && { managerData: { needKustomize } }),\n }\n : null;\n}\n"],"mappings":";;;;;;;;;;;;AAqBA,SAAS,iBAAiB,MAA0B,KAAuB;CACzE,IAAI,KACF,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,2BAA2B,CAAC,CAAC,KAAK,IAAI;CAEhE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,4BAA4B,CAAC,CAAC,KAAK,IAAI;AACjE;AAEA,SAAS,YAAY,cAA+B;CAClD,OAAO;EAAC;EAAM;EAAO;CAAG,CAAC,CAAC,MAAM,gBAC9B,aAAa,WAAW,WAAW,CACrC;AACF;AAEA,eAAsB,mBACpB,SACA,aACA,QACoC;CACpC,MAAM,OAA4B,CAAC;CACnC,IAAI,eAA+C,CAAC;CAEpD,IAAI,gBAAgB;CACpB,MAAM,OAAc,UAAU,SAAS;EACrC,cAAcA;EACd,kBAAkB;EAClB,iBAAiB;CACnB,CAAC;CAED,KAAK,MAAM,OAAO,MAAM;EAEtB,IAAI,IAAI,cAAc;GACpB,eAAe,CAAC;GAChB,KAAK,MAAM,QAAQ,IAAI,cAAc;IACnC,IAAI,KAAK,KAAK,WAAW,MAAM,GAAG;KAChC,OAAO,MACL;MAAE;MAAM;KAAY,GACpB,2CACF;KACA;IACF;IACA,aAAa,KAAK,QAAQ;GAC5B;GACA,OAAO,MACL;IAAE,iBAAiB;IAAc;GAAY,GAC7C,0BACF;EACF;EAEA,KAAK,MAAM,OAAO,CAChB,GAAG,YAAY,IAAI,QAAQ,GAC3B,GAAG,OAAO,OAAO,aAAa,IAAI,SAAS,CAAC,CAC9C,GAAG;GACD,IAAI,UAAU,IAAI;GAClB,IAAI,cAA6B;GACjC,IAAI,WAA0B;GAG9B,IAAI,YAAY,IAAI,KAAK,GAAG;IAC1B,IACE,uBAAuB,GAAG,KACzB,MAAM,gCAAgC,KAAK,WAAW,GAEvD,gBAAgB;IAElB,KAAK,KAAK;KACR,SAAS,IAAI;KACb,YAAY;IACd,CAAC;IACD;GACF;GAEA,IAAI,cAAc,IAAI,KAAK,GACzB,cAAc,UAAU,gBAAgB,IAAI,KAAK;QAC5C;IACL,IAAI,IAAI,MAAM,SAAS,GAAG,GAAG;KAC3B,MAAM,IAAI,IAAI,MAAM,MAAM,GAAG;KAC7B,WAAW,EAAE,MAAM;KACnB,UAAU,EAAE,KAAK,GAAG;IACtB,OACE,WAAW,IAAI;IAEjB,IAAI,aAAa,SAAS,EAAE,KAAK;KAC/B,MAAM,QAAQ,aAAa,SAAS,EAAE;KACtC,IAAI,OACF,cAAc,GAAG,MAAM,GAAG;KAE5B,WAAW;IACb;GACF;GAEA,IAAI,CAAC,SAAS,IAAI,OAAO,GAAG;IAC1B,KAAK,KAAK;KACR;KACA,YAAY;IACd,CAAC;IACD;GACF;GAEA,MAAM,MAAyB;IAC7B;IACA,cAAc,IAAI;GACpB;GACA,IAAI,uBAAuB,GAAG,GAC5B,gBAAgB;GAElB,IAAI,aAAa;IACf,IAAI,aAAa,iBAAiB;IAClC,IAAI,cAAc;GACpB,OAAO,IAAI,UACT,IAAI,eAAe,CAAC,aAAa,SAAS,EAAE,GAAG,CAAC,CAC7C,OAAO,CAAC,OAAO,kBAAkB,SAAS,CAAa,CAAC,CACxD,OAAO,QAAQ;GAKpB,IACE,CAAC,iBACC,cAAc,IAAI,KAAK,IACnB,QAAQ,MAAM,QAAQ,YAAY,GAAG,IAAI,CAAC,IAC1C,SACJ,CAAC,CAAC,WACJ,GAEA,IAAI,aAAa;GAInB,IACE,IAAI,eAAe,iBAAiB,MACpC,aAAa,IAAI,YAAY,GAE7B,IAAI,aAAa;GAGnB,KAAK,KAAK,GAAG;EACf;CACF;CAEA,OAAO,KAAK,SACR;EACE;EACA,YAAY,eAAe;EAC3B,GAAI,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE;CACxD,IACA;AACN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","names":["getDockerDep","getBuildpackDep"],"sources":["../../../../lib/modules/manager/maven/extract.ts"],"sourcesContent":["import { isArray, isNonEmptyArray } from '@sindresorhus/is';\nimport upath from 'upath';\nimport type { XmlElement } from 'xmldoc';\nimport { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { MAVEN_REPO } from '../../datasource/maven/common.ts';\nimport { MavenDatasource } from '../../datasource/maven/index.ts';\nimport {\n BUILDPACK_REGISTRY_PREFIX,\n DOCKER_PREFIX,\n getDep as getBuildpackDep,\n isBuildpackRegistryRef,\n isDockerRef,\n} from '../buildpacks/extract.ts';\nimport { getDep as getDockerDep } from '../dockerfile/extract.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFile,\n} from '../types.ts';\nimport type { MavenProp } from './types.ts';\n\nconst supportedNamespaces = [\n 'http://maven.apache.org/SETTINGS/1.0.0',\n 'http://maven.apache.org/SETTINGS/1.1.0',\n 'http://maven.apache.org/SETTINGS/1.2.0',\n];\n\nconst supportedExtensionsNamespaces = [\n 'http://maven.apache.org/EXTENSIONS/1.0.0',\n 'http://maven.apache.org/EXTENSIONS/1.1.0',\n 'http://maven.apache.org/EXTENSIONS/1.2.0',\n];\n\nfunction parsePom(raw: string, packageFile: string): XmlDocument | null {\n let project: XmlDocument;\n try {\n project = new XmlDocument(raw);\n if (raw.includes('\\r\\n')) {\n logger.warn(\n 'Your pom.xml contains windows line endings. This is not supported and may result in parsing issues.',\n );\n }\n } catch {\n logger.debug({ packageFile }, `Failed to parse as XML`);\n return null;\n }\n const { name, attr, children } = project;\n if (name !== 'project') {\n return null;\n }\n if (attr.xmlns === 'http://maven.apache.org/POM/4.0.0') {\n return project;\n }\n if (\n isNonEmptyArray(children) &&\n children.some((c: any) => c.name === 'modelVersion' && c.val === '4.0.0')\n ) {\n return project;\n }\n return null;\n}\n\nfunction parseExtensions(raw: string, packageFile: string): XmlDocument | null {\n let extensions: XmlDocument;\n try {\n extensions = new XmlDocument(raw);\n } catch {\n logger.debug({ packageFile }, `Failed to parse as XML`);\n return null;\n }\n const { name, attr, children } = extensions;\n if (name !== 'extensions') {\n return null;\n }\n if (!supportedExtensionsNamespaces.includes(attr.xmlns)) {\n return null;\n }\n if (!isNonEmptyArray(children)) {\n return null;\n }\n return extensions;\n}\n\nfunction containsPlaceholder(str: string | null | undefined): boolean {\n return (\n !!str &&\n (regEx(/\\${[^}]*?}/).test(str) || regEx(/\\{\\{[^}]*?\\}\\}/).test(str))\n );\n}\n\nfunction getCNBDependencies(\n nodes: XmlElement[],\n config: ExtractConfig,\n): PackageDependency[] {\n const deps: PackageDependency[] = [];\n for (const node of nodes) {\n const depString = node.val.trim();\n if (isDockerRef(depString)) {\n const dep = getDockerDep(\n depString.replace(DOCKER_PREFIX, ''),\n true,\n config.registryAliases,\n );\n\n dep.fileReplacePosition = node.position!; // TODO: should not be null\n if (dep.currentValue || dep.currentDigest) {\n deps.push(dep);\n }\n } else if (isBuildpackRegistryRef(depString)) {\n const dep = getBuildpackDep(\n depString.replace(BUILDPACK_REGISTRY_PREFIX, ''),\n );\n\n if (dep?.currentValue) {\n dep.fileReplacePosition = node.position!; // TODO: should not be null\n deps.push(dep);\n }\n }\n }\n return deps;\n}\n\nfunction getAllCNBDependencies(\n node: XmlDocument,\n config: ExtractConfig,\n): PackageDependency[] | null {\n const pluginNodes =\n node.childNamed('build')?.childNamed('plugins')?.childrenNamed('plugin') ??\n [];\n\n const pluginNode = pluginNodes.find((pluginNode) => {\n return (\n pluginNode.valueWithPath('groupId')?.trim() ===\n 'org.springframework.boot' &&\n pluginNode.valueWithPath('artifactId')?.trim() ===\n 'spring-boot-maven-plugin'\n );\n });\n if (!pluginNode) {\n return null;\n }\n\n const deps: PackageDependency[] = [];\n const imageNode = pluginNode.childNamed('configuration')?.childNamed('image');\n if (!imageNode) {\n return null;\n }\n const builder = getCNBDependencies(\n imageNode.childrenNamed('builder'),\n config,\n );\n const runImage = getCNBDependencies(\n imageNode.childrenNamed('runImage'),\n config,\n );\n const buildpacks = getCNBDependencies(\n imageNode.childNamed('buildpacks')?.childrenNamed('buildpack') ?? [],\n config,\n );\n deps.push(...builder, ...runImage, ...buildpacks);\n\n return deps.length ? deps : null;\n}\n\nfunction depFromNode(\n node: XmlElement,\n underBuildSettingsElement: boolean,\n): PackageDependency | null {\n if (!('valueWithPath' in node)) {\n return null;\n }\n let groupId = node.valueWithPath('groupId')?.trim();\n const artifactId = node.valueWithPath('artifactId')?.trim();\n const currentValue = node.valueWithPath('version')?.trim();\n let depType: string | undefined;\n\n if (!groupId && node.name === 'plugin') {\n groupId = 'org.apache.maven.plugins';\n }\n\n if (groupId && artifactId && currentValue) {\n const depName = `${groupId}:${artifactId}`;\n const versionNode = node.descendantWithPath('version')!;\n const fileReplacePosition = versionNode.position!; // TODO: should not be null\n const datasource = MavenDatasource.id;\n const result: PackageDependency = {\n datasource,\n depName,\n currentValue,\n fileReplacePosition,\n registryUrls: [],\n };\n\n switch (node.name) {\n case 'plugin':\n case 'extension':\n depType = 'build';\n break;\n case 'parent':\n depType = 'parent';\n break;\n case 'dependency':\n if (underBuildSettingsElement) {\n depType = 'build';\n } else if (node.valueWithPath('optional')?.trim() === 'true') {\n depType = 'optional';\n } else {\n depType = node.valueWithPath('scope')?.trim() ?? 'compile'; // maven default scope is compile\n }\n break;\n }\n\n if (depType) {\n result.depType = depType;\n }\n\n return result;\n }\n return null;\n}\n\nfunction deepExtract(\n node: XmlElement,\n result: PackageDependency[] = [],\n isRoot = true,\n underBuildSettingsElement = false,\n): PackageDependency[] {\n const dep = depFromNode(node, underBuildSettingsElement);\n if (dep && !isRoot) {\n result.push(dep);\n }\n if (node.children) {\n for (const child of node.children) {\n deepExtract(\n child as XmlElement,\n result,\n false,\n node.name === 'build' ||\n node.name === 'reporting' ||\n underBuildSettingsElement,\n );\n }\n }\n return result;\n}\n\nfunction applyProps(\n dep: PackageDependency<Record<string, any>>,\n depPackageFile: string,\n props: MavenProp,\n): PackageDependency<Record<string, any>> {\n let result = dep;\n let anyChange = false;\n const alreadySeenProps = new Set<string>();\n\n do {\n const [returnedResult, returnedAnyChange, fatal] = applyPropsInternal(\n result,\n depPackageFile,\n props,\n alreadySeenProps,\n );\n if (fatal) {\n dep.skipReason = 'recursive-placeholder';\n return dep;\n }\n result = returnedResult;\n anyChange = returnedAnyChange;\n } while (anyChange);\n\n if (containsPlaceholder(result.depName)) {\n result.skipReason = 'name-placeholder';\n } else if (containsPlaceholder(result.currentValue)) {\n result.skipReason = 'version-placeholder';\n }\n\n return result;\n}\n\nfunction applyPropsInternal(\n dep: PackageDependency<Record<string, any>>,\n depPackageFile: string,\n props: MavenProp,\n previouslySeenProps: Set<string>,\n): [PackageDependency<Record<string, any>>, boolean, boolean] {\n let anyChange = false;\n let fatal = false;\n\n const seenProps = new Set<string>();\n\n const replaceAll = (str: string): string =>\n str.replace(regEx(/\\${[^}]*?}/g), (substr) => {\n const propKey = substr.slice(2, -1).trim();\n // TODO: wrong types here, props is already `MavenProp`\n const propValue = (props as any)[propKey] as MavenProp;\n if (propValue) {\n anyChange = true;\n if (previouslySeenProps.has(propKey)) {\n fatal = true;\n } else {\n seenProps.add(propKey);\n }\n return propValue.val;\n }\n return substr;\n });\n\n let depName = dep.depName;\n if (dep.depName) {\n depName = replaceAll(dep.depName);\n }\n\n const registryUrls = dep.registryUrls!.map((url) => replaceAll(url));\n\n let fileReplacePosition = dep.fileReplacePosition;\n let propSource = dep.propSource;\n let sharedVariableName: string | null = null;\n let currentValue: string | null = null;\n\n if (dep.currentValue) {\n currentValue = dep.currentValue.replace(regEx(/^\\${[^}]*?}$/), (substr) => {\n const propKey = substr.slice(2, -1).trim();\n // TODO: wrong types here, props is already `MavenProp`\n const propValue = (props as any)[propKey] as MavenProp;\n if (propValue) {\n sharedVariableName ??= propKey;\n fileReplacePosition = propValue.fileReplacePosition;\n propSource =\n propValue.packageFile ??\n // istanbul ignore next\n undefined;\n anyChange = true;\n if (previouslySeenProps.has(propKey)) {\n fatal = true;\n } else {\n seenProps.add(propKey);\n }\n return propValue.val;\n }\n return substr;\n });\n }\n\n const result: PackageDependency = {\n ...dep,\n depName,\n registryUrls,\n fileReplacePosition,\n propSource,\n currentValue,\n };\n\n if (sharedVariableName) {\n result.sharedVariableName = sharedVariableName;\n }\n\n if (propSource && depPackageFile !== propSource) {\n result.editFile = propSource;\n }\n\n for (const prop of seenProps) {\n previouslySeenProps.add(prop);\n }\n return [result, anyChange, fatal];\n}\n\nfunction resolveParentFile(packageFile: string, parentPath: string): string {\n let parentFile = 'pom.xml';\n let parentDir = parentPath;\n const parentBasename = upath.basename(parentPath);\n if (parentBasename === 'pom.xml' || parentBasename.endsWith('.pom.xml')) {\n parentFile = parentBasename;\n parentDir = upath.dirname(parentPath);\n }\n const dir = upath.dirname(packageFile);\n return upath.normalize(upath.join(dir, parentDir, parentFile));\n}\n\ninterface MavenInterimPackageFile extends PackageFile {\n mavenProps?: Record<string, any>;\n parent?: string;\n}\n\nexport function extractPackage(\n rawContent: string,\n packageFile: string,\n config: ExtractConfig,\n): PackageFile | null {\n if (!rawContent) {\n return null;\n }\n\n const project = parsePom(rawContent, packageFile);\n if (!project) {\n return null;\n }\n\n const result: MavenInterimPackageFile = {\n datasource: MavenDatasource.id,\n packageFile,\n deps: [],\n };\n\n result.deps = deepExtract(project);\n\n const CNBDependencies = getAllCNBDependencies(project, config);\n if (CNBDependencies) {\n result.deps.push(...CNBDependencies);\n }\n\n const propsNode = project.childNamed('properties');\n const props: Record<string, MavenProp> = {};\n if (propsNode?.children) {\n for (const propNode of propsNode.children as XmlElement[]) {\n const key = propNode.name;\n const val = propNode?.val?.trim();\n if (key && val && propNode.position) {\n const fileReplacePosition = propNode.position;\n props[key] = { val, fileReplacePosition, packageFile };\n }\n }\n }\n result.mavenProps = props;\n\n const repositories = project.childNamed('repositories');\n if (repositories?.children) {\n const repoUrls: string[] = [];\n for (const repo of repositories.childrenNamed('repository')) {\n const repoUrl = repo.valueWithPath('url')?.trim();\n if (repoUrl) {\n repoUrls.push(repoUrl);\n }\n }\n result.deps.forEach((dep) => {\n if (isArray(dep.registryUrls)) {\n repoUrls.forEach((url) => dep.registryUrls!.push(url));\n }\n });\n }\n\n if (packageFile && project.childNamed('parent')) {\n const parentPath =\n project.valueWithPath('parent.relativePath')?.trim() ?? '../pom.xml';\n result.parent = resolveParentFile(packageFile, parentPath);\n }\n\n if (project.childNamed('version')) {\n result.packageFileVersion = project.valueWithPath('version')!.trim();\n }\n\n return result;\n}\n\nexport function extractRegistries(rawContent: string): string[] {\n if (!rawContent) {\n return [];\n }\n\n const settings = parseSettings(rawContent);\n if (!settings) {\n return [];\n }\n\n const urls: string[] = [];\n\n const mirrorUrls = parseUrls(settings, 'mirrors');\n urls.push(...mirrorUrls);\n\n settings.childNamed('profiles')?.eachChild((profile) => {\n const repositoryUrls = parseUrls(profile, 'repositories');\n urls.push(...repositoryUrls);\n });\n\n // filter out duplicates\n return [...new Set(urls)];\n}\n\nfunction parseUrls(xmlNode: XmlElement, path: string): string[] {\n const children = xmlNode.descendantWithPath(path);\n const urls: string[] = [];\n if (children?.children) {\n children.eachChild((child) => {\n const url = child.valueWithPath('url');\n if (url) {\n urls.push(url);\n }\n });\n }\n return urls;\n}\n\nexport function parseSettings(raw: string): XmlDocument | null {\n let settings: XmlDocument;\n try {\n settings = new XmlDocument(raw);\n } catch {\n return null;\n }\n const { name, attr } = settings;\n if (name !== 'settings') {\n return null;\n }\n if (supportedNamespaces.includes(attr.xmlns)) {\n return settings;\n }\n return null;\n}\n\nexport function resolveParents(packages: PackageFile[]): PackageFile[] {\n const packageFileNames: string[] = [];\n const extractedPackages: Record<string, MavenInterimPackageFile> = {};\n const extractedDeps: Record<string, PackageDependency[]> = {};\n const extractedProps: Record<string, MavenProp> = {};\n const registryUrls: Record<string, Set<string>> = {};\n packages.forEach((pkg) => {\n const name = pkg.packageFile;\n packageFileNames.push(name);\n extractedPackages[name] = pkg;\n extractedDeps[name] = [];\n });\n\n // Construct package-specific prop scopes\n // and merge them in reverse order,\n // which allows inheritance/overriding.\n packageFileNames.forEach((name) => {\n registryUrls[name] = new Set();\n const propsHierarchy: Record<string, MavenProp>[] = [];\n const visitedPackages = new Set<string>();\n let pkg: MavenInterimPackageFile | null = extractedPackages[name];\n while (pkg) {\n propsHierarchy.unshift(pkg.mavenProps!);\n\n if (pkg.deps) {\n pkg.deps.forEach((dep) => {\n if (dep.registryUrls) {\n dep.registryUrls.forEach((url) => {\n registryUrls[name].add(url);\n });\n }\n });\n }\n\n if (pkg.parent && !visitedPackages.has(pkg.parent)) {\n visitedPackages.add(pkg.parent);\n pkg = extractedPackages[pkg.parent];\n } else {\n pkg = null;\n }\n }\n propsHierarchy.unshift({});\n extractedProps[name] = Object.assign.apply(null, propsHierarchy as any);\n });\n\n // Resolve registryUrls\n packageFileNames.forEach((name) => {\n const pkg = extractedPackages[name];\n pkg.deps.forEach((rawDep) => {\n const urlsSet = new Set([\n ...(rawDep.registryUrls ?? []),\n ...registryUrls[name],\n ]);\n rawDep.registryUrls = [...urlsSet];\n });\n });\n\n const rootDeps = new Set<string>();\n // Resolve placeholders\n packageFileNames.forEach((name) => {\n const pkg = extractedPackages[name];\n pkg.deps.forEach((rawDep) => {\n const dep = applyProps(rawDep, name, extractedProps[name]);\n if (dep.depType === 'parent') {\n const parentPkg = extractedPackages[pkg.parent!];\n const hasParentWithNoParent = parentPkg && !parentPkg.parent;\n const hasParentWithExternalParent =\n parentPkg && !packageFileNames.includes(parentPkg.parent!);\n if (hasParentWithNoParent || hasParentWithExternalParent) {\n rootDeps.add(dep.depName!);\n }\n }\n const sourceName = dep.propSource ?? name;\n extractedDeps[sourceName].push(dep);\n });\n });\n\n const packageFiles = packageFileNames.map((packageFile) => {\n const pkg = extractedPackages[packageFile];\n const deps = extractedDeps[packageFile];\n for (const dep of deps) {\n if (rootDeps.has(dep.depName!)) {\n dep.depType = 'parent-root';\n }\n }\n return { ...pkg, deps };\n });\n\n return packageFiles;\n}\n\nfunction cleanResult(packageFiles: MavenInterimPackageFile[]): PackageFile[] {\n packageFiles.forEach((packageFile) => {\n delete packageFile.mavenProps;\n delete packageFile.parent;\n packageFile.deps.forEach((dep) => {\n delete dep.propSource;\n //Add Registry From SuperPom\n if (dep.datasource === MavenDatasource.id) {\n dep.registryUrls!.push(MAVEN_REPO);\n }\n });\n });\n return packageFiles;\n}\n\nexport function extractExtensions(\n rawContent: string,\n packageFile: string,\n): PackageFile | null {\n if (!rawContent) {\n return null;\n }\n\n const extensions = parseExtensions(rawContent, packageFile);\n if (!extensions) {\n return null;\n }\n\n const result: MavenInterimPackageFile = {\n datasource: MavenDatasource.id,\n packageFile,\n deps: [],\n };\n\n result.deps = deepExtract(extensions);\n\n return result;\n}\n\nexport async function extractAllPackageFiles(\n config: ExtractConfig,\n packageFiles: string[],\n): Promise<PackageFile[]> {\n const packages: PackageFile[] = [];\n const additionalRegistryUrls: string[] = [];\n\n for (const packageFile of packageFiles) {\n const content = await readLocalFile(packageFile, 'utf8');\n if (!content) {\n logger.debug({ packageFile }, 'packageFile has no content');\n continue;\n }\n if (packageFile.endsWith('settings.xml')) {\n const registries = extractRegistries(content);\n if (registries) {\n logger.debug(\n { registries, packageFile },\n 'Found registryUrls in settings.xml',\n );\n additionalRegistryUrls.push(...registries);\n }\n } else if (packageFile.endsWith('.mvn/extensions.xml')) {\n const extensions = extractExtensions(content, packageFile);\n if (extensions) {\n packages.push(extensions);\n } else {\n logger.trace({ packageFile }, 'can not read extensions');\n }\n } else {\n const pkg = extractPackage(content, packageFile, config);\n if (pkg) {\n packages.push(pkg);\n } else {\n logger.trace({ packageFile }, 'can not read dependencies');\n }\n }\n }\n if (additionalRegistryUrls) {\n for (const pkgFile of packages) {\n for (const dep of pkgFile.deps) {\n if (dep.registryUrls) {\n dep.registryUrls.unshift(...additionalRegistryUrls);\n }\n }\n }\n }\n return cleanResult(resolveParents(packages));\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extract.js","names":["getDockerDep","getBuildpackDep"],"sources":["../../../../lib/modules/manager/maven/extract.ts"],"sourcesContent":["import { isArray, isNonEmptyArray } from '@sindresorhus/is';\nimport upath from 'upath';\nimport type { XmlElement } from 'xmldoc';\nimport { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { MAVEN_REPO } from '../../datasource/maven/common.ts';\nimport { MavenDatasource } from '../../datasource/maven/index.ts';\nimport {\n BUILDPACK_REGISTRY_PREFIX,\n DOCKER_PREFIX,\n getDep as getBuildpackDep,\n isBuildpackRegistryRef,\n isDockerRef,\n} from '../buildpacks/extract.ts';\nimport { getDep as getDockerDep } from '../dockerfile/extract.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFile,\n} from '../types.ts';\nimport type { MavenProp } from './types.ts';\n\nconst supportedNamespaces = [\n 'http://maven.apache.org/SETTINGS/1.0.0',\n 'http://maven.apache.org/SETTINGS/1.1.0',\n 'http://maven.apache.org/SETTINGS/1.2.0',\n];\n\nconst supportedExtensionsNamespaces = [\n 'http://maven.apache.org/EXTENSIONS/1.0.0',\n 'http://maven.apache.org/EXTENSIONS/1.1.0',\n 'http://maven.apache.org/EXTENSIONS/1.2.0',\n];\n\nfunction parsePom(raw: string, packageFile: string): XmlDocument | null {\n let project: XmlDocument;\n try {\n project = new XmlDocument(raw);\n if (raw.includes('\\r\\n')) {\n logger.warn(\n 'Your pom.xml contains windows line endings. This is not supported and may result in parsing issues.',\n );\n }\n } catch {\n logger.debug({ packageFile }, `Failed to parse as XML`);\n return null;\n }\n const { name, attr, children } = project;\n if (name !== 'project') {\n return null;\n }\n if (attr.xmlns === 'http://maven.apache.org/POM/4.0.0') {\n return project;\n }\n if (\n isNonEmptyArray(children) &&\n children.some((c: any) => c.name === 'modelVersion' && c.val === '4.0.0')\n ) {\n return project;\n }\n return null;\n}\n\nfunction parseExtensions(raw: string, packageFile: string): XmlDocument | null {\n let extensions: XmlDocument;\n try {\n extensions = new XmlDocument(raw);\n } catch {\n logger.debug({ packageFile }, `Failed to parse as XML`);\n return null;\n }\n const { name, attr, children } = extensions;\n if (name !== 'extensions') {\n return null;\n }\n if (!supportedExtensionsNamespaces.includes(attr.xmlns)) {\n return null;\n }\n if (!isNonEmptyArray(children)) {\n return null;\n }\n return extensions;\n}\n\nfunction containsPlaceholder(str: string | null | undefined): boolean {\n return (\n !!str &&\n (regEx(/\\${[^}]*?}/).test(str) || regEx(/\\{\\{[^}]*?\\}\\}/).test(str))\n );\n}\n\nfunction getCNBDependencies(\n nodes: XmlElement[],\n config: ExtractConfig,\n): PackageDependency[] {\n const deps: PackageDependency[] = [];\n for (const node of nodes) {\n const depString = node.val.trim();\n if (isDockerRef(depString)) {\n const dep = getDockerDep(\n depString.replace(DOCKER_PREFIX, ''),\n true,\n config.registryAliases,\n );\n\n dep.fileReplacePosition = node.position!; // TODO: should not be null\n if (dep.currentValue || dep.currentDigest) {\n deps.push(dep);\n }\n } else if (isBuildpackRegistryRef(depString)) {\n const dep = getBuildpackDep(\n depString.replace(BUILDPACK_REGISTRY_PREFIX, ''),\n );\n\n if (dep?.currentValue) {\n dep.fileReplacePosition = node.position!; // TODO: should not be null\n deps.push(dep);\n }\n }\n }\n return deps;\n}\n\nfunction getAllCNBDependencies(\n node: XmlDocument,\n config: ExtractConfig,\n): PackageDependency[] | null {\n const pluginNodes =\n node.childNamed('build')?.childNamed('plugins')?.childrenNamed('plugin') ??\n [];\n\n const pluginNode = pluginNodes.find((pluginNode) => {\n return (\n pluginNode.valueWithPath('groupId')?.trim() ===\n 'org.springframework.boot' &&\n pluginNode.valueWithPath('artifactId')?.trim() ===\n 'spring-boot-maven-plugin'\n );\n });\n if (!pluginNode) {\n return null;\n }\n\n const deps: PackageDependency[] = [];\n const imageNode = pluginNode.childNamed('configuration')?.childNamed('image');\n if (!imageNode) {\n return null;\n }\n const builder = getCNBDependencies(\n imageNode.childrenNamed('builder'),\n config,\n );\n const runImage = getCNBDependencies(\n imageNode.childrenNamed('runImage'),\n config,\n );\n const buildpacks = getCNBDependencies(\n imageNode.childNamed('buildpacks')?.childrenNamed('buildpack') ?? [],\n config,\n );\n deps.push(...builder, ...runImage, ...buildpacks);\n\n return deps.length ? deps : null;\n}\n\nfunction depFromNode(\n node: XmlElement,\n underBuildSettingsElement: boolean,\n): PackageDependency | null {\n if (!('valueWithPath' in node)) {\n return null;\n }\n let groupId = node.valueWithPath('groupId')?.trim();\n const artifactId = node.valueWithPath('artifactId')?.trim();\n const currentValue = node.valueWithPath('version')?.trim();\n let depType: string | undefined;\n\n if (!groupId && node.name === 'plugin') {\n groupId = 'org.apache.maven.plugins';\n }\n\n if (groupId && artifactId && currentValue) {\n const depName = `${groupId}:${artifactId}`;\n const versionNode = node.descendantWithPath('version')!;\n const fileReplacePosition = versionNode.position!; // TODO: should not be null\n const datasource = MavenDatasource.id;\n const result: PackageDependency = {\n datasource,\n depName,\n currentValue,\n fileReplacePosition,\n registryUrls: [],\n };\n\n switch (node.name) {\n case 'plugin':\n case 'extension':\n depType = 'build';\n break;\n case 'parent':\n depType = 'parent';\n break;\n case 'dependency':\n if (underBuildSettingsElement) {\n depType = 'build';\n } else if (node.valueWithPath('optional')?.trim() === 'true') {\n depType = 'optional';\n } else {\n depType = node.valueWithPath('scope')?.trim() ?? 'compile'; // maven default scope is compile\n }\n break;\n }\n\n if (depType) {\n result.depType = depType;\n }\n\n return result;\n }\n return null;\n}\n\nfunction deepExtract(\n node: XmlElement,\n result: PackageDependency[] = [],\n isRoot = true,\n underBuildSettingsElement = false,\n): PackageDependency[] {\n const dep = depFromNode(node, underBuildSettingsElement);\n if (dep && !isRoot) {\n result.push(dep);\n }\n if (node.children) {\n for (const child of node.children) {\n deepExtract(\n child as XmlElement,\n result,\n false,\n node.name === 'build' ||\n node.name === 'reporting' ||\n underBuildSettingsElement,\n );\n }\n }\n return result;\n}\n\nfunction applyProps(\n dep: PackageDependency,\n depPackageFile: string,\n props: MavenProp,\n): PackageDependency {\n let result = dep;\n let anyChange = false;\n const alreadySeenProps = new Set<string>();\n\n do {\n const [returnedResult, returnedAnyChange, fatal] = applyPropsInternal(\n result,\n depPackageFile,\n props,\n alreadySeenProps,\n );\n if (fatal) {\n dep.skipReason = 'recursive-placeholder';\n return dep;\n }\n result = returnedResult;\n anyChange = returnedAnyChange;\n } while (anyChange);\n\n if (containsPlaceholder(result.depName)) {\n result.skipReason = 'name-placeholder';\n } else if (containsPlaceholder(result.currentValue)) {\n result.skipReason = 'version-placeholder';\n }\n\n return result;\n}\n\nfunction applyPropsInternal(\n dep: PackageDependency,\n depPackageFile: string,\n props: MavenProp,\n previouslySeenProps: Set<string>,\n): [PackageDependency, boolean, boolean] {\n let anyChange = false;\n let fatal = false;\n\n const seenProps = new Set<string>();\n\n const replaceAll = (str: string): string =>\n str.replace(regEx(/\\${[^}]*?}/g), (substr) => {\n const propKey = substr.slice(2, -1).trim();\n // TODO: wrong types here, props is already `MavenProp`\n const propValue = (props as any)[propKey] as MavenProp;\n if (propValue) {\n anyChange = true;\n if (previouslySeenProps.has(propKey)) {\n fatal = true;\n } else {\n seenProps.add(propKey);\n }\n return propValue.val;\n }\n return substr;\n });\n\n let depName = dep.depName;\n if (dep.depName) {\n depName = replaceAll(dep.depName);\n }\n\n const registryUrls = dep.registryUrls!.map((url) => replaceAll(url));\n\n let fileReplacePosition = dep.fileReplacePosition;\n let propSource = dep.propSource;\n let sharedVariableName: string | null = null;\n let currentValue: string | null = null;\n\n if (dep.currentValue) {\n currentValue = dep.currentValue.replace(regEx(/^\\${[^}]*?}$/), (substr) => {\n const propKey = substr.slice(2, -1).trim();\n // TODO: wrong types here, props is already `MavenProp`\n const propValue = (props as any)[propKey] as MavenProp;\n if (propValue) {\n sharedVariableName ??= propKey;\n fileReplacePosition = propValue.fileReplacePosition;\n propSource =\n propValue.packageFile ??\n // istanbul ignore next\n undefined;\n anyChange = true;\n if (previouslySeenProps.has(propKey)) {\n fatal = true;\n } else {\n seenProps.add(propKey);\n }\n return propValue.val;\n }\n return substr;\n });\n }\n\n const result: PackageDependency = {\n ...dep,\n depName,\n registryUrls,\n fileReplacePosition,\n propSource,\n currentValue,\n };\n\n if (sharedVariableName) {\n result.sharedVariableName = sharedVariableName;\n }\n\n if (propSource && depPackageFile !== propSource) {\n result.editFile = propSource;\n }\n\n for (const prop of seenProps) {\n previouslySeenProps.add(prop);\n }\n return [result, anyChange, fatal];\n}\n\nfunction resolveParentFile(packageFile: string, parentPath: string): string {\n let parentFile = 'pom.xml';\n let parentDir = parentPath;\n const parentBasename = upath.basename(parentPath);\n if (parentBasename === 'pom.xml' || parentBasename.endsWith('.pom.xml')) {\n parentFile = parentBasename;\n parentDir = upath.dirname(parentPath);\n }\n const dir = upath.dirname(packageFile);\n return upath.normalize(upath.join(dir, parentDir, parentFile));\n}\n\ninterface MavenInterimPackageFile extends PackageFile {\n mavenProps?: Record<string, any>;\n parent?: string;\n}\n\nexport function extractPackage(\n rawContent: string,\n packageFile: string,\n config: ExtractConfig,\n): PackageFile | null {\n if (!rawContent) {\n return null;\n }\n\n const project = parsePom(rawContent, packageFile);\n if (!project) {\n return null;\n }\n\n const result: MavenInterimPackageFile = {\n datasource: MavenDatasource.id,\n packageFile,\n deps: [],\n };\n\n result.deps = deepExtract(project);\n\n const CNBDependencies = getAllCNBDependencies(project, config);\n if (CNBDependencies) {\n result.deps.push(...CNBDependencies);\n }\n\n const propsNode = project.childNamed('properties');\n const props: Record<string, MavenProp> = {};\n if (propsNode?.children) {\n for (const propNode of propsNode.children as XmlElement[]) {\n const key = propNode.name;\n const val = propNode?.val?.trim();\n if (key && val && propNode.position) {\n const fileReplacePosition = propNode.position;\n props[key] = { val, fileReplacePosition, packageFile };\n }\n }\n }\n result.mavenProps = props;\n\n const repositories = project.childNamed('repositories');\n if (repositories?.children) {\n const repoUrls: string[] = [];\n for (const repo of repositories.childrenNamed('repository')) {\n const repoUrl = repo.valueWithPath('url')?.trim();\n if (repoUrl) {\n repoUrls.push(repoUrl);\n }\n }\n result.deps.forEach((dep) => {\n if (isArray(dep.registryUrls)) {\n repoUrls.forEach((url) => dep.registryUrls!.push(url));\n }\n });\n }\n\n if (packageFile && project.childNamed('parent')) {\n const parentPath =\n project.valueWithPath('parent.relativePath')?.trim() ?? '../pom.xml';\n result.parent = resolveParentFile(packageFile, parentPath);\n }\n\n if (project.childNamed('version')) {\n result.packageFileVersion = project.valueWithPath('version')!.trim();\n }\n\n return result;\n}\n\nexport function extractRegistries(rawContent: string): string[] {\n if (!rawContent) {\n return [];\n }\n\n const settings = parseSettings(rawContent);\n if (!settings) {\n return [];\n }\n\n const urls: string[] = [];\n\n const mirrorUrls = parseUrls(settings, 'mirrors');\n urls.push(...mirrorUrls);\n\n settings.childNamed('profiles')?.eachChild((profile) => {\n const repositoryUrls = parseUrls(profile, 'repositories');\n urls.push(...repositoryUrls);\n });\n\n // filter out duplicates\n return [...new Set(urls)];\n}\n\nfunction parseUrls(xmlNode: XmlElement, path: string): string[] {\n const children = xmlNode.descendantWithPath(path);\n const urls: string[] = [];\n if (children?.children) {\n children.eachChild((child) => {\n const url = child.valueWithPath('url');\n if (url) {\n urls.push(url);\n }\n });\n }\n return urls;\n}\n\nexport function parseSettings(raw: string): XmlDocument | null {\n let settings: XmlDocument;\n try {\n settings = new XmlDocument(raw);\n } catch {\n return null;\n }\n const { name, attr } = settings;\n if (name !== 'settings') {\n return null;\n }\n if (supportedNamespaces.includes(attr.xmlns)) {\n return settings;\n }\n return null;\n}\n\nexport function resolveParents(packages: PackageFile[]): PackageFile[] {\n const packageFileNames: string[] = [];\n const extractedPackages: Record<string, MavenInterimPackageFile> = {};\n const extractedDeps: Record<string, PackageDependency[]> = {};\n const extractedProps: Record<string, MavenProp> = {};\n const registryUrls: Record<string, Set<string>> = {};\n packages.forEach((pkg) => {\n const name = pkg.packageFile;\n packageFileNames.push(name);\n extractedPackages[name] = pkg;\n extractedDeps[name] = [];\n });\n\n // Construct package-specific prop scopes\n // and merge them in reverse order,\n // which allows inheritance/overriding.\n packageFileNames.forEach((name) => {\n registryUrls[name] = new Set();\n const propsHierarchy: Record<string, MavenProp>[] = [];\n const visitedPackages = new Set<string>();\n let pkg: MavenInterimPackageFile | null = extractedPackages[name];\n while (pkg) {\n propsHierarchy.unshift(pkg.mavenProps!);\n\n if (pkg.deps) {\n pkg.deps.forEach((dep) => {\n if (dep.registryUrls) {\n dep.registryUrls.forEach((url) => {\n registryUrls[name].add(url);\n });\n }\n });\n }\n\n if (pkg.parent && !visitedPackages.has(pkg.parent)) {\n visitedPackages.add(pkg.parent);\n pkg = extractedPackages[pkg.parent];\n } else {\n pkg = null;\n }\n }\n propsHierarchy.unshift({});\n extractedProps[name] = Object.assign.apply(null, propsHierarchy as any);\n });\n\n // Resolve registryUrls\n packageFileNames.forEach((name) => {\n const pkg = extractedPackages[name];\n pkg.deps.forEach((rawDep) => {\n const urlsSet = new Set([\n ...(rawDep.registryUrls ?? []),\n ...registryUrls[name],\n ]);\n rawDep.registryUrls = [...urlsSet];\n });\n });\n\n const rootDeps = new Set<string>();\n // Resolve placeholders\n packageFileNames.forEach((name) => {\n const pkg = extractedPackages[name];\n pkg.deps.forEach((rawDep) => {\n const dep = applyProps(rawDep, name, extractedProps[name]);\n if (dep.depType === 'parent') {\n const parentPkg = extractedPackages[pkg.parent!];\n const hasParentWithNoParent = parentPkg && !parentPkg.parent;\n const hasParentWithExternalParent =\n parentPkg && !packageFileNames.includes(parentPkg.parent!);\n if (hasParentWithNoParent || hasParentWithExternalParent) {\n rootDeps.add(dep.depName!);\n }\n }\n const sourceName = dep.propSource ?? name;\n extractedDeps[sourceName].push(dep);\n });\n });\n\n const packageFiles = packageFileNames.map((packageFile) => {\n const pkg = extractedPackages[packageFile];\n const deps = extractedDeps[packageFile];\n for (const dep of deps) {\n if (rootDeps.has(dep.depName!)) {\n dep.depType = 'parent-root';\n }\n }\n return { ...pkg, deps };\n });\n\n return packageFiles;\n}\n\nfunction cleanResult(packageFiles: MavenInterimPackageFile[]): PackageFile[] {\n packageFiles.forEach((packageFile) => {\n delete packageFile.mavenProps;\n delete packageFile.parent;\n packageFile.deps.forEach((dep) => {\n delete dep.propSource;\n //Add Registry From SuperPom\n if (dep.datasource === MavenDatasource.id) {\n dep.registryUrls!.push(MAVEN_REPO);\n }\n });\n });\n return packageFiles;\n}\n\nexport function extractExtensions(\n rawContent: string,\n packageFile: string,\n): PackageFile | null {\n if (!rawContent) {\n return null;\n }\n\n const extensions = parseExtensions(rawContent, packageFile);\n if (!extensions) {\n return null;\n }\n\n const result: MavenInterimPackageFile = {\n datasource: MavenDatasource.id,\n packageFile,\n deps: [],\n };\n\n result.deps = deepExtract(extensions);\n\n return result;\n}\n\nexport async function extractAllPackageFiles(\n config: ExtractConfig,\n packageFiles: string[],\n): Promise<PackageFile[]> {\n const packages: PackageFile[] = [];\n const additionalRegistryUrls: string[] = [];\n\n for (const packageFile of packageFiles) {\n const content = await readLocalFile(packageFile, 'utf8');\n if (!content) {\n logger.debug({ packageFile }, 'packageFile has no content');\n continue;\n }\n if (packageFile.endsWith('settings.xml')) {\n const registries = extractRegistries(content);\n if (registries) {\n logger.debug(\n { registries, packageFile },\n 'Found registryUrls in settings.xml',\n );\n additionalRegistryUrls.push(...registries);\n }\n } else if (packageFile.endsWith('.mvn/extensions.xml')) {\n const extensions = extractExtensions(content, packageFile);\n if (extensions) {\n packages.push(extensions);\n } else {\n logger.trace({ packageFile }, 'can not read extensions');\n }\n } else {\n const pkg = extractPackage(content, packageFile, config);\n if (pkg) {\n packages.push(pkg);\n } else {\n logger.trace({ packageFile }, 'can not read dependencies');\n }\n }\n }\n if (additionalRegistryUrls) {\n for (const pkgFile of packages) {\n for (const dep of pkgFile.deps) {\n if (dep.registryUrls) {\n dep.registryUrls.unshift(...additionalRegistryUrls);\n }\n }\n }\n }\n return cleanResult(resolveParents(packages));\n}\n"],"mappings":"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"}
|
|
@@ -29,7 +29,8 @@ function updateAtPosition(fileContent, upgrade, endingAnchor) {
|
|
|
29
29
|
if (version === currentValue || upgrade.sharedVariableName) {
|
|
30
30
|
const replacedPart = versionPart.replace(version, newValue);
|
|
31
31
|
return leftPart + replacedPart + restPart;
|
|
32
|
-
}
|
|
32
|
+
}
|
|
33
|
+
if (upgrade.datasource === "docker" || upgrade.datasource === "buildpacks-registry") {
|
|
33
34
|
let replacedPart = version;
|
|
34
35
|
if (currentValue) replacedPart = version.replace(currentValue, newValue);
|
|
35
36
|
if (upgrade.currentDigest && upgrade.newDigest) replacedPart = replacedPart.replace(upgrade.currentDigest, upgrade.newDigest);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","names":[],"sources":["../../../../lib/modules/manager/maven/update.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport type { ReleaseType } from 'semver';\nimport semver from 'semver';\nimport { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger/index.ts';\nimport { replaceAt } from '../../../util/string.ts';\nimport type {\n BumpPackageVersionResult,\n UpdateDependencyConfig,\n Upgrade,\n} from '../types.ts';\n\nexport function updateAtPosition(\n fileContent: string,\n upgrade: Upgrade,\n endingAnchor: string,\n): string | null {\n const { depName, newName, currentValue, newValue, fileReplacePosition } =\n upgrade;\n let leftPart = fileContent.slice(0, fileReplacePosition);\n const rightPart = fileContent.slice(fileReplacePosition);\n const versionClosePosition = rightPart.indexOf(endingAnchor);\n let restPart = rightPart.slice(versionClosePosition);\n const versionPart = rightPart.slice(0, versionClosePosition);\n const version = versionPart.trim();\n if (newName) {\n const blockStart = Math.max(\n leftPart.lastIndexOf('<parent'),\n leftPart.lastIndexOf('<dependency'),\n leftPart.lastIndexOf('<plugin'),\n leftPart.lastIndexOf('<extension'),\n );\n let leftBlock = leftPart.slice(blockStart);\n const blockEnd = Math.min(\n restPart.indexOf('</parent'),\n restPart.indexOf('</dependency'),\n restPart.indexOf('</plugin'),\n restPart.indexOf('</extension'),\n );\n let rightBlock = restPart.slice(0, blockEnd);\n const [groupId, artifactId] = depName!.split(':', 2);\n const [newGroupId, newArtifactId] = newName.split(':', 2);\n if (leftBlock.indexOf('<groupId') > 0) {\n leftBlock = updateValue(leftBlock, 'groupId', groupId, newGroupId);\n } else {\n rightBlock = updateValue(rightBlock, 'groupId', groupId, newGroupId);\n }\n if (leftBlock.indexOf('<artifactId') > 0) {\n leftBlock = updateValue(\n leftBlock,\n 'artifactId',\n artifactId,\n newArtifactId,\n );\n } else {\n rightBlock = updateValue(\n rightBlock,\n 'artifactId',\n artifactId,\n newArtifactId,\n );\n }\n leftPart = leftPart.slice(0, blockStart) + leftBlock;\n restPart = rightBlock + restPart.slice(blockEnd);\n } else if (version === newValue) {\n return fileContent;\n }\n if (version === currentValue || upgrade.sharedVariableName) {\n // TODO: validate newValue (#22198)\n const replacedPart = versionPart.replace(version, newValue!);\n return leftPart + replacedPart + restPart;\n } else if (\n upgrade.datasource === 'docker' ||\n upgrade.datasource === 'buildpacks-registry'\n ) {\n // In contrast to maven dependencies, cloud native buildpacks are not contained in specific version tags.\n // Instead they are contained in the value of the buildpack tag and we have to update it differently.\n let replacedPart = version;\n if (currentValue) {\n replacedPart = version.replace(currentValue, newValue!);\n }\n if (upgrade.currentDigest && upgrade.newDigest) {\n replacedPart = replacedPart.replace(\n upgrade.currentDigest,\n upgrade.newDigest,\n );\n }\n if (replacedPart !== version) {\n return leftPart + replacedPart + restPart;\n }\n }\n logger.debug({ depName, version, currentValue, newValue }, 'Unknown value');\n return null;\n}\n\nexport function updateDependency({\n fileContent,\n upgrade,\n}: UpdateDependencyConfig): string | null {\n const offset = fileContent.indexOf('<');\n const spaces = fileContent.slice(0, offset);\n const restContent = fileContent.slice(offset);\n const updatedContent = updateAtPosition(restContent, upgrade, '</');\n if (!updatedContent) {\n return null;\n }\n if (updatedContent === restContent) {\n return fileContent;\n }\n return `${spaces}${updatedContent}`;\n}\n\nexport function bumpPackageVersion(\n content: string,\n currentValue: string,\n bumpVersion: ReleaseType,\n): BumpPackageVersionResult {\n logger.debug(\n { bumpVersion, currentValue },\n 'Checking if we should bump pom.xml version',\n );\n let bumpedContent = content;\n\n if (!semver.valid(currentValue)) {\n logger.warn(\n { currentValue },\n 'Unable to bump pom.xml version, not a valid semver',\n );\n return { bumpedContent };\n }\n\n try {\n const project = new XmlDocument(content);\n const versionNode = project.childNamed('version')!;\n const startTagPosition = versionNode.startTagPosition!; // TODO: should not be null\n const versionPosition = content.indexOf(versionNode.val, startTagPosition);\n\n let newPomVersion: string | null = null;\n const currentPrereleaseValue = semver.prerelease(currentValue);\n if (isSnapshot(currentPrereleaseValue)) {\n // It is already a SNAPSHOT version.\n // Therefore the same qualifier (prerelease) will be used as before.\n let releaseType = bumpVersion;\n if (!bumpVersion.startsWith('pre')) {\n releaseType = `pre${bumpVersion}` as ReleaseType;\n }\n newPomVersion = semver.inc(\n currentValue,\n releaseType,\n currentPrereleaseValue!.join('.'),\n false,\n );\n } else if (currentPrereleaseValue) {\n // Some qualifier which is not a SNAPSHOT is present.\n // The expected behaviour in this case is unclear and the standard increase will be used.\n newPomVersion = semver.inc(currentValue, bumpVersion);\n } else {\n // A release version without any qualifier is present.\n // Therefore the SNAPSHOT qualifier will be added if a prerelease is requested.\n // This will do a normal increment, ignoring SNAPSHOT, if a non-prerelease bumpVersion is configured\n newPomVersion = semver.inc(currentValue, bumpVersion, 'SNAPSHOT', false);\n }\n if (!newPomVersion) {\n throw new Error('semver inc failed');\n }\n\n logger.debug({ newPomVersion });\n bumpedContent = replaceAt(\n content,\n versionPosition,\n currentValue,\n newPomVersion,\n );\n\n if (bumpedContent === content) {\n logger.debug('Version was already bumped');\n } else {\n logger.debug('pom.xml version bumped');\n }\n } catch {\n logger.warn(\n {\n content,\n currentValue,\n bumpVersion,\n },\n 'Failed to bumpVersion',\n );\n }\n return { bumpedContent };\n}\n\nfunction isSnapshot(prerelease: readonly (string | number)[] | null): boolean {\n const lastPart = prerelease?.at(-1);\n return isString(lastPart) && lastPart.endsWith('SNAPSHOT');\n}\n\nfunction updateValue(\n content: string,\n nodeName: string,\n oldValue: string,\n newValue: string,\n): string {\n const elementStart = content.indexOf(`<${nodeName}`);\n const start = content.indexOf('>', elementStart) + 1;\n const end = content.indexOf(`</${nodeName}`, start);\n const elementContent = content.slice(start, end);\n if (elementContent.trim() === oldValue) {\n return (\n content.slice(0, start) +\n elementContent.replace(oldValue, newValue) +\n content.slice(end)\n );\n }\n logger.debug({ content, nodeName, oldValue, newValue }, 'Unknown value');\n return content;\n}\n"],"mappings":";;;;;;AAYA,SAAgB,iBACd,aACA,SACA,cACe;CACf,MAAM,EAAE,SAAS,SAAS,cAAc,UAAU,wBAChD;CACF,IAAI,WAAW,YAAY,MAAM,GAAG,mBAAmB;CACvD,MAAM,YAAY,YAAY,MAAM,mBAAmB;CACvD,MAAM,uBAAuB,UAAU,QAAQ,YAAY;CAC3D,IAAI,WAAW,UAAU,MAAM,oBAAoB;CACnD,MAAM,cAAc,UAAU,MAAM,GAAG,oBAAoB;CAC3D,MAAM,UAAU,YAAY,KAAK;CACjC,IAAI,SAAS;EACX,MAAM,aAAa,KAAK,IACtB,SAAS,YAAY,SAAS,GAC9B,SAAS,YAAY,aAAa,GAClC,SAAS,YAAY,SAAS,GAC9B,SAAS,YAAY,YAAY,CACnC;EACA,IAAI,YAAY,SAAS,MAAM,UAAU;EACzC,MAAM,WAAW,KAAK,IACpB,SAAS,QAAQ,UAAU,GAC3B,SAAS,QAAQ,cAAc,GAC/B,SAAS,QAAQ,UAAU,GAC3B,SAAS,QAAQ,aAAa,CAChC;EACA,IAAI,aAAa,SAAS,MAAM,GAAG,QAAQ;EAC3C,MAAM,CAAC,SAAS,cAAc,QAAS,MAAM,KAAK,CAAC;EACnD,MAAM,CAAC,YAAY,iBAAiB,QAAQ,MAAM,KAAK,CAAC;EACxD,IAAI,UAAU,QAAQ,UAAU,IAAI,GAClC,YAAY,YAAY,WAAW,WAAW,SAAS,UAAU;OAEjE,aAAa,YAAY,YAAY,WAAW,SAAS,UAAU;EAErE,IAAI,UAAU,QAAQ,aAAa,IAAI,GACrC,YAAY,YACV,WACA,cACA,YACA,aACF;OAEA,aAAa,YACX,YACA,cACA,YACA,aACF;EAEF,WAAW,SAAS,MAAM,GAAG,UAAU,IAAI;EAC3C,WAAW,aAAa,SAAS,MAAM,QAAQ;CACjD,OAAO,IAAI,YAAY,UACrB,OAAO;CAET,IAAI,YAAY,gBAAgB,QAAQ,oBAAoB;EAE1D,MAAM,eAAe,YAAY,QAAQ,SAAS,QAAS;EAC3D,OAAO,WAAW,eAAe;CACnC,OAAO,IACL,QAAQ,eAAe,YACvB,QAAQ,eAAe,uBACvB;EAGA,IAAI,eAAe;EACnB,IAAI,cACF,eAAe,QAAQ,QAAQ,cAAc,QAAS;EAExD,IAAI,QAAQ,iBAAiB,QAAQ,WACnC,eAAe,aAAa,QAC1B,QAAQ,eACR,QAAQ,SACV;EAEF,IAAI,iBAAiB,SACnB,OAAO,WAAW,eAAe;CAErC;CACA,OAAO,MAAM;EAAE;EAAS;EAAS;EAAc;CAAS,GAAG,eAAe;CAC1E,OAAO;AACT;AAEA,SAAgB,iBAAiB,EAC/B,aACA,WACwC;CACxC,MAAM,SAAS,YAAY,QAAQ,GAAG;CACtC,MAAM,SAAS,YAAY,MAAM,GAAG,MAAM;CAC1C,MAAM,cAAc,YAAY,MAAM,MAAM;CAC5C,MAAM,iBAAiB,iBAAiB,aAAa,SAAS,IAAI;CAClE,IAAI,CAAC,gBACH,OAAO;CAET,IAAI,mBAAmB,aACrB,OAAO;CAET,OAAO,GAAG,SAAS;AACrB;AAEA,SAAgB,mBACd,SACA,cACA,aAC0B;CAC1B,OAAO,MACL;EAAE;EAAa;CAAa,GAC5B,4CACF;CACA,IAAI,gBAAgB;CAEpB,IAAI,CAAC,OAAO,MAAM,YAAY,GAAG;EAC/B,OAAO,KACL,EAAE,aAAa,GACf,oDACF;EACA,OAAO,EAAE,cAAc;CACzB;CAEA,IAAI;EAEF,MAAM,cAAc,IADA,YAAY,OACN,CAAC,CAAC,WAAW,SAAS;EAChD,MAAM,mBAAmB,YAAY;EACrC,MAAM,kBAAkB,QAAQ,QAAQ,YAAY,KAAK,gBAAgB;EAEzE,IAAI,gBAA+B;EACnC,MAAM,yBAAyB,OAAO,WAAW,YAAY;EAC7D,IAAI,WAAW,sBAAsB,GAAG;GAGtC,IAAI,cAAc;GAClB,IAAI,CAAC,YAAY,WAAW,KAAK,GAC/B,cAAc,MAAM;GAEtB,gBAAgB,OAAO,IACrB,cACA,aACA,uBAAwB,KAAK,GAAG,GAChC,KACF;EACF,OAAO,IAAI,wBAGT,gBAAgB,OAAO,IAAI,cAAc,WAAW;OAKpD,gBAAgB,OAAO,IAAI,cAAc,aAAa,YAAY,KAAK;EAEzE,IAAI,CAAC,eACH,MAAM,IAAI,MAAM,mBAAmB;EAGrC,OAAO,MAAM,EAAE,cAAc,CAAC;EAC9B,gBAAgB,UACd,SACA,iBACA,cACA,aACF;EAEA,IAAI,kBAAkB,SACpB,OAAO,MAAM,4BAA4B;OAEzC,OAAO,MAAM,wBAAwB;CAEzC,QAAQ;EACN,OAAO,KACL;GACE;GACA;GACA;EACF,GACA,uBACF;CACF;CACA,OAAO,EAAE,cAAc;AACzB;AAEA,SAAS,WAAW,YAA0D;CAC5E,MAAM,WAAW,YAAY,GAAG,EAAE;CAClC,OAAO,SAAS,QAAQ,KAAK,SAAS,SAAS,UAAU;AAC3D;AAEA,SAAS,YACP,SACA,UACA,UACA,UACQ;CACR,MAAM,eAAe,QAAQ,QAAQ,IAAI,UAAU;CACnD,MAAM,QAAQ,QAAQ,QAAQ,KAAK,YAAY,IAAI;CACnD,MAAM,MAAM,QAAQ,QAAQ,KAAK,YAAY,KAAK;CAClD,MAAM,iBAAiB,QAAQ,MAAM,OAAO,GAAG;CAC/C,IAAI,eAAe,KAAK,MAAM,UAC5B,OACE,QAAQ,MAAM,GAAG,KAAK,IACtB,eAAe,QAAQ,UAAU,QAAQ,IACzC,QAAQ,MAAM,GAAG;CAGrB,OAAO,MAAM;EAAE;EAAS;EAAU;EAAU;CAAS,GAAG,eAAe;CACvE,OAAO;AACT"}
|
|
1
|
+
{"version":3,"file":"update.js","names":[],"sources":["../../../../lib/modules/manager/maven/update.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport type { ReleaseType } from 'semver';\nimport semver from 'semver';\nimport { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger/index.ts';\nimport { replaceAt } from '../../../util/string.ts';\nimport type {\n BumpPackageVersionResult,\n UpdateDependencyConfig,\n Upgrade,\n} from '../types.ts';\n\nexport function updateAtPosition(\n fileContent: string,\n upgrade: Upgrade,\n endingAnchor: string,\n): string | null {\n const { depName, newName, currentValue, newValue, fileReplacePosition } =\n upgrade;\n let leftPart = fileContent.slice(0, fileReplacePosition);\n const rightPart = fileContent.slice(fileReplacePosition);\n const versionClosePosition = rightPart.indexOf(endingAnchor);\n let restPart = rightPart.slice(versionClosePosition);\n const versionPart = rightPart.slice(0, versionClosePosition);\n const version = versionPart.trim();\n if (newName) {\n const blockStart = Math.max(\n leftPart.lastIndexOf('<parent'),\n leftPart.lastIndexOf('<dependency'),\n leftPart.lastIndexOf('<plugin'),\n leftPart.lastIndexOf('<extension'),\n );\n let leftBlock = leftPart.slice(blockStart);\n const blockEnd = Math.min(\n restPart.indexOf('</parent'),\n restPart.indexOf('</dependency'),\n restPart.indexOf('</plugin'),\n restPart.indexOf('</extension'),\n );\n let rightBlock = restPart.slice(0, blockEnd);\n const [groupId, artifactId] = depName!.split(':', 2);\n const [newGroupId, newArtifactId] = newName.split(':', 2);\n if (leftBlock.indexOf('<groupId') > 0) {\n leftBlock = updateValue(leftBlock, 'groupId', groupId, newGroupId);\n } else {\n rightBlock = updateValue(rightBlock, 'groupId', groupId, newGroupId);\n }\n if (leftBlock.indexOf('<artifactId') > 0) {\n leftBlock = updateValue(\n leftBlock,\n 'artifactId',\n artifactId,\n newArtifactId,\n );\n } else {\n rightBlock = updateValue(\n rightBlock,\n 'artifactId',\n artifactId,\n newArtifactId,\n );\n }\n leftPart = leftPart.slice(0, blockStart) + leftBlock;\n restPart = rightBlock + restPart.slice(blockEnd);\n } else if (version === newValue) {\n return fileContent;\n }\n if (version === currentValue || upgrade.sharedVariableName) {\n // TODO: validate newValue (#22198)\n const replacedPart = versionPart.replace(version, newValue!);\n return leftPart + replacedPart + restPart;\n }\n if (\n upgrade.datasource === 'docker' ||\n upgrade.datasource === 'buildpacks-registry'\n ) {\n // In contrast to maven dependencies, cloud native buildpacks are not contained in specific version tags.\n // Instead they are contained in the value of the buildpack tag and we have to update it differently.\n let replacedPart = version;\n if (currentValue) {\n replacedPart = version.replace(currentValue, newValue!);\n }\n if (upgrade.currentDigest && upgrade.newDigest) {\n replacedPart = replacedPart.replace(\n upgrade.currentDigest,\n upgrade.newDigest,\n );\n }\n if (replacedPart !== version) {\n return leftPart + replacedPart + restPart;\n }\n }\n logger.debug({ depName, version, currentValue, newValue }, 'Unknown value');\n return null;\n}\n\nexport function updateDependency({\n fileContent,\n upgrade,\n}: UpdateDependencyConfig): string | null {\n const offset = fileContent.indexOf('<');\n const spaces = fileContent.slice(0, offset);\n const restContent = fileContent.slice(offset);\n const updatedContent = updateAtPosition(restContent, upgrade, '</');\n if (!updatedContent) {\n return null;\n }\n if (updatedContent === restContent) {\n return fileContent;\n }\n return `${spaces}${updatedContent}`;\n}\n\nexport function bumpPackageVersion(\n content: string,\n currentValue: string,\n bumpVersion: ReleaseType,\n): BumpPackageVersionResult {\n logger.debug(\n { bumpVersion, currentValue },\n 'Checking if we should bump pom.xml version',\n );\n let bumpedContent = content;\n\n if (!semver.valid(currentValue)) {\n logger.warn(\n { currentValue },\n 'Unable to bump pom.xml version, not a valid semver',\n );\n return { bumpedContent };\n }\n\n try {\n const project = new XmlDocument(content);\n const versionNode = project.childNamed('version')!;\n const startTagPosition = versionNode.startTagPosition!; // TODO: should not be null\n const versionPosition = content.indexOf(versionNode.val, startTagPosition);\n\n let newPomVersion: string | null = null;\n const currentPrereleaseValue = semver.prerelease(currentValue);\n if (isSnapshot(currentPrereleaseValue)) {\n // It is already a SNAPSHOT version.\n // Therefore the same qualifier (prerelease) will be used as before.\n let releaseType = bumpVersion;\n if (!bumpVersion.startsWith('pre')) {\n releaseType = `pre${bumpVersion}` as ReleaseType;\n }\n newPomVersion = semver.inc(\n currentValue,\n releaseType,\n currentPrereleaseValue!.join('.'),\n false,\n );\n } else if (currentPrereleaseValue) {\n // Some qualifier which is not a SNAPSHOT is present.\n // The expected behaviour in this case is unclear and the standard increase will be used.\n newPomVersion = semver.inc(currentValue, bumpVersion);\n } else {\n // A release version without any qualifier is present.\n // Therefore the SNAPSHOT qualifier will be added if a prerelease is requested.\n // This will do a normal increment, ignoring SNAPSHOT, if a non-prerelease bumpVersion is configured\n newPomVersion = semver.inc(currentValue, bumpVersion, 'SNAPSHOT', false);\n }\n if (!newPomVersion) {\n throw new Error('semver inc failed');\n }\n\n logger.debug({ newPomVersion });\n bumpedContent = replaceAt(\n content,\n versionPosition,\n currentValue,\n newPomVersion,\n );\n\n if (bumpedContent === content) {\n logger.debug('Version was already bumped');\n } else {\n logger.debug('pom.xml version bumped');\n }\n } catch {\n logger.warn(\n {\n content,\n currentValue,\n bumpVersion,\n },\n 'Failed to bumpVersion',\n );\n }\n return { bumpedContent };\n}\n\nfunction isSnapshot(prerelease: readonly (string | number)[] | null): boolean {\n const lastPart = prerelease?.at(-1);\n return isString(lastPart) && lastPart.endsWith('SNAPSHOT');\n}\n\nfunction updateValue(\n content: string,\n nodeName: string,\n oldValue: string,\n newValue: string,\n): string {\n const elementStart = content.indexOf(`<${nodeName}`);\n const start = content.indexOf('>', elementStart) + 1;\n const end = content.indexOf(`</${nodeName}`, start);\n const elementContent = content.slice(start, end);\n if (elementContent.trim() === oldValue) {\n return (\n content.slice(0, start) +\n elementContent.replace(oldValue, newValue) +\n content.slice(end)\n );\n }\n logger.debug({ content, nodeName, oldValue, newValue }, 'Unknown value');\n return content;\n}\n"],"mappings":";;;;;;AAYA,SAAgB,iBACd,aACA,SACA,cACe;CACf,MAAM,EAAE,SAAS,SAAS,cAAc,UAAU,wBAChD;CACF,IAAI,WAAW,YAAY,MAAM,GAAG,mBAAmB;CACvD,MAAM,YAAY,YAAY,MAAM,mBAAmB;CACvD,MAAM,uBAAuB,UAAU,QAAQ,YAAY;CAC3D,IAAI,WAAW,UAAU,MAAM,oBAAoB;CACnD,MAAM,cAAc,UAAU,MAAM,GAAG,oBAAoB;CAC3D,MAAM,UAAU,YAAY,KAAK;CACjC,IAAI,SAAS;EACX,MAAM,aAAa,KAAK,IACtB,SAAS,YAAY,SAAS,GAC9B,SAAS,YAAY,aAAa,GAClC,SAAS,YAAY,SAAS,GAC9B,SAAS,YAAY,YAAY,CACnC;EACA,IAAI,YAAY,SAAS,MAAM,UAAU;EACzC,MAAM,WAAW,KAAK,IACpB,SAAS,QAAQ,UAAU,GAC3B,SAAS,QAAQ,cAAc,GAC/B,SAAS,QAAQ,UAAU,GAC3B,SAAS,QAAQ,aAAa,CAChC;EACA,IAAI,aAAa,SAAS,MAAM,GAAG,QAAQ;EAC3C,MAAM,CAAC,SAAS,cAAc,QAAS,MAAM,KAAK,CAAC;EACnD,MAAM,CAAC,YAAY,iBAAiB,QAAQ,MAAM,KAAK,CAAC;EACxD,IAAI,UAAU,QAAQ,UAAU,IAAI,GAClC,YAAY,YAAY,WAAW,WAAW,SAAS,UAAU;OAEjE,aAAa,YAAY,YAAY,WAAW,SAAS,UAAU;EAErE,IAAI,UAAU,QAAQ,aAAa,IAAI,GACrC,YAAY,YACV,WACA,cACA,YACA,aACF;OAEA,aAAa,YACX,YACA,cACA,YACA,aACF;EAEF,WAAW,SAAS,MAAM,GAAG,UAAU,IAAI;EAC3C,WAAW,aAAa,SAAS,MAAM,QAAQ;CACjD,OAAO,IAAI,YAAY,UACrB,OAAO;CAET,IAAI,YAAY,gBAAgB,QAAQ,oBAAoB;EAE1D,MAAM,eAAe,YAAY,QAAQ,SAAS,QAAS;EAC3D,OAAO,WAAW,eAAe;CACnC;CACA,IACE,QAAQ,eAAe,YACvB,QAAQ,eAAe,uBACvB;EAGA,IAAI,eAAe;EACnB,IAAI,cACF,eAAe,QAAQ,QAAQ,cAAc,QAAS;EAExD,IAAI,QAAQ,iBAAiB,QAAQ,WACnC,eAAe,aAAa,QAC1B,QAAQ,eACR,QAAQ,SACV;EAEF,IAAI,iBAAiB,SACnB,OAAO,WAAW,eAAe;CAErC;CACA,OAAO,MAAM;EAAE;EAAS;EAAS;EAAc;CAAS,GAAG,eAAe;CAC1E,OAAO;AACT;AAEA,SAAgB,iBAAiB,EAC/B,aACA,WACwC;CACxC,MAAM,SAAS,YAAY,QAAQ,GAAG;CACtC,MAAM,SAAS,YAAY,MAAM,GAAG,MAAM;CAC1C,MAAM,cAAc,YAAY,MAAM,MAAM;CAC5C,MAAM,iBAAiB,iBAAiB,aAAa,SAAS,IAAI;CAClE,IAAI,CAAC,gBACH,OAAO;CAET,IAAI,mBAAmB,aACrB,OAAO;CAET,OAAO,GAAG,SAAS;AACrB;AAEA,SAAgB,mBACd,SACA,cACA,aAC0B;CAC1B,OAAO,MACL;EAAE;EAAa;CAAa,GAC5B,4CACF;CACA,IAAI,gBAAgB;CAEpB,IAAI,CAAC,OAAO,MAAM,YAAY,GAAG;EAC/B,OAAO,KACL,EAAE,aAAa,GACf,oDACF;EACA,OAAO,EAAE,cAAc;CACzB;CAEA,IAAI;EAEF,MAAM,cAAc,IADA,YAAY,OACN,CAAC,CAAC,WAAW,SAAS;EAChD,MAAM,mBAAmB,YAAY;EACrC,MAAM,kBAAkB,QAAQ,QAAQ,YAAY,KAAK,gBAAgB;EAEzE,IAAI,gBAA+B;EACnC,MAAM,yBAAyB,OAAO,WAAW,YAAY;EAC7D,IAAI,WAAW,sBAAsB,GAAG;GAGtC,IAAI,cAAc;GAClB,IAAI,CAAC,YAAY,WAAW,KAAK,GAC/B,cAAc,MAAM;GAEtB,gBAAgB,OAAO,IACrB,cACA,aACA,uBAAwB,KAAK,GAAG,GAChC,KACF;EACF,OAAO,IAAI,wBAGT,gBAAgB,OAAO,IAAI,cAAc,WAAW;OAKpD,gBAAgB,OAAO,IAAI,cAAc,aAAa,YAAY,KAAK;EAEzE,IAAI,CAAC,eACH,MAAM,IAAI,MAAM,mBAAmB;EAGrC,OAAO,MAAM,EAAE,cAAc,CAAC;EAC9B,gBAAgB,UACd,SACA,iBACA,cACA,aACF;EAEA,IAAI,kBAAkB,SACpB,OAAO,MAAM,4BAA4B;OAEzC,OAAO,MAAM,wBAAwB;CAEzC,QAAQ;EACN,OAAO,KACL;GACE;GACA;GACA;EACF,GACA,uBACF;CACF;CACA,OAAO,EAAE,cAAc;AACzB;AAEA,SAAS,WAAW,YAA0D;CAC5E,MAAM,WAAW,YAAY,GAAG,EAAE;CAClC,OAAO,SAAS,QAAQ,KAAK,SAAS,SAAS,UAAU;AAC3D;AAEA,SAAS,YACP,SACA,UACA,UACA,UACQ;CACR,MAAM,eAAe,QAAQ,QAAQ,IAAI,UAAU;CACnD,MAAM,QAAQ,QAAQ,QAAQ,KAAK,YAAY,IAAI;CACnD,MAAM,MAAM,QAAQ,QAAQ,KAAK,YAAY,KAAK;CAClD,MAAM,iBAAiB,QAAQ,MAAM,OAAO,GAAG;CAC/C,IAAI,eAAe,KAAK,MAAM,UAC5B,OACE,QAAQ,MAAM,GAAG,KAAK,IACtB,eAAe,QAAQ,UAAU,QAAQ,IACzC,QAAQ,MAAM,GAAG;CAGrB,OAAO,MAAM;EAAE;EAAS;EAAU;EAAU;CAAS,GAAG,eAAe;CACvE,OAAO;AACT"}
|
|
@@ -4,13 +4,11 @@ import { MiseFile } from "./schema.js";
|
|
|
4
4
|
function parseTomlFile(content, packageFile) {
|
|
5
5
|
const res = MiseFile.safeParse(content);
|
|
6
6
|
if (res.success) return res.data;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
return null;
|
|
13
|
-
}
|
|
7
|
+
logger.debug({
|
|
8
|
+
err: res.error,
|
|
9
|
+
packageFile
|
|
10
|
+
}, "Error parsing Mise file.");
|
|
11
|
+
return null;
|
|
14
12
|
}
|
|
15
13
|
//#endregion
|
|
16
14
|
export { parseTomlFile };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../../../lib/modules/manager/mise/utils.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { MiseFile } from './schema.ts';\n\nexport function parseTomlFile(\n content: string,\n packageFile: string,\n): MiseFile | null {\n const res = MiseFile.safeParse(content);\n if (res.success) {\n return res.data;\n }
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../../../lib/modules/manager/mise/utils.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { MiseFile } from './schema.ts';\n\nexport function parseTomlFile(\n content: string,\n packageFile: string,\n): MiseFile | null {\n const res = MiseFile.safeParse(content);\n if (res.success) {\n return res.data;\n }\n logger.debug({ err: res.error, packageFile }, 'Error parsing Mise file.');\n return null;\n}\n"],"mappings":";;;AAGA,SAAgB,cACd,SACA,aACiB;CACjB,MAAM,MAAM,SAAS,UAAU,OAAO;CACtC,IAAI,IAAI,SACN,OAAO,IAAI;CAEb,OAAO,MAAM;EAAE,KAAK,IAAI;EAAO;CAAY,GAAG,0BAA0B;CACxE,OAAO;AACT"}
|
|
@@ -12,7 +12,7 @@ function extractOverrideDepsRec(parents, child) {
|
|
|
12
12
|
const deps = [];
|
|
13
13
|
if (!child || isEmptyObject(child)) return deps;
|
|
14
14
|
for (const [overrideName, versionValue] of Object.entries(child)) if (isString(versionValue)) {
|
|
15
|
-
const currDepName = overrideName === "." ? parents
|
|
15
|
+
const currDepName = overrideName === "." ? parents.at(-1) : overrideName;
|
|
16
16
|
const dep = {
|
|
17
17
|
depName: currDepName,
|
|
18
18
|
depType: "overrides",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overrides.js","names":[],"sources":["../../../../../../lib/modules/manager/npm/extract/common/overrides.ts"],"sourcesContent":["import { isEmptyObject, isString } from '@sindresorhus/is';\nimport type { PackageDependency } from '../../../types.ts';\nimport type { NpmManagerData } from '../../types.ts';\nimport { extractDependency } from './dependency.ts';\nimport { setNodeCommitTopic } from './node.ts';\n\n/**\n * Used when there is a json object as a value in overrides block.\n * @param parents\n * @param child\n * @returns PackageDependency array\n */\nexport function extractOverrideDepsRec(\n parents: string[],\n child: NpmManagerData,\n): PackageDependency[] {\n const deps: PackageDependency[] = [];\n if (!child || isEmptyObject(child)) {\n return deps;\n }\n for (const [overrideName, versionValue] of Object.entries(child)) {\n if (isString(versionValue)) {\n // special handling for \".\" override dependency name\n // \".\" means the constraint is applied to the parent dep\n const currDepName
|
|
1
|
+
{"version":3,"file":"overrides.js","names":[],"sources":["../../../../../../lib/modules/manager/npm/extract/common/overrides.ts"],"sourcesContent":["import { isEmptyObject, isString } from '@sindresorhus/is';\nimport type { PackageDependency } from '../../../types.ts';\nimport type { NpmManagerData } from '../../types.ts';\nimport { extractDependency } from './dependency.ts';\nimport { setNodeCommitTopic } from './node.ts';\n\n/**\n * Used when there is a json object as a value in overrides block.\n * @param parents\n * @param child\n * @returns PackageDependency array\n */\nexport function extractOverrideDepsRec(\n parents: string[],\n child: NpmManagerData,\n): PackageDependency[] {\n const deps: PackageDependency[] = [];\n if (!child || isEmptyObject(child)) {\n return deps;\n }\n for (const [overrideName, versionValue] of Object.entries(child)) {\n if (isString(versionValue)) {\n // special handling for \".\" override dependency name\n // \".\" means the constraint is applied to the parent dep\n const currDepName = overrideName === '.' ? parents.at(-1)! : overrideName;\n const dep: PackageDependency<NpmManagerData> = {\n depName: currDepName,\n depType: 'overrides',\n managerData: { parents: parents.slice() }, // set parents for dependency\n };\n setNodeCommitTopic(dep);\n deps.push({\n ...dep,\n ...extractDependency('overrides', currDepName, versionValue),\n });\n } else {\n // versionValue is an object, run recursively.\n parents.push(overrideName);\n const depsOfObject = extractOverrideDepsRec(parents, versionValue);\n deps.push(...depsOfObject);\n }\n }\n parents.pop();\n return deps;\n}\n"],"mappings":";;;;;;;;;;AAYA,SAAgB,uBACd,SACA,OACqB;CACrB,MAAM,OAA4B,CAAC;CACnC,IAAI,CAAC,SAAS,cAAc,KAAK,GAC/B,OAAO;CAET,KAAK,MAAM,CAAC,cAAc,iBAAiB,OAAO,QAAQ,KAAK,GAC7D,IAAI,SAAS,YAAY,GAAG;EAG1B,MAAM,cAAc,iBAAiB,MAAM,QAAQ,GAAG,EAAE,IAAK;EAC7D,MAAM,MAAyC;GAC7C,SAAS;GACT,SAAS;GACT,aAAa,EAAE,SAAS,QAAQ,MAAM,EAAE;EAC1C;EACA,mBAAmB,GAAG;EACtB,KAAK,KAAK;GACR,GAAG;GACH,GAAG,kBAAkB,aAAa,aAAa,YAAY;EAC7D,CAAC;CACH,OAAO;EAEL,QAAQ,KAAK,YAAY;EACzB,MAAM,eAAe,uBAAuB,SAAS,YAAY;EACjE,KAAK,KAAK,GAAG,YAAY;CAC3B;CAEF,QAAQ,IAAI;CACZ,OAAO;AACT"}
|
|
@@ -82,7 +82,7 @@ function getYarnVersionFromLock(lockfile) {
|
|
|
82
82
|
if (lockfileVersion && lockfileVersion >= 12) return ">=4.0.0";
|
|
83
83
|
if (lockfileVersion && lockfileVersion >= 10) return "^4.0.0";
|
|
84
84
|
if (lockfileVersion && lockfileVersion >= 8) return "^3.0.0";
|
|
85
|
-
|
|
85
|
+
if (lockfileVersion && lockfileVersion >= 6) return "^2.2.0";
|
|
86
86
|
return "^2.0.0";
|
|
87
87
|
}
|
|
88
88
|
async function extractYarnCatalogs(catalogs, packageFile, hasPackageManager) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yarn.js","names":[],"sources":["../../../../../lib/modules/manager/npm/extract/yarn.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { miscUtils, structUtils } from '@yarnpkg/core';\nimport { parseSyml } from '@yarnpkg/parsers';\nimport { logger } from '../../../../logger/index.ts';\nimport {\n getSiblingFileName,\n localPathExists,\n readLocalFile,\n} from '../../../../util/fs/index.ts';\nimport type { PackageFileContent } from '../../types.ts';\nimport type { YarnCatalogs } from '../schema.ts';\nimport type { NpmManagerData } from '../types.ts';\nimport { extractCatalogDeps } from './common/catalogs.ts';\nimport type { Catalog, LockFile } from './types.ts';\n\nexport async function getYarnLock(filePath: string): Promise<LockFile> {\n // TODO #22198\n const yarnLockRaw = (await readLocalFile(filePath, 'utf8'))!;\n try {\n const parsed = parseSyml(yarnLockRaw);\n const lockedVersions: Record<string, string> = {};\n let lockfileVersion: number | undefined;\n\n for (const [key, val] of Object.entries(parsed)) {\n if (key === '__metadata') {\n // yarn 2\n lockfileVersion = parseInt(val.cacheKey, 10);\n logger.once.debug(\n `yarn.lock ${filePath} has __metadata.cacheKey=${lockfileVersion}`,\n );\n } else {\n for (const entry of key.split(', ')) {\n try {\n const { scope, name, range } = structUtils.parseDescriptor(entry);\n const packageName = scope ? `@${scope}/${name}` : name;\n const { selector } = structUtils.parseRange(range);\n\n logger.trace({ entry, version: val.version });\n lockedVersions[`${packageName}@${selector}`] = parsed[key].version;\n } catch (err) {\n logger.debug(\n { entry, err },\n 'Invalid descriptor or range found in yarn.lock',\n );\n }\n }\n }\n }\n const isYarn1 = !('__metadata' in parsed);\n if (isYarn1) {\n logger.once.debug(\n `yarn.lock ${filePath} is has no __metadata so is yarn 1`,\n );\n } else {\n logger.once.debug(\n `yarn.lock ${filePath} is has __metadata so is yarn 2+`,\n );\n }\n return {\n isYarn1,\n lockfileVersion,\n lockedVersions,\n };\n } catch (err) {\n logger.debug({ filePath, err }, 'Warning: Exception parsing yarn.lock');\n return { isYarn1: true, lockedVersions: {} };\n }\n}\n\nexport function getZeroInstallPaths(yarnrcYml: string): string[] {\n // TODO: fix type #22198\n let conf: any;\n try {\n conf = parseSyml(yarnrcYml);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.warn({ err }, 'Error parsing .yarnrc.yml');\n }\n const paths = [\n conf?.cacheFolder ?? './.yarn/cache',\n '.pnp.cjs',\n '.pnp.js',\n '.pnp.loader.mjs',\n ];\n if (\n conf &&\n miscUtils.tryParseOptionalBoolean(conf.pnpEnableInlining) === false\n ) {\n paths.push(conf.pnpDataPath ?? './.pnp.data.json');\n }\n return paths;\n}\n\nexport async function isZeroInstall(yarnrcYmlPath: string): Promise<boolean> {\n const yarnrcYml = await readLocalFile(yarnrcYmlPath, 'utf8');\n // v8 ignore else -- TODO: add test #40625\n if (isString(yarnrcYml)) {\n const paths = getZeroInstallPaths(yarnrcYml);\n for (const p of paths) {\n if (await localPathExists(getSiblingFileName(yarnrcYmlPath, p))) {\n logger.debug(`Detected Yarn zero-install in ${p}`);\n return true;\n }\n }\n }\n return false;\n}\n\nexport function getYarnVersionFromLock(lockfile: LockFile): string {\n const { lockfileVersion, isYarn1 } = lockfile;\n if (isYarn1) {\n return '^1.22.18';\n }\n if (lockfileVersion && lockfileVersion >= 12) {\n // This will probably be v5\n return '>=4.0.0';\n }\n if (lockfileVersion && lockfileVersion >= 10) {\n return '^4.0.0';\n }\n if (lockfileVersion && lockfileVersion >= 8) {\n // https://github.com/yarnpkg/berry/commit/9bcd27ae34aee77a567dd104947407532fa179b3\n return '^3.0.0';\n }
|
|
1
|
+
{"version":3,"file":"yarn.js","names":[],"sources":["../../../../../lib/modules/manager/npm/extract/yarn.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { miscUtils, structUtils } from '@yarnpkg/core';\nimport { parseSyml } from '@yarnpkg/parsers';\nimport { logger } from '../../../../logger/index.ts';\nimport {\n getSiblingFileName,\n localPathExists,\n readLocalFile,\n} from '../../../../util/fs/index.ts';\nimport type { PackageFileContent } from '../../types.ts';\nimport type { YarnCatalogs } from '../schema.ts';\nimport type { NpmManagerData } from '../types.ts';\nimport { extractCatalogDeps } from './common/catalogs.ts';\nimport type { Catalog, LockFile } from './types.ts';\n\nexport async function getYarnLock(filePath: string): Promise<LockFile> {\n // TODO #22198\n const yarnLockRaw = (await readLocalFile(filePath, 'utf8'))!;\n try {\n const parsed = parseSyml(yarnLockRaw);\n const lockedVersions: Record<string, string> = {};\n let lockfileVersion: number | undefined;\n\n for (const [key, val] of Object.entries(parsed)) {\n if (key === '__metadata') {\n // yarn 2\n lockfileVersion = parseInt(val.cacheKey, 10);\n logger.once.debug(\n `yarn.lock ${filePath} has __metadata.cacheKey=${lockfileVersion}`,\n );\n } else {\n for (const entry of key.split(', ')) {\n try {\n const { scope, name, range } = structUtils.parseDescriptor(entry);\n const packageName = scope ? `@${scope}/${name}` : name;\n const { selector } = structUtils.parseRange(range);\n\n logger.trace({ entry, version: val.version });\n lockedVersions[`${packageName}@${selector}`] = parsed[key].version;\n } catch (err) {\n logger.debug(\n { entry, err },\n 'Invalid descriptor or range found in yarn.lock',\n );\n }\n }\n }\n }\n const isYarn1 = !('__metadata' in parsed);\n if (isYarn1) {\n logger.once.debug(\n `yarn.lock ${filePath} is has no __metadata so is yarn 1`,\n );\n } else {\n logger.once.debug(\n `yarn.lock ${filePath} is has __metadata so is yarn 2+`,\n );\n }\n return {\n isYarn1,\n lockfileVersion,\n lockedVersions,\n };\n } catch (err) {\n logger.debug({ filePath, err }, 'Warning: Exception parsing yarn.lock');\n return { isYarn1: true, lockedVersions: {} };\n }\n}\n\nexport function getZeroInstallPaths(yarnrcYml: string): string[] {\n // TODO: fix type #22198\n let conf: any;\n try {\n conf = parseSyml(yarnrcYml);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.warn({ err }, 'Error parsing .yarnrc.yml');\n }\n const paths = [\n conf?.cacheFolder ?? './.yarn/cache',\n '.pnp.cjs',\n '.pnp.js',\n '.pnp.loader.mjs',\n ];\n if (\n conf &&\n miscUtils.tryParseOptionalBoolean(conf.pnpEnableInlining) === false\n ) {\n paths.push(conf.pnpDataPath ?? './.pnp.data.json');\n }\n return paths;\n}\n\nexport async function isZeroInstall(yarnrcYmlPath: string): Promise<boolean> {\n const yarnrcYml = await readLocalFile(yarnrcYmlPath, 'utf8');\n // v8 ignore else -- TODO: add test #40625\n if (isString(yarnrcYml)) {\n const paths = getZeroInstallPaths(yarnrcYml);\n for (const p of paths) {\n if (await localPathExists(getSiblingFileName(yarnrcYmlPath, p))) {\n logger.debug(`Detected Yarn zero-install in ${p}`);\n return true;\n }\n }\n }\n return false;\n}\n\nexport function getYarnVersionFromLock(lockfile: LockFile): string {\n const { lockfileVersion, isYarn1 } = lockfile;\n if (isYarn1) {\n return '^1.22.18';\n }\n if (lockfileVersion && lockfileVersion >= 12) {\n // This will probably be v5\n return '>=4.0.0';\n }\n if (lockfileVersion && lockfileVersion >= 10) {\n return '^4.0.0';\n }\n if (lockfileVersion && lockfileVersion >= 8) {\n // https://github.com/yarnpkg/berry/commit/9bcd27ae34aee77a567dd104947407532fa179b3\n return '^3.0.0';\n }\n if (lockfileVersion && lockfileVersion >= 6) {\n // https://github.com/yarnpkg/berry/commit/f753790380cbda5b55d028ea84b199445129f9ba\n return '^2.2.0';\n }\n\n return '^2.0.0';\n}\n\nexport async function extractYarnCatalogs(\n catalogs: YarnCatalogs,\n packageFile: string,\n hasPackageManager: boolean,\n): Promise<PackageFileContent<NpmManagerData>> {\n logger.trace(`yarn.extractYarnCatalogs(${packageFile})`);\n\n const yarnCatalogs = yarnCatalogsToArray(catalogs);\n\n const deps = extractCatalogDeps(yarnCatalogs, 'yarn');\n\n let yarnLock: string | undefined;\n const filePath = getSiblingFileName(packageFile, 'yarn.lock');\n\n if (await localPathExists(filePath)) {\n yarnLock = filePath;\n }\n\n return {\n deps,\n managerData: {\n yarnLock,\n hasPackageManager,\n },\n };\n}\n\nfunction yarnCatalogsToArray({\n catalog: defaultCatalogDeps,\n catalogs: namedCatalogs,\n}: YarnCatalogs): Catalog[] {\n const result: Catalog[] = [];\n\n if (defaultCatalogDeps !== undefined) {\n result.push({ name: 'default', dependencies: defaultCatalogDeps });\n }\n\n if (!namedCatalogs) {\n return result;\n }\n\n for (const [name, dependencies] of Object.entries(namedCatalogs)) {\n result.push({\n name,\n dependencies,\n });\n }\n\n return result;\n}\n"],"mappings":";;;;;;;AAeA,eAAsB,YAAY,UAAqC;CAErE,MAAM,cAAe,MAAM,cAAc,UAAU,MAAM;CACzD,IAAI;EACF,MAAM,SAAS,UAAU,WAAW;EACpC,MAAM,iBAAyC,CAAC;EAChD,IAAI;EAEJ,KAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,MAAM,GAC5C,IAAI,QAAQ,cAAc;GAExB,kBAAkB,SAAS,IAAI,UAAU,EAAE;GAC3C,OAAO,KAAK,MACV,aAAa,SAAS,2BAA2B,iBACnD;EACF,OACE,KAAK,MAAM,SAAS,IAAI,MAAM,IAAI,GAChC,IAAI;GACF,MAAM,EAAE,OAAO,MAAM,UAAU,YAAY,gBAAgB,KAAK;GAChE,MAAM,cAAc,QAAQ,IAAI,MAAM,GAAG,SAAS;GAClD,MAAM,EAAE,aAAa,YAAY,WAAW,KAAK;GAEjD,OAAO,MAAM;IAAE;IAAO,SAAS,IAAI;GAAQ,CAAC;GAC5C,eAAe,GAAG,YAAY,GAAG,cAAc,OAAO,IAAI,CAAC;EAC7D,SAAS,KAAK;GACZ,OAAO,MACL;IAAE;IAAO;GAAI,GACb,gDACF;EACF;EAIN,MAAM,UAAU,EAAE,gBAAgB;EAClC,IAAI,SACF,OAAO,KAAK,MACV,aAAa,SAAS,mCACxB;OAEA,OAAO,KAAK,MACV,aAAa,SAAS,iCACxB;EAEF,OAAO;GACL;GACA;GACA;EACF;CACF,SAAS,KAAK;EACZ,OAAO,MAAM;GAAE;GAAU;EAAI,GAAG,sCAAsC;EACtE,OAAO;GAAE,SAAS;GAAM,gBAAgB,CAAC;EAAE;CAC7C;AACF;AAEA,SAAgB,oBAAoB,WAA6B;CAE/D,IAAI;CACJ,IAAI;EACF,OAAO,UAAU,SAAS;CAC5B,SAAS,oDAAmD;EAC1D,OAAO,KAAK,EAAE,IAAI,GAAG,2BAA2B;CAClD;CACA,MAAM,QAAQ;EACZ,MAAM,eAAe;EACrB;EACA;EACA;CACF;CACA,IACE,QACA,UAAU,wBAAwB,KAAK,iBAAiB,MAAM,OAE9D,MAAM,KAAK,KAAK,eAAe,kBAAkB;CAEnD,OAAO;AACT;AAEA,eAAsB,cAAc,eAAyC;CAC3E,MAAM,YAAY,MAAM,cAAc,eAAe,MAAM;;CAE3D,IAAI,SAAS,SAAS,GAAG;EACvB,MAAM,QAAQ,oBAAoB,SAAS;EAC3C,KAAK,MAAM,KAAK,OACd,IAAI,MAAM,gBAAgB,mBAAmB,eAAe,CAAC,CAAC,GAAG;GAC/D,OAAO,MAAM,iCAAiC,GAAG;GACjD,OAAO;EACT;CAEJ;CACA,OAAO;AACT;AAEA,SAAgB,uBAAuB,UAA4B;CACjE,MAAM,EAAE,iBAAiB,YAAY;CACrC,IAAI,SACF,OAAO;CAET,IAAI,mBAAmB,mBAAmB,IAExC,OAAO;CAET,IAAI,mBAAmB,mBAAmB,IACxC,OAAO;CAET,IAAI,mBAAmB,mBAAmB,GAExC,OAAO;CAET,IAAI,mBAAmB,mBAAmB,GAExC,OAAO;CAGT,OAAO;AACT;AAEA,eAAsB,oBACpB,UACA,aACA,mBAC6C;CAC7C,OAAO,MAAM,4BAA4B,YAAY,EAAE;CAIvD,MAAM,OAAO,mBAFQ,oBAAoB,QAEE,GAAG,MAAM;CAEpD,IAAI;CACJ,MAAM,WAAW,mBAAmB,aAAa,WAAW;CAE5D,IAAI,MAAM,gBAAgB,QAAQ,GAChC,WAAW;CAGb,OAAO;EACL;EACA,aAAa;GACX;GACA;EACF;CACF;AACF;AAEA,SAAS,oBAAoB,EAC3B,SAAS,oBACT,UAAU,iBACgB;CAC1B,MAAM,SAAoB,CAAC;CAE3B,IAAI,uBAAuB,KAAA,GACzB,OAAO,KAAK;EAAE,MAAM;EAAW,cAAc;CAAmB,CAAC;CAGnE,IAAI,CAAC,eACH,OAAO;CAGT,KAAK,MAAM,CAAC,MAAM,iBAAiB,OAAO,QAAQ,aAAa,GAC7D,OAAO,KAAK;EACV;EACA;CACF,CAAC;CAGH,OAAO;AACT"}
|
|
@@ -15,9 +15,7 @@ async function resolveNpmrc(packageFile, config) {
|
|
|
15
15
|
npmrc = config.npmrc;
|
|
16
16
|
} else {
|
|
17
17
|
npmrc = config.npmrc ?? "";
|
|
18
|
-
if (npmrc.length)
|
|
19
|
-
if (!npmrc.endsWith("\n")) npmrc += "\n";
|
|
20
|
-
}
|
|
18
|
+
if (npmrc.length && !npmrc.endsWith("\n")) npmrc += "\n";
|
|
21
19
|
if (repoNpmrc?.includes("package-lock")) {
|
|
22
20
|
logger.debug("Stripping package-lock setting from .npmrc");
|
|
23
21
|
repoNpmrc = repoNpmrc.replace(regEx(/(^|\n)package-lock.*?(\n|$)/g), "\n");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npmrc.js","names":[],"sources":["../../../../lib/modules/manager/npm/npmrc.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport { logger } from '../../../logger/index.ts';\nimport {\n findLocalSiblingOrParent,\n readLocalFile,\n} from '../../../util/fs/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\n\nexport interface NpmrcResult {\n npmrc: string | undefined;\n npmrcFileName: string | null;\n}\n\nexport async function resolveNpmrc(\n packageFile: string,\n config: { npmrc?: string; npmrcMerge?: boolean },\n): Promise<NpmrcResult> {\n let npmrc: string | undefined;\n const npmrcFileName = await findLocalSiblingOrParent(packageFile, '.npmrc');\n if (npmrcFileName) {\n let repoNpmrc = await readLocalFile(npmrcFileName, 'utf8');\n // v8 ignore else -- TODO: add test #40625\n if (isString(repoNpmrc)) {\n if (isString(config.npmrc) && !config.npmrcMerge) {\n logger.debug(\n { npmrcFileName },\n 'Repo .npmrc file is ignored due to config.npmrc with config.npmrcMerge=false',\n );\n npmrc = config.npmrc;\n } else {\n npmrc = config.npmrc ?? '';\n if (npmrc.length
|
|
1
|
+
{"version":3,"file":"npmrc.js","names":[],"sources":["../../../../lib/modules/manager/npm/npmrc.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport { logger } from '../../../logger/index.ts';\nimport {\n findLocalSiblingOrParent,\n readLocalFile,\n} from '../../../util/fs/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\n\nexport interface NpmrcResult {\n npmrc: string | undefined;\n npmrcFileName: string | null;\n}\n\nexport async function resolveNpmrc(\n packageFile: string,\n config: { npmrc?: string; npmrcMerge?: boolean },\n): Promise<NpmrcResult> {\n let npmrc: string | undefined;\n const npmrcFileName = await findLocalSiblingOrParent(packageFile, '.npmrc');\n if (npmrcFileName) {\n let repoNpmrc = await readLocalFile(npmrcFileName, 'utf8');\n // v8 ignore else -- TODO: add test #40625\n if (isString(repoNpmrc)) {\n if (isString(config.npmrc) && !config.npmrcMerge) {\n logger.debug(\n { npmrcFileName },\n 'Repo .npmrc file is ignored due to config.npmrc with config.npmrcMerge=false',\n );\n npmrc = config.npmrc;\n } else {\n npmrc = config.npmrc ?? '';\n if (npmrc.length && !npmrc.endsWith('\\n')) {\n npmrc += '\\n';\n }\n if (repoNpmrc?.includes('package-lock')) {\n logger.debug('Stripping package-lock setting from .npmrc');\n repoNpmrc = repoNpmrc.replace(\n regEx(/(^|\\n)package-lock.*?(\\n|$)/g),\n '\\n',\n );\n }\n if (repoNpmrc.includes('=${') && !GlobalConfig.get('exposeAllEnv')) {\n logger.debug(\n { npmrcFileName },\n 'Stripping .npmrc file of lines with variables',\n );\n repoNpmrc = repoNpmrc\n .split(newlineRegex)\n .filter((line) => !line.includes('=${'))\n .join('\\n');\n }\n npmrc += repoNpmrc;\n }\n }\n } else if (isString(config.npmrc)) {\n npmrc = config.npmrc;\n }\n return { npmrc, npmrcFileName };\n}\n"],"mappings":";;;;;;AAcA,eAAsB,aACpB,aACA,QACsB;CACtB,IAAI;CACJ,MAAM,gBAAgB,MAAM,yBAAyB,aAAa,QAAQ;CAC1E,IAAI,eAAe;EACjB,IAAI,YAAY,MAAM,cAAc,eAAe,MAAM;;EAEzD,IAAI,SAAS,SAAS,GACpB,IAAI,SAAS,OAAO,KAAK,KAAK,CAAC,OAAO,YAAY;GAChD,OAAO,MACL,EAAE,cAAc,GAChB,8EACF;GACA,QAAQ,OAAO;EACjB,OAAO;GACL,QAAQ,OAAO,SAAS;GACxB,IAAI,MAAM,UAAU,CAAC,MAAM,SAAS,IAAI,GACtC,SAAS;GAEX,IAAI,WAAW,SAAS,cAAc,GAAG;IACvC,OAAO,MAAM,4CAA4C;IACzD,YAAY,UAAU,QACpB,MAAM,8BAA8B,GACpC,IACF;GACF;GACA,IAAI,UAAU,SAAS,KAAK,KAAK,CAAC,aAAa,IAAI,cAAc,GAAG;IAClE,OAAO,MACL,EAAE,cAAc,GAChB,+CACF;IACA,YAAY,UACT,MAAM,YAAY,CAAC,CACnB,QAAQ,SAAS,CAAC,KAAK,SAAS,KAAK,CAAC,CAAC,CACvC,KAAK,IAAI;GACd;GACA,SAAS;EACX;CAEJ,OAAO,IAAI,SAAS,OAAO,KAAK,GAC9B,QAAQ,OAAO;CAEjB,OAAO;EAAE;EAAO;CAAc;AAChC"}
|
|
@@ -5,10 +5,9 @@ function getNewGitValue(upgrade) {
|
|
|
5
5
|
if (upgrade.currentDigest) {
|
|
6
6
|
logger.debug("Updating git digest");
|
|
7
7
|
return upgrade.currentRawValue.replace(upgrade.currentDigest, upgrade.newDigest.substring(0, upgrade.currentDigest.length));
|
|
8
|
-
} else {
|
|
9
|
-
logger.debug("Updating git version tag");
|
|
10
|
-
return upgrade.currentRawValue.replace(upgrade.currentValue, upgrade.newValue);
|
|
11
8
|
}
|
|
9
|
+
logger.debug("Updating git version tag");
|
|
10
|
+
return upgrade.currentRawValue.replace(upgrade.currentValue, upgrade.newValue);
|
|
12
11
|
}
|
|
13
12
|
function getNewNpmAliasValue(value, upgrade) {
|
|
14
13
|
if (!upgrade.npmPackageAlias) return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","names":[],"sources":["../../../../../../lib/modules/manager/npm/update/dependency/common.ts"],"sourcesContent":["import { logger } from '../../../../../logger/index.ts';\nimport type { Upgrade } from '../../../types.ts';\n\nexport function getNewGitValue(upgrade: Upgrade): string | null {\n if (!upgrade.currentRawValue) {\n return null;\n }\n if (upgrade.currentDigest) {\n logger.debug('Updating git digest');\n return upgrade.currentRawValue.replace(\n upgrade.currentDigest,\n // TODO #22198\n upgrade.newDigest!.substring(0, upgrade.currentDigest.length),\n );\n }
|
|
1
|
+
{"version":3,"file":"common.js","names":[],"sources":["../../../../../../lib/modules/manager/npm/update/dependency/common.ts"],"sourcesContent":["import { logger } from '../../../../../logger/index.ts';\nimport type { Upgrade } from '../../../types.ts';\n\nexport function getNewGitValue(upgrade: Upgrade): string | null {\n if (!upgrade.currentRawValue) {\n return null;\n }\n if (upgrade.currentDigest) {\n logger.debug('Updating git digest');\n return upgrade.currentRawValue.replace(\n upgrade.currentDigest,\n // TODO #22198\n upgrade.newDigest!.substring(0, upgrade.currentDigest.length),\n );\n }\n logger.debug('Updating git version tag');\n return upgrade.currentRawValue.replace(\n upgrade.currentValue,\n upgrade.newValue,\n );\n}\n\nexport function getNewNpmAliasValue(\n value: string | undefined,\n upgrade: Upgrade,\n): string | null {\n if (!upgrade.npmPackageAlias) {\n return null;\n }\n return `npm:${upgrade.packageName}@${value}`;\n}\n"],"mappings":";;AAGA,SAAgB,eAAe,SAAiC;CAC9D,IAAI,CAAC,QAAQ,iBACX,OAAO;CAET,IAAI,QAAQ,eAAe;EACzB,OAAO,MAAM,qBAAqB;EAClC,OAAO,QAAQ,gBAAgB,QAC7B,QAAQ,eAER,QAAQ,UAAW,UAAU,GAAG,QAAQ,cAAc,MAAM,CAC9D;CACF;CACA,OAAO,MAAM,0BAA0B;CACvC,OAAO,QAAQ,gBAAgB,QAC7B,QAAQ,cACR,QAAQ,QACV;AACF;AAEA,SAAgB,oBACd,OACA,SACe;CACf,IAAI,CAAC,QAAQ,iBACX,OAAO;CAET,OAAO,OAAO,QAAQ,YAAY,GAAG;AACvC"}
|
|
@@ -129,7 +129,7 @@ function updateDependency({ fileContent, packageFile: packageFileName, upgrade }
|
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
function overrideDepPosition(overrideBlock, parents, depName) {
|
|
132
|
-
const lastParent = parents
|
|
132
|
+
const lastParent = parents.at(-1);
|
|
133
133
|
let overrideDep = overrideBlock;
|
|
134
134
|
for (const parent of parents)
|
|
135
135
|
// v8 ignore else -- TODO: add test #40625
|