renovate 43.263.0 → 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 +13 -13
- 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/mix/extract.js +3 -6
- package/dist/modules/manager/mix/extract.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 +67 -17
- 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/forgejo/utils.js +1 -1
- package/dist/modules/platform/forgejo/utils.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/gitea/utils.js +1 -1
- package/dist/modules/platform/gitea/utils.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/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
|
@@ -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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../../../lib/modules/manager/npm/update/dependency/index.ts"],"sourcesContent":["import { isArray, isNonEmptyStringAndNotWhitespace } from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { logger } from '../../../../../logger/index.ts';\nimport { escapeRegExp, regEx } from '../../../../../util/regex.ts';\nimport { matchAt, replaceAt } from '../../../../../util/string.ts';\nimport type { UpdateDependencyConfig, Upgrade } from '../../../types.ts';\nimport { pnpmWorkspaceOverrides } from '../../dep-types.ts';\nimport type {\n DependenciesMeta,\n NpmPackage,\n OverrideDependency,\n RecursiveOverride,\n} from '../../extract/types.ts';\nimport type { NpmDepType, NpmManagerData } from '../../types.ts';\nimport { getNewGitValue, getNewNpmAliasValue } from './common.ts';\nimport { updatePnpmWorkspaceDependency } from './pnpm.ts';\nimport { updateYarnrcCatalogDependency } from './yarn.ts';\n\nfunction renameObjKey(\n oldObj: DependenciesMeta,\n oldKey: string,\n newKey: string,\n): DependenciesMeta {\n const keys = Object.keys(oldObj);\n return keys.reduce((acc, key) => {\n if (key === oldKey) {\n acc[newKey] = oldObj[oldKey];\n } else {\n acc[key] = oldObj[key];\n }\n return acc;\n }, {} as DependenciesMeta);\n}\n\nfunction replaceAsString(\n parsedContents: NpmPackage,\n fileContent: string,\n depType:\n | NpmDepType\n | 'dependenciesMeta'\n | 'packageManager'\n | 'pnpm.overrides',\n depName: string,\n oldValue: string,\n newValue: string,\n parents?: string[],\n): string {\n if (depType === 'packageManager') {\n parsedContents[depType] = newValue;\n } else if (depType === 'pnpm.overrides') {\n parsedContents.pnpm!.overrides![depName] = newValue;\n } else if (depName === oldValue) {\n // The old value is the name of the dependency itself\n delete Object.assign(parsedContents[depType]!, {\n [newValue]: parsedContents[depType]![oldValue],\n })[oldValue];\n } else if (depType === 'dependenciesMeta') {\n // v8 ignore else -- TODO: add test #40625\n if (oldValue !== newValue) {\n parsedContents.dependenciesMeta = renameObjKey(\n // TODO #22198\n parsedContents.dependenciesMeta!,\n oldValue,\n newValue,\n );\n }\n } else if (parents && depType === 'overrides') {\n // there is an object as a value in overrides block\n const { depObjectReference, overrideDepName } = overrideDepPosition(\n parsedContents[depType]!,\n parents,\n depName,\n );\n // v8 ignore else -- TODO: add test #40625\n if (depObjectReference) {\n depObjectReference[overrideDepName] = newValue;\n }\n } else {\n // The old value is the version of the dependency\n parsedContents[depType]![depName] = newValue;\n }\n // Look for the old version number\n const searchString = `\"${oldValue}\"`;\n let newString = `\"${newValue}\"`;\n\n const escapedDepName = escapeRegExp(depName);\n const patchRe = regEx(`^(patch:${escapedDepName}@(npm:)?).*#`);\n const match = patchRe.exec(oldValue);\n if (match && depType === 'resolutions') {\n const patch = oldValue.replace(match[0], `${match[1]}${newValue}#`);\n parsedContents[depType]![depName] = patch;\n newString = `\"${patch}\"`;\n }\n\n // Skip ahead to depType section\n let searchIndex = fileContent.indexOf(`\"${depType}\"`) + depType.length;\n logger.trace(`Starting search at index ${searchIndex}`);\n // Iterate through the rest of the file\n for (; searchIndex < fileContent.length; searchIndex += 1) {\n // First check if we have a hit for the old version\n if (matchAt(fileContent, searchIndex, searchString)) {\n logger.trace(`Found match at index ${searchIndex}`);\n // Now test if the result matches\n const testContent = replaceAt(\n fileContent,\n searchIndex,\n searchString,\n newString,\n );\n // Compare the parsed JSON structure of old and new\n if (dequal(parsedContents, JSON.parse(testContent))) {\n return testContent;\n }\n }\n }\n // v8 ignore next -- TODO: add test #40625\n throw new Error();\n}\n\nexport function updateDependency({\n fileContent,\n packageFile: packageFileName,\n upgrade,\n}: UpdateDependencyConfig): string | null {\n if (\n upgrade.depType?.startsWith('pnpm.catalog') ||\n upgrade.depType === pnpmWorkspaceOverrides\n ) {\n return updatePnpmWorkspaceDependency({\n fileContent,\n packageFile: packageFileName,\n upgrade,\n });\n }\n if (upgrade.depType?.startsWith('yarn.catalog')) {\n return updateYarnrcCatalogDependency({\n fileContent,\n packageFile: packageFileName,\n upgrade,\n });\n }\n\n const { depType, managerData } = upgrade;\n const depName: string = managerData?.key ?? upgrade.depName;\n let { newValue } = upgrade;\n\n newValue = getNewGitValue(upgrade) ?? newValue;\n newValue = getNewNpmAliasValue(newValue, upgrade) ?? newValue;\n\n logger.debug(`npm.updateDependency(): ${depType}.${depName} = ${newValue}`);\n try {\n const parsedContents: NpmPackage = JSON.parse(fileContent);\n let overrideDepParents: string[] | undefined = undefined;\n // Save the old version\n let oldVersion: string | undefined;\n if (depType === 'packageManager') {\n oldVersion = parsedContents[depType];\n newValue = `${depName}@${newValue}`;\n } else if (isOverrideObject(upgrade)) {\n overrideDepParents = managerData?.parents;\n // v8 ignore else -- TODO: add test #40625\n if (overrideDepParents) {\n // old version when there is an object as a value in overrides block\n const { depObjectReference, overrideDepName } = overrideDepPosition(\n parsedContents.overrides!,\n overrideDepParents,\n depName,\n );\n // v8 ignore else -- TODO: add test #40625\n if (depObjectReference) {\n oldVersion = depObjectReference[overrideDepName]!;\n }\n }\n } else if (depType === 'pnpm.overrides') {\n oldVersion = parsedContents.pnpm?.overrides?.[depName];\n } else {\n oldVersion = parsedContents[depType as NpmDepType]![depName] as string;\n }\n if (\n oldVersion === newValue &&\n (!upgrade.newName || upgrade.newName === depName)\n ) {\n logger.trace('Version is already updated');\n return fileContent;\n }\n\n // TODO #22198\n let newFileContent: string;\n if (upgrade.newName && upgrade.replacementApproach === 'alias') {\n newFileContent = replaceAsString(\n parsedContents,\n fileContent,\n depType as NpmDepType,\n depName,\n oldVersion!,\n `npm:${upgrade.newName}@${newValue}`,\n overrideDepParents,\n );\n } else {\n newFileContent = replaceAsString(\n parsedContents,\n fileContent,\n depType as NpmDepType,\n depName,\n oldVersion!,\n newValue!,\n overrideDepParents,\n );\n if (upgrade.newName && upgrade.newName !== depName) {\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent,\n depType as NpmDepType,\n depName,\n depName,\n upgrade.newName,\n overrideDepParents,\n );\n }\n }\n /* v8 ignore next -- needs test */\n if (!newFileContent) {\n logger.debug(\n { fileContent, parsedContents, depType, depName, newValue },\n 'Warning: updateDependency error',\n );\n return fileContent;\n }\n\n if (parsedContents?.resolutions) {\n let depKey: string | undefined;\n if (parsedContents.resolutions[depName]) {\n depKey = depName;\n } else if (parsedContents.resolutions[`**/${depName}`]) {\n depKey = `**/${depName}`;\n }\n if (depKey) {\n /* v8 ignore next -- needs test */\n if (parsedContents.resolutions[depKey] !== oldVersion) {\n logger.debug(\n {\n depName,\n depKey,\n oldVersion,\n resolutionsVersion: parsedContents.resolutions[depKey],\n },\n 'Upgraded dependency exists in yarn resolutions but is different version',\n );\n }\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent,\n 'resolutions',\n depKey,\n // TODO #22198\n parsedContents.resolutions[depKey]!,\n // TODO #22198\n newValue!,\n );\n if (upgrade.newName && upgrade.newName !== depName) {\n if (depKey === `**/${depName}`) {\n // handles the case where a replacement is in a resolution\n upgrade.newName = `**/${upgrade.newName}`;\n }\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent,\n 'resolutions',\n depKey,\n depKey,\n upgrade.newName,\n );\n }\n }\n }\n if (parsedContents?.dependenciesMeta) {\n for (const [depKey] of Object.entries(parsedContents.dependenciesMeta)) {\n if (depKey.startsWith(`${depName}@`)) {\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent,\n 'dependenciesMeta',\n depName,\n depKey,\n // TODO: types (#22198)\n `${depName}@${newValue}`,\n );\n }\n }\n }\n return newFileContent;\n } catch (err) {\n logger.debug({ err }, 'updateDependency error');\n return null;\n }\n}\n\nfunction overrideDepPosition(\n overrideBlock: OverrideDependency,\n parents: string[],\n depName: string,\n): {\n depObjectReference: Record<string, string>;\n overrideDepName: string;\n} {\n // get override dep position when its nested in an object\n const lastParent = parents[parents.length - 1];\n let overrideDep: OverrideDependency = overrideBlock;\n for (const parent of parents) {\n // v8 ignore else -- TODO: add test #40625\n if (overrideDep) {\n overrideDep = overrideDep[parent] as Record<string, RecursiveOverride>;\n }\n }\n const overrideDepName = depName === lastParent ? '.' : depName;\n const depObjectReference = overrideDep as Record<string, string>;\n return { depObjectReference, overrideDepName };\n}\n\nfunction isOverrideObject(upgrade: Upgrade<NpmManagerData>): boolean {\n return (\n isArray(upgrade.managerData?.parents, isNonEmptyStringAndNotWhitespace) &&\n upgrade.depType === 'overrides'\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../../lib/modules/manager/npm/update/dependency/index.ts"],"sourcesContent":["import { isArray, isNonEmptyStringAndNotWhitespace } from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { logger } from '../../../../../logger/index.ts';\nimport { escapeRegExp, regEx } from '../../../../../util/regex.ts';\nimport { matchAt, replaceAt } from '../../../../../util/string.ts';\nimport type { UpdateDependencyConfig, Upgrade } from '../../../types.ts';\nimport { pnpmWorkspaceOverrides } from '../../dep-types.ts';\nimport type {\n DependenciesMeta,\n NpmPackage,\n OverrideDependency,\n RecursiveOverride,\n} from '../../extract/types.ts';\nimport type { NpmDepType, NpmManagerData } from '../../types.ts';\nimport { getNewGitValue, getNewNpmAliasValue } from './common.ts';\nimport { updatePnpmWorkspaceDependency } from './pnpm.ts';\nimport { updateYarnrcCatalogDependency } from './yarn.ts';\n\nfunction renameObjKey(\n oldObj: DependenciesMeta,\n oldKey: string,\n newKey: string,\n): DependenciesMeta {\n const keys = Object.keys(oldObj);\n return keys.reduce((acc, key) => {\n if (key === oldKey) {\n acc[newKey] = oldObj[oldKey];\n } else {\n acc[key] = oldObj[key];\n }\n return acc;\n }, {} as DependenciesMeta);\n}\n\nfunction replaceAsString(\n parsedContents: NpmPackage,\n fileContent: string,\n depType:\n | NpmDepType\n | 'dependenciesMeta'\n | 'packageManager'\n | 'pnpm.overrides',\n depName: string,\n oldValue: string,\n newValue: string,\n parents?: string[],\n): string {\n if (depType === 'packageManager') {\n parsedContents[depType] = newValue;\n } else if (depType === 'pnpm.overrides') {\n parsedContents.pnpm!.overrides![depName] = newValue;\n } else if (depName === oldValue) {\n // The old value is the name of the dependency itself\n delete Object.assign(parsedContents[depType]!, {\n [newValue]: parsedContents[depType]![oldValue],\n })[oldValue];\n } else if (depType === 'dependenciesMeta') {\n // v8 ignore else -- TODO: add test #40625\n if (oldValue !== newValue) {\n parsedContents.dependenciesMeta = renameObjKey(\n // TODO #22198\n parsedContents.dependenciesMeta!,\n oldValue,\n newValue,\n );\n }\n } else if (parents && depType === 'overrides') {\n // there is an object as a value in overrides block\n const { depObjectReference, overrideDepName } = overrideDepPosition(\n parsedContents[depType]!,\n parents,\n depName,\n );\n // v8 ignore else -- TODO: add test #40625\n if (depObjectReference) {\n depObjectReference[overrideDepName] = newValue;\n }\n } else {\n // The old value is the version of the dependency\n parsedContents[depType]![depName] = newValue;\n }\n // Look for the old version number\n const searchString = `\"${oldValue}\"`;\n let newString = `\"${newValue}\"`;\n\n const escapedDepName = escapeRegExp(depName);\n const patchRe = regEx(`^(patch:${escapedDepName}@(npm:)?).*#`);\n const match = patchRe.exec(oldValue);\n if (match && depType === 'resolutions') {\n const patch = oldValue.replace(match[0], `${match[1]}${newValue}#`);\n parsedContents[depType]![depName] = patch;\n newString = `\"${patch}\"`;\n }\n\n // Skip ahead to depType section\n let searchIndex = fileContent.indexOf(`\"${depType}\"`) + depType.length;\n logger.trace(`Starting search at index ${searchIndex}`);\n // Iterate through the rest of the file\n for (; searchIndex < fileContent.length; searchIndex += 1) {\n // First check if we have a hit for the old version\n if (matchAt(fileContent, searchIndex, searchString)) {\n logger.trace(`Found match at index ${searchIndex}`);\n // Now test if the result matches\n const testContent = replaceAt(\n fileContent,\n searchIndex,\n searchString,\n newString,\n );\n // Compare the parsed JSON structure of old and new\n if (dequal(parsedContents, JSON.parse(testContent))) {\n return testContent;\n }\n }\n }\n // v8 ignore next -- TODO: add test #40625\n throw new Error();\n}\n\nexport function updateDependency({\n fileContent,\n packageFile: packageFileName,\n upgrade,\n}: UpdateDependencyConfig): string | null {\n if (\n upgrade.depType?.startsWith('pnpm.catalog') ||\n upgrade.depType === pnpmWorkspaceOverrides\n ) {\n return updatePnpmWorkspaceDependency({\n fileContent,\n packageFile: packageFileName,\n upgrade,\n });\n }\n if (upgrade.depType?.startsWith('yarn.catalog')) {\n return updateYarnrcCatalogDependency({\n fileContent,\n packageFile: packageFileName,\n upgrade,\n });\n }\n\n const { depType, managerData } = upgrade;\n const depName: string = managerData?.key ?? upgrade.depName;\n let { newValue } = upgrade;\n\n newValue = getNewGitValue(upgrade) ?? newValue;\n newValue = getNewNpmAliasValue(newValue, upgrade) ?? newValue;\n\n logger.debug(`npm.updateDependency(): ${depType}.${depName} = ${newValue}`);\n try {\n const parsedContents: NpmPackage = JSON.parse(fileContent);\n let overrideDepParents: string[] | undefined = undefined;\n // Save the old version\n let oldVersion: string | undefined;\n if (depType === 'packageManager') {\n oldVersion = parsedContents[depType];\n newValue = `${depName}@${newValue}`;\n } else if (isOverrideObject(upgrade)) {\n overrideDepParents = managerData?.parents;\n // v8 ignore else -- TODO: add test #40625\n if (overrideDepParents) {\n // old version when there is an object as a value in overrides block\n const { depObjectReference, overrideDepName } = overrideDepPosition(\n parsedContents.overrides!,\n overrideDepParents,\n depName,\n );\n // v8 ignore else -- TODO: add test #40625\n if (depObjectReference) {\n oldVersion = depObjectReference[overrideDepName]!;\n }\n }\n } else if (depType === 'pnpm.overrides') {\n oldVersion = parsedContents.pnpm?.overrides?.[depName];\n } else {\n oldVersion = parsedContents[depType as NpmDepType]![depName] as string;\n }\n if (\n oldVersion === newValue &&\n (!upgrade.newName || upgrade.newName === depName)\n ) {\n logger.trace('Version is already updated');\n return fileContent;\n }\n\n // TODO #22198\n let newFileContent: string;\n if (upgrade.newName && upgrade.replacementApproach === 'alias') {\n newFileContent = replaceAsString(\n parsedContents,\n fileContent,\n depType as NpmDepType,\n depName,\n oldVersion!,\n `npm:${upgrade.newName}@${newValue}`,\n overrideDepParents,\n );\n } else {\n newFileContent = replaceAsString(\n parsedContents,\n fileContent,\n depType as NpmDepType,\n depName,\n oldVersion!,\n newValue!,\n overrideDepParents,\n );\n if (upgrade.newName && upgrade.newName !== depName) {\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent,\n depType as NpmDepType,\n depName,\n depName,\n upgrade.newName,\n overrideDepParents,\n );\n }\n }\n /* v8 ignore next -- needs test */\n if (!newFileContent) {\n logger.debug(\n { fileContent, parsedContents, depType, depName, newValue },\n 'Warning: updateDependency error',\n );\n return fileContent;\n }\n\n if (parsedContents?.resolutions) {\n let depKey: string | undefined;\n if (parsedContents.resolutions[depName]) {\n depKey = depName;\n } else if (parsedContents.resolutions[`**/${depName}`]) {\n depKey = `**/${depName}`;\n }\n if (depKey) {\n /* v8 ignore next -- needs test */\n if (parsedContents.resolutions[depKey] !== oldVersion) {\n logger.debug(\n {\n depName,\n depKey,\n oldVersion,\n resolutionsVersion: parsedContents.resolutions[depKey],\n },\n 'Upgraded dependency exists in yarn resolutions but is different version',\n );\n }\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent,\n 'resolutions',\n depKey,\n // TODO #22198\n parsedContents.resolutions[depKey]!,\n // TODO #22198\n newValue!,\n );\n if (upgrade.newName && upgrade.newName !== depName) {\n if (depKey === `**/${depName}`) {\n // handles the case where a replacement is in a resolution\n upgrade.newName = `**/${upgrade.newName}`;\n }\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent,\n 'resolutions',\n depKey,\n depKey,\n upgrade.newName,\n );\n }\n }\n }\n if (parsedContents?.dependenciesMeta) {\n for (const [depKey] of Object.entries(parsedContents.dependenciesMeta)) {\n if (depKey.startsWith(`${depName}@`)) {\n newFileContent = replaceAsString(\n parsedContents,\n newFileContent,\n 'dependenciesMeta',\n depName,\n depKey,\n // TODO: types (#22198)\n `${depName}@${newValue}`,\n );\n }\n }\n }\n return newFileContent;\n } catch (err) {\n logger.debug({ err }, 'updateDependency error');\n return null;\n }\n}\n\nfunction overrideDepPosition(\n overrideBlock: OverrideDependency,\n parents: string[],\n depName: string,\n): {\n depObjectReference: Record<string, string>;\n overrideDepName: string;\n} {\n // get override dep position when its nested in an object\n const lastParent = parents.at(-1);\n let overrideDep: OverrideDependency = overrideBlock;\n for (const parent of parents) {\n // v8 ignore else -- TODO: add test #40625\n if (overrideDep) {\n overrideDep = overrideDep[parent] as Record<string, RecursiveOverride>;\n }\n }\n const overrideDepName = depName === lastParent ? '.' : depName;\n const depObjectReference = overrideDep as Record<string, string>;\n return { depObjectReference, overrideDepName };\n}\n\nfunction isOverrideObject(upgrade: Upgrade<NpmManagerData>): boolean {\n return (\n isArray(upgrade.managerData?.parents, isNonEmptyStringAndNotWhitespace) &&\n upgrade.depType === 'overrides'\n );\n}\n"],"mappings":"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"}
|
|
@@ -74,7 +74,7 @@ function changeDependencyIn(document, path, { newName, newValue }) {
|
|
|
74
74
|
}
|
|
75
75
|
function getDepPath({ catalogName, depName, usesImplicitDefaultCatalog }) {
|
|
76
76
|
if (catalogName === "default" && usesImplicitDefaultCatalog) return ["catalog", depName];
|
|
77
|
-
|
|
77
|
+
return [
|
|
78
78
|
"catalogs",
|
|
79
79
|
catalogName,
|
|
80
80
|
depName
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pnpm.js","names":[],"sources":["../../../../../../lib/modules/manager/npm/update/dependency/pnpm.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport type { Document } from 'yaml';\nimport { CST, isCollection, isPair, isScalar, parseDocument } from 'yaml';\nimport { logger } from '../../../../../logger/index.ts';\nimport type { UpdateDependencyConfig } from '../../../types.ts';\nimport { pnpmWorkspaceOverrides } from '../../dep-types.ts';\nimport { PnpmWorkspaceFile } from '../../schema.ts';\nimport { getNewGitValue, getNewNpmAliasValue } from './common.ts';\n\nexport function updatePnpmWorkspaceDependency({\n fileContent,\n upgrade,\n}: UpdateDependencyConfig): string | null {\n const { depType, depName } = upgrade;\n\n const catalogName = depType?.split('.').at(-1);\n\n // should never happen\n if (!isString(catalogName) && depType !== pnpmWorkspaceOverrides) {\n logger.error(\n 'No catalogName or override was found; this is likely an extraction error.',\n );\n return null;\n }\n\n let { newValue } = upgrade;\n\n newValue = getNewGitValue(upgrade) ?? newValue;\n newValue = getNewNpmAliasValue(newValue, upgrade) ?? newValue;\n\n logger.trace(\n `npm.updatePnpmWorkspaceDependency(): ${depType}:${depName} = ${newValue}`,\n );\n\n let document: Document;\n let parsedContents: PnpmWorkspaceFile;\n\n try {\n // In order to preserve the original formatting as much as possible, we want\n // manipulate the CST directly. Using the AST (the result of parseDocument)\n // does not guarantee that formatting would be the same after\n // stringification. However, the CST is more annoying to query for certain\n // values. Thus, we use both an annotated AST and a JS representation; the\n // former for manipulation, and the latter for querying/validation.\n document = parseDocument(fileContent, { keepSourceTokens: true });\n parsedContents = PnpmWorkspaceFile.parse(fileContent);\n } catch (err) {\n logger.debug({ err }, 'Could not parse pnpm-workspace YAML file.');\n return null;\n }\n\n // In pnpm-workspace.yaml, the default catalog can be either `catalog` or\n // `catalog.default`, but not both (pnpm throws outright with a config error).\n // Thus, we must check which entry is being used, to reference it from / set\n // it in the right place.\n const usesImplicitDefaultCatalog = parsedContents.catalog !== undefined;\n const isCatalogUpdate = catalogName && depType !== pnpmWorkspaceOverrides;\n\n let oldVersion: string | undefined;\n if (isCatalogUpdate) {\n if (catalogName === 'default' && usesImplicitDefaultCatalog) {\n oldVersion = parsedContents.catalog?.[depName!];\n } else {\n oldVersion = parsedContents.catalogs?.[catalogName]?.[depName!];\n }\n } else {\n oldVersion = parsedContents.overrides?.[depName!];\n }\n\n if (oldVersion === newValue) {\n logger.trace('Version is already updated');\n return fileContent;\n }\n\n // Update the value\n const path = isCatalogUpdate\n ? getDepPath({\n depName: depName!,\n catalogName,\n usesImplicitDefaultCatalog,\n })\n : ['overrides', depName!];\n\n const modifiedDocument = changeDependencyIn(document, path, {\n newValue,\n newName: upgrade.newName,\n });\n\n if (!modifiedDocument) {\n // Case where we are explicitly unable to substitute the key/value, for\n // example if the value was an alias.\n return null;\n }\n\n /* v8 ignore if -- this should not happen in practice, but we must satisfy the types */\n if (!modifiedDocument.contents?.srcToken) {\n return null;\n }\n\n return CST.stringify(modifiedDocument.contents.srcToken);\n}\n\n/**\n * Change the scalar name and/or value of a collection item in a YAML document,\n * while keeping formatting consistent. Mutates the given document.\n */\nfunction changeDependencyIn(\n document: Document,\n path: string[],\n { newName, newValue }: { newName?: string; newValue?: string },\n): Document | null {\n const parentPath = path.slice(0, -1);\n const relevantItemKey = path.at(-1);\n\n const parentNode = document.getIn(parentPath);\n\n if (!parentNode || !isCollection(parentNode)) {\n return null;\n }\n\n const relevantNode = parentNode.items.find(\n (item) =>\n isPair(item) && isScalar(item.key) && item.key.value === relevantItemKey,\n );\n\n if (!relevantNode || !isPair(relevantNode)) {\n return null;\n }\n\n if (newName) {\n /* v8 ignore if -- the try..catch block above already throws if a key is an alias */\n if (!CST.isScalar(relevantNode.srcToken?.key)) {\n return null;\n }\n CST.setScalarValue(relevantNode.srcToken.key, newName);\n }\n\n // v8 ignore else -- TODO: add test #40625\n if (newValue) {\n // We only support scalar values when substituting. This explicitly avoids\n // substituting aliases, since those can be resolved from a shared location,\n // and replacing either the referrent anchor or the alias would be wrong in\n // the general case. We leave this up to the user, e.g. via a Regex custom\n // manager.\n if (!CST.isScalar(relevantNode.srcToken?.value)) {\n return null;\n }\n CST.setScalarValue(relevantNode.srcToken.value, newValue);\n }\n\n return document;\n}\n\nfunction getDepPath({\n catalogName,\n depName,\n usesImplicitDefaultCatalog,\n}: {\n usesImplicitDefaultCatalog: boolean;\n catalogName: string;\n depName: string;\n}): string[] {\n if (catalogName === 'default' && usesImplicitDefaultCatalog) {\n return ['catalog', depName];\n }
|
|
1
|
+
{"version":3,"file":"pnpm.js","names":[],"sources":["../../../../../../lib/modules/manager/npm/update/dependency/pnpm.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport type { Document } from 'yaml';\nimport { CST, isCollection, isPair, isScalar, parseDocument } from 'yaml';\nimport { logger } from '../../../../../logger/index.ts';\nimport type { UpdateDependencyConfig } from '../../../types.ts';\nimport { pnpmWorkspaceOverrides } from '../../dep-types.ts';\nimport { PnpmWorkspaceFile } from '../../schema.ts';\nimport { getNewGitValue, getNewNpmAliasValue } from './common.ts';\n\nexport function updatePnpmWorkspaceDependency({\n fileContent,\n upgrade,\n}: UpdateDependencyConfig): string | null {\n const { depType, depName } = upgrade;\n\n const catalogName = depType?.split('.').at(-1);\n\n // should never happen\n if (!isString(catalogName) && depType !== pnpmWorkspaceOverrides) {\n logger.error(\n 'No catalogName or override was found; this is likely an extraction error.',\n );\n return null;\n }\n\n let { newValue } = upgrade;\n\n newValue = getNewGitValue(upgrade) ?? newValue;\n newValue = getNewNpmAliasValue(newValue, upgrade) ?? newValue;\n\n logger.trace(\n `npm.updatePnpmWorkspaceDependency(): ${depType}:${depName} = ${newValue}`,\n );\n\n let document: Document;\n let parsedContents: PnpmWorkspaceFile;\n\n try {\n // In order to preserve the original formatting as much as possible, we want\n // manipulate the CST directly. Using the AST (the result of parseDocument)\n // does not guarantee that formatting would be the same after\n // stringification. However, the CST is more annoying to query for certain\n // values. Thus, we use both an annotated AST and a JS representation; the\n // former for manipulation, and the latter for querying/validation.\n document = parseDocument(fileContent, { keepSourceTokens: true });\n parsedContents = PnpmWorkspaceFile.parse(fileContent);\n } catch (err) {\n logger.debug({ err }, 'Could not parse pnpm-workspace YAML file.');\n return null;\n }\n\n // In pnpm-workspace.yaml, the default catalog can be either `catalog` or\n // `catalog.default`, but not both (pnpm throws outright with a config error).\n // Thus, we must check which entry is being used, to reference it from / set\n // it in the right place.\n const usesImplicitDefaultCatalog = parsedContents.catalog !== undefined;\n const isCatalogUpdate = catalogName && depType !== pnpmWorkspaceOverrides;\n\n let oldVersion: string | undefined;\n if (isCatalogUpdate) {\n if (catalogName === 'default' && usesImplicitDefaultCatalog) {\n oldVersion = parsedContents.catalog?.[depName!];\n } else {\n oldVersion = parsedContents.catalogs?.[catalogName]?.[depName!];\n }\n } else {\n oldVersion = parsedContents.overrides?.[depName!];\n }\n\n if (oldVersion === newValue) {\n logger.trace('Version is already updated');\n return fileContent;\n }\n\n // Update the value\n const path = isCatalogUpdate\n ? getDepPath({\n depName: depName!,\n catalogName,\n usesImplicitDefaultCatalog,\n })\n : ['overrides', depName!];\n\n const modifiedDocument = changeDependencyIn(document, path, {\n newValue,\n newName: upgrade.newName,\n });\n\n if (!modifiedDocument) {\n // Case where we are explicitly unable to substitute the key/value, for\n // example if the value was an alias.\n return null;\n }\n\n /* v8 ignore if -- this should not happen in practice, but we must satisfy the types */\n if (!modifiedDocument.contents?.srcToken) {\n return null;\n }\n\n return CST.stringify(modifiedDocument.contents.srcToken);\n}\n\n/**\n * Change the scalar name and/or value of a collection item in a YAML document,\n * while keeping formatting consistent. Mutates the given document.\n */\nfunction changeDependencyIn(\n document: Document,\n path: string[],\n { newName, newValue }: { newName?: string; newValue?: string },\n): Document | null {\n const parentPath = path.slice(0, -1);\n const relevantItemKey = path.at(-1);\n\n const parentNode = document.getIn(parentPath);\n\n if (!parentNode || !isCollection(parentNode)) {\n return null;\n }\n\n const relevantNode = parentNode.items.find(\n (item) =>\n isPair(item) && isScalar(item.key) && item.key.value === relevantItemKey,\n );\n\n if (!relevantNode || !isPair(relevantNode)) {\n return null;\n }\n\n if (newName) {\n /* v8 ignore if -- the try..catch block above already throws if a key is an alias */\n if (!CST.isScalar(relevantNode.srcToken?.key)) {\n return null;\n }\n CST.setScalarValue(relevantNode.srcToken.key, newName);\n }\n\n // v8 ignore else -- TODO: add test #40625\n if (newValue) {\n // We only support scalar values when substituting. This explicitly avoids\n // substituting aliases, since those can be resolved from a shared location,\n // and replacing either the referrent anchor or the alias would be wrong in\n // the general case. We leave this up to the user, e.g. via a Regex custom\n // manager.\n if (!CST.isScalar(relevantNode.srcToken?.value)) {\n return null;\n }\n CST.setScalarValue(relevantNode.srcToken.value, newValue);\n }\n\n return document;\n}\n\nfunction getDepPath({\n catalogName,\n depName,\n usesImplicitDefaultCatalog,\n}: {\n usesImplicitDefaultCatalog: boolean;\n catalogName: string;\n depName: string;\n}): string[] {\n if (catalogName === 'default' && usesImplicitDefaultCatalog) {\n return ['catalog', depName];\n }\n return ['catalogs', catalogName, depName];\n}\n"],"mappings":";;;;;;;AASA,SAAgB,8BAA8B,EAC5C,aACA,WACwC;CACxC,MAAM,EAAE,SAAS,YAAY;CAE7B,MAAM,cAAc,SAAS,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE;CAG7C,IAAI,CAAC,SAAS,WAAW,KAAK,YAAA,4BAAoC;EAChE,OAAO,MACL,2EACF;EACA,OAAO;CACT;CAEA,IAAI,EAAE,aAAa;CAEnB,WAAW,eAAe,OAAO,KAAK;CACtC,WAAW,oBAAoB,UAAU,OAAO,KAAK;CAErD,OAAO,MACL,wCAAwC,QAAQ,GAAG,QAAQ,KAAK,UAClE;CAEA,IAAI;CACJ,IAAI;CAEJ,IAAI;EAOF,WAAW,cAAc,aAAa,EAAE,kBAAkB,KAAK,CAAC;EAChE,iBAAiB,kBAAkB,MAAM,WAAW;CACtD,SAAS,KAAK;EACZ,OAAO,MAAM,EAAE,IAAI,GAAG,2CAA2C;EACjE,OAAO;CACT;CAMA,MAAM,6BAA6B,eAAe,YAAY,KAAA;CAC9D,MAAM,kBAAkB,eAAe,YAAA;CAEvC,IAAI;CACJ,IAAI,iBACF,IAAI,gBAAgB,aAAa,4BAC/B,aAAa,eAAe,UAAU;MAEtC,aAAa,eAAe,WAAW,YAAY,GAAG;MAGxD,aAAa,eAAe,YAAY;CAG1C,IAAI,eAAe,UAAU;EAC3B,OAAO,MAAM,4BAA4B;EACzC,OAAO;CACT;CAGA,MAAM,OAAO,kBACT,WAAW;EACA;EACT;EACA;CACF,CAAC,IACD,CAAC,aAAa,OAAQ;CAE1B,MAAM,mBAAmB,mBAAmB,UAAU,MAAM;EAC1D;EACA,SAAS,QAAQ;CACnB,CAAC;CAED,IAAI,CAAC,kBAGH,OAAO;;CAIT,IAAI,CAAC,iBAAiB,UAAU,UAC9B,OAAO;CAGT,OAAO,IAAI,UAAU,iBAAiB,SAAS,QAAQ;AACzD;;;;;AAMA,SAAS,mBACP,UACA,MACA,EAAE,SAAS,YACM;CACjB,MAAM,aAAa,KAAK,MAAM,GAAG,EAAE;CACnC,MAAM,kBAAkB,KAAK,GAAG,EAAE;CAElC,MAAM,aAAa,SAAS,MAAM,UAAU;CAE5C,IAAI,CAAC,cAAc,CAAC,aAAa,UAAU,GACzC,OAAO;CAGT,MAAM,eAAe,WAAW,MAAM,MACnC,SACC,OAAO,IAAI,KAAK,SAAS,KAAK,GAAG,KAAK,KAAK,IAAI,UAAU,eAC7D;CAEA,IAAI,CAAC,gBAAgB,CAAC,OAAO,YAAY,GACvC,OAAO;CAGT,IAAI,SAAS;;EAEX,IAAI,CAAC,IAAI,SAAS,aAAa,UAAU,GAAG,GAC1C,OAAO;EAET,IAAI,eAAe,aAAa,SAAS,KAAK,OAAO;CACvD;;CAGA,IAAI,UAAU;EAMZ,IAAI,CAAC,IAAI,SAAS,aAAa,UAAU,KAAK,GAC5C,OAAO;EAET,IAAI,eAAe,aAAa,SAAS,OAAO,QAAQ;CAC1D;CAEA,OAAO;AACT;AAEA,SAAS,WAAW,EAClB,aACA,SACA,8BAKW;CACX,IAAI,gBAAgB,aAAa,4BAC/B,OAAO,CAAC,WAAW,OAAO;CAE5B,OAAO;EAAC;EAAY;EAAa;CAAO;AAC1C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yarn.js","names":[],"sources":["../../../../../../lib/modules/manager/npm/update/dependency/yarn.ts"],"sourcesContent":["import { isObject, isString } from '@sindresorhus/is';\nimport type { Document } from 'yaml';\nimport { CST, isCollection, isPair, isScalar, parseDocument } from 'yaml';\nimport { logger } from '../../../../../logger/index.ts';\nimport type { UpdateDependencyConfig } from '../../../types.ts';\nimport { YarnConfig } from '../../schema.ts';\nimport { getNewGitValue, getNewNpmAliasValue } from './common.ts';\n\nexport function updateYarnrcCatalogDependency({\n fileContent,\n upgrade,\n}: UpdateDependencyConfig): string | null {\n const { depType, depName } = upgrade;\n\n const catalogName = depType?.split('.').at(-1);\n\n if (!isString(catalogName)) {\n logger.error(\n 'No catalogName was found; this is likely an extraction error.',\n );\n return null;\n }\n\n let { newValue } = upgrade;\n\n newValue = getNewGitValue(upgrade) ?? newValue;\n newValue = getNewNpmAliasValue(newValue, upgrade) ?? newValue;\n\n logger.trace(\n `npm.updateYarnrcCatalogDependency(): ${depType}::${catalogName}.${depName} = ${newValue}`,\n );\n\n let document: ReturnType<typeof parseDocument>;\n let parsedContents: YarnConfig;\n\n try {\n // In order to preserve the original formatting as much as possible, we want\n // manipulate the CST directly. Using the AST (the result of parseDocument)\n // does not guarantee that formatting would be the same after\n // stringification. However, the CST is more annoying to query for certain\n // values. Thus, we use both an annotated AST and a JS representation; the\n // former for manipulation, and the latter for querying/validation.\n document = parseDocument(fileContent, { keepSourceTokens: true });\n parsedContents = YarnConfig.parse(document.toString());\n } catch (err) {\n logger.debug({ err }, 'Could not parse yarnrc YAML file.');\n return null;\n }\n\n let oldVersion: string | undefined;\n if (catalogName === 'default') {\n oldVersion = parsedContents.catalog?.[depName!];\n } else if (\n isObject(parsedContents.catalogs?.[catalogName]) &&\n isString(depName)\n ) {\n oldVersion = parsedContents.catalogs?.[catalogName][depName];\n }\n\n if (oldVersion === newValue) {\n logger.trace('Version is already updated');\n return fileContent;\n }\n\n // Update the value\n const path = getDepPath({\n depName: depName!,\n catalogName,\n });\n\n const modifiedDocument = changeDependencyIn(document, path, {\n newValue,\n newName: upgrade.newName,\n });\n\n if (!modifiedDocument) {\n // Case where we are explicitly unable to substitute the key/value, for\n // example if the value was an alias.\n return null;\n }\n\n return CST.stringify(modifiedDocument.contents!.srcToken!);\n}\n\n/**\n * Change the scalar name and/or value of a collection item in a YAML document,\n * while keeping formatting consistent. Mutates the given document.\n */\nfunction changeDependencyIn(\n document: Document,\n path: string[],\n { newName, newValue }: { newName?: string; newValue?: string },\n): Document | null {\n const parentPath = path.slice(0, -1);\n const relevantItemKey = path.at(-1);\n\n const parentNode = document.getIn(parentPath);\n\n if (!parentNode || !isCollection(parentNode)) {\n return null;\n }\n\n const relevantNode = parentNode.items.find(\n (item) =>\n isPair(item) && isScalar(item.key) && item.key.value === relevantItemKey,\n );\n\n if (!relevantNode || !isPair(relevantNode)) {\n return null;\n }\n\n if (newName) {\n /* the try..catch block above already throws if a key is an alias */\n CST.setScalarValue(relevantNode.srcToken!.key!, newName);\n }\n\n // v8 ignore else -- TODO: add test #40625\n if (newValue) {\n // We only support scalar values when substituting. This explicitly avoids\n // substituting aliases, since those can be resolved from a shared location,\n // and replacing either the referrent anchor or the alias would be wrong in\n // the general case. We leave this up to the user, e.g. via a Regex custom\n // manager.\n if (!CST.isScalar(relevantNode.srcToken?.value)) {\n return null;\n }\n CST.setScalarValue(relevantNode.srcToken.value, newValue);\n }\n\n return document;\n}\n\nfunction getDepPath({\n catalogName,\n depName,\n}: {\n catalogName: string;\n depName: string;\n}): string[] {\n if (catalogName === 'default') {\n return ['catalog', depName];\n }
|
|
1
|
+
{"version":3,"file":"yarn.js","names":[],"sources":["../../../../../../lib/modules/manager/npm/update/dependency/yarn.ts"],"sourcesContent":["import { isObject, isString } from '@sindresorhus/is';\nimport type { Document } from 'yaml';\nimport { CST, isCollection, isPair, isScalar, parseDocument } from 'yaml';\nimport { logger } from '../../../../../logger/index.ts';\nimport type { UpdateDependencyConfig } from '../../../types.ts';\nimport { YarnConfig } from '../../schema.ts';\nimport { getNewGitValue, getNewNpmAliasValue } from './common.ts';\n\nexport function updateYarnrcCatalogDependency({\n fileContent,\n upgrade,\n}: UpdateDependencyConfig): string | null {\n const { depType, depName } = upgrade;\n\n const catalogName = depType?.split('.').at(-1);\n\n if (!isString(catalogName)) {\n logger.error(\n 'No catalogName was found; this is likely an extraction error.',\n );\n return null;\n }\n\n let { newValue } = upgrade;\n\n newValue = getNewGitValue(upgrade) ?? newValue;\n newValue = getNewNpmAliasValue(newValue, upgrade) ?? newValue;\n\n logger.trace(\n `npm.updateYarnrcCatalogDependency(): ${depType}::${catalogName}.${depName} = ${newValue}`,\n );\n\n let document: ReturnType<typeof parseDocument>;\n let parsedContents: YarnConfig;\n\n try {\n // In order to preserve the original formatting as much as possible, we want\n // manipulate the CST directly. Using the AST (the result of parseDocument)\n // does not guarantee that formatting would be the same after\n // stringification. However, the CST is more annoying to query for certain\n // values. Thus, we use both an annotated AST and a JS representation; the\n // former for manipulation, and the latter for querying/validation.\n document = parseDocument(fileContent, { keepSourceTokens: true });\n parsedContents = YarnConfig.parse(document.toString());\n } catch (err) {\n logger.debug({ err }, 'Could not parse yarnrc YAML file.');\n return null;\n }\n\n let oldVersion: string | undefined;\n if (catalogName === 'default') {\n oldVersion = parsedContents.catalog?.[depName!];\n } else if (\n isObject(parsedContents.catalogs?.[catalogName]) &&\n isString(depName)\n ) {\n oldVersion = parsedContents.catalogs?.[catalogName][depName];\n }\n\n if (oldVersion === newValue) {\n logger.trace('Version is already updated');\n return fileContent;\n }\n\n // Update the value\n const path = getDepPath({\n depName: depName!,\n catalogName,\n });\n\n const modifiedDocument = changeDependencyIn(document, path, {\n newValue,\n newName: upgrade.newName,\n });\n\n if (!modifiedDocument) {\n // Case where we are explicitly unable to substitute the key/value, for\n // example if the value was an alias.\n return null;\n }\n\n return CST.stringify(modifiedDocument.contents!.srcToken!);\n}\n\n/**\n * Change the scalar name and/or value of a collection item in a YAML document,\n * while keeping formatting consistent. Mutates the given document.\n */\nfunction changeDependencyIn(\n document: Document,\n path: string[],\n { newName, newValue }: { newName?: string; newValue?: string },\n): Document | null {\n const parentPath = path.slice(0, -1);\n const relevantItemKey = path.at(-1);\n\n const parentNode = document.getIn(parentPath);\n\n if (!parentNode || !isCollection(parentNode)) {\n return null;\n }\n\n const relevantNode = parentNode.items.find(\n (item) =>\n isPair(item) && isScalar(item.key) && item.key.value === relevantItemKey,\n );\n\n if (!relevantNode || !isPair(relevantNode)) {\n return null;\n }\n\n if (newName) {\n /* the try..catch block above already throws if a key is an alias */\n CST.setScalarValue(relevantNode.srcToken!.key!, newName);\n }\n\n // v8 ignore else -- TODO: add test #40625\n if (newValue) {\n // We only support scalar values when substituting. This explicitly avoids\n // substituting aliases, since those can be resolved from a shared location,\n // and replacing either the referrent anchor or the alias would be wrong in\n // the general case. We leave this up to the user, e.g. via a Regex custom\n // manager.\n if (!CST.isScalar(relevantNode.srcToken?.value)) {\n return null;\n }\n CST.setScalarValue(relevantNode.srcToken.value, newValue);\n }\n\n return document;\n}\n\nfunction getDepPath({\n catalogName,\n depName,\n}: {\n catalogName: string;\n depName: string;\n}): string[] {\n if (catalogName === 'default') {\n return ['catalog', depName];\n }\n return ['catalogs', catalogName, depName];\n}\n"],"mappings":";;;;;;AAQA,SAAgB,8BAA8B,EAC5C,aACA,WACwC;CACxC,MAAM,EAAE,SAAS,YAAY;CAE7B,MAAM,cAAc,SAAS,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE;CAE7C,IAAI,CAAC,SAAS,WAAW,GAAG;EAC1B,OAAO,MACL,+DACF;EACA,OAAO;CACT;CAEA,IAAI,EAAE,aAAa;CAEnB,WAAW,eAAe,OAAO,KAAK;CACtC,WAAW,oBAAoB,UAAU,OAAO,KAAK;CAErD,OAAO,MACL,wCAAwC,QAAQ,IAAI,YAAY,GAAG,QAAQ,KAAK,UAClF;CAEA,IAAI;CACJ,IAAI;CAEJ,IAAI;EAOF,WAAW,cAAc,aAAa,EAAE,kBAAkB,KAAK,CAAC;EAChE,iBAAiB,WAAW,MAAM,SAAS,SAAS,CAAC;CACvD,SAAS,KAAK;EACZ,OAAO,MAAM,EAAE,IAAI,GAAG,mCAAmC;EACzD,OAAO;CACT;CAEA,IAAI;CACJ,IAAI,gBAAgB,WAClB,aAAa,eAAe,UAAU;MACjC,IACL,SAAS,eAAe,WAAW,YAAY,KAC/C,SAAS,OAAO,GAEhB,aAAa,eAAe,WAAW,YAAY,CAAC;CAGtD,IAAI,eAAe,UAAU;EAC3B,OAAO,MAAM,4BAA4B;EACzC,OAAO;CACT;CAGA,MAAM,OAAO,WAAW;EACb;EACT;CACF,CAAC;CAED,MAAM,mBAAmB,mBAAmB,UAAU,MAAM;EAC1D;EACA,SAAS,QAAQ;CACnB,CAAC;CAED,IAAI,CAAC,kBAGH,OAAO;CAGT,OAAO,IAAI,UAAU,iBAAiB,SAAU,QAAS;AAC3D;;;;;AAMA,SAAS,mBACP,UACA,MACA,EAAE,SAAS,YACM;CACjB,MAAM,aAAa,KAAK,MAAM,GAAG,EAAE;CACnC,MAAM,kBAAkB,KAAK,GAAG,EAAE;CAElC,MAAM,aAAa,SAAS,MAAM,UAAU;CAE5C,IAAI,CAAC,cAAc,CAAC,aAAa,UAAU,GACzC,OAAO;CAGT,MAAM,eAAe,WAAW,MAAM,MACnC,SACC,OAAO,IAAI,KAAK,SAAS,KAAK,GAAG,KAAK,KAAK,IAAI,UAAU,eAC7D;CAEA,IAAI,CAAC,gBAAgB,CAAC,OAAO,YAAY,GACvC,OAAO;CAGT,IAAI,SAEF,IAAI,eAAe,aAAa,SAAU,KAAM,OAAO;;CAIzD,IAAI,UAAU;EAMZ,IAAI,CAAC,IAAI,SAAS,aAAa,UAAU,KAAK,GAC5C,OAAO;EAET,IAAI,eAAe,aAAa,SAAS,OAAO,QAAQ;CAC1D;CAEA,OAAO;AACT;AAEA,SAAS,WAAW,EAClB,aACA,WAIW;CACX,IAAI,gBAAgB,WAClB,OAAO,CAAC,WAAW,OAAO;CAE5B,OAAO;EAAC;EAAY;EAAa;CAAO;AAC1C"}
|
|
@@ -41,7 +41,7 @@ function extractPackageFile(content, packageFile, _config) {
|
|
|
41
41
|
});
|
|
42
42
|
continue;
|
|
43
43
|
}
|
|
44
|
-
const currentValue = parts
|
|
44
|
+
const currentValue = parts.at(-1);
|
|
45
45
|
const result = {
|
|
46
46
|
datasource: MavenDatasource.id,
|
|
47
47
|
depName: `${parts[0]}:${parts[1]}`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","names":["json5"],"sources":["../../../../lib/modules/manager/osgi/extract.ts"],"sourcesContent":["import { isArray, isNullOrUndefined } from '@sindresorhus/is';\nimport json5 from 'json5';\nimport { coerce, satisfies } from 'semver';\nimport { logger } from '../../../logger/index.ts';\nimport { MavenDatasource } from '../../datasource/maven/index.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\nimport type { Bundle, FeatureModel } from './types.ts';\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n _config?: ExtractConfig,\n): PackageFileContent | null {\n // References:\n // - OSGi compendium release 8 ( https://docs.osgi.org/specification/osgi.cmpn/8.0.0/service.feature.html )\n // - The Sling implementation of the feature model ( https://sling.apache.org/documentation/development/feature-model.html )\n logger.trace(`osgi.extractPackageFile($packageFile)`);\n\n const deps: PackageDependency[] = [];\n let featureModel: FeatureModel;\n try {\n // Compendium R8 159.3: JS comments are supported\n featureModel = json5.parse<FeatureModel>(content);\n } catch (err) {\n logger.warn({ packageFile, err }, 'Failed to parse osgi file');\n return null;\n }\n\n if (\n // for empty an empty result\n isNullOrUndefined(featureModel) ||\n // Compendium R8 159.9: resource versioning\n !isSupportedFeatureResourceVersion(featureModel, packageFile)\n ) {\n return null;\n }\n\n // OSGi Compendium R8 159.4: bundles entry\n const allBundles = featureModel.bundles ?? [];\n\n // The 'execution-environment' key is supported by the Sling/OSGi feature model implementation\n const execEnvFramework =\n featureModel['execution-environment:JSON|false']?.framework;\n if (!isNullOrUndefined(execEnvFramework)) {\n allBundles.push(execEnvFramework);\n }\n\n // parse custom sections\n //\n // Note: we do not support artifact list extensions as defined in\n // section 159.7.3 yet. As of 05-12-2022, there is no implementation that\n // supports this\n for (const [section, value] of Object.entries(featureModel)) {\n logger.trace({ fileName: packageFile, section }, 'Parsing section');\n const customSectionEntries = extractArtifactList(section, value);\n allBundles.push(...customSectionEntries);\n }\n\n // convert bundles to dependencies\n for (const entry of allBundles) {\n const rawGav = typeof entry === 'string' ? entry : entry.id;\n // skip invalid definitions, such as objects without an id set\n if (!rawGav) {\n continue;\n }\n\n // both '/' and ':' are valid separators, but the Maven datasource\n // expects the separator to be ':'\n const gav = rawGav.replace(/\\//g, ':');\n\n // identifiers support 3-5 parts, see OSGi R8 - 159.2.1 Identifiers\n // groupId ':' artifactId ( ':' type ( ':' classifier )? )? ':' version\n const parts = gav.split(':');\n if (parts.length < 3 || parts.length > 5) {\n deps.push({\n depName: gav,\n skipReason: 'invalid-value',\n });\n continue;\n }\n // parsing should use the last entry for the version\n const currentValue = parts
|
|
1
|
+
{"version":3,"file":"extract.js","names":["json5"],"sources":["../../../../lib/modules/manager/osgi/extract.ts"],"sourcesContent":["import { isArray, isNullOrUndefined } from '@sindresorhus/is';\nimport json5 from 'json5';\nimport { coerce, satisfies } from 'semver';\nimport { logger } from '../../../logger/index.ts';\nimport { MavenDatasource } from '../../datasource/maven/index.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\nimport type { Bundle, FeatureModel } from './types.ts';\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n _config?: ExtractConfig,\n): PackageFileContent | null {\n // References:\n // - OSGi compendium release 8 ( https://docs.osgi.org/specification/osgi.cmpn/8.0.0/service.feature.html )\n // - The Sling implementation of the feature model ( https://sling.apache.org/documentation/development/feature-model.html )\n logger.trace(`osgi.extractPackageFile($packageFile)`);\n\n const deps: PackageDependency[] = [];\n let featureModel: FeatureModel;\n try {\n // Compendium R8 159.3: JS comments are supported\n featureModel = json5.parse<FeatureModel>(content);\n } catch (err) {\n logger.warn({ packageFile, err }, 'Failed to parse osgi file');\n return null;\n }\n\n if (\n // for empty an empty result\n isNullOrUndefined(featureModel) ||\n // Compendium R8 159.9: resource versioning\n !isSupportedFeatureResourceVersion(featureModel, packageFile)\n ) {\n return null;\n }\n\n // OSGi Compendium R8 159.4: bundles entry\n const allBundles = featureModel.bundles ?? [];\n\n // The 'execution-environment' key is supported by the Sling/OSGi feature model implementation\n const execEnvFramework =\n featureModel['execution-environment:JSON|false']?.framework;\n if (!isNullOrUndefined(execEnvFramework)) {\n allBundles.push(execEnvFramework);\n }\n\n // parse custom sections\n //\n // Note: we do not support artifact list extensions as defined in\n // section 159.7.3 yet. As of 05-12-2022, there is no implementation that\n // supports this\n for (const [section, value] of Object.entries(featureModel)) {\n logger.trace({ fileName: packageFile, section }, 'Parsing section');\n const customSectionEntries = extractArtifactList(section, value);\n allBundles.push(...customSectionEntries);\n }\n\n // convert bundles to dependencies\n for (const entry of allBundles) {\n const rawGav = typeof entry === 'string' ? entry : entry.id;\n // skip invalid definitions, such as objects without an id set\n if (!rawGav) {\n continue;\n }\n\n // both '/' and ':' are valid separators, but the Maven datasource\n // expects the separator to be ':'\n const gav = rawGav.replace(/\\//g, ':');\n\n // identifiers support 3-5 parts, see OSGi R8 - 159.2.1 Identifiers\n // groupId ':' artifactId ( ':' type ( ':' classifier )? )? ':' version\n const parts = gav.split(':');\n if (parts.length < 3 || parts.length > 5) {\n deps.push({\n depName: gav,\n skipReason: 'invalid-value',\n });\n continue;\n }\n // parsing should use the last entry for the version\n const currentValue = parts.at(-1)!;\n const result: PackageDependency = {\n datasource: MavenDatasource.id,\n depName: `${parts[0]}:${parts[1]}`,\n };\n if (currentValue.includes('${')) {\n result.skipReason = 'contains-variable';\n } else {\n result.currentValue = currentValue;\n }\n\n deps.push(result);\n }\n\n return deps.length ? { deps } : null;\n}\n\nfunction isSupportedFeatureResourceVersion(\n featureModel: FeatureModel,\n fileName: string,\n): boolean {\n const resourceVersion = featureModel['feature-resource-version'];\n if (resourceVersion) {\n const resourceSemVer = coerce(resourceVersion);\n if (!resourceSemVer) {\n logger.debug(\n `Skipping file ${fileName} due to invalid feature-resource-version '${resourceVersion}'`,\n );\n return false;\n }\n\n // we only support 1.x, although no over version has been defined\n if (!satisfies(resourceSemVer, '^1')) {\n logger.debug(\n `Skipping file ${fileName} due to unsupported feature-resource-version '${resourceVersion}'`,\n );\n return false;\n }\n }\n\n return true;\n}\n\nfunction extractArtifactList(\n sectionName: string,\n sectionValue: unknown,\n): Bundle[] {\n // The 'ARTIFACTS' key is supported by the Sling/OSGi feature model implementation\n if (sectionName.includes(':ARTIFACTS|') && isArray(sectionValue)) {\n return sectionValue as Bundle[];\n }\n\n return [];\n}\n"],"mappings":";;;;;;AAYA,SAAgB,mBACd,SACA,aACA,SAC2B;CAI3B,OAAO,MAAM,uCAAuC;CAEpD,MAAM,OAA4B,CAAC;CACnC,IAAI;CACJ,IAAI;EAEF,eAAeA,MAAM,MAAoB,OAAO;CAClD,SAAS,KAAK;EACZ,OAAO,KAAK;GAAE;GAAa;EAAI,GAAG,2BAA2B;EAC7D,OAAO;CACT;CAEA,IAEE,kBAAkB,YAAY,KAE9B,CAAC,kCAAkC,cAAc,WAAW,GAE5D,OAAO;CAIT,MAAM,aAAa,aAAa,WAAW,CAAC;CAG5C,MAAM,mBACJ,aAAa,mCAAmC,EAAE;CACpD,IAAI,CAAC,kBAAkB,gBAAgB,GACrC,WAAW,KAAK,gBAAgB;CAQlC,KAAK,MAAM,CAAC,SAAS,UAAU,OAAO,QAAQ,YAAY,GAAG;EAC3D,OAAO,MAAM;GAAE,UAAU;GAAa;EAAQ,GAAG,iBAAiB;EAClE,MAAM,uBAAuB,oBAAoB,SAAS,KAAK;EAC/D,WAAW,KAAK,GAAG,oBAAoB;CACzC;CAGA,KAAK,MAAM,SAAS,YAAY;EAC9B,MAAM,SAAS,OAAO,UAAU,WAAW,QAAQ,MAAM;EAEzD,IAAI,CAAC,QACH;EAKF,MAAM,MAAM,OAAO,QAAQ,OAAO,GAAG;EAIrC,MAAM,QAAQ,IAAI,MAAM,GAAG;EAC3B,IAAI,MAAM,SAAS,KAAK,MAAM,SAAS,GAAG;GACxC,KAAK,KAAK;IACR,SAAS;IACT,YAAY;GACd,CAAC;GACD;EACF;EAEA,MAAM,eAAe,MAAM,GAAG,EAAE;EAChC,MAAM,SAA4B;GAChC,YAAY,gBAAgB;GAC5B,SAAS,GAAG,MAAM,GAAG,GAAG,MAAM;EAChC;EACA,IAAI,aAAa,SAAS,IAAI,GAC5B,OAAO,aAAa;OAEpB,OAAO,eAAe;EAGxB,KAAK,KAAK,MAAM;CAClB;CAEA,OAAO,KAAK,SAAS,EAAE,KAAK,IAAI;AAClC;AAEA,SAAS,kCACP,cACA,UACS;CACT,MAAM,kBAAkB,aAAa;CACrC,IAAI,iBAAiB;EACnB,MAAM,iBAAiB,OAAO,eAAe;EAC7C,IAAI,CAAC,gBAAgB;GACnB,OAAO,MACL,iBAAiB,SAAS,4CAA4C,gBAAgB,EACxF;GACA,OAAO;EACT;EAGA,IAAI,CAAC,UAAU,gBAAgB,IAAI,GAAG;GACpC,OAAO,MACL,iBAAiB,SAAS,gDAAgD,gBAAgB,EAC5F;GACA,OAAO;EACT;CACF;CAEA,OAAO;AACT;AAEA,SAAS,oBACP,aACA,cACU;CAEV,IAAI,YAAY,SAAS,aAAa,KAAK,QAAQ,YAAY,GAC7D,OAAO;CAGT,OAAO,CAAC;AACV"}
|
|
@@ -152,7 +152,7 @@ async function getUsernamePassword(url) {
|
|
|
152
152
|
if (url.hostname.endsWith(".pkg.dev")) {
|
|
153
153
|
const hostRule = await getGoogleAuthHostRule();
|
|
154
154
|
if (hostRule) return hostRule;
|
|
155
|
-
|
|
155
|
+
logger.once.debug({ url }, "Could not get Google access token");
|
|
156
156
|
}
|
|
157
157
|
return {};
|
|
158
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uv.js","names":[],"sources":["../../../../../lib/modules/manager/pep621/processors/uv.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport { TEMPORARY_ERROR } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { HostRule } from '../../../../types/index.ts';\nimport { exec } from '../../../../util/exec/index.ts';\nimport type {\n ExecOptions,\n ToolConstraint,\n} from '../../../../util/exec/types.ts';\nimport {\n findLocalSiblingOrParent,\n readLocalFile,\n} from '../../../../util/fs/index.ts';\nimport { getGitEnvironmentVariables } from '../../../../util/git/auth.ts';\nimport { find } from '../../../../util/host-rules.ts';\nimport { Result } from '../../../../util/result.ts';\nimport { parseUrl } from '../../../../util/url.ts';\nimport { PypiDatasource } from '../../../datasource/pypi/index.ts';\nimport { getGoogleAuthHostRule } from '../../../datasource/util.ts';\nimport type {\n PackageDependency,\n UpdateArtifact,\n UpdateArtifactsResult,\n Upgrade,\n} from '../../types.ts';\nimport { applyGitSource } from '../../util.ts';\nimport { type PyProject, UvLockfile } from '../schema.ts';\nimport { depTypes } from '../utils.ts';\n\nimport { BasePyProjectProcessor } from './abstract.ts';\n\nconst uvUpdateCMD = 'uv lock';\n\nexport class UvProcessor extends BasePyProjectProcessor {\n override lockfileName = 'uv.lock';\n\n process(project: PyProject, deps: PackageDependency[]): PackageDependency[] {\n const uv = project.tool?.uv;\n if (!uv) {\n return deps;\n }\n\n const hasExplicitDefault = uv.index?.some(\n (index) => index.default && index.explicit,\n );\n const defaultIndex = uv.index?.find(\n (index) => index.default && !index.explicit,\n );\n const implicitIndexUrls = uv.index\n ?.filter((index) => !index.explicit && index.name !== defaultIndex?.name)\n ?.map(({ url }) => url);\n\n const devDependencies = uv['dev-dependencies'];\n if (devDependencies) {\n deps.push(...devDependencies);\n }\n\n // https://docs.astral.sh/uv/concepts/dependencies/#dependency-sources\n // Skip sources that do not make sense to handle (e.g. path).\n if (uv.sources || defaultIndex || implicitIndexUrls) {\n for (const dep of deps) {\n /* v8 ignore next 3 -- needs test */\n if (!dep.packageName) {\n continue;\n }\n\n if (dep.depType === 'requires-python') {\n continue;\n }\n\n // Using `packageName` as it applies PEP 508 normalization, which is\n // also applied by uv when matching a source to a dependency.\n const depSource = uv.sources?.[dep.packageName];\n if (depSource) {\n // Dependency is pinned to a specific source.\n dep.depType = depTypes.uvSources;\n if ('index' in depSource) {\n const index = uv.index?.find(\n ({ name }) => name === depSource.index,\n );\n if (index) {\n dep.registryUrls = [index.url];\n }\n } else if ('git' in depSource) {\n applyGitSource(\n dep,\n depSource.git,\n depSource.rev,\n depSource.tag,\n depSource.branch,\n );\n } else if ('url' in depSource) {\n dep.skipReason = 'unsupported-url';\n } else if ('path' in depSource) {\n dep.skipReason = 'path-dependency';\n } else if ('workspace' in depSource) {\n dep.skipReason = 'inherited-dependency';\n } else {\n /* v8 ignore next -- unreachable through schema */\n dep.skipReason = 'unknown-registry';\n }\n } else {\n // Dependency is not pinned to a specific source, so we need to\n // determine the source based on the index configuration.\n if (hasExplicitDefault) {\n // don't fall back to pypi if there is an explicit default index\n dep.registryUrls = [];\n } else if (defaultIndex) {\n // There is a default index configured, so use it.\n dep.registryUrls = [defaultIndex.url];\n }\n\n if (implicitIndexUrls?.length) {\n // If there are implicit indexes, check them first and fall back\n // to the default.\n dep.registryUrls = implicitIndexUrls.concat(\n dep.registryUrls ?? PypiDatasource.defaultURL,\n );\n }\n }\n }\n }\n\n return deps;\n }\n\n async extractLockedVersions(\n project: PyProject,\n deps: PackageDependency[],\n packageFile: string,\n ): Promise<PackageDependency[]> {\n const lockFileName = await findLocalSiblingOrParent(\n packageFile,\n this.lockfileName,\n );\n if (lockFileName === null) {\n logger.debug({ packageFile }, `No uv lock file found`);\n } else {\n const lockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (lockFileContent) {\n const { val: lockFileMapping, err } = Result.parse(\n lockFileContent,\n UvLockfile,\n ).unwrap();\n\n if (err) {\n logger.debug({ packageFile, err }, `Error parsing uv lock file`);\n } else {\n for (const dep of deps) {\n const packageName = dep.packageName;\n if (packageName && packageName in lockFileMapping) {\n dep.lockedVersion = lockFileMapping[packageName];\n }\n }\n }\n }\n }\n\n return Promise.resolve(deps);\n }\n\n async updateArtifacts(\n updateArtifact: UpdateArtifact,\n project: PyProject,\n ): Promise<UpdateArtifactsResult[] | null> {\n const { config, updatedDeps, packageFileName } = updateArtifact;\n\n const { isLockFileMaintenance } = config;\n\n // abort if no lockfile is defined\n const lockFileName = await findLocalSiblingOrParent(\n packageFileName,\n 'uv.lock',\n );\n if (lockFileName === null) {\n logger.debug({ packageFileName }, `No uv lock file found`);\n return null;\n }\n try {\n const existingLockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (!existingLockFileContent) {\n logger.debug('No uv.lock found');\n return null;\n }\n\n const pythonConstraint: ToolConstraint = {\n toolName: 'python',\n constraint:\n config.constraints?.python ?? project.project?.['requires-python'],\n };\n const uvConstraint: ToolConstraint = {\n toolName: 'uv',\n constraint:\n config.constraints?.uv ?? project.tool?.uv?.['required-version'],\n };\n\n const extraEnv = {\n ...getGitEnvironmentVariables(['pep621']),\n ...(await getUvExtraIndexUrl(project, updateArtifact.updatedDeps)),\n ...(await getUvIndexCredentials(project)),\n };\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n extraEnv,\n docker: {},\n toolConstraints: [pythonConstraint, uvConstraint],\n };\n\n // on lockFileMaintenance do not specify any packages and update the complete lock file\n // else only update specific packages\n let cmd: string;\n if (isLockFileMaintenance) {\n cmd = `${uvUpdateCMD} --upgrade`;\n } else {\n cmd = generateCMD(updatedDeps);\n }\n await exec(cmd, execOptions);\n\n // check for changes\n const fileChanges: UpdateArtifactsResult[] = [];\n const newLockContent = await readLocalFile(lockFileName, 'utf8');\n const isLockFileChanged = existingLockFileContent !== newLockContent;\n if (isLockFileChanged) {\n fileChanges.push({\n file: {\n type: 'addition',\n path: lockFileName,\n contents: newLockContent,\n },\n });\n } else {\n logger.debug('uv.lock is unchanged');\n }\n\n return fileChanges.length ? fileChanges : null;\n } catch (err) {\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.debug({ err }, 'Failed to update uv lock file');\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: err.message,\n },\n },\n ];\n }\n }\n}\n\nfunction generateCMD(updatedDeps: Upgrade[]): string {\n const deps: string[] = [];\n\n for (const dep of updatedDeps) {\n switch (dep.depType) {\n case depTypes.optionalDependencies: {\n deps.push(dep.depName!);\n break;\n }\n case depTypes.uvDevDependencies:\n case depTypes.uvSources: {\n deps.push(dep.depName!);\n break;\n }\n case depTypes.buildSystemRequires:\n // build requirements are not locked in the lock files, no need to update.\n break;\n default: {\n deps.push(dep.packageName!);\n }\n }\n }\n\n return `${uvUpdateCMD} ${deps.map((dep) => `--upgrade-package ${quote(dep)}`).join(' ')}`;\n}\n\nfunction getMatchingHostRule(url: string | undefined): HostRule {\n return find({ hostType: PypiDatasource.id, url });\n}\n\nasync function getUsernamePassword(\n url: URL,\n): Promise<{ username?: string; password?: string }> {\n const rule = getMatchingHostRule(url.toString());\n if (rule.username || rule.password) {\n return rule;\n }\n\n if (url.hostname.endsWith('.pkg.dev')) {\n const hostRule = await getGoogleAuthHostRule();\n if (hostRule) {\n return hostRule;\n } else {\n logger.once.debug({ url }, 'Could not get Google access token');\n }\n }\n\n return {};\n}\n\nasync function getUvExtraIndexUrl(\n project: PyProject,\n deps: Upgrade[],\n): Promise<NodeJS.ProcessEnv> {\n const pyPiRegistryUrls = deps\n .filter((dep) => dep.datasource === PypiDatasource.id)\n .filter((dep) => {\n // Remove dependencies that are pinned to a specific index\n const sources = project.tool?.uv?.sources;\n const packageName = dep.packageName!;\n return !sources || !(packageName in sources);\n })\n .flatMap((dep) => dep.registryUrls)\n .filter(isString)\n .filter((registryUrl) => {\n // Check if the registry URL is not the default one and not already configured\n const configuredIndexUrls =\n project.tool?.uv?.index?.map(({ url }) => url) ?? [];\n return (\n registryUrl !== PypiDatasource.defaultURL &&\n !configuredIndexUrls.includes(registryUrl)\n );\n });\n\n const registryUrls = new Set(pyPiRegistryUrls);\n const extraIndexUrls: string[] = [];\n\n for (const registryUrl of registryUrls) {\n const parsedUrl = parseUrl(registryUrl);\n if (!parsedUrl) {\n continue;\n }\n\n const { username, password } = await getUsernamePassword(parsedUrl);\n if (username || password) {\n if (username) {\n parsedUrl.username = username;\n }\n if (password) {\n parsedUrl.password = password;\n }\n }\n\n extraIndexUrls.push(parsedUrl.toString());\n }\n\n return {\n UV_EXTRA_INDEX_URL: extraIndexUrls.join(' '),\n };\n}\n\nasync function getUvIndexCredentials(\n project: PyProject,\n): Promise<NodeJS.ProcessEnv> {\n const uv_indexes = project.tool?.uv?.index;\n\n if (!uv_indexes) {\n return {};\n }\n\n const entries = [];\n\n for (const { name, url } of uv_indexes) {\n const parsedUrl = parseUrl(url);\n /* v8 ignore next 3 -- needs test */\n if (!parsedUrl) {\n continue;\n }\n\n // If no name is provided for the index, authentication information must be passed through alternative methods\n if (!name) {\n continue;\n }\n\n const { username, password } = await getUsernamePassword(parsedUrl);\n\n const NAME = name.toUpperCase().replace(/[^A-Z0-9]/g, '_');\n\n if (username) {\n entries.push([`UV_INDEX_${NAME}_USERNAME`, username]);\n }\n\n if (password) {\n entries.push([`UV_INDEX_${NAME}_PASSWORD`, password]);\n }\n }\n\n return Object.fromEntries(entries);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"uv.js","names":[],"sources":["../../../../../lib/modules/manager/pep621/processors/uv.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport { TEMPORARY_ERROR } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { HostRule } from '../../../../types/index.ts';\nimport { exec } from '../../../../util/exec/index.ts';\nimport type {\n ExecOptions,\n ToolConstraint,\n} from '../../../../util/exec/types.ts';\nimport {\n findLocalSiblingOrParent,\n readLocalFile,\n} from '../../../../util/fs/index.ts';\nimport { getGitEnvironmentVariables } from '../../../../util/git/auth.ts';\nimport { find } from '../../../../util/host-rules.ts';\nimport { Result } from '../../../../util/result.ts';\nimport { parseUrl } from '../../../../util/url.ts';\nimport { PypiDatasource } from '../../../datasource/pypi/index.ts';\nimport { getGoogleAuthHostRule } from '../../../datasource/util.ts';\nimport type {\n PackageDependency,\n UpdateArtifact,\n UpdateArtifactsResult,\n Upgrade,\n} from '../../types.ts';\nimport { applyGitSource } from '../../util.ts';\nimport { type PyProject, UvLockfile } from '../schema.ts';\nimport { depTypes } from '../utils.ts';\n\nimport { BasePyProjectProcessor } from './abstract.ts';\n\nconst uvUpdateCMD = 'uv lock';\n\nexport class UvProcessor extends BasePyProjectProcessor {\n override lockfileName = 'uv.lock';\n\n process(project: PyProject, deps: PackageDependency[]): PackageDependency[] {\n const uv = project.tool?.uv;\n if (!uv) {\n return deps;\n }\n\n const hasExplicitDefault = uv.index?.some(\n (index) => index.default && index.explicit,\n );\n const defaultIndex = uv.index?.find(\n (index) => index.default && !index.explicit,\n );\n const implicitIndexUrls = uv.index\n ?.filter((index) => !index.explicit && index.name !== defaultIndex?.name)\n ?.map(({ url }) => url);\n\n const devDependencies = uv['dev-dependencies'];\n if (devDependencies) {\n deps.push(...devDependencies);\n }\n\n // https://docs.astral.sh/uv/concepts/dependencies/#dependency-sources\n // Skip sources that do not make sense to handle (e.g. path).\n if (uv.sources || defaultIndex || implicitIndexUrls) {\n for (const dep of deps) {\n /* v8 ignore next 3 -- needs test */\n if (!dep.packageName) {\n continue;\n }\n\n if (dep.depType === 'requires-python') {\n continue;\n }\n\n // Using `packageName` as it applies PEP 508 normalization, which is\n // also applied by uv when matching a source to a dependency.\n const depSource = uv.sources?.[dep.packageName];\n if (depSource) {\n // Dependency is pinned to a specific source.\n dep.depType = depTypes.uvSources;\n if ('index' in depSource) {\n const index = uv.index?.find(\n ({ name }) => name === depSource.index,\n );\n if (index) {\n dep.registryUrls = [index.url];\n }\n } else if ('git' in depSource) {\n applyGitSource(\n dep,\n depSource.git,\n depSource.rev,\n depSource.tag,\n depSource.branch,\n );\n } else if ('url' in depSource) {\n dep.skipReason = 'unsupported-url';\n } else if ('path' in depSource) {\n dep.skipReason = 'path-dependency';\n } else if ('workspace' in depSource) {\n dep.skipReason = 'inherited-dependency';\n } else {\n /* v8 ignore next -- unreachable through schema */\n dep.skipReason = 'unknown-registry';\n }\n } else {\n // Dependency is not pinned to a specific source, so we need to\n // determine the source based on the index configuration.\n if (hasExplicitDefault) {\n // don't fall back to pypi if there is an explicit default index\n dep.registryUrls = [];\n } else if (defaultIndex) {\n // There is a default index configured, so use it.\n dep.registryUrls = [defaultIndex.url];\n }\n\n if (implicitIndexUrls?.length) {\n // If there are implicit indexes, check them first and fall back\n // to the default.\n dep.registryUrls = implicitIndexUrls.concat(\n dep.registryUrls ?? PypiDatasource.defaultURL,\n );\n }\n }\n }\n }\n\n return deps;\n }\n\n async extractLockedVersions(\n project: PyProject,\n deps: PackageDependency[],\n packageFile: string,\n ): Promise<PackageDependency[]> {\n const lockFileName = await findLocalSiblingOrParent(\n packageFile,\n this.lockfileName,\n );\n if (lockFileName === null) {\n logger.debug({ packageFile }, `No uv lock file found`);\n } else {\n const lockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (lockFileContent) {\n const { val: lockFileMapping, err } = Result.parse(\n lockFileContent,\n UvLockfile,\n ).unwrap();\n\n if (err) {\n logger.debug({ packageFile, err }, `Error parsing uv lock file`);\n } else {\n for (const dep of deps) {\n const packageName = dep.packageName;\n if (packageName && packageName in lockFileMapping) {\n dep.lockedVersion = lockFileMapping[packageName];\n }\n }\n }\n }\n }\n\n return Promise.resolve(deps);\n }\n\n async updateArtifacts(\n updateArtifact: UpdateArtifact,\n project: PyProject,\n ): Promise<UpdateArtifactsResult[] | null> {\n const { config, updatedDeps, packageFileName } = updateArtifact;\n\n const { isLockFileMaintenance } = config;\n\n // abort if no lockfile is defined\n const lockFileName = await findLocalSiblingOrParent(\n packageFileName,\n 'uv.lock',\n );\n if (lockFileName === null) {\n logger.debug({ packageFileName }, `No uv lock file found`);\n return null;\n }\n try {\n const existingLockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (!existingLockFileContent) {\n logger.debug('No uv.lock found');\n return null;\n }\n\n const pythonConstraint: ToolConstraint = {\n toolName: 'python',\n constraint:\n config.constraints?.python ?? project.project?.['requires-python'],\n };\n const uvConstraint: ToolConstraint = {\n toolName: 'uv',\n constraint:\n config.constraints?.uv ?? project.tool?.uv?.['required-version'],\n };\n\n const extraEnv = {\n ...getGitEnvironmentVariables(['pep621']),\n ...(await getUvExtraIndexUrl(project, updateArtifact.updatedDeps)),\n ...(await getUvIndexCredentials(project)),\n };\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n extraEnv,\n docker: {},\n toolConstraints: [pythonConstraint, uvConstraint],\n };\n\n // on lockFileMaintenance do not specify any packages and update the complete lock file\n // else only update specific packages\n let cmd: string;\n if (isLockFileMaintenance) {\n cmd = `${uvUpdateCMD} --upgrade`;\n } else {\n cmd = generateCMD(updatedDeps);\n }\n await exec(cmd, execOptions);\n\n // check for changes\n const fileChanges: UpdateArtifactsResult[] = [];\n const newLockContent = await readLocalFile(lockFileName, 'utf8');\n const isLockFileChanged = existingLockFileContent !== newLockContent;\n if (isLockFileChanged) {\n fileChanges.push({\n file: {\n type: 'addition',\n path: lockFileName,\n contents: newLockContent,\n },\n });\n } else {\n logger.debug('uv.lock is unchanged');\n }\n\n return fileChanges.length ? fileChanges : null;\n } catch (err) {\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.debug({ err }, 'Failed to update uv lock file');\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: err.message,\n },\n },\n ];\n }\n }\n}\n\nfunction generateCMD(updatedDeps: Upgrade[]): string {\n const deps: string[] = [];\n\n for (const dep of updatedDeps) {\n switch (dep.depType) {\n case depTypes.optionalDependencies: {\n deps.push(dep.depName!);\n break;\n }\n case depTypes.uvDevDependencies:\n case depTypes.uvSources: {\n deps.push(dep.depName!);\n break;\n }\n case depTypes.buildSystemRequires:\n // build requirements are not locked in the lock files, no need to update.\n break;\n default: {\n deps.push(dep.packageName!);\n }\n }\n }\n\n return `${uvUpdateCMD} ${deps.map((dep) => `--upgrade-package ${quote(dep)}`).join(' ')}`;\n}\n\nfunction getMatchingHostRule(url: string | undefined): HostRule {\n return find({ hostType: PypiDatasource.id, url });\n}\n\nasync function getUsernamePassword(\n url: URL,\n): Promise<{ username?: string; password?: string }> {\n const rule = getMatchingHostRule(url.toString());\n if (rule.username || rule.password) {\n return rule;\n }\n\n if (url.hostname.endsWith('.pkg.dev')) {\n const hostRule = await getGoogleAuthHostRule();\n if (hostRule) {\n return hostRule;\n }\n logger.once.debug({ url }, 'Could not get Google access token');\n }\n\n return {};\n}\n\nasync function getUvExtraIndexUrl(\n project: PyProject,\n deps: Upgrade[],\n): Promise<NodeJS.ProcessEnv> {\n const pyPiRegistryUrls = deps\n .filter((dep) => dep.datasource === PypiDatasource.id)\n .filter((dep) => {\n // Remove dependencies that are pinned to a specific index\n const sources = project.tool?.uv?.sources;\n const packageName = dep.packageName!;\n return !sources || !(packageName in sources);\n })\n .flatMap((dep) => dep.registryUrls)\n .filter(isString)\n .filter((registryUrl) => {\n // Check if the registry URL is not the default one and not already configured\n const configuredIndexUrls =\n project.tool?.uv?.index?.map(({ url }) => url) ?? [];\n return (\n registryUrl !== PypiDatasource.defaultURL &&\n !configuredIndexUrls.includes(registryUrl)\n );\n });\n\n const registryUrls = new Set(pyPiRegistryUrls);\n const extraIndexUrls: string[] = [];\n\n for (const registryUrl of registryUrls) {\n const parsedUrl = parseUrl(registryUrl);\n if (!parsedUrl) {\n continue;\n }\n\n const { username, password } = await getUsernamePassword(parsedUrl);\n if (username || password) {\n if (username) {\n parsedUrl.username = username;\n }\n if (password) {\n parsedUrl.password = password;\n }\n }\n\n extraIndexUrls.push(parsedUrl.toString());\n }\n\n return {\n UV_EXTRA_INDEX_URL: extraIndexUrls.join(' '),\n };\n}\n\nasync function getUvIndexCredentials(\n project: PyProject,\n): Promise<NodeJS.ProcessEnv> {\n const uv_indexes = project.tool?.uv?.index;\n\n if (!uv_indexes) {\n return {};\n }\n\n const entries = [];\n\n for (const { name, url } of uv_indexes) {\n const parsedUrl = parseUrl(url);\n /* v8 ignore next 3 -- needs test */\n if (!parsedUrl) {\n continue;\n }\n\n // If no name is provided for the index, authentication information must be passed through alternative methods\n if (!name) {\n continue;\n }\n\n const { username, password } = await getUsernamePassword(parsedUrl);\n\n const NAME = name.toUpperCase().replace(/[^A-Z0-9]/g, '_');\n\n if (username) {\n entries.push([`UV_INDEX_${NAME}_USERNAME`, username]);\n }\n\n if (password) {\n entries.push([`UV_INDEX_${NAME}_PASSWORD`, password]);\n }\n }\n\n return Object.fromEntries(entries);\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/manager/pep621/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport {\n LooseArray,\n LooseRecord,\n Toml,\n} from '../../../util/schema-utils/index.ts';\nimport { normalizePythonDepName } from '../../datasource/pypi/common.ts';\nimport { PypiDatasource } from '../../datasource/pypi/index.ts';\nimport type { PackageDependency } from '../types.ts';\nimport { depTypes, pep508ToPackageDependency } from './utils.ts';\n\ntype Pep508Dependency = z.ZodType<PackageDependency<Record<string, any>>>;\n\nfunction Pep508Dependency(depType: string): Pep508Dependency {\n return z.string().transform((x, ctx) => {\n const res = pep508ToPackageDependency(depType, x);\n\n if (!res) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'should be a valid PEP508 dependency',\n fatal: true,\n });\n\n return z.NEVER;\n }\n\n return res;\n }) as Pep508Dependency;\n}\n\ntype DependencyGroup = z.ZodType<PackageDependency<Record<string, any>>[]>;\n\nexport function DependencyGroup(depType: string): DependencyGroup {\n return LooseRecord(LooseArray(Pep508Dependency(depType))).transform(\n (depGroups) => {\n const deps: PackageDependency[] = [];\n for (const [depGroup, groupDeps] of Object.entries(depGroups)) {\n for (const dep of groupDeps) {\n if (dep.packageName) {\n dep.depName = dep.packageName;\n }\n dep.managerData = { depGroup };\n deps.push(dep);\n }\n }\n return deps;\n },\n ) as unknown as DependencyGroup;\n}\n\nconst PdmConfig = z\n .object({\n 'dev-dependencies': DependencyGroup(depTypes.pdmDevDependencies).catch([]),\n source: LooseArray(\n z.object({\n url: z.string(),\n name: z.string(),\n }),\n )\n .transform((pdmSource) => {\n const registryUrls: string[] = [];\n\n let containsPyPiUrl = false;\n for (const source of pdmSource) {\n if (source.name === 'pypi') {\n containsPyPiUrl = true;\n }\n\n registryUrls.push(source.url);\n }\n\n // Add pypi default url, if there is no source declared with the name `pypi`\n // @see https://daobook.github.io/pdm/pyproject/tool-pdm/#specify-other-sources-for-finding-packages\n if (!containsPyPiUrl) {\n registryUrls.unshift(PypiDatasource.defaultURL);\n }\n\n return registryUrls;\n })\n .optional()\n .catch(undefined),\n })\n .transform(\n ({ 'dev-dependencies': devDependencies, source: registryUrls }) => ({\n devDependencies,\n registryUrls,\n }),\n );\n\nconst HatchConfig = z\n .object({\n envs: LooseRecord(\n z.string(),\n z.object({\n dependencies: z.unknown().optional(),\n 'extra-dependencies': z.unknown().optional(),\n }),\n ),\n })\n .catch({ envs: {} })\n .transform(({ envs }) => {\n const deps: PackageDependency[] = [];\n for (const [\n envName,\n { dependencies, 'extra-dependencies': extraDependencies },\n ] of Object.entries(envs)) {\n const depType = `tool.hatch.envs.${envName}`;\n const HatchDependency = LooseArray(Pep508Dependency(depType)).catch([]);\n deps.push(\n ...HatchDependency.parse(dependencies),\n ...HatchDependency.parse(extraDependencies),\n );\n }\n return { deps };\n });\n\nconst UvIndexSource = z.object({\n index: z.string(),\n});\n\nconst UvGitSource = z.object({\n git: z.string(),\n rev: z.string().optional(),\n tag: z.string().optional(),\n branch: z.string().optional(),\n});\nexport type UvGitSource = z.infer<typeof UvGitSource>;\n\nconst UvUrlSource = z.object({\n url: z.string(),\n});\n\nconst UvPathSource = z.object({\n path: z.string(),\n});\n\nconst UvWorkspaceSource = z.object({\n workspace: z.literal(true),\n});\n\n// https://docs.astral.sh/uv/concepts/dependencies/#dependency-sources\nconst UvSource = z.union([\n UvIndexSource,\n UvGitSource,\n UvUrlSource,\n UvPathSource,\n UvWorkspaceSource,\n]);\n\nconst UvConfig = z.object({\n 'dev-dependencies': LooseArray(\n Pep508Dependency(depTypes.uvDevDependencies),\n ).catch([]),\n 'required-version': z.string().optional(),\n sources: LooseRecord(\n // uv applies the same normalization as for Python dependencies on sources\n z.string().transform((source) => normalizePythonDepName(source)),\n UvSource,\n ).optional(),\n index: z\n .array(\n z.object({\n name: z.string().optional(),\n url: z.string(),\n default: z.boolean().default(false),\n explicit: z.boolean().default(false),\n }),\n )\n .optional(),\n});\n\nexport const ProjectSection = z.object({\n version: z.string().optional().catch(undefined),\n 'requires-python': z.string().optional().catch(undefined),\n dependencies: LooseArray(Pep508Dependency(depTypes.dependencies)).catch([]),\n 'optional-dependencies': DependencyGroup(depTypes.optionalDependencies).catch(\n [],\n ),\n});\n\nexport const PyProject = z.object({\n project: ProjectSection.optional().catch(undefined),\n 'build-system': z\n .object({\n requires: LooseArray(\n Pep508Dependency(depTypes.buildSystemRequires),\n ).catch([]),\n 'build-backend': z.string().optional().catch(undefined),\n })\n .optional()\n .catch(undefined),\n 'dependency-groups': DependencyGroup(depTypes.dependencyGroups).catch([]),\n tool: z\n .object({\n pdm: PdmConfig.optional().catch(undefined),\n hatch: HatchConfig.optional().catch(undefined),\n uv: UvConfig.optional().catch(undefined),\n })\n .optional()\n .catch(undefined),\n});\nexport type PyProject = z.infer<typeof PyProject>;\n\nexport const PdmLockfile = Toml.pipe(\n z.object({\n package: LooseArray(\n z.object({\n name: z.string(),\n version: z.string(),\n }),\n ),\n }),\n)\n .transform(({ package: pkg }) =>\n Object.fromEntries(\n pkg.map(({ name, version }): [string, string] => [name, version]),\n ),\n )\n .transform((lock) => ({ lock }));\n\nexport const UvLockfile = Toml.pipe(\n z.object({\n package: LooseArray(\n z.object({\n name: z.string(),\n version: z.string(),\n }),\n ),\n }),\n).transform(({ package: pkg }) =>\n Object.fromEntries(\n pkg.map(({ name, version }): [string, string] => [name, version]),\n ),\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/manager/pep621/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport {\n LooseArray,\n LooseRecord,\n Toml,\n} from '../../../util/schema-utils/index.ts';\nimport { normalizePythonDepName } from '../../datasource/pypi/common.ts';\nimport { PypiDatasource } from '../../datasource/pypi/index.ts';\nimport type { PackageDependency } from '../types.ts';\nimport { depTypes, pep508ToPackageDependency } from './utils.ts';\n\ntype Pep508Dependency = z.ZodType<PackageDependency>;\n\nfunction Pep508Dependency(depType: string): Pep508Dependency {\n return z.string().transform((x, ctx) => {\n const res = pep508ToPackageDependency(depType, x);\n\n if (!res) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'should be a valid PEP508 dependency',\n fatal: true,\n });\n\n return z.NEVER;\n }\n\n return res;\n }) as Pep508Dependency;\n}\n\ntype DependencyGroup = z.ZodType<PackageDependency[]>;\n\nexport function DependencyGroup(depType: string): DependencyGroup {\n return LooseRecord(LooseArray(Pep508Dependency(depType))).transform(\n (depGroups) => {\n const deps: PackageDependency[] = [];\n for (const [depGroup, groupDeps] of Object.entries(depGroups)) {\n for (const dep of groupDeps) {\n if (dep.packageName) {\n dep.depName = dep.packageName;\n }\n dep.managerData = { depGroup };\n deps.push(dep);\n }\n }\n return deps;\n },\n ) as unknown as DependencyGroup;\n}\n\nconst PdmConfig = z\n .object({\n 'dev-dependencies': DependencyGroup(depTypes.pdmDevDependencies).catch([]),\n source: LooseArray(\n z.object({\n url: z.string(),\n name: z.string(),\n }),\n )\n .transform((pdmSource) => {\n const registryUrls: string[] = [];\n\n let containsPyPiUrl = false;\n for (const source of pdmSource) {\n if (source.name === 'pypi') {\n containsPyPiUrl = true;\n }\n\n registryUrls.push(source.url);\n }\n\n // Add pypi default url, if there is no source declared with the name `pypi`\n // @see https://daobook.github.io/pdm/pyproject/tool-pdm/#specify-other-sources-for-finding-packages\n if (!containsPyPiUrl) {\n registryUrls.unshift(PypiDatasource.defaultURL);\n }\n\n return registryUrls;\n })\n .optional()\n .catch(undefined),\n })\n .transform(\n ({ 'dev-dependencies': devDependencies, source: registryUrls }) => ({\n devDependencies,\n registryUrls,\n }),\n );\n\nconst HatchConfig = z\n .object({\n envs: LooseRecord(\n z.string(),\n z.object({\n dependencies: z.unknown().optional(),\n 'extra-dependencies': z.unknown().optional(),\n }),\n ),\n })\n .catch({ envs: {} })\n .transform(({ envs }) => {\n const deps: PackageDependency[] = [];\n for (const [\n envName,\n { dependencies, 'extra-dependencies': extraDependencies },\n ] of Object.entries(envs)) {\n const depType = `tool.hatch.envs.${envName}`;\n const HatchDependency = LooseArray(Pep508Dependency(depType)).catch([]);\n deps.push(\n ...HatchDependency.parse(dependencies),\n ...HatchDependency.parse(extraDependencies),\n );\n }\n return { deps };\n });\n\nconst UvIndexSource = z.object({\n index: z.string(),\n});\n\nconst UvGitSource = z.object({\n git: z.string(),\n rev: z.string().optional(),\n tag: z.string().optional(),\n branch: z.string().optional(),\n});\nexport type UvGitSource = z.infer<typeof UvGitSource>;\n\nconst UvUrlSource = z.object({\n url: z.string(),\n});\n\nconst UvPathSource = z.object({\n path: z.string(),\n});\n\nconst UvWorkspaceSource = z.object({\n workspace: z.literal(true),\n});\n\n// https://docs.astral.sh/uv/concepts/dependencies/#dependency-sources\nconst UvSource = z.union([\n UvIndexSource,\n UvGitSource,\n UvUrlSource,\n UvPathSource,\n UvWorkspaceSource,\n]);\n\nconst UvConfig = z.object({\n 'dev-dependencies': LooseArray(\n Pep508Dependency(depTypes.uvDevDependencies),\n ).catch([]),\n 'required-version': z.string().optional(),\n sources: LooseRecord(\n // uv applies the same normalization as for Python dependencies on sources\n z.string().transform((source) => normalizePythonDepName(source)),\n UvSource,\n ).optional(),\n index: z\n .array(\n z.object({\n name: z.string().optional(),\n url: z.string(),\n default: z.boolean().default(false),\n explicit: z.boolean().default(false),\n }),\n )\n .optional(),\n});\n\nexport const ProjectSection = z.object({\n version: z.string().optional().catch(undefined),\n 'requires-python': z.string().optional().catch(undefined),\n dependencies: LooseArray(Pep508Dependency(depTypes.dependencies)).catch([]),\n 'optional-dependencies': DependencyGroup(depTypes.optionalDependencies).catch(\n [],\n ),\n});\n\nexport const PyProject = z.object({\n project: ProjectSection.optional().catch(undefined),\n 'build-system': z\n .object({\n requires: LooseArray(\n Pep508Dependency(depTypes.buildSystemRequires),\n ).catch([]),\n 'build-backend': z.string().optional().catch(undefined),\n })\n .optional()\n .catch(undefined),\n 'dependency-groups': DependencyGroup(depTypes.dependencyGroups).catch([]),\n tool: z\n .object({\n pdm: PdmConfig.optional().catch(undefined),\n hatch: HatchConfig.optional().catch(undefined),\n uv: UvConfig.optional().catch(undefined),\n })\n .optional()\n .catch(undefined),\n});\nexport type PyProject = z.infer<typeof PyProject>;\n\nexport const PdmLockfile = Toml.pipe(\n z.object({\n package: LooseArray(\n z.object({\n name: z.string(),\n version: z.string(),\n }),\n ),\n }),\n)\n .transform(({ package: pkg }) =>\n Object.fromEntries(\n pkg.map(({ name, version }): [string, string] => [name, version]),\n ),\n )\n .transform((lock) => ({ lock }));\n\nexport const UvLockfile = Toml.pipe(\n z.object({\n package: LooseArray(\n z.object({\n name: z.string(),\n version: z.string(),\n }),\n ),\n }),\n).transform(({ package: pkg }) =>\n Object.fromEntries(\n pkg.map(({ name, version }): [string, string] => [name, version]),\n ),\n);\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","names":["q","query"],"sources":["../../../../lib/modules/manager/pip_setup/extract.ts"],"sourcesContent":["import type { lexer, parser } from '@renovatebot/good-enough-parser';\nimport { lang, query as q } from '@renovatebot/good-enough-parser';\nimport { RANGE_PATTERN } from '@renovatebot/pep440';\nimport { regEx } from '../../../util/regex.ts';\nimport { normalizePythonDepName } from '../../datasource/pypi/common.ts';\nimport { PypiDatasource } from '../../datasource/pypi/index.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\n\ninterface ManagerData {\n lineNumber: number;\n}\n\ntype Context = PackageFileContent<ManagerData>;\n\nconst python = lang.createLang('python');\n\n// Optimize regex memory usage when we don't need named groups\nfunction cleanupNamedGroups(regexSource: string): string {\n return regexSource.replace(/\\(\\?<\\w+>/g, '(?:');\n}\n\nconst rangePattern = cleanupNamedGroups(RANGE_PATTERN);\nconst versionPattern = `(?:${rangePattern}(?:\\\\s*,\\\\s*${rangePattern})*)`;\nconst depNamePattern = '(?:[a-zA-Z][-_a-zA-Z0-9\\\\.]*[a-zA-Z0-9])';\nconst depPattern = [\n '^',\n `(?<depName>${depNamePattern})`,\n `(?<extra>(?:\\\\[\\\\s*(?:${depNamePattern}(?:\\\\s*,\\\\s*${depNamePattern})*\\\\s*)\\\\])?)`,\n `(?<currentValue>${versionPattern})`,\n].join('\\\\s*');\n\nconst extractRegex = regEx(depPattern);\n\n// Extract dependency string\nfunction depStringHandler(\n ctx: Context,\n token: lexer.StringValueToken,\n): Context {\n const depStr = token.value;\n const match = extractRegex.exec(depStr);\n // TODO #22198\n const { depName, currentValue } = match!.groups!;\n\n const dep: PackageDependency<ManagerData> = {\n depName,\n packageName: normalizePythonDepName(depName),\n currentValue,\n managerData: {\n lineNumber: token.line - 1,\n },\n datasource: PypiDatasource.id,\n };\n\n if (currentValue?.startsWith('==')) {\n dep.currentVersion = currentValue.replace(regEx(/^==\\s*/), '');\n }\n\n return { ...ctx, deps: [...ctx.deps, dep] };\n}\n\n// Add `skip-reason` for dependencies annotated\n// with \"# renovate: ignore\" comment\nfunction depSkipHandler(ctx: Context): Context {\n const dep = ctx.deps
|
|
1
|
+
{"version":3,"file":"extract.js","names":["q","query"],"sources":["../../../../lib/modules/manager/pip_setup/extract.ts"],"sourcesContent":["import type { lexer, parser } from '@renovatebot/good-enough-parser';\nimport { lang, query as q } from '@renovatebot/good-enough-parser';\nimport { RANGE_PATTERN } from '@renovatebot/pep440';\nimport { regEx } from '../../../util/regex.ts';\nimport { normalizePythonDepName } from '../../datasource/pypi/common.ts';\nimport { PypiDatasource } from '../../datasource/pypi/index.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\n\ninterface ManagerData {\n lineNumber: number;\n}\n\ntype Context = PackageFileContent<ManagerData>;\n\nconst python = lang.createLang('python');\n\n// Optimize regex memory usage when we don't need named groups\nfunction cleanupNamedGroups(regexSource: string): string {\n return regexSource.replace(/\\(\\?<\\w+>/g, '(?:');\n}\n\nconst rangePattern = cleanupNamedGroups(RANGE_PATTERN);\nconst versionPattern = `(?:${rangePattern}(?:\\\\s*,\\\\s*${rangePattern})*)`;\nconst depNamePattern = '(?:[a-zA-Z][-_a-zA-Z0-9\\\\.]*[a-zA-Z0-9])';\nconst depPattern = [\n '^',\n `(?<depName>${depNamePattern})`,\n `(?<extra>(?:\\\\[\\\\s*(?:${depNamePattern}(?:\\\\s*,\\\\s*${depNamePattern})*\\\\s*)\\\\])?)`,\n `(?<currentValue>${versionPattern})`,\n].join('\\\\s*');\n\nconst extractRegex = regEx(depPattern);\n\n// Extract dependency string\nfunction depStringHandler(\n ctx: Context,\n token: lexer.StringValueToken,\n): Context {\n const depStr = token.value;\n const match = extractRegex.exec(depStr);\n // TODO #22198\n const { depName, currentValue } = match!.groups!;\n\n const dep: PackageDependency<ManagerData> = {\n depName,\n packageName: normalizePythonDepName(depName),\n currentValue,\n managerData: {\n lineNumber: token.line - 1,\n },\n datasource: PypiDatasource.id,\n };\n\n if (currentValue?.startsWith('==')) {\n dep.currentVersion = currentValue.replace(regEx(/^==\\s*/), '');\n }\n\n return { ...ctx, deps: [...ctx.deps, dep] };\n}\n\n// Add `skip-reason` for dependencies annotated\n// with \"# renovate: ignore\" comment\nfunction depSkipHandler(ctx: Context): Context {\n const dep = ctx.deps.at(-1);\n const deps = ctx.deps.slice(0, -1);\n deps.push({ ...dep, skipReason: 'ignored' });\n return { ...ctx, deps };\n}\n\nconst incompleteDepString = q\n .str<Context>(new RegExp(cleanupNamedGroups(depPattern)))\n .op(regEx(/^\\+|\\*$/));\n\nconst depString = q\n .str<Context>(new RegExp(cleanupNamedGroups(depPattern)), depStringHandler)\n .opt(\n q\n .opt(q.op<Context>(','))\n .comment(/^#\\s*renovate\\s*:\\s*ignore\\s*$/, depSkipHandler),\n );\n\nconst query = q.alt(incompleteDepString, depString);\n\nexport function extractPackageFile(\n content: string,\n _packageFile: string,\n _config: ExtractConfig,\n): PackageFileContent | null {\n const res = python.query<Context, parser.Node>(content, query, { deps: [] });\n return res?.deps?.length ? res : null;\n}\n"],"mappings":";;;;;;AAkBA,MAAM,SAAS,KAAK,WAAW,QAAQ;AAGvC,SAAS,mBAAmB,aAA6B;CACvD,OAAO,YAAY,QAAQ,cAAc,KAAK;AAChD;AAEA,MAAM,eAAe,mBAAmB,aAAa;AACrD,MAAM,iBAAiB,MAAM,aAAa,cAAc,aAAa;AACrE,MAAM,iBAAiB;AACvB,MAAM,aAAa;CACjB;CACA,cAAc,eAAe;CAC7B,yBAAyB,eAAe,cAAc,eAAe;CACrE,mBAAmB,eAAe;AACpC,CAAC,CAAC,KAAK,MAAM;AAEb,MAAM,eAAe,MAAM,UAAU;AAGrC,SAAS,iBACP,KACA,OACS;CACT,MAAM,SAAS,MAAM;CAGrB,MAAM,EAAE,SAAS,iBAFH,aAAa,KAAK,MAEM,CAAC,CAAE;CAEzC,MAAM,MAAsC;EAC1C;EACA,aAAa,uBAAuB,OAAO;EAC3C;EACA,aAAa,EACX,YAAY,MAAM,OAAO,EAC3B;EACA,YAAY,eAAe;CAC7B;CAEA,IAAI,cAAc,WAAW,IAAI,GAC/B,IAAI,iBAAiB,aAAa,QAAQ,MAAM,QAAQ,GAAG,EAAE;CAG/D,OAAO;EAAE,GAAG;EAAK,MAAM,CAAC,GAAG,IAAI,MAAM,GAAG;CAAE;AAC5C;AAIA,SAAS,eAAe,KAAuB;CAC7C,MAAM,MAAM,IAAI,KAAK,GAAG,EAAE;CAC1B,MAAM,OAAO,IAAI,KAAK,MAAM,GAAG,EAAE;CACjC,KAAK,KAAK;EAAE,GAAG;EAAK,YAAY;CAAU,CAAC;CAC3C,OAAO;EAAE,GAAG;EAAK;CAAK;AACxB;AAEA,MAAM,sBAAsBA,MACzB,IAAa,IAAI,OAAO,mBAAmB,UAAU,CAAC,CAAC,CAAC,CACxD,GAAG,MAAM,SAAS,CAAC;AAEtB,MAAM,YAAYA,MACf,IAAa,IAAI,OAAO,mBAAmB,UAAU,CAAC,GAAG,gBAAgB,CAAC,CAC1E,IACCA,MACG,IAAIA,MAAE,GAAY,GAAG,CAAC,CAAC,CACvB,QAAQ,kCAAkC,cAAc,CAC7D;AAEF,MAAMC,UAAQD,MAAE,IAAI,qBAAqB,SAAS;AAElD,SAAgB,mBACd,SACA,cACA,SAC2B;CAC3B,MAAM,MAAM,OAAO,MAA4B,SAASC,SAAO,EAAE,MAAM,CAAC,EAAE,CAAC;CAC3E,OAAO,KAAK,MAAM,SAAS,MAAM;AACnC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.js","names":["pipenvDetect"],"sources":["../../../../lib/modules/manager/pipenv/artifacts.ts"],"sourcesContent":["import { pipenv as pipenvDetect } from '@renovatebot/detect-tools';\nimport {\n isNonEmptyStringAndNotWhitespace,\n isUrlInstance,\n} from '@sindresorhus/is';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport type { HostRule } from '../../../types/index.ts';\nimport { exec } from '../../../util/exec/index.ts';\nimport type { ExecOptions, ExtraEnv, Opt } from '../../../util/exec/types.ts';\nimport {\n deleteLocalFile,\n ensureCacheDir,\n getParentDir,\n localPathExists,\n readLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport { ensureLocalPath } from '../../../util/fs/util.ts';\nimport { getRepoStatus } from '../../../util/git/index.ts';\nimport { find } from '../../../util/host-rules.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { parseUrl } from '../../../util/url.ts';\nimport { PypiDatasource } from '../../datasource/pypi/index.ts';\nimport type { UpdateArtifact, UpdateArtifactsResult } from '../types.ts';\nimport { extractPackageFile } from './extract.ts';\n\nexport function getMatchingHostRule(url: string): HostRule | null {\n const parsedUrl = parseUrl(url);\n if (parsedUrl) {\n parsedUrl.username = '';\n parsedUrl.password = '';\n const urlWithoutCredentials = parsedUrl.toString();\n\n return find({ hostType: PypiDatasource.id, url: urlWithoutCredentials });\n }\n return null;\n}\n\nasync function findPipfileSourceUrlsWithCredentials(\n pipfileContent: string,\n pipfileName: string,\n): Promise<URL[]> {\n const pipfile = await extractPackageFile(pipfileContent, pipfileName);\n\n return (\n pipfile?.registryUrls\n ?.map(parseUrl)\n .filter(isUrlInstance)\n .filter((url) => isNonEmptyStringAndNotWhitespace(url.username)) ?? []\n );\n}\n\n/**\n * This will extract the actual variable name from an environment-placeholder:\n * ${USERNAME:-defaultvalue} will yield 'USERNAME'\n */\nexport function extractEnvironmentVariableName(\n credential: string,\n): string | null {\n const match = regEx('([a-z0-9_]+)', 'i').exec(decodeURI(credential));\n return match?.length ? match[0] : null;\n}\n\nexport function addExtraEnvVariable(\n extraEnv: ExtraEnv
|
|
1
|
+
{"version":3,"file":"artifacts.js","names":["pipenvDetect"],"sources":["../../../../lib/modules/manager/pipenv/artifacts.ts"],"sourcesContent":["import { pipenv as pipenvDetect } from '@renovatebot/detect-tools';\nimport {\n isNonEmptyStringAndNotWhitespace,\n isUrlInstance,\n} from '@sindresorhus/is';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport type { HostRule } from '../../../types/index.ts';\nimport { exec } from '../../../util/exec/index.ts';\nimport type { ExecOptions, ExtraEnv, Opt } from '../../../util/exec/types.ts';\nimport {\n deleteLocalFile,\n ensureCacheDir,\n getParentDir,\n localPathExists,\n readLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport { ensureLocalPath } from '../../../util/fs/util.ts';\nimport { getRepoStatus } from '../../../util/git/index.ts';\nimport { find } from '../../../util/host-rules.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { parseUrl } from '../../../util/url.ts';\nimport { PypiDatasource } from '../../datasource/pypi/index.ts';\nimport type { UpdateArtifact, UpdateArtifactsResult } from '../types.ts';\nimport { extractPackageFile } from './extract.ts';\n\nexport function getMatchingHostRule(url: string): HostRule | null {\n const parsedUrl = parseUrl(url);\n if (parsedUrl) {\n parsedUrl.username = '';\n parsedUrl.password = '';\n const urlWithoutCredentials = parsedUrl.toString();\n\n return find({ hostType: PypiDatasource.id, url: urlWithoutCredentials });\n }\n return null;\n}\n\nasync function findPipfileSourceUrlsWithCredentials(\n pipfileContent: string,\n pipfileName: string,\n): Promise<URL[]> {\n const pipfile = await extractPackageFile(pipfileContent, pipfileName);\n\n return (\n pipfile?.registryUrls\n ?.map(parseUrl)\n .filter(isUrlInstance)\n .filter((url) => isNonEmptyStringAndNotWhitespace(url.username)) ?? []\n );\n}\n\n/**\n * This will extract the actual variable name from an environment-placeholder:\n * ${USERNAME:-defaultvalue} will yield 'USERNAME'\n */\nexport function extractEnvironmentVariableName(\n credential: string,\n): string | null {\n const match = regEx('([a-z0-9_]+)', 'i').exec(decodeURI(credential));\n return match?.length ? match[0] : null;\n}\n\nexport function addExtraEnvVariable(\n extraEnv: ExtraEnv,\n environmentVariableName: string,\n environmentValue: string,\n): void {\n logger.trace(\n `Adding ${environmentVariableName} environment variable for pipenv`,\n );\n if (\n extraEnv[environmentVariableName] &&\n extraEnv[environmentVariableName] !== environmentValue\n ) {\n logger.warn(\n { envVar: environmentVariableName },\n 'Possible misconfiguration, environment variable already set to a different value',\n );\n }\n extraEnv[environmentVariableName] = environmentValue;\n}\n\n/**\n * Pipenv allows configuring source-urls for remote repositories with placeholders for credentials, i.e. http://$USER:$PASS@myprivate.repo\n * if a matching host rule exists for that repository, we need to set the corresponding variables.\n * Simply substituting them in the URL is not an option as it would impact the hash for the resulting Pipfile.lock\n *\n */\nasync function addCredentialsForSourceUrls(\n newPipfileContent: string,\n pipfileName: string,\n extraEnv: ExtraEnv,\n): Promise<void> {\n const sourceUrls = await findPipfileSourceUrlsWithCredentials(\n newPipfileContent,\n pipfileName,\n );\n for (const parsedSourceUrl of sourceUrls) {\n logger.trace(`Trying to add credentials for ${parsedSourceUrl.toString()}`);\n const matchingHostRule = getMatchingHostRule(parsedSourceUrl.toString());\n if (matchingHostRule) {\n const usernameVariableName = extractEnvironmentVariableName(\n parsedSourceUrl.username,\n );\n if (matchingHostRule.username && usernameVariableName) {\n addExtraEnvVariable(\n extraEnv,\n usernameVariableName,\n matchingHostRule.username,\n );\n }\n const passwordVariableName = extractEnvironmentVariableName(\n parsedSourceUrl.password,\n );\n if (matchingHostRule.password && passwordVariableName) {\n addExtraEnvVariable(\n extraEnv,\n passwordVariableName,\n matchingHostRule.password,\n );\n }\n }\n }\n}\n\nexport async function updateArtifacts({\n packageFileName: pipfileName,\n newPackageFileContent: newPipfileContent,\n config,\n}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {\n logger.debug(`pipenv.updateArtifacts(${pipfileName})`);\n\n const lockFileName = `${pipfileName}.lock`;\n if (!(await localPathExists(lockFileName))) {\n logger.debug('No Pipfile.lock found');\n return null;\n }\n try {\n await writeLocalFile(pipfileName, newPipfileContent);\n if (config.isLockFileMaintenance) {\n await deleteLocalFile(lockFileName);\n }\n const cmd = 'pipenv lock';\n const pipfileDir = getParentDir(ensureLocalPath(pipfileName));\n const tagConstraint =\n config.constraints?.python ??\n (await pipenvDetect.getPythonConstraint(pipfileDir));\n const pipenvConstraint =\n config.constraints?.pipenv ??\n (await pipenvDetect.getPipenvConstraint(pipfileDir));\n const extraEnv: Opt<ExtraEnv> = {\n PIPENV_CACHE_DIR: await ensureCacheDir('pipenv'),\n PIP_CACHE_DIR: await ensureCacheDir('pip'),\n WORKON_HOME: await ensureCacheDir('virtualenvs'),\n };\n const execOptions: ExecOptions = {\n cwdFile: pipfileName,\n docker: {},\n toolConstraints: [\n {\n toolName: 'python',\n constraint: tagConstraint,\n },\n {\n toolName: 'pipenv',\n constraint: pipenvConstraint,\n },\n ],\n };\n await addCredentialsForSourceUrls(newPipfileContent, pipfileName, extraEnv);\n execOptions.extraEnv = extraEnv;\n\n logger.trace({ cmd }, 'pipenv lock command');\n await exec(cmd, execOptions);\n const status = await getRepoStatus();\n if (!status?.modified.includes(lockFileName)) {\n return null;\n }\n logger.debug('Returning updated Pipfile.lock');\n return [\n {\n file: {\n type: 'addition',\n path: lockFileName,\n contents: await readLocalFile(lockFileName, 'utf8'),\n },\n },\n ];\n } catch (err) {\n // istanbul ignore if\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.debug({ err }, 'Failed to update Pipfile.lock');\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: err.message,\n },\n },\n ];\n }\n}\n"],"mappings":"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"}
|
|
@@ -45,12 +45,12 @@ const PoetryGitDependency = z.object({
|
|
|
45
45
|
currentValue: tag,
|
|
46
46
|
packageName: repo
|
|
47
47
|
};
|
|
48
|
-
|
|
48
|
+
if (source === "gitlab.com") return {
|
|
49
49
|
datasource: GitlabTagsDatasource.id,
|
|
50
50
|
currentValue: tag,
|
|
51
51
|
packageName: repo
|
|
52
52
|
};
|
|
53
|
-
|
|
53
|
+
return {
|
|
54
54
|
datasource: GitTagsDatasource.id,
|
|
55
55
|
currentValue: tag,
|
|
56
56
|
packageName: git
|