renovate 43.263.1 → 43.263.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/app-strings.js +1 -1
- package/dist/config/app-strings.js.map +1 -1
- package/dist/config/decrypt/bcpgp.js +7 -4
- package/dist/config/decrypt/bcpgp.js.map +1 -1
- package/dist/config/migration.js +4 -6
- package/dist/config/migration.js.map +1 -1
- package/dist/config/options/index.js +1 -1
- package/dist/config/options/index.js.map +1 -1
- package/dist/config/validation-helpers/match-base-branches.js +4 -6
- package/dist/config/validation-helpers/match-base-branches.js.map +1 -1
- package/dist/config/validation-helpers/regex-glob-matchers.js +4 -6
- package/dist/config/validation-helpers/regex-glob-matchers.js.map +1 -1
- package/dist/config/validation-helpers/utils.js +2 -4
- package/dist/config/validation-helpers/utils.js.map +1 -1
- package/dist/config/validation.js +4 -6
- package/dist/config/validation.js.map +1 -1
- package/dist/config-validator.js +1 -3
- package/dist/config-validator.js.map +1 -1
- package/dist/global-config-option-defaults.generated.js +1 -1
- package/dist/global-config-option-defaults.generated.js.map +1 -1
- package/dist/modules/datasource/artifactory/index.js +6 -8
- package/dist/modules/datasource/artifactory/index.js.map +1 -1
- package/dist/modules/datasource/aws-machine-image/index.js +1 -2
- package/dist/modules/datasource/aws-machine-image/index.js.map +1 -1
- package/dist/modules/datasource/azure-pipelines-tasks/index.js +2 -3
- package/dist/modules/datasource/azure-pipelines-tasks/index.js.map +1 -1
- package/dist/modules/datasource/conda/index.js +1 -3
- package/dist/modules/datasource/conda/index.js.map +1 -1
- package/dist/modules/datasource/dart-version/index.js +1 -2
- package/dist/modules/datasource/dart-version/index.js.map +1 -1
- package/dist/modules/datasource/datasource.js +1 -3
- package/dist/modules/datasource/datasource.js.map +1 -1
- package/dist/modules/datasource/devbox/index.js +1 -3
- package/dist/modules/datasource/devbox/index.js.map +1 -1
- package/dist/modules/datasource/docker/ecr.js +2 -1
- package/dist/modules/datasource/docker/ecr.js.map +1 -1
- package/dist/modules/datasource/docker/index.js +1 -1
- package/dist/modules/datasource/docker/index.js.map +1 -1
- package/dist/modules/datasource/galaxy-collection/index.js +1 -1
- package/dist/modules/datasource/galaxy-collection/index.js.map +1 -1
- package/dist/modules/datasource/go/releases-goproxy.js +2 -2
- package/dist/modules/datasource/go/releases-goproxy.js.map +1 -1
- package/dist/modules/datasource/java-version/index.js +1 -3
- package/dist/modules/datasource/java-version/index.js.map +1 -1
- package/dist/modules/datasource/maven/util.js +2 -1
- package/dist/modules/datasource/maven/util.js.map +1 -1
- package/dist/modules/datasource/nuget/common.js +6 -4
- package/dist/modules/datasource/nuget/common.js.map +1 -1
- package/dist/modules/datasource/util.js +3 -2
- package/dist/modules/datasource/util.js.map +1 -1
- package/dist/modules/manager/azure-pipelines/extract.js +1 -1
- package/dist/modules/manager/azure-pipelines/extract.js.map +1 -1
- package/dist/modules/manager/bazel/extract.js +1 -3
- package/dist/modules/manager/bazel/extract.js.map +1 -1
- package/dist/modules/manager/bazel/parser.js +1 -1
- package/dist/modules/manager/bazel/parser.js.map +1 -1
- package/dist/modules/manager/buildpacks/extract.js +1 -1
- package/dist/modules/manager/buildpacks/extract.js.map +1 -1
- package/dist/modules/manager/bundler/common.js +23 -25
- package/dist/modules/manager/bundler/common.js.map +1 -1
- package/dist/modules/manager/bundler/extract.js +2 -6
- package/dist/modules/manager/bundler/extract.js.map +1 -1
- package/dist/modules/manager/cargo/extract.js +4 -6
- package/dist/modules/manager/cargo/extract.js.map +1 -1
- package/dist/modules/manager/dockerfile/extract.js +3 -3
- package/dist/modules/manager/dockerfile/extract.js.map +1 -1
- package/dist/modules/manager/fingerprint.generated.js +11 -11
- package/dist/modules/manager/fingerprint.generated.js.map +1 -1
- package/dist/modules/manager/flux/extract.js +2 -1
- package/dist/modules/manager/flux/extract.js.map +1 -1
- package/dist/modules/manager/github-actions/parse.js +1 -1
- package/dist/modules/manager/github-actions/parse.js.map +1 -1
- package/dist/modules/manager/gradle/extract/catalog.js +4 -3
- package/dist/modules/manager/gradle/extract/catalog.js.map +1 -1
- package/dist/modules/manager/gradle/extract.js +2 -2
- package/dist/modules/manager/gradle/extract.js.map +1 -1
- package/dist/modules/manager/gradle/parser/common.js +1 -1
- package/dist/modules/manager/gradle/parser/common.js.map +1 -1
- package/dist/modules/manager/gradle/parser/handlers.js +1 -1
- package/dist/modules/manager/gradle/parser/handlers.js.map +1 -1
- package/dist/modules/manager/helm-values/extract.js.map +1 -1
- package/dist/modules/manager/helmfile/extract.js +1 -1
- package/dist/modules/manager/helmfile/extract.js.map +1 -1
- package/dist/modules/manager/maven/extract.js.map +1 -1
- package/dist/modules/manager/maven/update.js +2 -1
- package/dist/modules/manager/maven/update.js.map +1 -1
- package/dist/modules/manager/mise/utils.js +5 -7
- package/dist/modules/manager/mise/utils.js.map +1 -1
- package/dist/modules/manager/npm/extract/common/overrides.js +1 -1
- package/dist/modules/manager/npm/extract/common/overrides.js.map +1 -1
- package/dist/modules/manager/npm/extract/yarn.js +1 -1
- package/dist/modules/manager/npm/extract/yarn.js.map +1 -1
- package/dist/modules/manager/npm/npmrc.js +1 -3
- package/dist/modules/manager/npm/npmrc.js.map +1 -1
- package/dist/modules/manager/npm/update/dependency/common.js +2 -3
- package/dist/modules/manager/npm/update/dependency/common.js.map +1 -1
- package/dist/modules/manager/npm/update/dependency/index.js +1 -1
- package/dist/modules/manager/npm/update/dependency/index.js.map +1 -1
- package/dist/modules/manager/npm/update/dependency/pnpm.js +1 -1
- package/dist/modules/manager/npm/update/dependency/pnpm.js.map +1 -1
- package/dist/modules/manager/npm/update/dependency/yarn.js +1 -1
- package/dist/modules/manager/npm/update/dependency/yarn.js.map +1 -1
- package/dist/modules/manager/osgi/extract.js +1 -1
- package/dist/modules/manager/osgi/extract.js.map +1 -1
- package/dist/modules/manager/pep621/processors/uv.js +1 -1
- package/dist/modules/manager/pep621/processors/uv.js.map +1 -1
- package/dist/modules/manager/pep621/schema.js.map +1 -1
- package/dist/modules/manager/pip_setup/extract.js +1 -1
- package/dist/modules/manager/pip_setup/extract.js.map +1 -1
- package/dist/modules/manager/pipenv/artifacts.js.map +1 -1
- package/dist/modules/manager/poetry/schema.js +2 -2
- package/dist/modules/manager/poetry/schema.js.map +1 -1
- package/dist/modules/manager/pub/artifacts.js +4 -6
- package/dist/modules/manager/pub/artifacts.js.map +1 -1
- package/dist/modules/manager/pub/utils.js +2 -2
- package/dist/modules/manager/pub/utils.js.map +1 -1
- package/dist/modules/manager/puppet/common.js +4 -6
- package/dist/modules/manager/puppet/common.js.map +1 -1
- package/dist/modules/manager/sbt/extract.js +1 -1
- package/dist/modules/manager/sbt/extract.js.map +1 -1
- package/dist/modules/manager/sbt/util.js +4 -2
- package/dist/modules/manager/sbt/util.js.map +1 -1
- package/dist/modules/manager/terraform/lockfile/util.js +1 -1
- package/dist/modules/manager/terraform/lockfile/util.js.map +1 -1
- package/dist/modules/platform/azure/index.js +15 -19
- package/dist/modules/platform/azure/index.js.map +1 -1
- package/dist/modules/platform/azure/issue.js +4 -2
- package/dist/modules/platform/azure/issue.js.map +1 -1
- package/dist/modules/platform/bitbucket/index.js +1 -3
- package/dist/modules/platform/bitbucket/index.js.map +1 -1
- package/dist/modules/platform/forgejo/index.js +5 -3
- package/dist/modules/platform/forgejo/index.js.map +1 -1
- package/dist/modules/platform/gerrit/scm.js +5 -7
- package/dist/modules/platform/gerrit/scm.js.map +1 -1
- package/dist/modules/platform/gitea/index.js +5 -3
- package/dist/modules/platform/gitea/index.js.map +1 -1
- package/dist/modules/platform/github/index.js +5 -7
- package/dist/modules/platform/github/index.js.map +1 -1
- package/dist/modules/platform/github/pr.js +1 -1
- package/dist/modules/platform/github/pr.js.map +1 -1
- package/dist/modules/platform/github/schema.d.ts +4 -4
- package/dist/modules/platform/gitlab/index.js +2 -1
- package/dist/modules/platform/gitlab/index.js.map +1 -1
- package/dist/modules/platform/utils/pr-body.js +2 -1
- package/dist/modules/platform/utils/pr-body.js.map +1 -1
- package/dist/modules/versioning/apk/index.js +3 -3
- package/dist/modules/versioning/apk/index.js.map +1 -1
- package/dist/modules/versioning/composer/index.js +4 -7
- package/dist/modules/versioning/composer/index.js.map +1 -1
- package/dist/modules/versioning/conan/common.js +4 -6
- package/dist/modules/versioning/conan/common.js.map +1 -1
- package/dist/modules/versioning/conan/index.js +1 -3
- package/dist/modules/versioning/conan/index.js.map +1 -1
- package/dist/modules/versioning/conan/range.js +4 -5
- package/dist/modules/versioning/conan/range.js.map +1 -1
- package/dist/modules/versioning/conda/index.js +1 -1
- package/dist/modules/versioning/conda/index.js.map +1 -1
- package/dist/modules/versioning/gradle/index.js +7 -3
- package/dist/modules/versioning/gradle/index.js.map +1 -1
- package/dist/modules/versioning/hermit/index.js +2 -2
- package/dist/modules/versioning/hermit/index.js.map +1 -1
- package/dist/modules/versioning/ivy/index.js +1 -1
- package/dist/modules/versioning/ivy/index.js.map +1 -1
- package/dist/modules/versioning/maven/compare.js +4 -6
- package/dist/modules/versioning/maven/compare.js.map +1 -1
- package/dist/modules/versioning/npm/range.js +5 -7
- package/dist/modules/versioning/npm/range.js.map +1 -1
- package/dist/modules/versioning/nuget/version.js +6 -6
- package/dist/modules/versioning/nuget/version.js.map +1 -1
- package/dist/modules/versioning/pep440/index.js +1 -1
- package/dist/modules/versioning/pep440/index.js.map +1 -1
- package/dist/modules/versioning/pep440/range.js +2 -6
- package/dist/modules/versioning/pep440/range.js.map +1 -1
- package/dist/modules/versioning/poetry/index.js +1 -1
- package/dist/modules/versioning/poetry/index.js.map +1 -1
- package/dist/modules/versioning/pvp/index.js +2 -2
- package/dist/modules/versioning/pvp/index.js.map +1 -1
- package/dist/modules/versioning/rpm/index.js +4 -3
- package/dist/modules/versioning/rpm/index.js.map +1 -1
- package/dist/modules/versioning/ruby/range.js +2 -2
- package/dist/modules/versioning/ruby/range.js.map +1 -1
- package/dist/modules/versioning/ruby/strategies/bump.js +1 -1
- package/dist/modules/versioning/ruby/strategies/bump.js.map +1 -1
- package/dist/modules/versioning/ruby/strategies/replace.js +13 -12
- package/dist/modules/versioning/ruby/strategies/replace.js.map +1 -1
- package/dist/modules/versioning/ruby/version.js +1 -1
- package/dist/modules/versioning/ruby/version.js.map +1 -1
- package/dist/modules/versioning/rust-release-channel/index.js +1 -1
- package/dist/modules/versioning/rust-release-channel/index.js.map +1 -1
- package/dist/modules/versioning/rust-release-channel/util.js +4 -4
- package/dist/modules/versioning/rust-release-channel/util.js.map +1 -1
- package/dist/util/common.js +1 -3
- package/dist/util/common.js.map +1 -1
- package/dist/util/exec/common.js +4 -6
- package/dist/util/exec/common.js.map +1 -1
- package/dist/util/exec/containerbase.js +1 -3
- package/dist/util/exec/containerbase.js.map +1 -1
- package/dist/util/git/instrument.js +3 -3
- package/dist/util/git/instrument.js.map +1 -1
- package/dist/util/github/graphql/datasource-fetcher.js +5 -4
- package/dist/util/github/graphql/datasource-fetcher.js.map +1 -1
- package/dist/util/http/cache/package-http-cache-provider.js.map +1 -1
- package/dist/util/http/github.js +3 -2
- package/dist/util/http/github.js.map +1 -1
- package/dist/util/http/http.d.ts +1 -1
- package/dist/util/http/http.js.map +1 -1
- package/dist/util/result.d.ts +8 -8
- package/dist/util/result.js +1 -1
- package/dist/util/result.js.map +1 -1
- package/dist/util/url.js +2 -2
- package/dist/util/url.js.map +1 -1
- package/dist/workers/global/config/parse/cli.js +18 -20
- package/dist/workers/global/config/parse/cli.js.map +1 -1
- package/dist/workers/global/config/parse/env.js +3 -5
- package/dist/workers/global/config/parse/env.js.map +1 -1
- package/dist/workers/repository/config-migration/branch/index.js +3 -5
- package/dist/workers/repository/config-migration/branch/index.js.map +1 -1
- package/dist/workers/repository/init/merge.js +2 -3
- package/dist/workers/repository/init/merge.js.map +1 -1
- package/dist/workers/repository/onboarding/branch/check.js +7 -9
- package/dist/workers/repository/onboarding/branch/check.js.map +1 -1
- package/dist/workers/repository/onboarding/branch/index.js +4 -8
- package/dist/workers/repository/onboarding/branch/index.js.map +1 -1
- package/dist/workers/repository/onboarding/branch/onboarding-branch-cache.js +2 -2
- package/dist/workers/repository/onboarding/branch/onboarding-branch-cache.js.map +1 -1
- package/dist/workers/repository/process/extract-update.js.map +1 -1
- package/dist/workers/repository/process/fetch.js.map +1 -1
- package/dist/workers/repository/process/libyear.js +1 -3
- package/dist/workers/repository/process/libyear.js.map +1 -1
- package/dist/workers/repository/process/lookup/filter-checks.js +9 -11
- package/dist/workers/repository/process/lookup/filter-checks.js.map +1 -1
- package/dist/workers/repository/process/lookup/index.js +5 -8
- package/dist/workers/repository/process/lookup/index.js.map +1 -1
- package/dist/workers/repository/process/vulnerabilities.js +3 -3
- package/dist/workers/repository/process/vulnerabilities.js.map +1 -1
- package/dist/workers/repository/reconfigure/index.js +3 -5
- package/dist/workers/repository/reconfigure/index.js.map +1 -1
- package/dist/workers/repository/update/branch/bump-versions.js +1 -1
- package/dist/workers/repository/update/branch/bump-versions.js.map +1 -1
- package/dist/workers/repository/update/branch/get-updated.js +3 -5
- package/dist/workers/repository/update/branch/get-updated.js.map +1 -1
- package/dist/workers/repository/update/pr/body/updates-table.js +1 -3
- package/dist/workers/repository/update/pr/body/updates-table.js.map +1 -1
- package/dist/workers/repository/update/pr/changelog/common.js +1 -1
- package/dist/workers/repository/update/pr/changelog/common.js.map +1 -1
- package/dist/workers/repository/update/pr/index.js +6 -7
- package/dist/workers/repository/update/pr/index.js.map +1 -1
- package/dist/workers/repository/updates/flatten.js +1 -1
- package/dist/workers/repository/updates/flatten.js.map +1 -1
- package/dist/workers/repository/updates/generate.js +1 -1
- package/dist/workers/repository/updates/generate.js.map +1 -1
- package/package.json +2 -2
- package/renovate-schema.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["npm"],"sources":["../../../../lib/modules/versioning/composer/index.ts"],"sourcesContent":["import { isNumber } from '@sindresorhus/is';\nimport semver from 'semver';\nimport { parseRange } from 'semver-utils';\nimport { logger } from '../../../logger/index.ts';\nimport type { RangeStrategy } from '../../../types/versioning.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { api as npm } from '../npm/index.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\n\nexport const id = 'composer';\nexport const displayName = 'Composer';\nexport const urls = [\n '[Composer versions](https://getcomposer.org/doc/articles/versions.md)',\n '[composer/semver package](https://packagist.org/packages/composer/semver)',\n '[Tilde and caret constraints](https://madewithlove.be/tilde-and-caret-constraints/)',\n '[Composer semver checker](https://semver.mwl.be)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n 'update-lockfile',\n];\n\nfunction getVersionParts(input: string): [string, string] {\n const versionParts = input.split('-');\n if (versionParts.length === 1) {\n return [input, ''];\n }\n\n return [versionParts[0], `-${versionParts[1]}`];\n}\n\nfunction padZeroes(input: string): string {\n const [output, stability] = getVersionParts(input);\n\n const sections = output.split('.');\n while (sections.length < 3) {\n sections.push('0');\n }\n return `${sections.join('.')}${stability}`;\n}\n\nfunction convertStabilityModifier(input: string): string {\n // Handle stability modifiers.\n const versionParts = input.split('@');\n if (versionParts.length === 1) {\n return input;\n }\n\n // 1.0@beta2 to 1.0-beta.2\n const stability = versionParts[1].replace(\n regEx(/(?:^|\\s)(beta|alpha|rc)([1-9][0-9]*)(?: |$)/gi),\n '$1.$2',\n );\n\n // If there is a stability part, npm semver expects the version\n // to be full\n return `${padZeroes(versionParts[0])}-${stability}`;\n}\n\nfunction normalizeVersion(input: string): string {\n let output = input;\n // Strip leading + prefix (not a valid composer constraint operator)\n output = output.replace(regEx(/^\\+/), '');\n output = output.replace(regEx(/(^|>|>=|\\^|~)v/i), '$1');\n return convertStabilityModifier(output);\n}\n\n/**\n * @param versions Version list in any format, it recognizes the specific patch format x.x.x-pXX\n * @param range Range in composer format\n * @param minMode If true, it will calculate minSatisfyingVersion, if false, it calculates the maxSatisfyingVersion\n * @returns min or max satisfyingVersion from the input\n */\nfunction calculateSatisfyingVersionIntenal(\n versions: string[],\n range: string,\n minMode: boolean,\n): string | null {\n // Because composer -p versions are considered stable, we have to remove the suffix for the npm.XXX functions.\n const versionsMapped = versions.map((x) => {\n return {\n origianl: x,\n cleaned: removeComposerSpecificPatchPart(x),\n npmVariant: composer2npm(removeComposerSpecificPatchPart(x)[0]),\n };\n });\n\n const npmVersions = versionsMapped.map((x) => x.npmVariant);\n const npmVersion = minMode\n ? npm.minSatisfyingVersion(npmVersions, composer2npm(range))\n : npm.getSatisfyingVersion(npmVersions, composer2npm(range));\n\n if (!npmVersion) {\n return null;\n }\n\n // After we find the npm versions, we select from them back in the mapping the possible patches.\n const candidates = versionsMapped\n .filter((x) => x.npmVariant === npmVersion)\n .sort((a, b) => (minMode ? 1 : -1) * sortVersions(a.origianl, b.origianl));\n\n return candidates[0].origianl;\n}\n\n/**\n * @param intput Version in any format, it recognizes the specific patch format x.x.x-pXX\n * @returns If input contains the specific patch, it returns the input with removed the patch and true, otherwise it retunrs the same string and false.\n */\nfunction removeComposerSpecificPatchPart(input: string): [string, boolean] {\n // the regex is based on the original from composer implementation https://github.com/composer/semver/blob/fa1ec24f0ab1efe642671ec15c51a3ab879f59bf/src/VersionParser.php#L137\n const pattern = /^v?\\d+(\\.\\d+(\\.\\d+(\\.\\d+)?)?)?(?<suffix>-p[1-9]\\d*)$/gi;\n const match = pattern.exec(input);\n\n return match\n ? [input.replace(match.groups!.suffix, ''), true]\n : [input, false];\n}\n\nfunction composer2npm(input: string): string {\n return input\n .split(regEx(/\\s*\\|\\|?\\s*/g))\n .map((part): string => {\n const cleanInput = normalizeVersion(part);\n if (npm.isVersion(cleanInput)) {\n return cleanInput;\n }\n if (npm.isVersion(padZeroes(cleanInput))) {\n return padZeroes(cleanInput);\n }\n const [versionId, stability] = getVersionParts(cleanInput);\n let output = versionId;\n\n // ~4 to ^4 and ~4.1 to ^4.1\n output = output.replace(\n regEx(/(?:^|\\s)~([1-9][0-9]*(?:\\.[0-9]*)?)(?: |$)/g),\n '^$1',\n );\n // ~0.4 to >=0.4 <1\n output = output.replace(\n regEx(/(?:^|\\s)~(0\\.[1-9][0-9]*)(?: |$)/g),\n '>=$1 <1',\n );\n\n // add extra digits to <8-DEV and <8.0-DEV\n output = output\n .replace(regEx(/^(<\\d+(\\.\\d+)?)$/g), '$1.0')\n .replace(regEx(/^(<\\d+(\\.\\d+)?)$/g), '$1.0');\n\n return output + stability;\n })\n .map((part) => part.replace(/([a-z])([0-9])/gi, '$1.$2'))\n .join(' || ');\n}\n\nfunction equals(a: string, b: string): boolean {\n return npm.equals(composer2npm(a), composer2npm(b));\n}\n\nfunction getMajor(version: string): number | null {\n const semverVersion = semver.coerce(composer2npm(version));\n return semverVersion ? npm.getMajor(semverVersion) : null;\n}\n\nfunction getMinor(version: string): number | null {\n const semverVersion = semver.coerce(composer2npm(version));\n return semverVersion ? npm.getMinor(semverVersion) : null;\n}\n\nfunction getPatch(version: string): number | null {\n const semverVersion = semver.coerce(composer2npm(version));\n\n // This returns only the numbers without the optional `-pXX` patch version supported by composer. Fixing that would require a bigger\n // refactoring, because the API supports only numbers.\n return semverVersion ? npm.getPatch(semverVersion) : null;\n}\n\nfunction isGreaterThan(a: string, b: string): boolean {\n return sortVersions(a, b) === 1;\n}\n\nfunction isLessThanRange(version: string, range: string): boolean {\n return !!npm.isLessThanRange?.(composer2npm(version), composer2npm(range));\n}\n\nfunction isSingleVersion(input: string): boolean {\n return !!input && npm.isSingleVersion(composer2npm(input));\n}\n\nfunction isStable(version: string): boolean {\n if (version) {\n // Composer considers patches `-pXX` as stable: https://github.com/composer/semver/blob/fa1ec24f0ab1efe642671ec15c51a3ab879f59bf/src/VersionParser.php#L568 but npm not.\n // In order to be able to use the standard npm.isStable function, we remove the potential patch version for the check.\n const [withoutPatch] = removeComposerSpecificPatchPart(version);\n return npm.isStable(composer2npm(withoutPatch));\n }\n\n return false;\n}\n\nexport function isValid(input: string): boolean {\n return !!input && npm.isValid(composer2npm(input));\n}\n\nexport function isVersion(input: string): boolean {\n return !!input && npm.isVersion(composer2npm(input));\n}\n\nfunction matches(version: string, range: string): boolean {\n return npm.matches(composer2npm(version), composer2npm(range));\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return calculateSatisfyingVersionIntenal(versions, range, false);\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return calculateSatisfyingVersionIntenal(versions, range, true);\n}\n\nfunction subset(subRange: string, superRange: string): boolean | undefined {\n try {\n return npm.subset!(composer2npm(subRange), composer2npm(superRange));\n } catch (err) {\n logger.trace({ err }, 'composer.subset error');\n return false;\n }\n}\n\nfunction intersects(subRange: string, superRange: string): boolean {\n try {\n return npm.intersects!(composer2npm(subRange), composer2npm(superRange));\n } catch (err) {\n logger.trace({ err }, 'composer.intersects error');\n return false;\n }\n}\n\nfunction getNewValue({\n currentValue,\n rangeStrategy,\n currentVersion,\n newVersion,\n}: NewValueConfig): string | null {\n if (rangeStrategy === 'update-lockfile') {\n if (matches(newVersion, currentValue)) {\n return currentValue;\n }\n return getNewValue({\n currentValue,\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n }\n const currentMajor = currentVersion ? getMajor(currentVersion) : null;\n const toMajor = getMajor(newVersion);\n const toMinor = getMinor(newVersion);\n let newValue: string | null = null;\n if (isVersion(currentValue)) {\n newValue = newVersion;\n } else if (regEx(/^[~^](0\\.[1-9][0-9]*)$/).test(currentValue)) {\n const operator = currentValue.substring(0, 1);\n // handle ~0.4 case first\n if (toMajor === 0) {\n // TODO: types (#22198)\n newValue = `${operator}0.${toMinor!}`;\n } else {\n // TODO: types (#22198)\n newValue = `${operator}${toMajor!}.0`;\n }\n } else if (regEx(/^[~^]([0-9]*)$/).test(currentValue)) {\n // handle ~4 case\n const operator = currentValue.substring(0, 1);\n // TODO: types (#22198)\n newValue = `${operator}${toMajor!}`;\n } else if (\n toMajor &&\n regEx(/^[~^]([0-9]*(?:\\.[0-9]*)?)$/).test(currentValue)\n ) {\n const operator = currentValue.substring(0, 1);\n if (rangeStrategy === 'bump') {\n newValue = `${operator}${newVersion}`;\n } else if ((isNumber(currentMajor) && toMajor > currentMajor) || !toMinor) {\n // handle ~4.1 case\n newValue = `${operator}${toMajor}.0`;\n } else {\n newValue = `${operator}${toMajor}.${toMinor}`;\n }\n } else if (\n currentVersion &&\n npm.isVersion(padZeroes(normalizeVersion(newVersion))) &&\n npm.isValid(normalizeVersion(currentValue)) &&\n composer2npm(currentValue) === normalizeVersion(currentValue)\n ) {\n newValue = npm.getNewValue({\n currentValue: normalizeVersion(currentValue),\n rangeStrategy,\n currentVersion: padZeroes(normalizeVersion(currentVersion)),\n newVersion: padZeroes(normalizeVersion(newVersion)),\n });\n }\n\n if (rangeStrategy === 'widen' && matches(newVersion, currentValue)) {\n newValue = currentValue;\n } else {\n const hasOr = currentValue.includes(' || ');\n if (hasOr || rangeStrategy === 'widen') {\n const splitValues = currentValue.split('||');\n const lastValue = splitValues[splitValues.length - 1];\n const replacementValue = getNewValue({\n currentValue: lastValue.trim(),\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n if (rangeStrategy === 'replace') {\n newValue = replacementValue;\n } else if (replacementValue) {\n const parsedRange = parseRange(replacementValue);\n const element = parsedRange[parsedRange.length - 1];\n if (element.operator?.startsWith('<')) {\n const splitCurrent = currentValue.split(element.operator);\n splitCurrent.pop();\n newValue = `${splitCurrent.join(element.operator)}${replacementValue}`;\n } else {\n newValue = `${currentValue} || ${replacementValue}`;\n }\n }\n }\n }\n\n if (!newValue) {\n logger.warn(\n { currentValue, rangeStrategy, currentVersion, newVersion },\n 'Unsupported composer value',\n );\n newValue = newVersion;\n }\n if (currentValue.split('.')[0].includes('v')) {\n newValue = newValue.replace(regEx(/([0-9])/), 'v$1');\n }\n\n // Preserve original min-stability specifier\n if (currentValue.includes('@')) {\n newValue += `@${currentValue.split('@')[1]}`;\n }\n\n return newValue;\n}\n\nfunction sortVersions(a: string, b: string): number {\n const [aWithoutPatch, aContainsPatch] = removeComposerSpecificPatchPart(a);\n const [bWithoutPatch, bContainsPatch] = removeComposerSpecificPatchPart(b);\n\n if (aContainsPatch === bContainsPatch) {\n // If both [a and b] contain patch version or both [a and b] do not contain patch version, then npm comparison deliveres correct results\n return npm.sortVersions(composer2npm(a), composer2npm(b));\n } else if (\n npm.equals(composer2npm(aWithoutPatch), composer2npm(bWithoutPatch))\n ) {\n // If only one [a or b] contains patch version and the parts without patch versions are equal, then the version with patch is greater (this is the case where npm comparison fails)\n return aContainsPatch ? 1 : -1;\n } else {\n // All other cases can be compared correctly by npm\n return npm.sortVersions(composer2npm(a), composer2npm(b));\n }\n}\n\nfunction isCompatible(version: string): boolean {\n return isVersion(version);\n}\n\nfunction isBreaking(current: string, version: string): boolean {\n return npm.isBreaking!(composer2npm(current), composer2npm(version));\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n isBreaking,\n isCompatible,\n isGreaterThan,\n isLessThanRange,\n isSingleVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n getSatisfyingVersion,\n minSatisfyingVersion,\n getNewValue,\n sortVersions,\n subset,\n intersects,\n};\nexport default api;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["npm"],"sources":["../../../../lib/modules/versioning/composer/index.ts"],"sourcesContent":["import { isNumber } from '@sindresorhus/is';\nimport semver from 'semver';\nimport { parseRange } from 'semver-utils';\nimport { logger } from '../../../logger/index.ts';\nimport type { RangeStrategy } from '../../../types/versioning.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { api as npm } from '../npm/index.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\n\nexport const id = 'composer';\nexport const displayName = 'Composer';\nexport const urls = [\n '[Composer versions](https://getcomposer.org/doc/articles/versions.md)',\n '[composer/semver package](https://packagist.org/packages/composer/semver)',\n '[Tilde and caret constraints](https://madewithlove.be/tilde-and-caret-constraints/)',\n '[Composer semver checker](https://semver.mwl.be)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n 'update-lockfile',\n];\n\nfunction getVersionParts(input: string): [string, string] {\n const versionParts = input.split('-');\n if (versionParts.length === 1) {\n return [input, ''];\n }\n\n return [versionParts[0], `-${versionParts[1]}`];\n}\n\nfunction padZeroes(input: string): string {\n const [output, stability] = getVersionParts(input);\n\n const sections = output.split('.');\n while (sections.length < 3) {\n sections.push('0');\n }\n return `${sections.join('.')}${stability}`;\n}\n\nfunction convertStabilityModifier(input: string): string {\n // Handle stability modifiers.\n const versionParts = input.split('@');\n if (versionParts.length === 1) {\n return input;\n }\n\n // 1.0@beta2 to 1.0-beta.2\n const stability = versionParts[1].replace(\n regEx(/(?:^|\\s)(beta|alpha|rc)([1-9][0-9]*)(?: |$)/gi),\n '$1.$2',\n );\n\n // If there is a stability part, npm semver expects the version\n // to be full\n return `${padZeroes(versionParts[0])}-${stability}`;\n}\n\nfunction normalizeVersion(input: string): string {\n let output = input;\n // Strip leading + prefix (not a valid composer constraint operator)\n output = output.replace(regEx(/^\\+/), '');\n output = output.replace(regEx(/(^|>|>=|\\^|~)v/i), '$1');\n return convertStabilityModifier(output);\n}\n\n/**\n * @param versions Version list in any format, it recognizes the specific patch format x.x.x-pXX\n * @param range Range in composer format\n * @param minMode If true, it will calculate minSatisfyingVersion, if false, it calculates the maxSatisfyingVersion\n * @returns min or max satisfyingVersion from the input\n */\nfunction calculateSatisfyingVersionIntenal(\n versions: string[],\n range: string,\n minMode: boolean,\n): string | null {\n // Because composer -p versions are considered stable, we have to remove the suffix for the npm.XXX functions.\n const versionsMapped = versions.map((x) => {\n return {\n origianl: x,\n cleaned: removeComposerSpecificPatchPart(x),\n npmVariant: composer2npm(removeComposerSpecificPatchPart(x)[0]),\n };\n });\n\n const npmVersions = versionsMapped.map((x) => x.npmVariant);\n const npmVersion = minMode\n ? npm.minSatisfyingVersion(npmVersions, composer2npm(range))\n : npm.getSatisfyingVersion(npmVersions, composer2npm(range));\n\n if (!npmVersion) {\n return null;\n }\n\n // After we find the npm versions, we select from them back in the mapping the possible patches.\n const candidates = versionsMapped\n .filter((x) => x.npmVariant === npmVersion)\n .sort((a, b) => (minMode ? 1 : -1) * sortVersions(a.origianl, b.origianl));\n\n return candidates[0].origianl;\n}\n\n/**\n * @param intput Version in any format, it recognizes the specific patch format x.x.x-pXX\n * @returns If input contains the specific patch, it returns the input with removed the patch and true, otherwise it retunrs the same string and false.\n */\nfunction removeComposerSpecificPatchPart(input: string): [string, boolean] {\n // the regex is based on the original from composer implementation https://github.com/composer/semver/blob/fa1ec24f0ab1efe642671ec15c51a3ab879f59bf/src/VersionParser.php#L137\n const pattern = /^v?\\d+(\\.\\d+(\\.\\d+(\\.\\d+)?)?)?(?<suffix>-p[1-9]\\d*)$/gi;\n const match = pattern.exec(input);\n\n return match\n ? [input.replace(match.groups!.suffix, ''), true]\n : [input, false];\n}\n\nfunction composer2npm(input: string): string {\n return input\n .split(regEx(/\\s*\\|\\|?\\s*/g))\n .map((part): string => {\n const cleanInput = normalizeVersion(part);\n if (npm.isVersion(cleanInput)) {\n return cleanInput;\n }\n if (npm.isVersion(padZeroes(cleanInput))) {\n return padZeroes(cleanInput);\n }\n const [versionId, stability] = getVersionParts(cleanInput);\n let output = versionId;\n\n // ~4 to ^4 and ~4.1 to ^4.1\n output = output.replace(\n regEx(/(?:^|\\s)~([1-9][0-9]*(?:\\.[0-9]*)?)(?: |$)/g),\n '^$1',\n );\n // ~0.4 to >=0.4 <1\n output = output.replace(\n regEx(/(?:^|\\s)~(0\\.[1-9][0-9]*)(?: |$)/g),\n '>=$1 <1',\n );\n\n // add extra digits to <8-DEV and <8.0-DEV\n output = output\n .replace(regEx(/^(<\\d+(\\.\\d+)?)$/g), '$1.0')\n .replace(regEx(/^(<\\d+(\\.\\d+)?)$/g), '$1.0');\n\n return output + stability;\n })\n .map((part) => part.replace(/([a-z])([0-9])/gi, '$1.$2'))\n .join(' || ');\n}\n\nfunction equals(a: string, b: string): boolean {\n return npm.equals(composer2npm(a), composer2npm(b));\n}\n\nfunction getMajor(version: string): number | null {\n const semverVersion = semver.coerce(composer2npm(version));\n return semverVersion ? npm.getMajor(semverVersion) : null;\n}\n\nfunction getMinor(version: string): number | null {\n const semverVersion = semver.coerce(composer2npm(version));\n return semverVersion ? npm.getMinor(semverVersion) : null;\n}\n\nfunction getPatch(version: string): number | null {\n const semverVersion = semver.coerce(composer2npm(version));\n\n // This returns only the numbers without the optional `-pXX` patch version supported by composer. Fixing that would require a bigger\n // refactoring, because the API supports only numbers.\n return semverVersion ? npm.getPatch(semverVersion) : null;\n}\n\nfunction isGreaterThan(a: string, b: string): boolean {\n return sortVersions(a, b) === 1;\n}\n\nfunction isLessThanRange(version: string, range: string): boolean {\n return !!npm.isLessThanRange?.(composer2npm(version), composer2npm(range));\n}\n\nfunction isSingleVersion(input: string): boolean {\n return !!input && npm.isSingleVersion(composer2npm(input));\n}\n\nfunction isStable(version: string): boolean {\n if (version) {\n // Composer considers patches `-pXX` as stable: https://github.com/composer/semver/blob/fa1ec24f0ab1efe642671ec15c51a3ab879f59bf/src/VersionParser.php#L568 but npm not.\n // In order to be able to use the standard npm.isStable function, we remove the potential patch version for the check.\n const [withoutPatch] = removeComposerSpecificPatchPart(version);\n return npm.isStable(composer2npm(withoutPatch));\n }\n\n return false;\n}\n\nexport function isValid(input: string): boolean {\n return !!input && npm.isValid(composer2npm(input));\n}\n\nexport function isVersion(input: string): boolean {\n return !!input && npm.isVersion(composer2npm(input));\n}\n\nfunction matches(version: string, range: string): boolean {\n return npm.matches(composer2npm(version), composer2npm(range));\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return calculateSatisfyingVersionIntenal(versions, range, false);\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return calculateSatisfyingVersionIntenal(versions, range, true);\n}\n\nfunction subset(subRange: string, superRange: string): boolean | undefined {\n try {\n return npm.subset!(composer2npm(subRange), composer2npm(superRange));\n } catch (err) {\n logger.trace({ err }, 'composer.subset error');\n return false;\n }\n}\n\nfunction intersects(subRange: string, superRange: string): boolean {\n try {\n return npm.intersects!(composer2npm(subRange), composer2npm(superRange));\n } catch (err) {\n logger.trace({ err }, 'composer.intersects error');\n return false;\n }\n}\n\nfunction getNewValue({\n currentValue,\n rangeStrategy,\n currentVersion,\n newVersion,\n}: NewValueConfig): string | null {\n if (rangeStrategy === 'update-lockfile') {\n if (matches(newVersion, currentValue)) {\n return currentValue;\n }\n return getNewValue({\n currentValue,\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n }\n const currentMajor = currentVersion ? getMajor(currentVersion) : null;\n const toMajor = getMajor(newVersion);\n const toMinor = getMinor(newVersion);\n let newValue: string | null = null;\n if (isVersion(currentValue)) {\n newValue = newVersion;\n } else if (regEx(/^[~^](0\\.[1-9][0-9]*)$/).test(currentValue)) {\n const operator = currentValue.substring(0, 1);\n // handle ~0.4 case first\n if (toMajor === 0) {\n // TODO: types (#22198)\n newValue = `${operator}0.${toMinor!}`;\n } else {\n // TODO: types (#22198)\n newValue = `${operator}${toMajor!}.0`;\n }\n } else if (regEx(/^[~^]([0-9]*)$/).test(currentValue)) {\n // handle ~4 case\n const operator = currentValue.substring(0, 1);\n // TODO: types (#22198)\n newValue = `${operator}${toMajor!}`;\n } else if (\n toMajor &&\n regEx(/^[~^]([0-9]*(?:\\.[0-9]*)?)$/).test(currentValue)\n ) {\n const operator = currentValue.substring(0, 1);\n if (rangeStrategy === 'bump') {\n newValue = `${operator}${newVersion}`;\n } else if ((isNumber(currentMajor) && toMajor > currentMajor) || !toMinor) {\n // handle ~4.1 case\n newValue = `${operator}${toMajor}.0`;\n } else {\n newValue = `${operator}${toMajor}.${toMinor}`;\n }\n } else if (\n currentVersion &&\n npm.isVersion(padZeroes(normalizeVersion(newVersion))) &&\n npm.isValid(normalizeVersion(currentValue)) &&\n composer2npm(currentValue) === normalizeVersion(currentValue)\n ) {\n newValue = npm.getNewValue({\n currentValue: normalizeVersion(currentValue),\n rangeStrategy,\n currentVersion: padZeroes(normalizeVersion(currentVersion)),\n newVersion: padZeroes(normalizeVersion(newVersion)),\n });\n }\n\n if (rangeStrategy === 'widen' && matches(newVersion, currentValue)) {\n newValue = currentValue;\n } else {\n const hasOr = currentValue.includes(' || ');\n if (hasOr || rangeStrategy === 'widen') {\n const splitValues = currentValue.split('||');\n const lastValue = splitValues.at(-1)!;\n const replacementValue = getNewValue({\n currentValue: lastValue.trim(),\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n if (rangeStrategy === 'replace') {\n newValue = replacementValue;\n } else if (replacementValue) {\n const parsedRange = parseRange(replacementValue);\n const element = parsedRange.at(-1)!;\n if (element.operator?.startsWith('<')) {\n const splitCurrent = currentValue.split(element.operator);\n splitCurrent.pop();\n newValue = `${splitCurrent.join(element.operator)}${replacementValue}`;\n } else {\n newValue = `${currentValue} || ${replacementValue}`;\n }\n }\n }\n }\n\n if (!newValue) {\n logger.warn(\n { currentValue, rangeStrategy, currentVersion, newVersion },\n 'Unsupported composer value',\n );\n newValue = newVersion;\n }\n if (currentValue.split('.')[0].includes('v')) {\n newValue = newValue.replace(regEx(/([0-9])/), 'v$1');\n }\n\n // Preserve original min-stability specifier\n if (currentValue.includes('@')) {\n newValue += `@${currentValue.split('@')[1]}`;\n }\n\n return newValue;\n}\n\nfunction sortVersions(a: string, b: string): number {\n const [aWithoutPatch, aContainsPatch] = removeComposerSpecificPatchPart(a);\n const [bWithoutPatch, bContainsPatch] = removeComposerSpecificPatchPart(b);\n\n if (aContainsPatch === bContainsPatch) {\n // If both [a and b] contain patch version or both [a and b] do not contain patch version, then npm comparison deliveres correct results\n return npm.sortVersions(composer2npm(a), composer2npm(b));\n }\n if (npm.equals(composer2npm(aWithoutPatch), composer2npm(bWithoutPatch))) {\n // If only one [a or b] contains patch version and the parts without patch versions are equal, then the version with patch is greater (this is the case where npm comparison fails)\n return aContainsPatch ? 1 : -1;\n }\n // All other cases can be compared correctly by npm\n return npm.sortVersions(composer2npm(a), composer2npm(b));\n}\n\nfunction isCompatible(version: string): boolean {\n return isVersion(version);\n}\n\nfunction isBreaking(current: string, version: string): boolean {\n return npm.isBreaking!(composer2npm(current), composer2npm(version));\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n isBreaking,\n isCompatible,\n isGreaterThan,\n isLessThanRange,\n isSingleVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n getSatisfyingVersion,\n minSatisfyingVersion,\n getNewValue,\n sortVersions,\n subset,\n intersects,\n};\nexport default api;\n"],"mappings":"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"}
|
|
@@ -53,12 +53,10 @@ function findSatisfyingVersion(versions, range, compareRt) {
|
|
|
53
53
|
if (typeof versionFromList === "string") {
|
|
54
54
|
const cleanedVersion = cleanVersion(versionFromList);
|
|
55
55
|
const options = getOptions(range);
|
|
56
|
-
if (matchesWithOptions(cleanedVersion, cleanVersion(range), options)) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
curSV = new semver$1.SemVer(cur, options);
|
|
61
|
-
}
|
|
56
|
+
if (matchesWithOptions(cleanedVersion, cleanVersion(range), options) && (!cur || semver$1.compare(curSV, versionFromList, options) === compareRt)) {
|
|
57
|
+
cur = versionFromList;
|
|
58
|
+
curIndex = index;
|
|
59
|
+
curSV = new semver$1.SemVer(cur, options);
|
|
62
60
|
}
|
|
63
61
|
}
|
|
64
62
|
index += 1;
|
|
@@ -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":"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"}
|
|
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":"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"}
|
|
@@ -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
|
}
|