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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","names":["semver"],"sources":["../../../../lib/modules/versioning/conan/common.ts"],"sourcesContent":["import * as semver from 'semver';\nimport { regEx } from '../../../util/regex.ts';\nimport { coerceString } from '../../../util/string.ts';\n\nexport function makeVersion(\n version: string,\n options: semver.RangeOptions,\n): string | boolean | null {\n const splitVersion = version.split('.');\n const prerelease = semver.prerelease(version, options);\n\n if (prerelease && !options.includePrerelease) {\n if (!Number.isNaN(parseInt(prerelease.toString()[0], 10))) {\n const stringVersion = `${splitVersion[0]}.${splitVersion[1]}.${splitVersion[2]}`;\n return semver.valid(stringVersion, options);\n }\n return false;\n }\n\n if (\n options.loose &&\n !semver.valid(version, options) &&\n splitVersion.length !== 3\n ) {\n return semver.valid(semver.coerce(version, options), options);\n }\n return semver.valid(version, options);\n}\n\nexport function cleanVersion(version: string): string {\n if (version) {\n return version\n .replace(\n regEx(\n /,|\\[|\\]|\"|include_prerelease=|include_prerelease|loose=|True|False/g,\n ),\n '',\n )\n .trim();\n }\n return version;\n}\n\nexport function getOptions(input: string): {\n loose: boolean;\n includePrerelease: boolean;\n} {\n let includePrerelease = false;\n let loose = true;\n if (input) {\n includePrerelease =\n input.includes('include_prerelease') &&\n !input.includes('include_prerelease=False');\n loose = input.includes('loose=True') || !input.includes('loose=False');\n }\n return { loose, includePrerelease };\n}\n\nexport function containsOperators(input: string): boolean {\n return regEx('[<=>^~]').test(input);\n}\n\nexport function matchesWithOptions(\n version: string,\n cleanRange: string,\n options: semver.RangeOptions,\n): boolean {\n let cleanedVersion = version;\n if (\n cleanedVersion &&\n semver.prerelease(cleanedVersion) &&\n options.includePrerelease\n ) {\n const coercedVersion = semver.coerce(cleanedVersion)?.raw;\n cleanedVersion = coerceString(coercedVersion);\n }\n return semver.satisfies(cleanedVersion, cleanRange, options);\n}\n\nexport function findSatisfyingVersion(\n versions: string[],\n range: string,\n compareRt: number,\n): string | null {\n const options = getOptions(range);\n let cur: any = null;\n let curSV: any = null;\n let index = 0;\n let curIndex = -1;\n\n for (const v of versions) {\n const versionFromList = makeVersion(v, options);\n if (typeof versionFromList === 'string') {\n const cleanedVersion = cleanVersion(versionFromList);\n const options = getOptions(range);\n const cleanRange = cleanVersion(range);\n if (matchesWithOptions(cleanedVersion, cleanRange, options)
|
|
1
|
+
{"version":3,"file":"common.js","names":["semver"],"sources":["../../../../lib/modules/versioning/conan/common.ts"],"sourcesContent":["import * as semver from 'semver';\nimport { regEx } from '../../../util/regex.ts';\nimport { coerceString } from '../../../util/string.ts';\n\nexport function makeVersion(\n version: string,\n options: semver.RangeOptions,\n): string | boolean | null {\n const splitVersion = version.split('.');\n const prerelease = semver.prerelease(version, options);\n\n if (prerelease && !options.includePrerelease) {\n if (!Number.isNaN(parseInt(prerelease.toString()[0], 10))) {\n const stringVersion = `${splitVersion[0]}.${splitVersion[1]}.${splitVersion[2]}`;\n return semver.valid(stringVersion, options);\n }\n return false;\n }\n\n if (\n options.loose &&\n !semver.valid(version, options) &&\n splitVersion.length !== 3\n ) {\n return semver.valid(semver.coerce(version, options), options);\n }\n return semver.valid(version, options);\n}\n\nexport function cleanVersion(version: string): string {\n if (version) {\n return version\n .replace(\n regEx(\n /,|\\[|\\]|\"|include_prerelease=|include_prerelease|loose=|True|False/g,\n ),\n '',\n )\n .trim();\n }\n return version;\n}\n\nexport function getOptions(input: string): {\n loose: boolean;\n includePrerelease: boolean;\n} {\n let includePrerelease = false;\n let loose = true;\n if (input) {\n includePrerelease =\n input.includes('include_prerelease') &&\n !input.includes('include_prerelease=False');\n loose = input.includes('loose=True') || !input.includes('loose=False');\n }\n return { loose, includePrerelease };\n}\n\nexport function containsOperators(input: string): boolean {\n return regEx('[<=>^~]').test(input);\n}\n\nexport function matchesWithOptions(\n version: string,\n cleanRange: string,\n options: semver.RangeOptions,\n): boolean {\n let cleanedVersion = version;\n if (\n cleanedVersion &&\n semver.prerelease(cleanedVersion) &&\n options.includePrerelease\n ) {\n const coercedVersion = semver.coerce(cleanedVersion)?.raw;\n cleanedVersion = coerceString(coercedVersion);\n }\n return semver.satisfies(cleanedVersion, cleanRange, options);\n}\n\nexport function findSatisfyingVersion(\n versions: string[],\n range: string,\n compareRt: number,\n): string | null {\n const options = getOptions(range);\n let cur: any = null;\n let curSV: any = null;\n let index = 0;\n let curIndex = -1;\n\n for (const v of versions) {\n const versionFromList = makeVersion(v, options);\n if (typeof versionFromList === 'string') {\n const cleanedVersion = cleanVersion(versionFromList);\n const options = getOptions(range);\n const cleanRange = cleanVersion(range);\n if (\n matchesWithOptions(cleanedVersion, cleanRange, options) &&\n (!cur || semver.compare(curSV, versionFromList, options) === compareRt)\n ) {\n cur = versionFromList;\n curIndex = index;\n curSV = new semver.SemVer(cur, options);\n }\n }\n index += 1;\n }\n if (curIndex >= 0) {\n return versions[curIndex];\n }\n return null;\n}\n"],"mappings":";;;;AAIA,SAAgB,YACd,SACA,SACyB;CACzB,MAAM,eAAe,QAAQ,MAAM,GAAG;CACtC,MAAM,aAAaA,SAAO,WAAW,SAAS,OAAO;CAErD,IAAI,cAAc,CAAC,QAAQ,mBAAmB;EAC5C,IAAI,CAAC,OAAO,MAAM,SAAS,WAAW,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG;GACzD,MAAM,gBAAgB,GAAG,aAAa,GAAG,GAAG,aAAa,GAAG,GAAG,aAAa;GAC5E,OAAOA,SAAO,MAAM,eAAe,OAAO;EAC5C;EACA,OAAO;CACT;CAEA,IACE,QAAQ,SACR,CAACA,SAAO,MAAM,SAAS,OAAO,KAC9B,aAAa,WAAW,GAExB,OAAOA,SAAO,MAAMA,SAAO,OAAO,SAAS,OAAO,GAAG,OAAO;CAE9D,OAAOA,SAAO,MAAM,SAAS,OAAO;AACtC;AAEA,SAAgB,aAAa,SAAyB;CACpD,IAAI,SACF,OAAO,QACJ,QACC,MACE,qEACF,GACA,EACF,CAAC,CACA,KAAK;CAEV,OAAO;AACT;AAEA,SAAgB,WAAW,OAGzB;CACA,IAAI,oBAAoB;CACxB,IAAI,QAAQ;CACZ,IAAI,OAAO;EACT,oBACE,MAAM,SAAS,oBAAoB,KACnC,CAAC,MAAM,SAAS,0BAA0B;EAC5C,QAAQ,MAAM,SAAS,YAAY,KAAK,CAAC,MAAM,SAAS,aAAa;CACvE;CACA,OAAO;EAAE;EAAO;CAAkB;AACpC;AAEA,SAAgB,kBAAkB,OAAwB;CACxD,OAAO,MAAM,SAAS,CAAC,CAAC,KAAK,KAAK;AACpC;AAEA,SAAgB,mBACd,SACA,YACA,SACS;CACT,IAAI,iBAAiB;CACrB,IACE,kBACAA,SAAO,WAAW,cAAc,KAChC,QAAQ,mBACR;EACA,MAAM,iBAAiBA,SAAO,OAAO,cAAc,CAAC,EAAE;EACtD,iBAAiB,aAAa,cAAc;CAC9C;CACA,OAAOA,SAAO,UAAU,gBAAgB,YAAY,OAAO;AAC7D;AAEA,SAAgB,sBACd,UACA,OACA,WACe;CACf,MAAM,UAAU,WAAW,KAAK;CAChC,IAAI,MAAW;CACf,IAAI,QAAa;CACjB,IAAI,QAAQ;CACZ,IAAI,WAAW;CAEf,KAAK,MAAM,KAAK,UAAU;EACxB,MAAM,kBAAkB,YAAY,GAAG,OAAO;EAC9C,IAAI,OAAO,oBAAoB,UAAU;GACvC,MAAM,iBAAiB,aAAa,eAAe;GACnD,MAAM,UAAU,WAAW,KAAK;GAEhC,IACE,mBAAmB,gBAFF,aAAa,KAEc,GAAG,OAAO,MACrD,CAAC,OAAOA,SAAO,QAAQ,OAAO,iBAAiB,OAAO,MAAM,YAC7D;IACA,MAAM;IACN,WAAW;IACX,QAAQ,IAAIA,SAAO,OAAO,KAAK,OAAO;GACxC;EACF;EACA,SAAS;CACX;CACA,IAAI,YAAY,GACd,OAAO,SAAS;CAElB,OAAO;AACT"}
|
|
@@ -10,9 +10,7 @@ function isVersion(input) {
|
|
|
10
10
|
if (input && !input.includes("[")) {
|
|
11
11
|
const qualifiers = getOptions(input);
|
|
12
12
|
const version = cleanVersion(input);
|
|
13
|
-
if (qualifiers.loose)
|
|
14
|
-
if (api$1.isVersion(version)) return true;
|
|
15
|
-
}
|
|
13
|
+
if (qualifiers.loose && api$1.isVersion(version)) return true;
|
|
16
14
|
return makeVersion(version, qualifiers) !== null;
|
|
17
15
|
}
|
|
18
16
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["looseAPI","semver"],"sources":["../../../../lib/modules/versioning/conan/index.ts"],"sourcesContent":["import * as semver from 'semver';\nimport type { RangeStrategy } from '../../../types/versioning.ts';\nimport { api as looseAPI } from '../loose/index.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\nimport {\n cleanVersion,\n findSatisfyingVersion,\n getOptions,\n makeVersion,\n matchesWithOptions,\n} from './common.ts';\nimport {\n bumpRange,\n getMajor,\n getMinor,\n getPatch,\n replaceRange,\n widenRange,\n} from './range.ts';\n\nexport const id = 'conan';\nexport const displayName = 'conan';\nexport const urls = [\n '[Semantic Versioning](https://semver.org/)',\n '[python-node-semver](https://github.com/podhmo/python-node-semver)',\n '[python-node-semver examples](https://github.com/podhmo/python-node-semver/tree/master/examples)',\n '[Conan version ranges](https://docs.conan.io/en/latest/versioning/version_ranges.html#version-ranges)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'auto',\n 'bump',\n 'widen',\n 'replace',\n];\n\nconst MIN = 1;\nconst MAX = -1;\n\nfunction isVersion(input: string): boolean {\n if (input && !input.includes('[')) {\n const qualifiers = getOptions(input);\n const version = cleanVersion(input);\n if (qualifiers.loose
|
|
1
|
+
{"version":3,"file":"index.js","names":["looseAPI","semver"],"sources":["../../../../lib/modules/versioning/conan/index.ts"],"sourcesContent":["import * as semver from 'semver';\nimport type { RangeStrategy } from '../../../types/versioning.ts';\nimport { api as looseAPI } from '../loose/index.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\nimport {\n cleanVersion,\n findSatisfyingVersion,\n getOptions,\n makeVersion,\n matchesWithOptions,\n} from './common.ts';\nimport {\n bumpRange,\n getMajor,\n getMinor,\n getPatch,\n replaceRange,\n widenRange,\n} from './range.ts';\n\nexport const id = 'conan';\nexport const displayName = 'conan';\nexport const urls = [\n '[Semantic Versioning](https://semver.org/)',\n '[python-node-semver](https://github.com/podhmo/python-node-semver)',\n '[python-node-semver examples](https://github.com/podhmo/python-node-semver/tree/master/examples)',\n '[Conan version ranges](https://docs.conan.io/en/latest/versioning/version_ranges.html#version-ranges)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'auto',\n 'bump',\n 'widen',\n 'replace',\n];\n\nconst MIN = 1;\nconst MAX = -1;\n\nfunction isVersion(input: string): boolean {\n if (input && !input.includes('[')) {\n const qualifiers = getOptions(input);\n const version = cleanVersion(input);\n if (qualifiers.loose && looseAPI.isVersion(version)) {\n return true;\n }\n return makeVersion(version, qualifiers) !== null;\n }\n return false;\n}\n\nfunction isValid(input: string): boolean {\n const version = cleanVersion(input);\n const qualifiers = getOptions(input);\n if (makeVersion(version, qualifiers)) {\n return version !== null;\n }\n\n return semver.validRange(version, qualifiers) !== null;\n}\n\nfunction equals(version: string, other: string): boolean {\n const cleanedVersion = cleanVersion(version);\n const cleanOther = cleanVersion(other);\n const options = { loose: true, includePrerelease: true };\n const looseResult = looseAPI.equals(cleanedVersion, cleanOther);\n try {\n return semver.eq(cleanedVersion, cleanOther, options) || looseResult;\n } catch {\n return looseResult;\n }\n}\n\nfunction isGreaterThan(version: string, other: string): boolean {\n const cleanedVersion = cleanVersion(version);\n const cleanOther = cleanVersion(other);\n const options = { loose: true, includePrerelease: true };\n const looseResult = looseAPI.isGreaterThan(cleanedVersion, cleanOther);\n try {\n return semver.gt(cleanedVersion, cleanOther, options) || looseResult;\n } catch {\n return looseResult;\n }\n}\n\nfunction isLessThanRange(version: string, range: string): boolean {\n const cleanedVersion = cleanVersion(version);\n const cleanRange = cleanVersion(range);\n const options = getOptions(range);\n const looseResult: any = looseAPI.isLessThanRange?.(\n cleanedVersion,\n cleanRange,\n );\n try {\n return semver.ltr(cleanedVersion, cleanRange, options) || looseResult;\n } catch {\n return looseResult;\n }\n}\n\nfunction sortVersions(version: string, other: string): number {\n const cleanedVersion = cleanVersion(version);\n const cleanOther = cleanVersion(other);\n const options = { loose: true, includePrerelease: true };\n try {\n return semver.compare(cleanedVersion, cleanOther, options);\n } catch {\n return looseAPI.sortVersions(cleanedVersion, cleanOther);\n }\n}\n\nfunction matches(version: string, range: string): boolean {\n if (isVersion(version) && isVersion(range)) {\n return true;\n }\n const cleanedVersion = cleanVersion(version);\n const options = getOptions(range);\n const cleanRange = cleanVersion(range);\n return matchesWithOptions(cleanedVersion, cleanRange, options);\n}\n\nfunction isCompatible(version: string, range: string): boolean {\n if (isVersion(version) && isVersion(range)) {\n return true;\n }\n const options = getOptions(range);\n const compatibleVersion = makeVersion(version, options);\n if (compatibleVersion) {\n return !isLessThanRange(version, range);\n }\n return false;\n}\n\nfunction isStable(version: string): boolean {\n const cleanedVersion = cleanVersion(version);\n const options = getOptions(version);\n if (\n !options.includePrerelease &&\n semver.prerelease(cleanedVersion, options)\n ) {\n return false;\n }\n\n return true;\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return findSatisfyingVersion(versions, range, MIN);\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return findSatisfyingVersion(versions, range, MAX);\n}\n\nfunction getNewValue({\n currentValue,\n rangeStrategy,\n currentVersion,\n newVersion,\n}: NewValueConfig): string | null {\n const cleanRange = cleanVersion(currentValue);\n if (isVersion(currentValue)) {\n return newVersion;\n }\n const options = getOptions(currentValue);\n // Wildcard-equivalent ranges (*, >=*, x, empty) match all versions —\n // nothing to bump/replace/widen\n if (semver.validRange(cleanRange, options) === '*') {\n return currentValue;\n }\n let newValue: any = '';\n\n if (rangeStrategy === 'widen') {\n newValue = widenRange(\n { currentValue: cleanRange, rangeStrategy, currentVersion, newVersion },\n options,\n );\n } else if (rangeStrategy === 'bump') {\n newValue = bumpRange(\n { currentValue: cleanRange, rangeStrategy, currentVersion, newVersion },\n options,\n );\n } else {\n newValue = replaceRange({\n currentValue: cleanRange,\n rangeStrategy,\n currentVersion,\n newVersion,\n });\n }\n\n if (newValue) {\n return currentValue.replace(cleanRange, newValue);\n }\n\n return null;\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getNewValue,\n getPatch,\n isCompatible,\n isGreaterThan,\n isLessThanRange,\n isSingleVersion: isVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n getSatisfyingVersion,\n minSatisfyingVersion,\n sortVersions,\n};\n\nexport default api;\n"],"mappings":"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"}
|
|
@@ -67,8 +67,7 @@ function fixParsedRange(range) {
|
|
|
67
67
|
return semverRange;
|
|
68
68
|
}
|
|
69
69
|
function replaceRange({ currentValue, newVersion }) {
|
|
70
|
-
const
|
|
71
|
-
const element = parsedRange[parsedRange.length - 1];
|
|
70
|
+
const element = parseRange(currentValue).at(-1);
|
|
72
71
|
const toVersionMajor = getMajor(newVersion);
|
|
73
72
|
const toVersionMinor = getMinor(newVersion);
|
|
74
73
|
const toVersionPatch = getPatch(newVersion);
|
|
@@ -119,7 +118,7 @@ function replaceRange({ currentValue, newVersion }) {
|
|
|
119
118
|
}
|
|
120
119
|
function widenRange({ currentValue, currentVersion, newVersion }, options) {
|
|
121
120
|
const parsedRange = parseRange(currentValue);
|
|
122
|
-
const element = parsedRange
|
|
121
|
+
const element = parsedRange.at(-1);
|
|
123
122
|
if (matchesWithOptions(newVersion, currentValue, options)) return currentValue;
|
|
124
123
|
const newValue = replaceRange({
|
|
125
124
|
currentValue,
|
|
@@ -133,7 +132,7 @@ function widenRange({ currentValue, currentVersion, newVersion }, options) {
|
|
|
133
132
|
return splitCurrent.join(element.operator) + newValue;
|
|
134
133
|
}
|
|
135
134
|
if (parsedRange.length > 1) {
|
|
136
|
-
if (parsedRange
|
|
135
|
+
if (parsedRange.at(-2).operator === "-") {
|
|
137
136
|
const splitCurrent = currentValue.split("-");
|
|
138
137
|
splitCurrent.pop();
|
|
139
138
|
return `${splitCurrent.join("-")}- ${newValue}`;
|
|
@@ -153,7 +152,7 @@ function bumpRange({ currentValue, currentVersion, newVersion }, options) {
|
|
|
153
152
|
newVersion
|
|
154
153
|
}, options);
|
|
155
154
|
const parsedRange = parseRange(currentValue);
|
|
156
|
-
const element = parsedRange
|
|
155
|
+
const element = parsedRange.at(-1);
|
|
157
156
|
const toVersionMajor = getMajor(newVersion);
|
|
158
157
|
const toVersionMinor = getMinor(newVersion);
|
|
159
158
|
const suffix = semver$1.prerelease(newVersion) ? `-${String(semver$1.prerelease(newVersion)?.[0])}` : "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"range.js","names":["semver"],"sources":["../../../../lib/modules/versioning/conan/range.ts"],"sourcesContent":["import * as semver from 'semver';\nimport type { SemVer } from 'semver-utils';\nimport { parseRange } from 'semver-utils';\nimport { logger } from '../../../logger/index.ts';\nimport { coerceString } from '../../../util/string.ts';\nimport type { NewValueConfig } from '../types.ts';\nimport {\n cleanVersion,\n containsOperators,\n getOptions,\n makeVersion,\n matchesWithOptions,\n} from './common.ts';\n\n// always include prereleases\nexport function getMajor(version: string): null | number {\n const cleanedVersion = cleanVersion(version);\n const options = getOptions(version);\n options.includePrerelease = true;\n const cleanerVersion = makeVersion(cleanedVersion, options);\n if (typeof cleanerVersion === 'string') {\n return Number(cleanerVersion.split('.')[0]);\n }\n return null;\n}\n\n// always include prereleases\nexport function getMinor(version: string): null | number {\n const cleanedVersion = cleanVersion(version);\n const options = getOptions(version);\n options.includePrerelease = true;\n const cleanerVersion = makeVersion(cleanedVersion, options);\n if (typeof cleanerVersion === 'string') {\n return Number(cleanerVersion.split('.')[1]);\n }\n return null;\n}\n\n// always include prereleases\nexport function getPatch(version: string): null | number {\n const cleanedVersion = cleanVersion(version);\n const options = getOptions(version);\n options.includePrerelease = true;\n const cleanerVersion = makeVersion(cleanedVersion, options);\n\n if (typeof cleanerVersion === 'string') {\n const newVersion = semver.valid(\n semver.coerce(cleanedVersion, {\n loose: false,\n }),\n options,\n );\n return Number(newVersion?.split('.')[2]);\n }\n return null;\n}\n\nexport function fixParsedRange(range: string): any {\n const ordValues = [];\n\n // don't bump or'd single version values\n const originalSplit = range.split(' ');\n for (let i = 0; i < originalSplit.length; i += 1) {\n if (\n !containsOperators(originalSplit[i]) &&\n !originalSplit[i].includes('||')\n ) {\n if (i !== 0 && originalSplit[i - 1].includes('||')) {\n ordValues.push(`|| ${originalSplit[i]}`);\n } else if (i !== originalSplit.length && originalSplit[i + 1] === '||') {\n ordValues.push(`${originalSplit[i]} ||`);\n }\n } else {\n ordValues.push(originalSplit[i]);\n }\n }\n\n const parsedRange = parseRange(range);\n const cleanRange = range.replace(/([<=>^~])( )?/g, '');\n const splitRange = cleanRange.split(' ');\n const semverRange: SemVer[] = [];\n\n for (let i = 0; i < splitRange.length; i += 1) {\n if (!splitRange[i].includes('||')) {\n const splitVersion = splitRange[i].split('.');\n const major = splitVersion[0];\n const minor = splitVersion[1];\n const patch = splitVersion[2];\n const operator = ordValues[i].includes('||')\n ? '||'\n : parsedRange[i].operator;\n const NewSemVer: SemVer = {\n major,\n };\n\n let full = `${coerceString(operator)}${major}`;\n if (minor) {\n NewSemVer.minor = minor;\n full = `${full}.${minor}`;\n if (patch) {\n NewSemVer.patch = patch;\n full = `${full}.${patch}`;\n }\n }\n if (operator) {\n NewSemVer.operator = operator;\n full = range.includes(`${operator} `)\n ? `${operator} ${full.replace(operator, '')}`\n : `${operator}${full.replace(operator, '')}`;\n }\n\n full = ordValues[i].includes('||') ? ordValues[i] : full;\n\n NewSemVer.semver = full;\n\n semverRange.push(NewSemVer);\n }\n }\n return semverRange;\n}\n\nexport function replaceRange({\n currentValue,\n newVersion,\n}: NewValueConfig): string {\n const parsedRange = parseRange(currentValue);\n const element = parsedRange[parsedRange.length - 1];\n const toVersionMajor = getMajor(newVersion);\n const toVersionMinor = getMinor(newVersion);\n const toVersionPatch = getPatch(newVersion);\n const suffix = semver.prerelease(newVersion)\n ? `-${String(semver.prerelease(newVersion)?.[0])}`\n : '';\n\n if (element.operator === '~>') {\n return `~> ${toVersionMajor}.${toVersionMinor}.0`;\n }\n if (element.operator === '=') {\n return `=${newVersion}`;\n }\n if (element.operator === '~') {\n if (suffix.length) {\n return `~${toVersionMajor}.${toVersionMinor}.${toVersionPatch}${suffix}`;\n }\n return `~${toVersionMajor}.${toVersionMinor}.0`;\n }\n if (element.operator === '<=') {\n let res;\n if (!!element.patch || suffix.length) {\n res = `<=${newVersion}`;\n } else if (element.minor) {\n res = `<=${toVersionMajor}.${toVersionMinor}`;\n } else {\n res = `<=${toVersionMajor}`;\n }\n if (currentValue.includes('<= ')) {\n res = res.replace('<=', '<= ');\n }\n return res;\n }\n if (element.operator === '<' && toVersionMajor) {\n let res;\n if (currentValue.endsWith('.0.0')) {\n const newMajor = toVersionMajor + 1;\n res = `<${newMajor}.0.0`;\n } else if (element.patch) {\n res = `<${semver.inc(newVersion, 'patch')}`;\n } else if (element.minor && toVersionMinor) {\n res = `<${toVersionMajor}.${toVersionMinor + 1}`;\n } else {\n res = `<${toVersionMajor + 1}`;\n }\n if (currentValue.includes('< ')) {\n res = res.replace(/</g, '< ');\n }\n return res;\n }\n if (element.operator === '>') {\n let res;\n if (currentValue.endsWith('.0.0') && toVersionMajor) {\n const newMajor = toVersionMajor + 1;\n res = `>${newMajor}.0.0`;\n } else if (element.patch) {\n res = `>${toVersionMajor}.${toVersionMinor}.${toVersionPatch}`;\n } else if (element.minor) {\n res = `>${toVersionMajor}.${toVersionMinor}`;\n } else {\n res = `>${toVersionMajor}`;\n }\n if (currentValue.includes('> ')) {\n res = res.replace(/</g, '> ');\n }\n return res;\n }\n if (!element.operator) {\n if (element.minor) {\n if (element.minor === 'x') {\n return `${toVersionMajor}.x`;\n }\n if (element.minor === '*') {\n return `${toVersionMajor}.*`;\n }\n if (element.patch === 'x') {\n return `${toVersionMajor}.${toVersionMinor}.x`;\n }\n if (element.patch === '*') {\n return `${toVersionMajor}.${toVersionMinor}.*`;\n }\n return `${newVersion}`;\n }\n return `${toVersionMajor}`;\n }\n return newVersion;\n}\n\nexport function widenRange(\n { currentValue, currentVersion, newVersion }: NewValueConfig,\n options: semver.Options,\n): string | null {\n const parsedRange = parseRange(currentValue);\n const element = parsedRange[parsedRange.length - 1];\n\n if (matchesWithOptions(newVersion, currentValue, options)) {\n return currentValue;\n }\n const newValue = replaceRange({\n currentValue,\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n if (element.operator?.startsWith('<')) {\n const splitCurrent = currentValue.split(element.operator);\n splitCurrent.pop();\n return splitCurrent.join(element.operator) + newValue;\n }\n if (parsedRange.length > 1) {\n const previousElement = parsedRange[parsedRange.length - 2];\n if (previousElement.operator === '-') {\n const splitCurrent = currentValue.split('-');\n splitCurrent.pop();\n return `${splitCurrent.join('-')}- ${newValue}`;\n }\n if (element.operator?.startsWith('>')) {\n logger.warn(`Complex ranges ending in greater than are not supported`);\n return null;\n }\n }\n return `${currentValue} || ${newValue}`;\n}\n\nexport function bumpRange(\n { currentValue, currentVersion, newVersion }: NewValueConfig,\n options: semver.Options,\n): string | null {\n if (!containsOperators(currentValue) && currentValue.includes('||')) {\n return widenRange(\n {\n currentValue,\n rangeStrategy: 'widen',\n currentVersion,\n newVersion,\n },\n options,\n );\n }\n const parsedRange = parseRange(currentValue);\n const element = parsedRange[parsedRange.length - 1];\n\n const toVersionMajor = getMajor(newVersion);\n const toVersionMinor = getMinor(newVersion);\n const suffix = semver.prerelease(newVersion)\n ? `-${String(semver.prerelease(newVersion)?.[0])}`\n : '';\n\n if (parsedRange.length === 1) {\n if (!element.operator) {\n return replaceRange({\n currentValue,\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n }\n if (element.operator.startsWith('~')) {\n const split = currentValue.split('.');\n if (suffix.length) {\n return `${element.operator}${newVersion}`;\n }\n if (split.length === 1) {\n // ~4\n return `${element.operator}${toVersionMajor}`;\n }\n if (split.length === 2) {\n // ~4.1\n return `${element.operator}${toVersionMajor}.${toVersionMinor}`;\n }\n return `${element.operator}${newVersion}`;\n }\n if (element.operator === '=') {\n return `=${newVersion}`;\n }\n if (element.operator === '>=') {\n return currentValue.includes('>= ')\n ? `>= ${newVersion}`\n : `>=${newVersion}`;\n }\n if (element.operator.startsWith('<')) {\n return currentValue;\n }\n } else {\n const newRange = fixParsedRange(currentValue);\n const versions = newRange.map((x: any) => {\n // don't bump or'd single version values\n if (x.operator === '||') {\n return x.semver;\n }\n if (x.operator) {\n const bumpedSubRange = bumpRange(\n {\n currentValue: x.semver,\n rangeStrategy: 'bump',\n currentVersion,\n newVersion,\n },\n options,\n );\n if (\n bumpedSubRange &&\n matchesWithOptions(newVersion, bumpedSubRange, options)\n ) {\n return bumpedSubRange;\n }\n }\n\n return replaceRange({\n currentValue: x.semver,\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n });\n return versions.filter((x: any) => x !== null && x !== '').join(' ');\n }\n logger.debug(\n `Unsupported range type for rangeStrategy=bump: ${currentValue}`,\n );\n return null;\n}\n"],"mappings":";;;;;;AAeA,SAAgB,SAAS,SAAgC;CACvD,MAAM,iBAAiB,aAAa,OAAO;CAC3C,MAAM,UAAU,WAAW,OAAO;CAClC,QAAQ,oBAAoB;CAC5B,MAAM,iBAAiB,YAAY,gBAAgB,OAAO;CAC1D,IAAI,OAAO,mBAAmB,UAC5B,OAAO,OAAO,eAAe,MAAM,GAAG,CAAC,CAAC,EAAE;CAE5C,OAAO;AACT;AAGA,SAAgB,SAAS,SAAgC;CACvD,MAAM,iBAAiB,aAAa,OAAO;CAC3C,MAAM,UAAU,WAAW,OAAO;CAClC,QAAQ,oBAAoB;CAC5B,MAAM,iBAAiB,YAAY,gBAAgB,OAAO;CAC1D,IAAI,OAAO,mBAAmB,UAC5B,OAAO,OAAO,eAAe,MAAM,GAAG,CAAC,CAAC,EAAE;CAE5C,OAAO;AACT;AAGA,SAAgB,SAAS,SAAgC;CACvD,MAAM,iBAAiB,aAAa,OAAO;CAC3C,MAAM,UAAU,WAAW,OAAO;CAClC,QAAQ,oBAAoB;CAG5B,IAAI,OAFmB,YAAY,gBAAgB,OAE3B,MAAM,UAAU;EACtC,MAAM,aAAaA,SAAO,MACxBA,SAAO,OAAO,gBAAgB,EAC5B,OAAO,MACT,CAAC,GACD,OACF;EACA,OAAO,OAAO,YAAY,MAAM,GAAG,CAAC,CAAC,EAAE;CACzC;CACA,OAAO;AACT;AAEA,SAAgB,eAAe,OAAoB;CACjD,MAAM,YAAY,CAAC;CAGnB,MAAM,gBAAgB,MAAM,MAAM,GAAG;CACrC,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK,GAC7C,IACE,CAAC,kBAAkB,cAAc,EAAE,KACnC,CAAC,cAAc,EAAE,CAAC,SAAS,IAAI;MAE3B,MAAM,KAAK,cAAc,IAAI,EAAE,CAAC,SAAS,IAAI,GAC/C,UAAU,KAAK,MAAM,cAAc,IAAI;OAClC,IAAI,MAAM,cAAc,UAAU,cAAc,IAAI,OAAO,MAChE,UAAU,KAAK,GAAG,cAAc,GAAG,IAAI;CAAA,OAGzC,UAAU,KAAK,cAAc,EAAE;CAInC,MAAM,cAAc,WAAW,KAAK;CAEpC,MAAM,aADa,MAAM,QAAQ,kBAAkB,EACvB,CAAC,CAAC,MAAM,GAAG;CACvC,MAAM,cAAwB,CAAC;CAE/B,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK,GAC1C,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,IAAI,GAAG;EACjC,MAAM,eAAe,WAAW,EAAE,CAAC,MAAM,GAAG;EAC5C,MAAM,QAAQ,aAAa;EAC3B,MAAM,QAAQ,aAAa;EAC3B,MAAM,QAAQ,aAAa;EAC3B,MAAM,WAAW,UAAU,EAAE,CAAC,SAAS,IAAI,IACvC,OACA,YAAY,EAAE,CAAC;EACnB,MAAM,YAAoB,EACxB,MACF;EAEA,IAAI,OAAO,GAAG,aAAa,QAAQ,IAAI;EACvC,IAAI,OAAO;GACT,UAAU,QAAQ;GAClB,OAAO,GAAG,KAAK,GAAG;GAClB,IAAI,OAAO;IACT,UAAU,QAAQ;IAClB,OAAO,GAAG,KAAK,GAAG;GACpB;EACF;EACA,IAAI,UAAU;GACZ,UAAU,WAAW;GACrB,OAAO,MAAM,SAAS,GAAG,SAAS,EAAE,IAChC,GAAG,SAAS,GAAG,KAAK,QAAQ,UAAU,EAAE,MACxC,GAAG,WAAW,KAAK,QAAQ,UAAU,EAAE;EAC7C;EAEA,OAAO,UAAU,EAAE,CAAC,SAAS,IAAI,IAAI,UAAU,KAAK;EAEpD,UAAU,SAAS;EAEnB,YAAY,KAAK,SAAS;CAC5B;CAEF,OAAO;AACT;AAEA,SAAgB,aAAa,EAC3B,cACA,cACyB;CACzB,MAAM,cAAc,WAAW,YAAY;CAC3C,MAAM,UAAU,YAAY,YAAY,SAAS;CACjD,MAAM,iBAAiB,SAAS,UAAU;CAC1C,MAAM,iBAAiB,SAAS,UAAU;CAC1C,MAAM,iBAAiB,SAAS,UAAU;CAC1C,MAAM,SAASA,SAAO,WAAW,UAAU,IACvC,IAAI,OAAOA,SAAO,WAAW,UAAU,CAAC,GAAG,EAAE,MAC7C;CAEJ,IAAI,QAAQ,aAAa,MACvB,OAAO,MAAM,eAAe,GAAG,eAAe;CAEhD,IAAI,QAAQ,aAAa,KACvB,OAAO,IAAI;CAEb,IAAI,QAAQ,aAAa,KAAK;EAC5B,IAAI,OAAO,QACT,OAAO,IAAI,eAAe,GAAG,eAAe,GAAG,iBAAiB;EAElE,OAAO,IAAI,eAAe,GAAG,eAAe;CAC9C;CACA,IAAI,QAAQ,aAAa,MAAM;EAC7B,IAAI;EACJ,IAAI,CAAC,CAAC,QAAQ,SAAS,OAAO,QAC5B,MAAM,KAAK;OACN,IAAI,QAAQ,OACjB,MAAM,KAAK,eAAe,GAAG;OAE7B,MAAM,KAAK;EAEb,IAAI,aAAa,SAAS,KAAK,GAC7B,MAAM,IAAI,QAAQ,MAAM,KAAK;EAE/B,OAAO;CACT;CACA,IAAI,QAAQ,aAAa,OAAO,gBAAgB;EAC9C,IAAI;EACJ,IAAI,aAAa,SAAS,MAAM,GAE9B,MAAM,IADW,iBAAiB,EACf;OACd,IAAI,QAAQ,OACjB,MAAM,IAAIA,SAAO,IAAI,YAAY,OAAO;OACnC,IAAI,QAAQ,SAAS,gBAC1B,MAAM,IAAI,eAAe,GAAG,iBAAiB;OAE7C,MAAM,IAAI,iBAAiB;EAE7B,IAAI,aAAa,SAAS,IAAI,GAC5B,MAAM,IAAI,QAAQ,MAAM,IAAI;EAE9B,OAAO;CACT;CACA,IAAI,QAAQ,aAAa,KAAK;EAC5B,IAAI;EACJ,IAAI,aAAa,SAAS,MAAM,KAAK,gBAEnC,MAAM,IADW,iBAAiB,EACf;OACd,IAAI,QAAQ,OACjB,MAAM,IAAI,eAAe,GAAG,eAAe,GAAG;OACzC,IAAI,QAAQ,OACjB,MAAM,IAAI,eAAe,GAAG;OAE5B,MAAM,IAAI;EAEZ,IAAI,aAAa,SAAS,IAAI,GAC5B,MAAM,IAAI,QAAQ,MAAM,IAAI;EAE9B,OAAO;CACT;CACA,IAAI,CAAC,QAAQ,UAAU;EACrB,IAAI,QAAQ,OAAO;GACjB,IAAI,QAAQ,UAAU,KACpB,OAAO,GAAG,eAAe;GAE3B,IAAI,QAAQ,UAAU,KACpB,OAAO,GAAG,eAAe;GAE3B,IAAI,QAAQ,UAAU,KACpB,OAAO,GAAG,eAAe,GAAG,eAAe;GAE7C,IAAI,QAAQ,UAAU,KACpB,OAAO,GAAG,eAAe,GAAG,eAAe;GAE7C,OAAO,GAAG;EACZ;EACA,OAAO,GAAG;CACZ;CACA,OAAO;AACT;AAEA,SAAgB,WACd,EAAE,cAAc,gBAAgB,cAChC,SACe;CACf,MAAM,cAAc,WAAW,YAAY;CAC3C,MAAM,UAAU,YAAY,YAAY,SAAS;CAEjD,IAAI,mBAAmB,YAAY,cAAc,OAAO,GACtD,OAAO;CAET,MAAM,WAAW,aAAa;EAC5B;EACA,eAAe;EACf;EACA;CACF,CAAC;CACD,IAAI,QAAQ,UAAU,WAAW,GAAG,GAAG;EACrC,MAAM,eAAe,aAAa,MAAM,QAAQ,QAAQ;EACxD,aAAa,IAAI;EACjB,OAAO,aAAa,KAAK,QAAQ,QAAQ,IAAI;CAC/C;CACA,IAAI,YAAY,SAAS,GAAG;EAE1B,IADwB,YAAY,YAAY,SAAS,EACtC,CAAC,aAAa,KAAK;GACpC,MAAM,eAAe,aAAa,MAAM,GAAG;GAC3C,aAAa,IAAI;GACjB,OAAO,GAAG,aAAa,KAAK,GAAG,EAAE,IAAI;EACvC;EACA,IAAI,QAAQ,UAAU,WAAW,GAAG,GAAG;GACrC,OAAO,KAAK,yDAAyD;GACrE,OAAO;EACT;CACF;CACA,OAAO,GAAG,aAAa,MAAM;AAC/B;AAEA,SAAgB,UACd,EAAE,cAAc,gBAAgB,cAChC,SACe;CACf,IAAI,CAAC,kBAAkB,YAAY,KAAK,aAAa,SAAS,IAAI,GAChE,OAAO,WACL;EACE;EACA,eAAe;EACf;EACA;CACF,GACA,OACF;CAEF,MAAM,cAAc,WAAW,YAAY;CAC3C,MAAM,UAAU,YAAY,YAAY,SAAS;CAEjD,MAAM,iBAAiB,SAAS,UAAU;CAC1C,MAAM,iBAAiB,SAAS,UAAU;CAC1C,MAAM,SAASA,SAAO,WAAW,UAAU,IACvC,IAAI,OAAOA,SAAO,WAAW,UAAU,CAAC,GAAG,EAAE,MAC7C;CAEJ,IAAI,YAAY,WAAW,GAAG;EAC5B,IAAI,CAAC,QAAQ,UACX,OAAO,aAAa;GAClB;GACA,eAAe;GACf;GACA;EACF,CAAC;EAEH,IAAI,QAAQ,SAAS,WAAW,GAAG,GAAG;GACpC,MAAM,QAAQ,aAAa,MAAM,GAAG;GACpC,IAAI,OAAO,QACT,OAAO,GAAG,QAAQ,WAAW;GAE/B,IAAI,MAAM,WAAW,GAEnB,OAAO,GAAG,QAAQ,WAAW;GAE/B,IAAI,MAAM,WAAW,GAEnB,OAAO,GAAG,QAAQ,WAAW,eAAe,GAAG;GAEjD,OAAO,GAAG,QAAQ,WAAW;EAC/B;EACA,IAAI,QAAQ,aAAa,KACvB,OAAO,IAAI;EAEb,IAAI,QAAQ,aAAa,MACvB,OAAO,aAAa,SAAS,KAAK,IAC9B,MAAM,eACN,KAAK;EAEX,IAAI,QAAQ,SAAS,WAAW,GAAG,GACjC,OAAO;CAEX,OAgCE,OA/BiB,eAAe,YACR,CAAC,CAAC,KAAK,MAAW;EAExC,IAAI,EAAE,aAAa,MACjB,OAAO,EAAE;EAEX,IAAI,EAAE,UAAU;GACd,MAAM,iBAAiB,UACrB;IACE,cAAc,EAAE;IAChB,eAAe;IACf;IACA;GACF,GACA,OACF;GACA,IACE,kBACA,mBAAmB,YAAY,gBAAgB,OAAO,GAEtD,OAAO;EAEX;EAEA,OAAO,aAAa;GAClB,cAAc,EAAE;GAChB,eAAe;GACf;GACA;EACF,CAAC;CACH,CACc,CAAC,CAAC,QAAQ,MAAW,MAAM,QAAQ,MAAM,EAAE,CAAC,CAAC,KAAK,GAAG;CAErE,OAAO,MACL,kDAAkD,cACpD;CACA,OAAO;AACT"}
|
|
1
|
+
{"version":3,"file":"range.js","names":["semver"],"sources":["../../../../lib/modules/versioning/conan/range.ts"],"sourcesContent":["import * as semver from 'semver';\nimport type { SemVer } from 'semver-utils';\nimport { parseRange } from 'semver-utils';\nimport { logger } from '../../../logger/index.ts';\nimport { coerceString } from '../../../util/string.ts';\nimport type { NewValueConfig } from '../types.ts';\nimport {\n cleanVersion,\n containsOperators,\n getOptions,\n makeVersion,\n matchesWithOptions,\n} from './common.ts';\n\n// always include prereleases\nexport function getMajor(version: string): null | number {\n const cleanedVersion = cleanVersion(version);\n const options = getOptions(version);\n options.includePrerelease = true;\n const cleanerVersion = makeVersion(cleanedVersion, options);\n if (typeof cleanerVersion === 'string') {\n return Number(cleanerVersion.split('.')[0]);\n }\n return null;\n}\n\n// always include prereleases\nexport function getMinor(version: string): null | number {\n const cleanedVersion = cleanVersion(version);\n const options = getOptions(version);\n options.includePrerelease = true;\n const cleanerVersion = makeVersion(cleanedVersion, options);\n if (typeof cleanerVersion === 'string') {\n return Number(cleanerVersion.split('.')[1]);\n }\n return null;\n}\n\n// always include prereleases\nexport function getPatch(version: string): null | number {\n const cleanedVersion = cleanVersion(version);\n const options = getOptions(version);\n options.includePrerelease = true;\n const cleanerVersion = makeVersion(cleanedVersion, options);\n\n if (typeof cleanerVersion === 'string') {\n const newVersion = semver.valid(\n semver.coerce(cleanedVersion, {\n loose: false,\n }),\n options,\n );\n return Number(newVersion?.split('.')[2]);\n }\n return null;\n}\n\nexport function fixParsedRange(range: string): any {\n const ordValues = [];\n\n // don't bump or'd single version values\n const originalSplit = range.split(' ');\n for (let i = 0; i < originalSplit.length; i += 1) {\n if (\n !containsOperators(originalSplit[i]) &&\n !originalSplit[i].includes('||')\n ) {\n if (i !== 0 && originalSplit[i - 1].includes('||')) {\n ordValues.push(`|| ${originalSplit[i]}`);\n } else if (i !== originalSplit.length && originalSplit[i + 1] === '||') {\n ordValues.push(`${originalSplit[i]} ||`);\n }\n } else {\n ordValues.push(originalSplit[i]);\n }\n }\n\n const parsedRange = parseRange(range);\n const cleanRange = range.replace(/([<=>^~])( )?/g, '');\n const splitRange = cleanRange.split(' ');\n const semverRange: SemVer[] = [];\n\n for (let i = 0; i < splitRange.length; i += 1) {\n if (!splitRange[i].includes('||')) {\n const splitVersion = splitRange[i].split('.');\n const major = splitVersion[0];\n const minor = splitVersion[1];\n const patch = splitVersion[2];\n const operator = ordValues[i].includes('||')\n ? '||'\n : parsedRange[i].operator;\n const NewSemVer: SemVer = {\n major,\n };\n\n let full = `${coerceString(operator)}${major}`;\n if (minor) {\n NewSemVer.minor = minor;\n full = `${full}.${minor}`;\n if (patch) {\n NewSemVer.patch = patch;\n full = `${full}.${patch}`;\n }\n }\n if (operator) {\n NewSemVer.operator = operator;\n full = range.includes(`${operator} `)\n ? `${operator} ${full.replace(operator, '')}`\n : `${operator}${full.replace(operator, '')}`;\n }\n\n full = ordValues[i].includes('||') ? ordValues[i] : full;\n\n NewSemVer.semver = full;\n\n semverRange.push(NewSemVer);\n }\n }\n return semverRange;\n}\n\nexport function replaceRange({\n currentValue,\n newVersion,\n}: NewValueConfig): string {\n const parsedRange = parseRange(currentValue);\n const element = parsedRange.at(-1)!;\n const toVersionMajor = getMajor(newVersion);\n const toVersionMinor = getMinor(newVersion);\n const toVersionPatch = getPatch(newVersion);\n const suffix = semver.prerelease(newVersion)\n ? `-${String(semver.prerelease(newVersion)?.[0])}`\n : '';\n\n if (element.operator === '~>') {\n return `~> ${toVersionMajor}.${toVersionMinor}.0`;\n }\n if (element.operator === '=') {\n return `=${newVersion}`;\n }\n if (element.operator === '~') {\n if (suffix.length) {\n return `~${toVersionMajor}.${toVersionMinor}.${toVersionPatch}${suffix}`;\n }\n return `~${toVersionMajor}.${toVersionMinor}.0`;\n }\n if (element.operator === '<=') {\n let res;\n if (!!element.patch || suffix.length) {\n res = `<=${newVersion}`;\n } else if (element.minor) {\n res = `<=${toVersionMajor}.${toVersionMinor}`;\n } else {\n res = `<=${toVersionMajor}`;\n }\n if (currentValue.includes('<= ')) {\n res = res.replace('<=', '<= ');\n }\n return res;\n }\n if (element.operator === '<' && toVersionMajor) {\n let res;\n if (currentValue.endsWith('.0.0')) {\n const newMajor = toVersionMajor + 1;\n res = `<${newMajor}.0.0`;\n } else if (element.patch) {\n res = `<${semver.inc(newVersion, 'patch')}`;\n } else if (element.minor && toVersionMinor) {\n res = `<${toVersionMajor}.${toVersionMinor + 1}`;\n } else {\n res = `<${toVersionMajor + 1}`;\n }\n if (currentValue.includes('< ')) {\n res = res.replace(/</g, '< ');\n }\n return res;\n }\n if (element.operator === '>') {\n let res;\n if (currentValue.endsWith('.0.0') && toVersionMajor) {\n const newMajor = toVersionMajor + 1;\n res = `>${newMajor}.0.0`;\n } else if (element.patch) {\n res = `>${toVersionMajor}.${toVersionMinor}.${toVersionPatch}`;\n } else if (element.minor) {\n res = `>${toVersionMajor}.${toVersionMinor}`;\n } else {\n res = `>${toVersionMajor}`;\n }\n if (currentValue.includes('> ')) {\n res = res.replace(/</g, '> ');\n }\n return res;\n }\n if (!element.operator) {\n if (element.minor) {\n if (element.minor === 'x') {\n return `${toVersionMajor}.x`;\n }\n if (element.minor === '*') {\n return `${toVersionMajor}.*`;\n }\n if (element.patch === 'x') {\n return `${toVersionMajor}.${toVersionMinor}.x`;\n }\n if (element.patch === '*') {\n return `${toVersionMajor}.${toVersionMinor}.*`;\n }\n return `${newVersion}`;\n }\n return `${toVersionMajor}`;\n }\n return newVersion;\n}\n\nexport function widenRange(\n { currentValue, currentVersion, newVersion }: NewValueConfig,\n options: semver.Options,\n): string | null {\n const parsedRange = parseRange(currentValue);\n const element = parsedRange.at(-1)!;\n\n if (matchesWithOptions(newVersion, currentValue, options)) {\n return currentValue;\n }\n const newValue = replaceRange({\n currentValue,\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n if (element.operator?.startsWith('<')) {\n const splitCurrent = currentValue.split(element.operator);\n splitCurrent.pop();\n return splitCurrent.join(element.operator) + newValue;\n }\n if (parsedRange.length > 1) {\n const previousElement = parsedRange.at(-2)!;\n if (previousElement.operator === '-') {\n const splitCurrent = currentValue.split('-');\n splitCurrent.pop();\n return `${splitCurrent.join('-')}- ${newValue}`;\n }\n if (element.operator?.startsWith('>')) {\n logger.warn(`Complex ranges ending in greater than are not supported`);\n return null;\n }\n }\n return `${currentValue} || ${newValue}`;\n}\n\nexport function bumpRange(\n { currentValue, currentVersion, newVersion }: NewValueConfig,\n options: semver.Options,\n): string | null {\n if (!containsOperators(currentValue) && currentValue.includes('||')) {\n return widenRange(\n {\n currentValue,\n rangeStrategy: 'widen',\n currentVersion,\n newVersion,\n },\n options,\n );\n }\n const parsedRange = parseRange(currentValue);\n const element = parsedRange.at(-1)!;\n\n const toVersionMajor = getMajor(newVersion);\n const toVersionMinor = getMinor(newVersion);\n const suffix = semver.prerelease(newVersion)\n ? `-${String(semver.prerelease(newVersion)?.[0])}`\n : '';\n\n if (parsedRange.length === 1) {\n if (!element.operator) {\n return replaceRange({\n currentValue,\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n }\n if (element.operator.startsWith('~')) {\n const split = currentValue.split('.');\n if (suffix.length) {\n return `${element.operator}${newVersion}`;\n }\n if (split.length === 1) {\n // ~4\n return `${element.operator}${toVersionMajor}`;\n }\n if (split.length === 2) {\n // ~4.1\n return `${element.operator}${toVersionMajor}.${toVersionMinor}`;\n }\n return `${element.operator}${newVersion}`;\n }\n if (element.operator === '=') {\n return `=${newVersion}`;\n }\n if (element.operator === '>=') {\n return currentValue.includes('>= ')\n ? `>= ${newVersion}`\n : `>=${newVersion}`;\n }\n if (element.operator.startsWith('<')) {\n return currentValue;\n }\n } else {\n const newRange = fixParsedRange(currentValue);\n const versions = newRange.map((x: any) => {\n // don't bump or'd single version values\n if (x.operator === '||') {\n return x.semver;\n }\n if (x.operator) {\n const bumpedSubRange = bumpRange(\n {\n currentValue: x.semver,\n rangeStrategy: 'bump',\n currentVersion,\n newVersion,\n },\n options,\n );\n if (\n bumpedSubRange &&\n matchesWithOptions(newVersion, bumpedSubRange, options)\n ) {\n return bumpedSubRange;\n }\n }\n\n return replaceRange({\n currentValue: x.semver,\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n });\n return versions.filter((x: any) => x !== null && x !== '').join(' ');\n }\n logger.debug(\n `Unsupported range type for rangeStrategy=bump: ${currentValue}`,\n );\n return null;\n}\n"],"mappings":";;;;;;AAeA,SAAgB,SAAS,SAAgC;CACvD,MAAM,iBAAiB,aAAa,OAAO;CAC3C,MAAM,UAAU,WAAW,OAAO;CAClC,QAAQ,oBAAoB;CAC5B,MAAM,iBAAiB,YAAY,gBAAgB,OAAO;CAC1D,IAAI,OAAO,mBAAmB,UAC5B,OAAO,OAAO,eAAe,MAAM,GAAG,CAAC,CAAC,EAAE;CAE5C,OAAO;AACT;AAGA,SAAgB,SAAS,SAAgC;CACvD,MAAM,iBAAiB,aAAa,OAAO;CAC3C,MAAM,UAAU,WAAW,OAAO;CAClC,QAAQ,oBAAoB;CAC5B,MAAM,iBAAiB,YAAY,gBAAgB,OAAO;CAC1D,IAAI,OAAO,mBAAmB,UAC5B,OAAO,OAAO,eAAe,MAAM,GAAG,CAAC,CAAC,EAAE;CAE5C,OAAO;AACT;AAGA,SAAgB,SAAS,SAAgC;CACvD,MAAM,iBAAiB,aAAa,OAAO;CAC3C,MAAM,UAAU,WAAW,OAAO;CAClC,QAAQ,oBAAoB;CAG5B,IAAI,OAFmB,YAAY,gBAAgB,OAE3B,MAAM,UAAU;EACtC,MAAM,aAAaA,SAAO,MACxBA,SAAO,OAAO,gBAAgB,EAC5B,OAAO,MACT,CAAC,GACD,OACF;EACA,OAAO,OAAO,YAAY,MAAM,GAAG,CAAC,CAAC,EAAE;CACzC;CACA,OAAO;AACT;AAEA,SAAgB,eAAe,OAAoB;CACjD,MAAM,YAAY,CAAC;CAGnB,MAAM,gBAAgB,MAAM,MAAM,GAAG;CACrC,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK,GAC7C,IACE,CAAC,kBAAkB,cAAc,EAAE,KACnC,CAAC,cAAc,EAAE,CAAC,SAAS,IAAI;MAE3B,MAAM,KAAK,cAAc,IAAI,EAAE,CAAC,SAAS,IAAI,GAC/C,UAAU,KAAK,MAAM,cAAc,IAAI;OAClC,IAAI,MAAM,cAAc,UAAU,cAAc,IAAI,OAAO,MAChE,UAAU,KAAK,GAAG,cAAc,GAAG,IAAI;CAAA,OAGzC,UAAU,KAAK,cAAc,EAAE;CAInC,MAAM,cAAc,WAAW,KAAK;CAEpC,MAAM,aADa,MAAM,QAAQ,kBAAkB,EACvB,CAAC,CAAC,MAAM,GAAG;CACvC,MAAM,cAAwB,CAAC;CAE/B,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK,GAC1C,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,IAAI,GAAG;EACjC,MAAM,eAAe,WAAW,EAAE,CAAC,MAAM,GAAG;EAC5C,MAAM,QAAQ,aAAa;EAC3B,MAAM,QAAQ,aAAa;EAC3B,MAAM,QAAQ,aAAa;EAC3B,MAAM,WAAW,UAAU,EAAE,CAAC,SAAS,IAAI,IACvC,OACA,YAAY,EAAE,CAAC;EACnB,MAAM,YAAoB,EACxB,MACF;EAEA,IAAI,OAAO,GAAG,aAAa,QAAQ,IAAI;EACvC,IAAI,OAAO;GACT,UAAU,QAAQ;GAClB,OAAO,GAAG,KAAK,GAAG;GAClB,IAAI,OAAO;IACT,UAAU,QAAQ;IAClB,OAAO,GAAG,KAAK,GAAG;GACpB;EACF;EACA,IAAI,UAAU;GACZ,UAAU,WAAW;GACrB,OAAO,MAAM,SAAS,GAAG,SAAS,EAAE,IAChC,GAAG,SAAS,GAAG,KAAK,QAAQ,UAAU,EAAE,MACxC,GAAG,WAAW,KAAK,QAAQ,UAAU,EAAE;EAC7C;EAEA,OAAO,UAAU,EAAE,CAAC,SAAS,IAAI,IAAI,UAAU,KAAK;EAEpD,UAAU,SAAS;EAEnB,YAAY,KAAK,SAAS;CAC5B;CAEF,OAAO;AACT;AAEA,SAAgB,aAAa,EAC3B,cACA,cACyB;CAEzB,MAAM,UADc,WAAW,YACL,CAAC,CAAC,GAAG,EAAE;CACjC,MAAM,iBAAiB,SAAS,UAAU;CAC1C,MAAM,iBAAiB,SAAS,UAAU;CAC1C,MAAM,iBAAiB,SAAS,UAAU;CAC1C,MAAM,SAASA,SAAO,WAAW,UAAU,IACvC,IAAI,OAAOA,SAAO,WAAW,UAAU,CAAC,GAAG,EAAE,MAC7C;CAEJ,IAAI,QAAQ,aAAa,MACvB,OAAO,MAAM,eAAe,GAAG,eAAe;CAEhD,IAAI,QAAQ,aAAa,KACvB,OAAO,IAAI;CAEb,IAAI,QAAQ,aAAa,KAAK;EAC5B,IAAI,OAAO,QACT,OAAO,IAAI,eAAe,GAAG,eAAe,GAAG,iBAAiB;EAElE,OAAO,IAAI,eAAe,GAAG,eAAe;CAC9C;CACA,IAAI,QAAQ,aAAa,MAAM;EAC7B,IAAI;EACJ,IAAI,CAAC,CAAC,QAAQ,SAAS,OAAO,QAC5B,MAAM,KAAK;OACN,IAAI,QAAQ,OACjB,MAAM,KAAK,eAAe,GAAG;OAE7B,MAAM,KAAK;EAEb,IAAI,aAAa,SAAS,KAAK,GAC7B,MAAM,IAAI,QAAQ,MAAM,KAAK;EAE/B,OAAO;CACT;CACA,IAAI,QAAQ,aAAa,OAAO,gBAAgB;EAC9C,IAAI;EACJ,IAAI,aAAa,SAAS,MAAM,GAE9B,MAAM,IADW,iBAAiB,EACf;OACd,IAAI,QAAQ,OACjB,MAAM,IAAIA,SAAO,IAAI,YAAY,OAAO;OACnC,IAAI,QAAQ,SAAS,gBAC1B,MAAM,IAAI,eAAe,GAAG,iBAAiB;OAE7C,MAAM,IAAI,iBAAiB;EAE7B,IAAI,aAAa,SAAS,IAAI,GAC5B,MAAM,IAAI,QAAQ,MAAM,IAAI;EAE9B,OAAO;CACT;CACA,IAAI,QAAQ,aAAa,KAAK;EAC5B,IAAI;EACJ,IAAI,aAAa,SAAS,MAAM,KAAK,gBAEnC,MAAM,IADW,iBAAiB,EACf;OACd,IAAI,QAAQ,OACjB,MAAM,IAAI,eAAe,GAAG,eAAe,GAAG;OACzC,IAAI,QAAQ,OACjB,MAAM,IAAI,eAAe,GAAG;OAE5B,MAAM,IAAI;EAEZ,IAAI,aAAa,SAAS,IAAI,GAC5B,MAAM,IAAI,QAAQ,MAAM,IAAI;EAE9B,OAAO;CACT;CACA,IAAI,CAAC,QAAQ,UAAU;EACrB,IAAI,QAAQ,OAAO;GACjB,IAAI,QAAQ,UAAU,KACpB,OAAO,GAAG,eAAe;GAE3B,IAAI,QAAQ,UAAU,KACpB,OAAO,GAAG,eAAe;GAE3B,IAAI,QAAQ,UAAU,KACpB,OAAO,GAAG,eAAe,GAAG,eAAe;GAE7C,IAAI,QAAQ,UAAU,KACpB,OAAO,GAAG,eAAe,GAAG,eAAe;GAE7C,OAAO,GAAG;EACZ;EACA,OAAO,GAAG;CACZ;CACA,OAAO;AACT;AAEA,SAAgB,WACd,EAAE,cAAc,gBAAgB,cAChC,SACe;CACf,MAAM,cAAc,WAAW,YAAY;CAC3C,MAAM,UAAU,YAAY,GAAG,EAAE;CAEjC,IAAI,mBAAmB,YAAY,cAAc,OAAO,GACtD,OAAO;CAET,MAAM,WAAW,aAAa;EAC5B;EACA,eAAe;EACf;EACA;CACF,CAAC;CACD,IAAI,QAAQ,UAAU,WAAW,GAAG,GAAG;EACrC,MAAM,eAAe,aAAa,MAAM,QAAQ,QAAQ;EACxD,aAAa,IAAI;EACjB,OAAO,aAAa,KAAK,QAAQ,QAAQ,IAAI;CAC/C;CACA,IAAI,YAAY,SAAS,GAAG;EAE1B,IADwB,YAAY,GAAG,EACrB,CAAC,CAAC,aAAa,KAAK;GACpC,MAAM,eAAe,aAAa,MAAM,GAAG;GAC3C,aAAa,IAAI;GACjB,OAAO,GAAG,aAAa,KAAK,GAAG,EAAE,IAAI;EACvC;EACA,IAAI,QAAQ,UAAU,WAAW,GAAG,GAAG;GACrC,OAAO,KAAK,yDAAyD;GACrE,OAAO;EACT;CACF;CACA,OAAO,GAAG,aAAa,MAAM;AAC/B;AAEA,SAAgB,UACd,EAAE,cAAc,gBAAgB,cAChC,SACe;CACf,IAAI,CAAC,kBAAkB,YAAY,KAAK,aAAa,SAAS,IAAI,GAChE,OAAO,WACL;EACE;EACA,eAAe;EACf;EACA;CACF,GACA,OACF;CAEF,MAAM,cAAc,WAAW,YAAY;CAC3C,MAAM,UAAU,YAAY,GAAG,EAAE;CAEjC,MAAM,iBAAiB,SAAS,UAAU;CAC1C,MAAM,iBAAiB,SAAS,UAAU;CAC1C,MAAM,SAASA,SAAO,WAAW,UAAU,IACvC,IAAI,OAAOA,SAAO,WAAW,UAAU,CAAC,GAAG,EAAE,MAC7C;CAEJ,IAAI,YAAY,WAAW,GAAG;EAC5B,IAAI,CAAC,QAAQ,UACX,OAAO,aAAa;GAClB;GACA,eAAe;GACf;GACA;EACF,CAAC;EAEH,IAAI,QAAQ,SAAS,WAAW,GAAG,GAAG;GACpC,MAAM,QAAQ,aAAa,MAAM,GAAG;GACpC,IAAI,OAAO,QACT,OAAO,GAAG,QAAQ,WAAW;GAE/B,IAAI,MAAM,WAAW,GAEnB,OAAO,GAAG,QAAQ,WAAW;GAE/B,IAAI,MAAM,WAAW,GAEnB,OAAO,GAAG,QAAQ,WAAW,eAAe,GAAG;GAEjD,OAAO,GAAG,QAAQ,WAAW;EAC/B;EACA,IAAI,QAAQ,aAAa,KACvB,OAAO,IAAI;EAEb,IAAI,QAAQ,aAAa,MACvB,OAAO,aAAa,SAAS,KAAK,IAC9B,MAAM,eACN,KAAK;EAEX,IAAI,QAAQ,SAAS,WAAW,GAAG,GACjC,OAAO;CAEX,OAgCE,OA/BiB,eAAe,YACR,CAAC,CAAC,KAAK,MAAW;EAExC,IAAI,EAAE,aAAa,MACjB,OAAO,EAAE;EAEX,IAAI,EAAE,UAAU;GACd,MAAM,iBAAiB,UACrB;IACE,cAAc,EAAE;IAChB,eAAe;IACf;IACA;GACF,GACA,OACF;GACA,IACE,kBACA,mBAAmB,YAAY,gBAAgB,OAAO,GAEtD,OAAO;EAEX;EAEA,OAAO,aAAa;GAClB,cAAc,EAAE;GAChB,eAAe;GACf;GACA;EACF,CAAC;CACH,CACc,CAAC,CAAC,QAAQ,MAAW,MAAM,QAAQ,MAAM,EAAE,CAAC,CAAC,KAAK,GAAG;CAErE,OAAO,MACL,kDAAkD,cACpD;CACA,OAAO;AACT"}
|
|
@@ -101,7 +101,7 @@ function getSatisfyingVersion(versions, range) {
|
|
|
101
101
|
return a[0].compare(b[0]);
|
|
102
102
|
});
|
|
103
103
|
if (satisfiedVersions.length === 0) return null;
|
|
104
|
-
return satisfiedVersions
|
|
104
|
+
return satisfiedVersions.at(-1)[1];
|
|
105
105
|
}
|
|
106
106
|
function minSatisfyingVersion(versions, range) {
|
|
107
107
|
const spec = new VersionSpec(range);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/conda/index.ts"],"sourcesContent":["import { Version, VersionSpec } from '@baszalmstra/rattler';\nimport type { SemVer } from 'semver';\n\nimport type { RangeStrategy } from '../../../types/versioning.ts';\nimport * as pep440 from '../pep440/index.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\n\nfunction parse(v: string): Version | null {\n try {\n return new Version(v);\n } catch {\n return null;\n }\n}\n\nexport const id = 'conda';\nexport const displayName = 'conda';\nexport const urls = [\n '[Conda package match specifications](https://docs.conda.io/projects/conda-build/en/stable/resources/package-spec.html#package-match-specifications)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n];\n\nfunction isValidVersion(s: string): boolean {\n try {\n new Version(s);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isValidVersionSpec(s: string): boolean {\n try {\n new VersionSpec(s);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isValid(input: string): boolean {\n return isValidVersion(input) || isValidVersionSpec(input);\n}\n\nfunction matches(version: string, range: string): boolean {\n try {\n return new VersionSpec(range).matches(new Version(version));\n } catch {\n return false;\n }\n}\n\nfunction isSingleVersion(input: string): boolean {\n if (!input.startsWith('=')) {\n return false;\n }\n\n return isValidVersion(input.replace(/^==/, '').trimStart());\n}\n\nfunction getPinnedValue(newVersion: string): string {\n return `==${newVersion}`;\n}\n\nfunction getNewValue({\n currentValue,\n rangeStrategy,\n currentVersion,\n newVersion,\n isReplacement,\n}: NewValueConfig): string | null {\n if (currentValue === '*') {\n if (rangeStrategy === 'bump') {\n return `>=${newVersion}`;\n }\n\n // don't think you can widen or replace `*`\n return null;\n }\n\n const normalizedCurrentValue = new VersionSpec(currentValue).toString();\n\n // it's valid range spec in conda to write `3.12.*`, translate to pep440 `==3.12.*`\n if (/^(\\d+\\.)+\\*$/.test(normalizedCurrentValue)) {\n const newValue = pep440.api.getNewValue({\n currentValue: `==${normalizedCurrentValue}`,\n rangeStrategy,\n currentVersion,\n newVersion,\n isReplacement,\n });\n\n return newValue?.replace(/^==/, '') ?? null;\n }\n\n return pep440.api.getNewValue({\n currentValue: normalizedCurrentValue,\n rangeStrategy,\n currentVersion,\n newVersion,\n isReplacement,\n });\n}\n\nfunction sortVersions(version: string, other: string): number {\n return new Version(version).compare(new Version(other));\n}\n\nfunction equals(version: string, other: string): boolean {\n const v2 = parse(other);\n if (!v2) {\n return false;\n }\n\n return parse(version)?.equals(v2) ?? false;\n}\n\nfunction isStable(version: string): boolean {\n return !(parse(version)?.isDev ?? true);\n}\n\nfunction isCompatible(_version: string, _current?: string): boolean {\n return true;\n}\n\nfunction getMajor(version: string | SemVer): null | number {\n return parse(version as string)?.asMajorMinor?.()?.[0] ?? null;\n}\nfunction getMinor(version: string | SemVer): null | number {\n return parse(version as string)?.asMajorMinor?.()?.[1] ?? null;\n}\n\nfunction getPatch(version: string | SemVer): null | number {\n try {\n return pep440.api.getPatch(version);\n } catch {\n return null;\n }\n}\n\nfunction isGreaterThan(version: string, other: string): boolean {\n return sortVersions(version, other) > 0;\n}\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n const spec = new VersionSpec(range);\n\n const satisfiedVersions = versions\n .map((v) => {\n return [new Version(v), v] as const;\n })\n .filter(([v, _raw]) => spec.matches(v))\n .sort((a, b) => {\n return a[0].compare(b[0]);\n });\n\n if (satisfiedVersions.length === 0) {\n return null;\n }\n\n return satisfiedVersions
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/conda/index.ts"],"sourcesContent":["import { Version, VersionSpec } from '@baszalmstra/rattler';\nimport type { SemVer } from 'semver';\n\nimport type { RangeStrategy } from '../../../types/versioning.ts';\nimport * as pep440 from '../pep440/index.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\n\nfunction parse(v: string): Version | null {\n try {\n return new Version(v);\n } catch {\n return null;\n }\n}\n\nexport const id = 'conda';\nexport const displayName = 'conda';\nexport const urls = [\n '[Conda package match specifications](https://docs.conda.io/projects/conda-build/en/stable/resources/package-spec.html#package-match-specifications)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n];\n\nfunction isValidVersion(s: string): boolean {\n try {\n new Version(s);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isValidVersionSpec(s: string): boolean {\n try {\n new VersionSpec(s);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isValid(input: string): boolean {\n return isValidVersion(input) || isValidVersionSpec(input);\n}\n\nfunction matches(version: string, range: string): boolean {\n try {\n return new VersionSpec(range).matches(new Version(version));\n } catch {\n return false;\n }\n}\n\nfunction isSingleVersion(input: string): boolean {\n if (!input.startsWith('=')) {\n return false;\n }\n\n return isValidVersion(input.replace(/^==/, '').trimStart());\n}\n\nfunction getPinnedValue(newVersion: string): string {\n return `==${newVersion}`;\n}\n\nfunction getNewValue({\n currentValue,\n rangeStrategy,\n currentVersion,\n newVersion,\n isReplacement,\n}: NewValueConfig): string | null {\n if (currentValue === '*') {\n if (rangeStrategy === 'bump') {\n return `>=${newVersion}`;\n }\n\n // don't think you can widen or replace `*`\n return null;\n }\n\n const normalizedCurrentValue = new VersionSpec(currentValue).toString();\n\n // it's valid range spec in conda to write `3.12.*`, translate to pep440 `==3.12.*`\n if (/^(\\d+\\.)+\\*$/.test(normalizedCurrentValue)) {\n const newValue = pep440.api.getNewValue({\n currentValue: `==${normalizedCurrentValue}`,\n rangeStrategy,\n currentVersion,\n newVersion,\n isReplacement,\n });\n\n return newValue?.replace(/^==/, '') ?? null;\n }\n\n return pep440.api.getNewValue({\n currentValue: normalizedCurrentValue,\n rangeStrategy,\n currentVersion,\n newVersion,\n isReplacement,\n });\n}\n\nfunction sortVersions(version: string, other: string): number {\n return new Version(version).compare(new Version(other));\n}\n\nfunction equals(version: string, other: string): boolean {\n const v2 = parse(other);\n if (!v2) {\n return false;\n }\n\n return parse(version)?.equals(v2) ?? false;\n}\n\nfunction isStable(version: string): boolean {\n return !(parse(version)?.isDev ?? true);\n}\n\nfunction isCompatible(_version: string, _current?: string): boolean {\n return true;\n}\n\nfunction getMajor(version: string | SemVer): null | number {\n return parse(version as string)?.asMajorMinor?.()?.[0] ?? null;\n}\nfunction getMinor(version: string | SemVer): null | number {\n return parse(version as string)?.asMajorMinor?.()?.[1] ?? null;\n}\n\nfunction getPatch(version: string | SemVer): null | number {\n try {\n return pep440.api.getPatch(version);\n } catch {\n return null;\n }\n}\n\nfunction isGreaterThan(version: string, other: string): boolean {\n return sortVersions(version, other) > 0;\n}\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n const spec = new VersionSpec(range);\n\n const satisfiedVersions = versions\n .map((v) => {\n return [new Version(v), v] as const;\n })\n .filter(([v, _raw]) => spec.matches(v))\n .sort((a, b) => {\n return a[0].compare(b[0]);\n });\n\n if (satisfiedVersions.length === 0) {\n return null;\n }\n\n return satisfiedVersions.at(-1)![1];\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n const spec = new VersionSpec(range);\n\n const satisfiedVersions = versions\n .map((v) => {\n return [new Version(v), v] as const;\n })\n .filter(([v, _raw]) => spec.matches(v))\n .sort((a, b) => {\n return a[0].compare(b[0]);\n });\n\n if (satisfiedVersions.length === 0) {\n return null;\n }\n\n return satisfiedVersions[0][1];\n}\n\nexport const api = {\n equals,\n isValid,\n isVersion: isValidVersion,\n isSingleVersion,\n\n // conda doesn't have stable version and non-stable version\n // for example, tzdata has version 2024a but it's stable\n isStable,\n\n // conda use version are always compatible with each other.\n isCompatible,\n\n getMajor,\n getMinor,\n // sadly conda version doesn't have a concept of patch version\n // so we try to use pep440 get a patch version.\n getPatch,\n\n isGreaterThan,\n getSatisfyingVersion,\n\n minSatisfyingVersion,\n getNewValue,\n getPinnedValue,\n matches,\n sortVersions,\n} satisfies VersioningApi;\n"],"mappings":"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"}
|
|
@@ -107,9 +107,13 @@ function getNewValue({ currentValue, rangeStrategy, newVersion }) {
|
|
|
107
107
|
if (isVersion(currentValue)) return newVersion;
|
|
108
108
|
const prefixRange = parsePrefixRange(currentValue);
|
|
109
109
|
const parsedNewVersion = parse(newVersion);
|
|
110
|
-
if (prefixRange && parsedNewVersion)
|
|
111
|
-
|
|
112
|
-
|
|
110
|
+
if (prefixRange && parsedNewVersion) {
|
|
111
|
+
if (prefixRange.tokens.length > 0) {
|
|
112
|
+
if (prefixRange.tokens.length <= parsedNewVersion.length) return `${prefixRange.tokens.map((_, i) => parsedNewVersion[i].val).join(".")}.+`;
|
|
113
|
+
return newVersion;
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
113
117
|
const mavenRange = parseMavenBasedRange(currentValue);
|
|
114
118
|
if (mavenRange?.preferredVal) {
|
|
115
119
|
const { leftVal, rightVal, preferredVal } = mavenRange;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["mavenVersion"],"sources":["../../../../lib/modules/versioning/gradle/index.ts"],"sourcesContent":["import type { RangeStrategy } from '../../../types/versioning.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport mavenVersion from '../maven/index.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\nimport {\n TokenType,\n compare,\n isValid,\n isVersion,\n parse,\n parseMavenBasedRange,\n parsePrefixRange,\n parseSingleVersionRange,\n} from './compare.ts';\n\nexport const id = 'gradle';\nexport const displayName = 'Gradle';\nexport const urls = [\n '[Gradle version ordering](https://docs.gradle.org/current/userguide/single_versions.html#version_ordering)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = ['bump'];\n\nconst equals = (a: string, b: string): boolean => compare(a, b) === 0;\n\nconst getMajor = (version: string): number | null => {\n const tokens = parse(version?.replace(regEx(/^v/i), ''));\n if (tokens) {\n const majorToken = tokens?.[0];\n if (majorToken?.type === TokenType.Number) {\n return majorToken.val as number;\n }\n }\n return null;\n};\n\nconst getMinor = (version: string): number | null => {\n const tokens = parse(version?.replace(regEx(/^v/i), ''));\n if (tokens) {\n const majorToken = tokens[0];\n const minorToken = tokens[1];\n if (\n majorToken?.type === TokenType.Number &&\n minorToken?.type === TokenType.Number\n ) {\n return minorToken.val as number;\n }\n return 0;\n }\n return null;\n};\n\nconst getPatch = (version: string): number | null => {\n const tokens = parse(version?.replace(regEx(/^v/i), ''));\n if (tokens) {\n const majorToken = tokens[0];\n const minorToken = tokens[1];\n const patchToken = tokens[2];\n if (\n majorToken?.type === TokenType.Number &&\n minorToken?.type === TokenType.Number &&\n patchToken?.type === TokenType.Number\n ) {\n return patchToken.val as number;\n }\n return 0;\n }\n return null;\n};\n\nconst isGreaterThan = (a: string, b: string): boolean => compare(a, b) === 1;\n\nconst unstable = new Set([\n 'dev',\n 'a',\n 'alpha',\n 'b',\n 'beta',\n 'm',\n 'mt',\n 'milestone',\n 'rc',\n 'cr',\n 'preview',\n 'snapshot',\n]);\n\nconst isStable = (version: string): boolean => {\n const tokens = parse(version);\n if (tokens) {\n for (const token of tokens) {\n if (token.type === TokenType.String) {\n const val = token.val.toString().toLowerCase();\n if (unstable.has(val)) {\n return false;\n }\n }\n }\n return true;\n }\n return false;\n};\n\nconst matches = (a: string, b: string): boolean => {\n const versionTokens = parse(a);\n if (!a || !versionTokens || !b) {\n return false;\n }\n if (isVersion(b)) {\n return equals(a, b);\n }\n\n const singleVersionRange = parseSingleVersionRange(b);\n if (singleVersionRange) {\n const { val } = singleVersionRange;\n return equals(a, val);\n }\n\n const prefixRange = parsePrefixRange(b);\n if (prefixRange) {\n const tokens = prefixRange.tokens;\n if (tokens.length === 0) {\n return true;\n }\n const x = versionTokens\n .slice(0, tokens.length)\n .map(({ val }) => val)\n .join('.');\n const y = tokens.map(({ val }) => val).join('.');\n return equals(x, y);\n }\n\n const mavenBasedRange = parseMavenBasedRange(b);\n if (!mavenBasedRange) {\n return false;\n }\n\n const { leftBound, leftVal, rightBound, rightVal } = mavenBasedRange;\n let leftResult = true;\n let rightResult = true;\n\n if (leftVal) {\n leftResult =\n leftBound === 'exclusive'\n ? compare(leftVal, a) === -1\n : compare(leftVal, a) !== 1;\n }\n\n if (rightVal) {\n rightResult =\n rightBound === 'exclusive'\n ? compare(a, rightVal) === -1\n : compare(a, rightVal) !== 1;\n }\n\n return leftResult && rightResult;\n};\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return versions.reduce((result: string | null, version) => {\n if (matches(version, range)) {\n if (!result) {\n return version;\n }\n if (isGreaterThan(version, result)) {\n return version;\n }\n }\n return result;\n }, null);\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return versions.reduce((result: string | null, version) => {\n if (matches(version, range)) {\n if (!result) {\n return version;\n }\n if (compare(version, result) === -1) {\n return version;\n }\n }\n return result;\n }, null);\n}\n\nfunction getNewValue({\n currentValue,\n rangeStrategy,\n newVersion,\n}: NewValueConfig): string | null {\n if (isVersion(currentValue)) {\n return newVersion;\n }\n\n // Check if our version is of the form \"1.2.+\"\n const prefixRange = parsePrefixRange(currentValue);\n const parsedNewVersion = parse(newVersion);\n if (prefixRange && parsedNewVersion) {\n if (prefixRange.tokens.length > 0) {\n if (prefixRange.tokens.length <= parsedNewVersion.length) {\n const newPrefixed = prefixRange.tokens\n .map((_, i) => parsedNewVersion[i].val)\n .join('.');\n\n return `${newPrefixed}.+`;\n } else {\n // our new version is shorter than our prefix range so drop our prefix range\n return newVersion;\n }\n } else {\n // our version is already \"+\" which includes ever version\n return null;\n }\n }\n\n const mavenRange = parseMavenBasedRange(currentValue);\n if (mavenRange?.preferredVal) {\n const { leftVal, rightVal, preferredVal } = mavenRange;\n const baseRange = currentValue.slice(\n 0,\n currentValue.lastIndexOf(`!!${preferredVal}`),\n );\n const newBaseRange = mavenVersion.getNewValue({\n currentValue: baseRange,\n rangeStrategy,\n newVersion,\n });\n // v8 ignore if: the implementation has a non-null return type\n if (newBaseRange === null) {\n return null;\n }\n\n const preferredIsBoundary =\n preferredVal === leftVal || preferredVal === rightVal;\n const newParsed = parseMavenBasedRange(newBaseRange);\n const preferredStillPresent =\n newParsed?.leftVal === preferredVal ||\n newParsed?.rightVal === preferredVal;\n const newPreferredVal =\n preferredIsBoundary && !preferredStillPresent ? newVersion : preferredVal;\n\n return `${newBaseRange}!!${newPreferredVal}`;\n }\n\n return mavenVersion.getNewValue({ currentValue, rangeStrategy, newVersion });\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n isCompatible: isVersion,\n isGreaterThan,\n isSingleVersion: isVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n getSatisfyingVersion,\n minSatisfyingVersion,\n getNewValue,\n sortVersions: compare,\n};\n\nexport default api;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["mavenVersion"],"sources":["../../../../lib/modules/versioning/gradle/index.ts"],"sourcesContent":["import type { RangeStrategy } from '../../../types/versioning.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport mavenVersion from '../maven/index.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\nimport {\n TokenType,\n compare,\n isValid,\n isVersion,\n parse,\n parseMavenBasedRange,\n parsePrefixRange,\n parseSingleVersionRange,\n} from './compare.ts';\n\nexport const id = 'gradle';\nexport const displayName = 'Gradle';\nexport const urls = [\n '[Gradle version ordering](https://docs.gradle.org/current/userguide/single_versions.html#version_ordering)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = ['bump'];\n\nconst equals = (a: string, b: string): boolean => compare(a, b) === 0;\n\nconst getMajor = (version: string): number | null => {\n const tokens = parse(version?.replace(regEx(/^v/i), ''));\n if (tokens) {\n const majorToken = tokens?.[0];\n if (majorToken?.type === TokenType.Number) {\n return majorToken.val as number;\n }\n }\n return null;\n};\n\nconst getMinor = (version: string): number | null => {\n const tokens = parse(version?.replace(regEx(/^v/i), ''));\n if (tokens) {\n const majorToken = tokens[0];\n const minorToken = tokens[1];\n if (\n majorToken?.type === TokenType.Number &&\n minorToken?.type === TokenType.Number\n ) {\n return minorToken.val as number;\n }\n return 0;\n }\n return null;\n};\n\nconst getPatch = (version: string): number | null => {\n const tokens = parse(version?.replace(regEx(/^v/i), ''));\n if (tokens) {\n const majorToken = tokens[0];\n const minorToken = tokens[1];\n const patchToken = tokens[2];\n if (\n majorToken?.type === TokenType.Number &&\n minorToken?.type === TokenType.Number &&\n patchToken?.type === TokenType.Number\n ) {\n return patchToken.val as number;\n }\n return 0;\n }\n return null;\n};\n\nconst isGreaterThan = (a: string, b: string): boolean => compare(a, b) === 1;\n\nconst unstable = new Set([\n 'dev',\n 'a',\n 'alpha',\n 'b',\n 'beta',\n 'm',\n 'mt',\n 'milestone',\n 'rc',\n 'cr',\n 'preview',\n 'snapshot',\n]);\n\nconst isStable = (version: string): boolean => {\n const tokens = parse(version);\n if (tokens) {\n for (const token of tokens) {\n if (token.type === TokenType.String) {\n const val = token.val.toString().toLowerCase();\n if (unstable.has(val)) {\n return false;\n }\n }\n }\n return true;\n }\n return false;\n};\n\nconst matches = (a: string, b: string): boolean => {\n const versionTokens = parse(a);\n if (!a || !versionTokens || !b) {\n return false;\n }\n if (isVersion(b)) {\n return equals(a, b);\n }\n\n const singleVersionRange = parseSingleVersionRange(b);\n if (singleVersionRange) {\n const { val } = singleVersionRange;\n return equals(a, val);\n }\n\n const prefixRange = parsePrefixRange(b);\n if (prefixRange) {\n const tokens = prefixRange.tokens;\n if (tokens.length === 0) {\n return true;\n }\n const x = versionTokens\n .slice(0, tokens.length)\n .map(({ val }) => val)\n .join('.');\n const y = tokens.map(({ val }) => val).join('.');\n return equals(x, y);\n }\n\n const mavenBasedRange = parseMavenBasedRange(b);\n if (!mavenBasedRange) {\n return false;\n }\n\n const { leftBound, leftVal, rightBound, rightVal } = mavenBasedRange;\n let leftResult = true;\n let rightResult = true;\n\n if (leftVal) {\n leftResult =\n leftBound === 'exclusive'\n ? compare(leftVal, a) === -1\n : compare(leftVal, a) !== 1;\n }\n\n if (rightVal) {\n rightResult =\n rightBound === 'exclusive'\n ? compare(a, rightVal) === -1\n : compare(a, rightVal) !== 1;\n }\n\n return leftResult && rightResult;\n};\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return versions.reduce((result: string | null, version) => {\n if (matches(version, range)) {\n if (!result) {\n return version;\n }\n if (isGreaterThan(version, result)) {\n return version;\n }\n }\n return result;\n }, null);\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return versions.reduce((result: string | null, version) => {\n if (matches(version, range)) {\n if (!result) {\n return version;\n }\n if (compare(version, result) === -1) {\n return version;\n }\n }\n return result;\n }, null);\n}\n\nfunction getNewValue({\n currentValue,\n rangeStrategy,\n newVersion,\n}: NewValueConfig): string | null {\n if (isVersion(currentValue)) {\n return newVersion;\n }\n\n // Check if our version is of the form \"1.2.+\"\n const prefixRange = parsePrefixRange(currentValue);\n const parsedNewVersion = parse(newVersion);\n if (prefixRange && parsedNewVersion) {\n if (prefixRange.tokens.length > 0) {\n if (prefixRange.tokens.length <= parsedNewVersion.length) {\n const newPrefixed = prefixRange.tokens\n .map((_, i) => parsedNewVersion[i].val)\n .join('.');\n\n return `${newPrefixed}.+`;\n }\n // our new version is shorter than our prefix range so drop our prefix range\n return newVersion;\n }\n // our version is already \"+\" which includes ever version\n return null;\n }\n\n const mavenRange = parseMavenBasedRange(currentValue);\n if (mavenRange?.preferredVal) {\n const { leftVal, rightVal, preferredVal } = mavenRange;\n const baseRange = currentValue.slice(\n 0,\n currentValue.lastIndexOf(`!!${preferredVal}`),\n );\n const newBaseRange = mavenVersion.getNewValue({\n currentValue: baseRange,\n rangeStrategy,\n newVersion,\n });\n // v8 ignore if: the implementation has a non-null return type\n if (newBaseRange === null) {\n return null;\n }\n\n const preferredIsBoundary =\n preferredVal === leftVal || preferredVal === rightVal;\n const newParsed = parseMavenBasedRange(newBaseRange);\n const preferredStillPresent =\n newParsed?.leftVal === preferredVal ||\n newParsed?.rightVal === preferredVal;\n const newPreferredVal =\n preferredIsBoundary && !preferredStillPresent ? newVersion : preferredVal;\n\n return `${newBaseRange}!!${newPreferredVal}`;\n }\n\n return mavenVersion.getNewValue({ currentValue, rangeStrategy, newVersion });\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n isCompatible: isVersion,\n isGreaterThan,\n isSingleVersion: isVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n getSatisfyingVersion,\n minSatisfyingVersion,\n getNewValue,\n sortVersions: compare,\n};\n\nexport default api;\n"],"mappings":"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"}
|
|
@@ -77,8 +77,8 @@ var HermitVersioning = class HermitVersioning extends RegExpVersioningApi {
|
|
|
77
77
|
const verVal = versionReleases[i];
|
|
78
78
|
const otherVal = otherReleases[i];
|
|
79
79
|
if (verVal !== void 0 && otherVal !== void 0 && verVal !== otherVal) return verVal - otherVal;
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
if (verVal === void 0) return 1;
|
|
81
|
+
if (otherVal === void 0) return -1;
|
|
82
82
|
}
|
|
83
83
|
return 0;
|
|
84
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/hermit/index.ts"],"sourcesContent":["import { satisfies } from 'semver';\nimport type { RegExpVersion } from '../regex/index.ts';\nimport { RegExpVersioningApi } from '../regex/index.ts';\nimport type { VersioningApiConstructor } from '../types.ts';\n\nexport const id = 'hermit';\nexport const displayName = 'Hermit';\nexport const urls = [\n '[Hermit packaging reference - Versions](https://cashapp.github.io/hermit/packaging/reference/#versions)',\n];\nexport const supportsRanges = false;\n\nexport class HermitVersioning extends RegExpVersioningApi {\n // add <supplement> element to accomondate openjdk versioning defined in JEP322\n // https://openjdk.org/jeps/322\n static versionRegex =\n '^(?<major>\\\\d+)(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?(\\\\.(?<supplement>\\\\d+))?(_(?<build>\\\\d+))?([-]?(?<prerelease>[^.+][^+]*))?([+](?<compatibility>[^.-][^+]*))?$';\n\n public constructor() {\n super(HermitVersioning.versionRegex);\n }\n\n private _isValid(version: string): boolean {\n return super._parse(version) !== null;\n }\n\n private _parseHermitVersioning(version: string): RegExpVersion | null {\n const groups = this._config?.exec(version)?.groups;\n if (!groups) {\n return null;\n }\n\n const {\n major,\n minor,\n patch,\n supplement,\n build,\n prerelease,\n compatibility,\n } = groups;\n const release = [\n Number.parseInt(major, 10),\n typeof minor === 'undefined' ? 0 : Number.parseInt(minor, 10),\n typeof patch === 'undefined' ? 0 : Number.parseInt(patch, 10),\n typeof supplement === 'undefined' ? 0 : Number.parseInt(supplement, 10),\n ];\n\n if (build) {\n release.push(Number.parseInt(build, 10));\n }\n\n return {\n release,\n prerelease,\n compatibility,\n };\n }\n\n protected override _parse(version: string): RegExpVersion | null {\n const parsed = this._parseHermitVersioning(version);\n if (parsed) {\n return parsed;\n }\n const channelVer = HermitVersioning._getChannel(version);\n\n const groups = this._config?.exec(channelVer)?.groups;\n\n if (!groups) {\n return null;\n }\n\n const {\n major,\n minor,\n patch,\n supplement,\n build,\n prerelease,\n compatibility,\n } = groups;\n const release = [];\n\n if (major) {\n release.push(Number.parseInt(major, 10));\n }\n\n if (minor) {\n release.push(Number.parseInt(minor, 10));\n }\n if (patch) {\n release.push(Number.parseInt(patch, 10));\n }\n if (supplement) {\n release.push(Number.parseInt(supplement, 10));\n }\n if (build) {\n release.push(Number.parseInt(build, 10));\n }\n\n return {\n release,\n prerelease,\n compatibility,\n };\n }\n\n private static _isChannel(version: string): boolean {\n return version.startsWith('@');\n }\n\n private static _getChannel(version: string): string {\n return version.substring(1);\n }\n\n override isStable(version: string): boolean {\n if (this._isValid(version)) {\n return super.isStable(version);\n }\n\n // channel and the rest should be considered unstable version\n // as channels are changing values\n return false;\n }\n\n override isValid(version: string): boolean {\n return this._isValid(version) || HermitVersioning._isChannel(version);\n }\n\n override isLessThanRange(version: string, range: string): boolean {\n return this._compare(version, range) < 0;\n }\n\n protected override _compare(version: string, other: string): number {\n if (this._isValid(version) && this._isValid(other)) {\n return super._compare(version, other);\n }\n\n const parsedVersion = this._parse(version);\n const parsedOther = this._parse(other);\n\n if (parsedVersion === null || parsedOther === null) {\n if (parsedVersion === null && parsedOther === null) {\n return version.localeCompare(other);\n }\n return parsedVersion === null ? -1 : 1;\n }\n\n const versionReleases = parsedVersion.release;\n const otherReleases = parsedOther.release;\n\n const maxLength =\n versionReleases.length > otherReleases.length\n ? versionReleases.length\n : otherReleases.length;\n\n for (let i = 0; i < maxLength; i++) {\n const verVal = versionReleases[i];\n const otherVal = otherReleases[i];\n\n if (\n verVal !== undefined &&\n otherVal !== undefined &&\n verVal !== otherVal\n ) {\n return verVal - otherVal;\n }
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/hermit/index.ts"],"sourcesContent":["import { satisfies } from 'semver';\nimport type { RegExpVersion } from '../regex/index.ts';\nimport { RegExpVersioningApi } from '../regex/index.ts';\nimport type { VersioningApiConstructor } from '../types.ts';\n\nexport const id = 'hermit';\nexport const displayName = 'Hermit';\nexport const urls = [\n '[Hermit packaging reference - Versions](https://cashapp.github.io/hermit/packaging/reference/#versions)',\n];\nexport const supportsRanges = false;\n\nexport class HermitVersioning extends RegExpVersioningApi {\n // add <supplement> element to accomondate openjdk versioning defined in JEP322\n // https://openjdk.org/jeps/322\n static versionRegex =\n '^(?<major>\\\\d+)(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?(\\\\.(?<supplement>\\\\d+))?(_(?<build>\\\\d+))?([-]?(?<prerelease>[^.+][^+]*))?([+](?<compatibility>[^.-][^+]*))?$';\n\n public constructor() {\n super(HermitVersioning.versionRegex);\n }\n\n private _isValid(version: string): boolean {\n return super._parse(version) !== null;\n }\n\n private _parseHermitVersioning(version: string): RegExpVersion | null {\n const groups = this._config?.exec(version)?.groups;\n if (!groups) {\n return null;\n }\n\n const {\n major,\n minor,\n patch,\n supplement,\n build,\n prerelease,\n compatibility,\n } = groups;\n const release = [\n Number.parseInt(major, 10),\n typeof minor === 'undefined' ? 0 : Number.parseInt(minor, 10),\n typeof patch === 'undefined' ? 0 : Number.parseInt(patch, 10),\n typeof supplement === 'undefined' ? 0 : Number.parseInt(supplement, 10),\n ];\n\n if (build) {\n release.push(Number.parseInt(build, 10));\n }\n\n return {\n release,\n prerelease,\n compatibility,\n };\n }\n\n protected override _parse(version: string): RegExpVersion | null {\n const parsed = this._parseHermitVersioning(version);\n if (parsed) {\n return parsed;\n }\n const channelVer = HermitVersioning._getChannel(version);\n\n const groups = this._config?.exec(channelVer)?.groups;\n\n if (!groups) {\n return null;\n }\n\n const {\n major,\n minor,\n patch,\n supplement,\n build,\n prerelease,\n compatibility,\n } = groups;\n const release = [];\n\n if (major) {\n release.push(Number.parseInt(major, 10));\n }\n\n if (minor) {\n release.push(Number.parseInt(minor, 10));\n }\n if (patch) {\n release.push(Number.parseInt(patch, 10));\n }\n if (supplement) {\n release.push(Number.parseInt(supplement, 10));\n }\n if (build) {\n release.push(Number.parseInt(build, 10));\n }\n\n return {\n release,\n prerelease,\n compatibility,\n };\n }\n\n private static _isChannel(version: string): boolean {\n return version.startsWith('@');\n }\n\n private static _getChannel(version: string): string {\n return version.substring(1);\n }\n\n override isStable(version: string): boolean {\n if (this._isValid(version)) {\n return super.isStable(version);\n }\n\n // channel and the rest should be considered unstable version\n // as channels are changing values\n return false;\n }\n\n override isValid(version: string): boolean {\n return this._isValid(version) || HermitVersioning._isChannel(version);\n }\n\n override isLessThanRange(version: string, range: string): boolean {\n return this._compare(version, range) < 0;\n }\n\n protected override _compare(version: string, other: string): number {\n if (this._isValid(version) && this._isValid(other)) {\n return super._compare(version, other);\n }\n\n const parsedVersion = this._parse(version);\n const parsedOther = this._parse(other);\n\n if (parsedVersion === null || parsedOther === null) {\n if (parsedVersion === null && parsedOther === null) {\n return version.localeCompare(other);\n }\n return parsedVersion === null ? -1 : 1;\n }\n\n const versionReleases = parsedVersion.release;\n const otherReleases = parsedOther.release;\n\n const maxLength =\n versionReleases.length > otherReleases.length\n ? versionReleases.length\n : otherReleases.length;\n\n for (let i = 0; i < maxLength; i++) {\n const verVal = versionReleases[i];\n const otherVal = otherReleases[i];\n\n if (\n verVal !== undefined &&\n otherVal !== undefined &&\n verVal !== otherVal\n ) {\n return verVal - otherVal;\n }\n if (verVal === undefined) {\n return 1;\n }\n if (otherVal === undefined) {\n return -1;\n }\n }\n\n return 0;\n }\n\n override matches(version: string, range: string): boolean {\n if (\n HermitVersioning._isChannel(version) ||\n HermitVersioning._isChannel(range)\n ) {\n return this.equals(version, range);\n }\n\n return satisfies(version, range);\n }\n}\n\nexport const api: VersioningApiConstructor = HermitVersioning;\n\nexport default api;\n"],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ function matches(a, b) {
|
|
|
22
22
|
if (!value) return true;
|
|
23
23
|
const tokens = tokenize(a);
|
|
24
24
|
if (tokens.length) {
|
|
25
|
-
const token = tokens
|
|
25
|
+
const token = tokens.at(-1);
|
|
26
26
|
if (token.type === "TYPE_QUALIFIER") return token.val.toLowerCase() === value;
|
|
27
27
|
}
|
|
28
28
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["maven"],"sources":["../../../../lib/modules/versioning/ivy/index.ts"],"sourcesContent":["import type { RangeStrategy } from '../../../types/versioning.ts';\nimport {\n TYPE_QUALIFIER,\n autoExtendMavenRange,\n isSubversion,\n tokenize,\n} from '../maven/compare.ts';\nimport maven from '../maven/index.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\nimport {\n LATEST_REGEX,\n REV_TYPE_LATEST,\n REV_TYPE_SUBREV,\n parseDynamicRevision,\n} from './parse.ts';\n\nexport const id = 'ivy';\nexport const displayName = 'Ivy';\nexport const urls = ['[Apache Ivy](https://ant.apache.org/ivy/)'];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n];\n\n/* oxlint-disable typescript/unbound-method */\nconst {\n equals,\n getMajor,\n getMinor,\n getPatch,\n isGreaterThan,\n isStable,\n matches: mavenMatches,\n sortVersions,\n} = maven;\n/* oxlint-enable typescript/unbound-method */\n\nfunction isValid(str: string): boolean {\n if (!str) {\n return false;\n }\n\n if (LATEST_REGEX.test(str)) {\n return true;\n }\n\n return isVersion(str) || !!parseDynamicRevision(str);\n}\n\nfunction isVersion(str: string): boolean {\n if (!str) {\n return false;\n }\n\n if (LATEST_REGEX.test(str)) {\n return false;\n }\n\n if (str.includes('+')) {\n return false;\n }\n\n return maven.isVersion(str);\n}\n\nfunction matches(a: string, b: string): boolean {\n if (!a || !b) {\n return false;\n }\n const dynamicRevision = parseDynamicRevision(b);\n if (!dynamicRevision) {\n return equals(a, b);\n }\n const { type, value } = dynamicRevision;\n\n if (type === REV_TYPE_LATEST) {\n if (!value) {\n return true;\n }\n const tokens = tokenize(a);\n if (tokens.length) {\n const token = tokens
|
|
1
|
+
{"version":3,"file":"index.js","names":["maven"],"sources":["../../../../lib/modules/versioning/ivy/index.ts"],"sourcesContent":["import type { RangeStrategy } from '../../../types/versioning.ts';\nimport {\n TYPE_QUALIFIER,\n autoExtendMavenRange,\n isSubversion,\n tokenize,\n} from '../maven/compare.ts';\nimport maven from '../maven/index.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\nimport {\n LATEST_REGEX,\n REV_TYPE_LATEST,\n REV_TYPE_SUBREV,\n parseDynamicRevision,\n} from './parse.ts';\n\nexport const id = 'ivy';\nexport const displayName = 'Ivy';\nexport const urls = ['[Apache Ivy](https://ant.apache.org/ivy/)'];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n];\n\n/* oxlint-disable typescript/unbound-method */\nconst {\n equals,\n getMajor,\n getMinor,\n getPatch,\n isGreaterThan,\n isStable,\n matches: mavenMatches,\n sortVersions,\n} = maven;\n/* oxlint-enable typescript/unbound-method */\n\nfunction isValid(str: string): boolean {\n if (!str) {\n return false;\n }\n\n if (LATEST_REGEX.test(str)) {\n return true;\n }\n\n return isVersion(str) || !!parseDynamicRevision(str);\n}\n\nfunction isVersion(str: string): boolean {\n if (!str) {\n return false;\n }\n\n if (LATEST_REGEX.test(str)) {\n return false;\n }\n\n if (str.includes('+')) {\n return false;\n }\n\n return maven.isVersion(str);\n}\n\nfunction matches(a: string, b: string): boolean {\n if (!a || !b) {\n return false;\n }\n const dynamicRevision = parseDynamicRevision(b);\n if (!dynamicRevision) {\n return equals(a, b);\n }\n const { type, value } = dynamicRevision;\n\n if (type === REV_TYPE_LATEST) {\n if (!value) {\n return true;\n }\n const tokens = tokenize(a);\n if (tokens.length) {\n const token = tokens.at(-1)!;\n if (token.type === TYPE_QUALIFIER) {\n return token.val.toLowerCase() === value;\n }\n }\n return false;\n }\n\n if (type === REV_TYPE_SUBREV) {\n return isSubversion(value, a);\n }\n\n return mavenMatches(a, value);\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return versions.reduce((result: string | null, version) => {\n if (matches(version, range)) {\n if (!result) {\n return version;\n }\n if (isGreaterThan(version, result)) {\n return version;\n }\n }\n return result;\n }, null);\n}\n\nfunction getNewValue({\n currentValue,\n newVersion,\n}: NewValueConfig): string | null {\n if (isVersion(currentValue)) {\n return newVersion;\n }\n return autoExtendMavenRange(currentValue, newVersion);\n}\n\nfunction isCompatible(version: string): boolean {\n return isVersion(version);\n}\n\nfunction isSingleVersion(version: string): boolean {\n return isVersion(version);\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n isCompatible,\n isGreaterThan,\n isSingleVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n getSatisfyingVersion,\n minSatisfyingVersion: getSatisfyingVersion,\n getNewValue,\n sortVersions,\n};\n\nexport default api;\n"],"mappings":";;;AA2BA,MAAM,EACJ,QACA,UACA,UACA,UACA,eACA,UACA,SAAS,cACT,iBACEA;AAGJ,SAAS,QAAQ,KAAsB;CACrC,IAAI,CAAC,KACH,OAAO;CAGT,IAAI,aAAa,KAAK,GAAG,GACvB,OAAO;CAGT,OAAO,UAAU,GAAG,KAAK,CAAC,CAAC,qBAAqB,GAAG;AACrD;AAEA,SAAS,UAAU,KAAsB;CACvC,IAAI,CAAC,KACH,OAAO;CAGT,IAAI,aAAa,KAAK,GAAG,GACvB,OAAO;CAGT,IAAI,IAAI,SAAS,GAAG,GAClB,OAAO;CAGT,OAAOA,MAAM,UAAU,GAAG;AAC5B;AAEA,SAAS,QAAQ,GAAW,GAAoB;CAC9C,IAAI,CAAC,KAAK,CAAC,GACT,OAAO;CAET,MAAM,kBAAkB,qBAAqB,CAAC;CAC9C,IAAI,CAAC,iBACH,OAAO,OAAO,GAAG,CAAC;CAEpB,MAAM,EAAE,MAAM,UAAU;CAExB,IAAI,SAAA,mBAA0B;EAC5B,IAAI,CAAC,OACH,OAAO;EAET,MAAM,SAAS,SAAS,CAAC;EACzB,IAAI,OAAO,QAAQ;GACjB,MAAM,QAAQ,OAAO,GAAG,EAAE;GAC1B,IAAI,MAAM,SAAA,kBACR,OAAO,MAAM,IAAI,YAAY,MAAM;EAEvC;EACA,OAAO;CACT;CAEA,IAAI,SAAA,wBACF,OAAO,aAAa,OAAO,CAAC;CAG9B,OAAO,aAAa,GAAG,KAAK;AAC9B;AAEA,SAAS,qBACP,UACA,OACe;CACf,OAAO,SAAS,QAAQ,QAAuB,YAAY;EACzD,IAAI,QAAQ,SAAS,KAAK,GAAG;GAC3B,IAAI,CAAC,QACH,OAAO;GAET,IAAI,cAAc,SAAS,MAAM,GAC/B,OAAO;EAEX;EACA,OAAO;CACT,GAAG,IAAI;AACT;AAEA,SAAS,YAAY,EACnB,cACA,cACgC;CAChC,IAAI,UAAU,YAAY,GACxB,OAAO;CAET,OAAO,qBAAqB,cAAc,UAAU;AACtD;AAEA,SAAS,aAAa,SAA0B;CAC9C,OAAO,UAAU,OAAO;AAC1B;AAEA,SAAS,gBAAgB,SAA0B;CACjD,OAAO,UAAU,OAAO;AAC1B;AAEA,MAAa,MAAqB;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,sBAAsB;CACtB;CACA;AACF"}
|
|
@@ -302,7 +302,7 @@ function coerceRangeValue(prev, next) {
|
|
|
302
302
|
}
|
|
303
303
|
function incrementRangeValue(value) {
|
|
304
304
|
const tokens = tokenize(value);
|
|
305
|
-
const lastToken = tokens
|
|
305
|
+
const lastToken = tokens.at(-1);
|
|
306
306
|
if (typeof lastToken.val === "number") {
|
|
307
307
|
lastToken.val += 1;
|
|
308
308
|
return coerceRangeValue(value, tokensToStr(tokens));
|
|
@@ -332,11 +332,9 @@ function autoExtendMavenRange(currentRepresentation, newValue) {
|
|
|
332
332
|
} else if (leftValue !== null && rightValue !== null && incrementRangeValue(leftValue) + ALPHA_SUFFIX === rightValue) {
|
|
333
333
|
interval.leftValue = coerceRangeValue(leftValue, newValue);
|
|
334
334
|
interval.rightValue = incrementRangeValue(interval.leftValue) + ALPHA_SUFFIX;
|
|
335
|
-
} else if (rightValue !== null) if (interval.rightType === "INCLUDING_POINT")
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
else interval.rightValue = newValue;
|
|
339
|
-
} else interval.rightValue = incrementRangeValue(coerceRangeValue(rightValue, newValue));
|
|
335
|
+
} else if (rightValue !== null) if (interval.rightType === "INCLUDING_POINT") if (typeof tokenize(rightValue).at(-1).val === "number") interval.rightValue = coerceRangeValue(rightValue, newValue);
|
|
336
|
+
else interval.rightValue = newValue;
|
|
337
|
+
else interval.rightValue = incrementRangeValue(coerceRangeValue(rightValue, newValue));
|
|
340
338
|
else if (leftValue !== null) interval.leftValue = coerceRangeValue(leftValue, newValue);
|
|
341
339
|
return rangeToStr(range);
|
|
342
340
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compare.js","names":[],"sources":["../../../../lib/modules/versioning/maven/compare.ts"],"sourcesContent":["import { regEx } from '../../../util/regex.ts';\n\nconst PREFIX_DOT = 'PREFIX_DOT';\nconst PREFIX_HYPHEN = 'PREFIX_HYPHEN';\nconst ALPHA_SUFFIX = '-alpha';\n\nconst TYPE_NUMBER = 'TYPE_NUMBER';\nconst TYPE_QUALIFIER = 'TYPE_QUALIFIER';\n\nexport interface BaseToken {\n prefix: string;\n type: typeof TYPE_NUMBER | typeof TYPE_QUALIFIER;\n val: number | string;\n isTransition?: boolean;\n}\n\nexport interface NumberToken extends BaseToken {\n type: typeof TYPE_NUMBER;\n val: number;\n}\n\nexport interface QualifierToken extends BaseToken {\n type: typeof TYPE_QUALIFIER;\n val: string;\n}\n\nexport type Token = NumberToken | QualifierToken;\n\nfunction iterateChars(\n str: string,\n cb: (p: string | null, n: string | null) => void,\n): void {\n let prev = null;\n let next = null;\n for (let i = 0; i < str.length; i += 1) {\n next = str.charAt(i);\n cb(prev, next);\n prev = next;\n }\n cb(prev, null);\n}\n\nfunction isDigit(char: string): boolean {\n return regEx(/^\\d$/).test(char);\n}\n\nfunction isLetter(char: string): boolean {\n return regEx(/^[a-z_+]$/i).test(char);\n}\n\nfunction isTransition(prevChar: string, nextChar: string): boolean {\n return (\n (isDigit(prevChar) && isLetter(nextChar)) ||\n (isLetter(prevChar) && isDigit(nextChar))\n );\n}\n\nfunction iterateTokens(versionStr: string, cb: (token: Token) => void): void {\n let currentPrefix = '';\n let currentVal = '';\n\n function yieldToken(transition = false): void {\n const val = currentVal || '0';\n if (regEx(/^\\d+$/).test(val)) {\n cb({\n prefix: currentPrefix,\n type: TYPE_NUMBER,\n val: parseInt(val, 10),\n isTransition: transition,\n });\n } else {\n cb({\n prefix: currentPrefix,\n type: TYPE_QUALIFIER,\n val,\n isTransition: transition,\n });\n }\n }\n\n iterateChars(versionStr, (prevChar, nextChar) => {\n if (nextChar === null) {\n yieldToken();\n } else if (nextChar === '-') {\n yieldToken();\n currentPrefix = PREFIX_HYPHEN;\n currentVal = '';\n } else if (nextChar === '.') {\n yieldToken();\n currentPrefix = PREFIX_DOT;\n currentVal = '';\n } else if (prevChar === null && (nextChar === 'v' || nextChar === 'V')) {\n currentPrefix = nextChar;\n } else {\n if (currentVal !== '' && isTransition(prevChar!, nextChar)) {\n yieldToken(true);\n currentPrefix = PREFIX_HYPHEN;\n currentVal = nextChar;\n } else if (\n currentVal === '' &&\n (currentPrefix === 'v' || currentPrefix === 'V') &&\n !isDigit(nextChar)\n ) {\n currentVal = currentVal.concat(currentPrefix, nextChar);\n currentPrefix = '';\n } else {\n currentVal = currentVal.concat(nextChar);\n }\n }\n });\n}\n\nfunction isNull(token: Token): boolean {\n const val = token.val;\n return (\n val === 0 ||\n val === '' ||\n val === 'final' ||\n val === 'ga' ||\n val === 'release' ||\n val === 'latest' ||\n val === 'sr'\n );\n}\n\nfunction tokenize(versionStr: string, preserveMinorZeroes = false): Token[] {\n let buf: Token[] = [];\n let result: Token[] = [];\n let leadingZero = true;\n iterateTokens(versionStr.toLowerCase(), (token) => {\n if (token.prefix === PREFIX_HYPHEN || token.type === TYPE_QUALIFIER) {\n buf = [];\n }\n buf.push(token);\n if (!isNull(token)) {\n leadingZero = false;\n result = result.concat(buf);\n buf = [];\n } else if (leadingZero || preserveMinorZeroes) {\n result = result.concat(buf);\n buf = [];\n }\n });\n return result;\n}\n\nfunction nullFor(token: Token): Token {\n return token.type === TYPE_NUMBER\n ? {\n prefix: token.prefix,\n type: TYPE_NUMBER,\n val: 0,\n }\n : {\n prefix: token.prefix,\n type: TYPE_QUALIFIER,\n val: '',\n };\n}\n\nfunction commonOrder(token: Token): number {\n if (token.type === TYPE_QUALIFIER) {\n return 1;\n }\n if (token.prefix === PREFIX_HYPHEN && token.type === TYPE_NUMBER) {\n return 2;\n }\n return 3;\n}\n\nexport const QualifierTypes = {\n Alpha: 1,\n Beta: 2,\n Milestone: 3,\n RC: 4,\n Snapshot: 5,\n Release: 6,\n SP: 7,\n} as const;\n\nexport function qualifierType(token: Token): number | null {\n const val = token.val;\n if (val === 'alpha' || (token.isTransition && val === 'a')) {\n return QualifierTypes.Alpha;\n }\n if (val === 'beta' || (token.isTransition && val === 'b')) {\n return QualifierTypes.Beta;\n }\n if (val === 'milestone' || (token.isTransition && val === 'm')) {\n return QualifierTypes.Milestone;\n }\n if (val === 'rc' || val === 'cr' || val === 'preview') {\n return QualifierTypes.RC;\n }\n if (val === 'snapshot' || val === 'snap') {\n return QualifierTypes.Snapshot;\n }\n if (\n val === '' ||\n val === 'final' ||\n val === 'ga' ||\n val === 'release' ||\n val === 'latest' ||\n val === 'sr'\n ) {\n return QualifierTypes.Release;\n }\n if (val === 'sp') {\n return QualifierTypes.SP;\n }\n return null;\n}\n\nfunction qualifierCmp(left: Token, right: Token): number {\n const leftOrder = qualifierType(left);\n const rightOrder = qualifierType(right);\n if (leftOrder && rightOrder) {\n if (leftOrder < rightOrder) {\n return -1;\n }\n if (leftOrder > rightOrder) {\n return 1;\n }\n return 0;\n }\n\n if (leftOrder && leftOrder < QualifierTypes.Release) {\n return -1;\n }\n if (rightOrder && rightOrder < QualifierTypes.Release) {\n return 1;\n }\n\n if (left.val < right.val) {\n return -1;\n }\n if (left.val > right.val) {\n return 1;\n }\n return 0;\n}\n\nfunction tokenCmp(left: Token, right: Token): number {\n const leftOrder = commonOrder(left);\n const rightOrder = commonOrder(right);\n\n if (leftOrder < rightOrder) {\n return -1;\n }\n if (leftOrder > rightOrder) {\n return 1;\n }\n\n if (left.type === TYPE_NUMBER && right.type === TYPE_NUMBER) {\n if (left.val < right.val) {\n return -1;\n }\n if (left.val > right.val) {\n return 1;\n }\n return 0;\n }\n\n return qualifierCmp(left, right);\n}\n\nfunction compare(left: string, right: string): number {\n const leftTokens = tokenize(left);\n const rightTokens = tokenize(right);\n const length = Math.max(leftTokens.length, rightTokens.length);\n for (let idx = 0; idx < length; idx += 1) {\n const leftToken = leftTokens[idx] || nullFor(rightTokens[idx]);\n const rightToken = rightTokens[idx] || nullFor(leftTokens[idx]);\n const cmpResult = tokenCmp(leftToken, rightToken);\n if (cmpResult !== 0) {\n return cmpResult;\n }\n }\n return 0;\n}\n\nfunction isVersion(version: unknown): version is string {\n if (!version || typeof version !== 'string') {\n return false;\n }\n if (!regEx(/^[-.a-z_+0-9]+$/i).test(version)) {\n return false;\n }\n if (regEx(/^[.-]/).test(version)) {\n return false;\n }\n if (regEx(/[.-]$/).test(version)) {\n return false;\n }\n if (['latest', 'release'].includes(version.toLowerCase())) {\n return false;\n }\n const tokens = tokenize(version);\n return !!tokens.length;\n}\n\nconst INCLUDING_POINT = 'INCLUDING_POINT';\nconst EXCLUDING_POINT = 'EXCLUDING_POINT';\n\nfunction parseRange(rangeStr: string): Range[] | null {\n function emptyInterval(): Range {\n return {\n leftType: null,\n leftValue: null,\n leftBracket: null,\n rightType: null,\n rightValue: null,\n rightBracket: null,\n };\n }\n\n const commaSplit = rangeStr.split(regEx(/\\s*,\\s*/));\n let ranges: Range[] | null = [];\n let interval = emptyInterval();\n\n commaSplit.forEach((subStr) => {\n if (!ranges) {\n return;\n }\n if (interval.leftType === null) {\n if (regEx(/^\\[.*]$/).test(subStr)) {\n const ver = subStr.slice(1, -1);\n ranges.push({\n leftType: INCLUDING_POINT,\n leftValue: ver,\n leftBracket: '[',\n rightType: INCLUDING_POINT,\n rightValue: ver,\n rightBracket: ']',\n });\n interval = emptyInterval();\n } else if (subStr.startsWith('[')) {\n const ver = subStr.slice(1);\n interval.leftType = INCLUDING_POINT;\n interval.leftValue = ver;\n interval.leftBracket = '[';\n } else if (subStr.startsWith('(') || subStr.startsWith(']')) {\n const ver = subStr.slice(1);\n interval.leftType = EXCLUDING_POINT;\n interval.leftValue = ver;\n interval.leftBracket = subStr[0];\n } else {\n ranges = null;\n }\n } else if (subStr.endsWith(']')) {\n const ver = subStr.slice(0, -1);\n interval.rightType = INCLUDING_POINT;\n interval.rightValue = ver;\n interval.rightBracket = ']';\n ranges.push(interval);\n interval = emptyInterval();\n } else if (subStr.endsWith(')') || subStr.endsWith('[')) {\n const ver = subStr.slice(0, -1);\n interval.rightType = EXCLUDING_POINT;\n interval.rightValue = ver;\n interval.rightBracket = subStr.endsWith(')') ? ')' : '[';\n ranges.push(interval);\n interval = emptyInterval();\n } else {\n ranges = null;\n }\n });\n\n if (interval.leftType) {\n return null;\n } // something like '[1,2],[3'\n if (!ranges?.length) {\n return null;\n }\n\n const lastIdx = ranges.length - 1;\n let prevValue: string | null = null;\n const result: Range[] = [];\n for (let idx = 0; idx < ranges.length; idx += 1) {\n const range = ranges[idx];\n const { leftType, leftValue, rightType, rightValue } = range;\n\n if (idx === 0 && leftValue === '') {\n if (leftType === EXCLUDING_POINT && isVersion(rightValue)) {\n prevValue = rightValue;\n result.push({ ...range, leftValue: null });\n continue;\n }\n return null;\n }\n if (idx === lastIdx && rightValue === '') {\n if (rightType === EXCLUDING_POINT && isVersion(leftValue)) {\n if (prevValue && compare(prevValue, leftValue) === 1) {\n return null;\n }\n result.push({ ...range, rightValue: null });\n continue;\n }\n return null;\n }\n if (isVersion(leftValue) && isVersion(rightValue)) {\n if (compare(leftValue, rightValue) === 1) {\n return null;\n }\n if (prevValue && compare(prevValue, leftValue) === 1) {\n return null;\n }\n prevValue = rightValue;\n result.push(range);\n continue;\n }\n return null;\n }\n return result;\n}\n\nfunction isValid(str: string): boolean {\n if (!str) {\n return false;\n }\n return isVersion(str) || !!parseRange(str);\n}\n\nexport interface Range {\n leftType: typeof INCLUDING_POINT | typeof EXCLUDING_POINT | null;\n leftValue: string | null;\n leftBracket: string | null;\n rightType: typeof INCLUDING_POINT | typeof EXCLUDING_POINT | null;\n rightValue: string | null;\n rightBracket: string | null;\n}\n\nfunction rangeToStr(fullRange: Range[] | null): string | null {\n if (fullRange === null) {\n return null;\n }\n\n const valToStr = (val: string | null): string => val ?? '';\n\n if (fullRange.length === 1) {\n const { leftBracket, rightBracket, leftValue, rightValue } = fullRange[0];\n if (\n leftValue === rightValue &&\n leftBracket === '[' &&\n rightBracket === ']'\n ) {\n return `[${valToStr(leftValue)}]`;\n }\n }\n\n const intervals = fullRange.map((val) =>\n [\n val.leftBracket,\n valToStr(val.leftValue),\n ',',\n valToStr(val.rightValue),\n val.rightBracket,\n ].join(''),\n );\n return intervals.join(',');\n}\n\nfunction tokensToStr(tokens: Token[]): string {\n let isTransition: boolean | undefined = false;\n return tokens.reduce((result: string, token: Token) => {\n let prefix: string;\n if (token.prefix === PREFIX_DOT) {\n prefix = '.';\n } else if (token.prefix === PREFIX_HYPHEN) {\n prefix = isTransition === true ? '' : '-';\n } else {\n prefix = token.prefix;\n }\n isTransition = token.isTransition;\n return `${result}${prefix}${token.val}`;\n }, '');\n}\n\nfunction coerceRangeValue(prev: string, next: string): string {\n const prevTokens = tokenize(prev, true);\n const nextTokens = tokenize(next, true);\n const resultTokens = nextTokens.slice(0, prevTokens.length);\n const align = Math.max(0, prevTokens.length - nextTokens.length);\n if (align > 0) {\n resultTokens.push(...prevTokens.slice(prevTokens.length - align));\n }\n return tokensToStr(resultTokens);\n}\n\nfunction incrementRangeValue(value: string): string {\n const tokens = tokenize(value);\n const lastToken = tokens[tokens.length - 1];\n if (typeof lastToken.val === 'number') {\n lastToken.val += 1;\n return coerceRangeValue(value, tokensToStr(tokens));\n }\n return value;\n}\n\nfunction autoExtendMavenRange(\n currentRepresentation: string,\n newValue: string,\n): string | null {\n const range = parseRange(currentRepresentation);\n if (!range) {\n return currentRepresentation;\n }\n const isPoint = (vals: Range[]): boolean => {\n if (vals.length !== 1) {\n return false;\n }\n const { leftType, leftValue, rightType, rightValue } = vals[0];\n return (\n leftType === 'INCLUDING_POINT' &&\n leftType === rightType &&\n leftValue === rightValue\n );\n };\n if (isPoint(range)) {\n return `[${newValue}]`;\n }\n\n const interval = [...range].reverse().find((elem) => {\n const { rightType, rightValue } = elem;\n return (\n rightValue === null ||\n (rightType === INCLUDING_POINT && compare(rightValue, newValue) === -1) ||\n (rightType === EXCLUDING_POINT && compare(rightValue, newValue) !== 1)\n );\n });\n\n if (!interval) {\n return currentRepresentation;\n }\n\n const { leftValue, rightValue } = interval;\n if (\n leftValue !== null &&\n rightValue !== null &&\n incrementRangeValue(leftValue) === rightValue\n ) {\n // if a range was detected where incrementing the lower value once results in the upper value\n // and the new version is outside the range, construct a new range that follows the same semantic\n // [1,2) / 4.3.2 => [4,5)\n if (compare(newValue, leftValue) !== -1) {\n interval.leftValue = coerceRangeValue(leftValue, newValue);\n interval.rightValue = incrementRangeValue(interval.leftValue);\n }\n } else if (\n leftValue !== null &&\n rightValue !== null &&\n incrementRangeValue(leftValue) + ALPHA_SUFFIX === rightValue\n ) {\n // same as last if, but properly considering Maven ordering specification documented at\n // https://maven.apache.org/pom.html#Version_Order_Specification\n // 4-alpha is smaller than 4.0.0 for example\n // while often people that intend to only match version 1.x use [1,2)\n // this is not correct as it matches various 2.x versions, mostly pre-versions\n // so the correct range definition would be [1,2-alpha) as nothing\n // starting with 2 can be lower than 2-alpha in Maven version ordering logic\n //\n // so this if handles the conceptually same case as the last if\n // just for the case when proper Maven ranges are used\n // [1,2-alpha) / 4.3.2 => [4,5-alpha)\n interval.leftValue = coerceRangeValue(leftValue, newValue);\n interval.rightValue =\n incrementRangeValue(interval.leftValue) + ALPHA_SUFFIX;\n } else if (rightValue !== null) {\n if (interval.rightType === INCLUDING_POINT) {\n const tokens = tokenize(rightValue);\n const lastToken = tokens[tokens.length - 1];\n if (typeof lastToken.val === 'number') {\n interval.rightValue = coerceRangeValue(rightValue, newValue);\n } else {\n interval.rightValue = newValue;\n }\n } else {\n interval.rightValue = incrementRangeValue(\n coerceRangeValue(rightValue, newValue),\n );\n }\n } else if (leftValue !== null) {\n interval.leftValue = coerceRangeValue(leftValue, newValue);\n }\n\n return rangeToStr(range);\n}\n\nfunction isSubversion(majorVersion: string, minorVersion: string): boolean {\n const majorTokens = tokenize(majorVersion);\n const minorTokens = tokenize(minorVersion);\n\n let result = true;\n const len = majorTokens.length;\n for (let idx = 0; idx < len; idx += 1) {\n const major = majorTokens[idx];\n const minor = minorTokens[idx] || nullFor(majorTokens[idx]);\n const cmpResult = tokenCmp(major, minor);\n if (cmpResult !== 0) {\n result = false;\n break;\n }\n }\n return result;\n}\n\nexport {\n EXCLUDING_POINT,\n INCLUDING_POINT,\n PREFIX_DOT,\n PREFIX_HYPHEN,\n TYPE_NUMBER,\n TYPE_QUALIFIER,\n autoExtendMavenRange,\n compare,\n isSubversion,\n isValid,\n isVersion,\n isVersion as isSingleVersion,\n parseRange,\n rangeToStr,\n tokenize,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"compare.js","names":[],"sources":["../../../../lib/modules/versioning/maven/compare.ts"],"sourcesContent":["import { regEx } from '../../../util/regex.ts';\n\nconst PREFIX_DOT = 'PREFIX_DOT';\nconst PREFIX_HYPHEN = 'PREFIX_HYPHEN';\nconst ALPHA_SUFFIX = '-alpha';\n\nconst TYPE_NUMBER = 'TYPE_NUMBER';\nconst TYPE_QUALIFIER = 'TYPE_QUALIFIER';\n\nexport interface BaseToken {\n prefix: string;\n type: typeof TYPE_NUMBER | typeof TYPE_QUALIFIER;\n val: number | string;\n isTransition?: boolean;\n}\n\nexport interface NumberToken extends BaseToken {\n type: typeof TYPE_NUMBER;\n val: number;\n}\n\nexport interface QualifierToken extends BaseToken {\n type: typeof TYPE_QUALIFIER;\n val: string;\n}\n\nexport type Token = NumberToken | QualifierToken;\n\nfunction iterateChars(\n str: string,\n cb: (p: string | null, n: string | null) => void,\n): void {\n let prev = null;\n let next = null;\n for (let i = 0; i < str.length; i += 1) {\n next = str.charAt(i);\n cb(prev, next);\n prev = next;\n }\n cb(prev, null);\n}\n\nfunction isDigit(char: string): boolean {\n return regEx(/^\\d$/).test(char);\n}\n\nfunction isLetter(char: string): boolean {\n return regEx(/^[a-z_+]$/i).test(char);\n}\n\nfunction isTransition(prevChar: string, nextChar: string): boolean {\n return (\n (isDigit(prevChar) && isLetter(nextChar)) ||\n (isLetter(prevChar) && isDigit(nextChar))\n );\n}\n\nfunction iterateTokens(versionStr: string, cb: (token: Token) => void): void {\n let currentPrefix = '';\n let currentVal = '';\n\n function yieldToken(transition = false): void {\n const val = currentVal || '0';\n if (regEx(/^\\d+$/).test(val)) {\n cb({\n prefix: currentPrefix,\n type: TYPE_NUMBER,\n val: parseInt(val, 10),\n isTransition: transition,\n });\n } else {\n cb({\n prefix: currentPrefix,\n type: TYPE_QUALIFIER,\n val,\n isTransition: transition,\n });\n }\n }\n\n iterateChars(versionStr, (prevChar, nextChar) => {\n if (nextChar === null) {\n yieldToken();\n } else if (nextChar === '-') {\n yieldToken();\n currentPrefix = PREFIX_HYPHEN;\n currentVal = '';\n } else if (nextChar === '.') {\n yieldToken();\n currentPrefix = PREFIX_DOT;\n currentVal = '';\n } else if (prevChar === null && (nextChar === 'v' || nextChar === 'V')) {\n currentPrefix = nextChar;\n } else {\n if (currentVal !== '' && isTransition(prevChar!, nextChar)) {\n yieldToken(true);\n currentPrefix = PREFIX_HYPHEN;\n currentVal = nextChar;\n } else if (\n currentVal === '' &&\n (currentPrefix === 'v' || currentPrefix === 'V') &&\n !isDigit(nextChar)\n ) {\n currentVal = currentVal.concat(currentPrefix, nextChar);\n currentPrefix = '';\n } else {\n currentVal = currentVal.concat(nextChar);\n }\n }\n });\n}\n\nfunction isNull(token: Token): boolean {\n const val = token.val;\n return (\n val === 0 ||\n val === '' ||\n val === 'final' ||\n val === 'ga' ||\n val === 'release' ||\n val === 'latest' ||\n val === 'sr'\n );\n}\n\nfunction tokenize(versionStr: string, preserveMinorZeroes = false): Token[] {\n let buf: Token[] = [];\n let result: Token[] = [];\n let leadingZero = true;\n iterateTokens(versionStr.toLowerCase(), (token) => {\n if (token.prefix === PREFIX_HYPHEN || token.type === TYPE_QUALIFIER) {\n buf = [];\n }\n buf.push(token);\n if (!isNull(token)) {\n leadingZero = false;\n result = result.concat(buf);\n buf = [];\n } else if (leadingZero || preserveMinorZeroes) {\n result = result.concat(buf);\n buf = [];\n }\n });\n return result;\n}\n\nfunction nullFor(token: Token): Token {\n return token.type === TYPE_NUMBER\n ? {\n prefix: token.prefix,\n type: TYPE_NUMBER,\n val: 0,\n }\n : {\n prefix: token.prefix,\n type: TYPE_QUALIFIER,\n val: '',\n };\n}\n\nfunction commonOrder(token: Token): number {\n if (token.type === TYPE_QUALIFIER) {\n return 1;\n }\n if (token.prefix === PREFIX_HYPHEN && token.type === TYPE_NUMBER) {\n return 2;\n }\n return 3;\n}\n\nexport const QualifierTypes = {\n Alpha: 1,\n Beta: 2,\n Milestone: 3,\n RC: 4,\n Snapshot: 5,\n Release: 6,\n SP: 7,\n} as const;\n\nexport function qualifierType(token: Token): number | null {\n const val = token.val;\n if (val === 'alpha' || (token.isTransition && val === 'a')) {\n return QualifierTypes.Alpha;\n }\n if (val === 'beta' || (token.isTransition && val === 'b')) {\n return QualifierTypes.Beta;\n }\n if (val === 'milestone' || (token.isTransition && val === 'm')) {\n return QualifierTypes.Milestone;\n }\n if (val === 'rc' || val === 'cr' || val === 'preview') {\n return QualifierTypes.RC;\n }\n if (val === 'snapshot' || val === 'snap') {\n return QualifierTypes.Snapshot;\n }\n if (\n val === '' ||\n val === 'final' ||\n val === 'ga' ||\n val === 'release' ||\n val === 'latest' ||\n val === 'sr'\n ) {\n return QualifierTypes.Release;\n }\n if (val === 'sp') {\n return QualifierTypes.SP;\n }\n return null;\n}\n\nfunction qualifierCmp(left: Token, right: Token): number {\n const leftOrder = qualifierType(left);\n const rightOrder = qualifierType(right);\n if (leftOrder && rightOrder) {\n if (leftOrder < rightOrder) {\n return -1;\n }\n if (leftOrder > rightOrder) {\n return 1;\n }\n return 0;\n }\n\n if (leftOrder && leftOrder < QualifierTypes.Release) {\n return -1;\n }\n if (rightOrder && rightOrder < QualifierTypes.Release) {\n return 1;\n }\n\n if (left.val < right.val) {\n return -1;\n }\n if (left.val > right.val) {\n return 1;\n }\n return 0;\n}\n\nfunction tokenCmp(left: Token, right: Token): number {\n const leftOrder = commonOrder(left);\n const rightOrder = commonOrder(right);\n\n if (leftOrder < rightOrder) {\n return -1;\n }\n if (leftOrder > rightOrder) {\n return 1;\n }\n\n if (left.type === TYPE_NUMBER && right.type === TYPE_NUMBER) {\n if (left.val < right.val) {\n return -1;\n }\n if (left.val > right.val) {\n return 1;\n }\n return 0;\n }\n\n return qualifierCmp(left, right);\n}\n\nfunction compare(left: string, right: string): number {\n const leftTokens = tokenize(left);\n const rightTokens = tokenize(right);\n const length = Math.max(leftTokens.length, rightTokens.length);\n for (let idx = 0; idx < length; idx += 1) {\n const leftToken = leftTokens[idx] || nullFor(rightTokens[idx]);\n const rightToken = rightTokens[idx] || nullFor(leftTokens[idx]);\n const cmpResult = tokenCmp(leftToken, rightToken);\n if (cmpResult !== 0) {\n return cmpResult;\n }\n }\n return 0;\n}\n\nfunction isVersion(version: unknown): version is string {\n if (!version || typeof version !== 'string') {\n return false;\n }\n if (!regEx(/^[-.a-z_+0-9]+$/i).test(version)) {\n return false;\n }\n if (regEx(/^[.-]/).test(version)) {\n return false;\n }\n if (regEx(/[.-]$/).test(version)) {\n return false;\n }\n if (['latest', 'release'].includes(version.toLowerCase())) {\n return false;\n }\n const tokens = tokenize(version);\n return !!tokens.length;\n}\n\nconst INCLUDING_POINT = 'INCLUDING_POINT';\nconst EXCLUDING_POINT = 'EXCLUDING_POINT';\n\nfunction parseRange(rangeStr: string): Range[] | null {\n function emptyInterval(): Range {\n return {\n leftType: null,\n leftValue: null,\n leftBracket: null,\n rightType: null,\n rightValue: null,\n rightBracket: null,\n };\n }\n\n const commaSplit = rangeStr.split(regEx(/\\s*,\\s*/));\n let ranges: Range[] | null = [];\n let interval = emptyInterval();\n\n commaSplit.forEach((subStr) => {\n if (!ranges) {\n return;\n }\n if (interval.leftType === null) {\n if (regEx(/^\\[.*]$/).test(subStr)) {\n const ver = subStr.slice(1, -1);\n ranges.push({\n leftType: INCLUDING_POINT,\n leftValue: ver,\n leftBracket: '[',\n rightType: INCLUDING_POINT,\n rightValue: ver,\n rightBracket: ']',\n });\n interval = emptyInterval();\n } else if (subStr.startsWith('[')) {\n const ver = subStr.slice(1);\n interval.leftType = INCLUDING_POINT;\n interval.leftValue = ver;\n interval.leftBracket = '[';\n } else if (subStr.startsWith('(') || subStr.startsWith(']')) {\n const ver = subStr.slice(1);\n interval.leftType = EXCLUDING_POINT;\n interval.leftValue = ver;\n interval.leftBracket = subStr[0];\n } else {\n ranges = null;\n }\n } else if (subStr.endsWith(']')) {\n const ver = subStr.slice(0, -1);\n interval.rightType = INCLUDING_POINT;\n interval.rightValue = ver;\n interval.rightBracket = ']';\n ranges.push(interval);\n interval = emptyInterval();\n } else if (subStr.endsWith(')') || subStr.endsWith('[')) {\n const ver = subStr.slice(0, -1);\n interval.rightType = EXCLUDING_POINT;\n interval.rightValue = ver;\n interval.rightBracket = subStr.endsWith(')') ? ')' : '[';\n ranges.push(interval);\n interval = emptyInterval();\n } else {\n ranges = null;\n }\n });\n\n if (interval.leftType) {\n return null;\n } // something like '[1,2],[3'\n if (!ranges?.length) {\n return null;\n }\n\n const lastIdx = ranges.length - 1;\n let prevValue: string | null = null;\n const result: Range[] = [];\n for (let idx = 0; idx < ranges.length; idx += 1) {\n const range = ranges[idx];\n const { leftType, leftValue, rightType, rightValue } = range;\n\n if (idx === 0 && leftValue === '') {\n if (leftType === EXCLUDING_POINT && isVersion(rightValue)) {\n prevValue = rightValue;\n result.push({ ...range, leftValue: null });\n continue;\n }\n return null;\n }\n if (idx === lastIdx && rightValue === '') {\n if (rightType === EXCLUDING_POINT && isVersion(leftValue)) {\n if (prevValue && compare(prevValue, leftValue) === 1) {\n return null;\n }\n result.push({ ...range, rightValue: null });\n continue;\n }\n return null;\n }\n if (isVersion(leftValue) && isVersion(rightValue)) {\n if (compare(leftValue, rightValue) === 1) {\n return null;\n }\n if (prevValue && compare(prevValue, leftValue) === 1) {\n return null;\n }\n prevValue = rightValue;\n result.push(range);\n continue;\n }\n return null;\n }\n return result;\n}\n\nfunction isValid(str: string): boolean {\n if (!str) {\n return false;\n }\n return isVersion(str) || !!parseRange(str);\n}\n\nexport interface Range {\n leftType: typeof INCLUDING_POINT | typeof EXCLUDING_POINT | null;\n leftValue: string | null;\n leftBracket: string | null;\n rightType: typeof INCLUDING_POINT | typeof EXCLUDING_POINT | null;\n rightValue: string | null;\n rightBracket: string | null;\n}\n\nfunction rangeToStr(fullRange: Range[] | null): string | null {\n if (fullRange === null) {\n return null;\n }\n\n const valToStr = (val: string | null): string => val ?? '';\n\n if (fullRange.length === 1) {\n const { leftBracket, rightBracket, leftValue, rightValue } = fullRange[0];\n if (\n leftValue === rightValue &&\n leftBracket === '[' &&\n rightBracket === ']'\n ) {\n return `[${valToStr(leftValue)}]`;\n }\n }\n\n const intervals = fullRange.map((val) =>\n [\n val.leftBracket,\n valToStr(val.leftValue),\n ',',\n valToStr(val.rightValue),\n val.rightBracket,\n ].join(''),\n );\n return intervals.join(',');\n}\n\nfunction tokensToStr(tokens: Token[]): string {\n let isTransition: boolean | undefined = false;\n return tokens.reduce((result: string, token: Token) => {\n let prefix: string;\n if (token.prefix === PREFIX_DOT) {\n prefix = '.';\n } else if (token.prefix === PREFIX_HYPHEN) {\n prefix = isTransition === true ? '' : '-';\n } else {\n prefix = token.prefix;\n }\n isTransition = token.isTransition;\n return `${result}${prefix}${token.val}`;\n }, '');\n}\n\nfunction coerceRangeValue(prev: string, next: string): string {\n const prevTokens = tokenize(prev, true);\n const nextTokens = tokenize(next, true);\n const resultTokens = nextTokens.slice(0, prevTokens.length);\n const align = Math.max(0, prevTokens.length - nextTokens.length);\n if (align > 0) {\n resultTokens.push(...prevTokens.slice(prevTokens.length - align));\n }\n return tokensToStr(resultTokens);\n}\n\nfunction incrementRangeValue(value: string): string {\n const tokens = tokenize(value);\n const lastToken = tokens.at(-1)!;\n if (typeof lastToken.val === 'number') {\n lastToken.val += 1;\n return coerceRangeValue(value, tokensToStr(tokens));\n }\n return value;\n}\n\nfunction autoExtendMavenRange(\n currentRepresentation: string,\n newValue: string,\n): string | null {\n const range = parseRange(currentRepresentation);\n if (!range) {\n return currentRepresentation;\n }\n const isPoint = (vals: Range[]): boolean => {\n if (vals.length !== 1) {\n return false;\n }\n const { leftType, leftValue, rightType, rightValue } = vals[0];\n return (\n leftType === 'INCLUDING_POINT' &&\n leftType === rightType &&\n leftValue === rightValue\n );\n };\n if (isPoint(range)) {\n return `[${newValue}]`;\n }\n\n const interval = [...range].reverse().find((elem) => {\n const { rightType, rightValue } = elem;\n return (\n rightValue === null ||\n (rightType === INCLUDING_POINT && compare(rightValue, newValue) === -1) ||\n (rightType === EXCLUDING_POINT && compare(rightValue, newValue) !== 1)\n );\n });\n\n if (!interval) {\n return currentRepresentation;\n }\n\n const { leftValue, rightValue } = interval;\n if (\n leftValue !== null &&\n rightValue !== null &&\n incrementRangeValue(leftValue) === rightValue\n ) {\n // if a range was detected where incrementing the lower value once results in the upper value\n // and the new version is outside the range, construct a new range that follows the same semantic\n // [1,2) / 4.3.2 => [4,5)\n if (compare(newValue, leftValue) !== -1) {\n interval.leftValue = coerceRangeValue(leftValue, newValue);\n interval.rightValue = incrementRangeValue(interval.leftValue);\n }\n } else if (\n leftValue !== null &&\n rightValue !== null &&\n incrementRangeValue(leftValue) + ALPHA_SUFFIX === rightValue\n ) {\n // same as last if, but properly considering Maven ordering specification documented at\n // https://maven.apache.org/pom.html#Version_Order_Specification\n // 4-alpha is smaller than 4.0.0 for example\n // while often people that intend to only match version 1.x use [1,2)\n // this is not correct as it matches various 2.x versions, mostly pre-versions\n // so the correct range definition would be [1,2-alpha) as nothing\n // starting with 2 can be lower than 2-alpha in Maven version ordering logic\n //\n // so this if handles the conceptually same case as the last if\n // just for the case when proper Maven ranges are used\n // [1,2-alpha) / 4.3.2 => [4,5-alpha)\n interval.leftValue = coerceRangeValue(leftValue, newValue);\n interval.rightValue =\n incrementRangeValue(interval.leftValue) + ALPHA_SUFFIX;\n } else if (rightValue !== null) {\n if (interval.rightType === INCLUDING_POINT) {\n const tokens = tokenize(rightValue);\n const lastToken = tokens.at(-1)!;\n if (typeof lastToken.val === 'number') {\n interval.rightValue = coerceRangeValue(rightValue, newValue);\n } else {\n interval.rightValue = newValue;\n }\n } else {\n interval.rightValue = incrementRangeValue(\n coerceRangeValue(rightValue, newValue),\n );\n }\n } else if (leftValue !== null) {\n interval.leftValue = coerceRangeValue(leftValue, newValue);\n }\n\n return rangeToStr(range);\n}\n\nfunction isSubversion(majorVersion: string, minorVersion: string): boolean {\n const majorTokens = tokenize(majorVersion);\n const minorTokens = tokenize(minorVersion);\n\n let result = true;\n const len = majorTokens.length;\n for (let idx = 0; idx < len; idx += 1) {\n const major = majorTokens[idx];\n const minor = minorTokens[idx] || nullFor(majorTokens[idx]);\n const cmpResult = tokenCmp(major, minor);\n if (cmpResult !== 0) {\n result = false;\n break;\n }\n }\n return result;\n}\n\nexport {\n EXCLUDING_POINT,\n INCLUDING_POINT,\n PREFIX_DOT,\n PREFIX_HYPHEN,\n TYPE_NUMBER,\n TYPE_QUALIFIER,\n autoExtendMavenRange,\n compare,\n isSubversion,\n isValid,\n isVersion,\n isVersion as isSingleVersion,\n parseRange,\n rangeToStr,\n tokenize,\n};\n"],"mappings":"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"}
|