renovate 44.210.2 → 44.211.0
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/options/index.js +1 -1
- package/dist/config/options/index.js.map +1 -1
- package/dist/config/utils.js +2 -1
- package/dist/config/utils.js.map +1 -1
- package/dist/config/validation-helpers/regex-glob-matchers.js.map +1 -1
- package/dist/config/validation-helpers/utils.js +5 -1
- package/dist/config/validation-helpers/utils.js.map +1 -1
- package/dist/config/validation.js +8 -2
- package/dist/config/validation.js.map +1 -1
- package/dist/config-validator.js +1 -1
- 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/instrumentation/index.js +3 -2
- package/dist/instrumentation/index.js.map +1 -1
- package/dist/logger/bunyan.js +3 -2
- package/dist/logger/bunyan.js.map +1 -1
- package/dist/logger/pretty-stdout.js +2 -1
- package/dist/logger/pretty-stdout.js.map +1 -1
- package/dist/modules/datasource/apk/index.js +2 -2
- package/dist/modules/datasource/apk/index.js.map +1 -1
- package/dist/modules/datasource/artifactory/index.js +2 -3
- package/dist/modules/datasource/artifactory/index.js.map +1 -1
- package/dist/modules/datasource/bazel/index.js +2 -1
- package/dist/modules/datasource/bazel/index.js.map +1 -1
- package/dist/modules/datasource/cdnjs/index.js +2 -1
- package/dist/modules/datasource/cdnjs/index.js.map +1 -1
- package/dist/modules/datasource/conda/index.js +2 -1
- package/dist/modules/datasource/conda/index.js.map +1 -1
- package/dist/modules/datasource/crate/index.js +2 -1
- package/dist/modules/datasource/crate/index.js.map +1 -1
- package/dist/modules/datasource/dart-version/index.js +2 -1
- package/dist/modules/datasource/dart-version/index.js.map +1 -1
- package/dist/modules/datasource/datasource.js +2 -2
- package/dist/modules/datasource/datasource.js.map +1 -1
- package/dist/modules/datasource/deb/url.js +3 -1
- package/dist/modules/datasource/deb/url.js.map +1 -1
- package/dist/modules/datasource/devbox/index.js +2 -1
- package/dist/modules/datasource/devbox/index.js.map +1 -1
- package/dist/modules/datasource/docker/common.js +10 -8
- package/dist/modules/datasource/docker/common.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 +20 -17
- package/dist/modules/datasource/docker/index.js.map +1 -1
- package/dist/modules/datasource/gitea-tags/base.js +2 -3
- package/dist/modules/datasource/gitea-tags/base.js.map +1 -1
- package/dist/modules/datasource/github-tags/index.js +2 -1
- package/dist/modules/datasource/github-tags/index.js.map +1 -1
- package/dist/modules/datasource/gitlab-tags/index.js +2 -3
- package/dist/modules/datasource/gitlab-tags/index.js.map +1 -1
- package/dist/modules/datasource/go/base.js +1 -1
- package/dist/modules/datasource/go/base.js.map +1 -1
- package/dist/modules/datasource/go/common.js +8 -2
- package/dist/modules/datasource/go/common.js.map +1 -1
- package/dist/modules/datasource/go/env.js +2 -1
- package/dist/modules/datasource/go/env.js.map +1 -1
- package/dist/modules/datasource/go/releases-goproxy.js +7 -5
- package/dist/modules/datasource/go/releases-goproxy.js.map +1 -1
- package/dist/modules/datasource/helm/index.js +2 -1
- package/dist/modules/datasource/helm/index.js.map +1 -1
- package/dist/modules/datasource/hexpm-bob/index.js +2 -1
- package/dist/modules/datasource/hexpm-bob/index.js.map +1 -1
- package/dist/modules/datasource/index.js +4 -3
- package/dist/modules/datasource/index.js.map +1 -1
- package/dist/modules/datasource/java-version/adoptium.js +3 -2
- package/dist/modules/datasource/java-version/adoptium.js.map +1 -1
- package/dist/modules/datasource/java-version/graalvm.js +2 -1
- package/dist/modules/datasource/java-version/graalvm.js.map +1 -1
- package/dist/modules/datasource/maven/index.js.map +1 -1
- package/dist/modules/datasource/maven/util.js +7 -10
- package/dist/modules/datasource/maven/util.js.map +1 -1
- package/dist/modules/datasource/npm/npmrc.js +2 -2
- package/dist/modules/datasource/npm/npmrc.js.map +1 -1
- package/dist/modules/datasource/nuget/v3.js +3 -5
- package/dist/modules/datasource/nuget/v3.js.map +1 -1
- package/dist/modules/datasource/packagist/index.js +4 -5
- package/dist/modules/datasource/packagist/index.js.map +1 -1
- package/dist/modules/datasource/pod/index.js +4 -4
- package/dist/modules/datasource/pod/index.js.map +1 -1
- package/dist/modules/datasource/pypi/index.js +19 -11
- package/dist/modules/datasource/pypi/index.js.map +1 -1
- package/dist/modules/datasource/python-version/index.js +2 -3
- package/dist/modules/datasource/python-version/index.js.map +1 -1
- package/dist/modules/datasource/repology/index.js +4 -3
- package/dist/modules/datasource/repology/index.js.map +1 -1
- package/dist/modules/datasource/rpm/providers/common.js +3 -1
- package/dist/modules/datasource/rpm/providers/common.js.map +1 -1
- package/dist/modules/datasource/rubygems/index.js +2 -5
- package/dist/modules/datasource/rubygems/index.js.map +1 -1
- package/dist/modules/datasource/rubygems/versions-endpoint-cache.js +13 -18
- package/dist/modules/datasource/rubygems/versions-endpoint-cache.js.map +1 -1
- package/dist/modules/datasource/terraform-module/base.js +2 -1
- package/dist/modules/datasource/terraform-module/base.js.map +1 -1
- package/dist/modules/datasource/terraform-provider/index.js +2 -3
- package/dist/modules/datasource/terraform-provider/index.js.map +1 -1
- package/dist/modules/manager/bazel-module/parser/context.js +0 -1
- package/dist/modules/manager/bazel-module/parser/context.js.map +1 -1
- package/dist/modules/manager/bundler/host-rules.js +4 -1
- package/dist/modules/manager/bundler/host-rules.js.map +1 -1
- package/dist/modules/manager/composer/range.js +1 -1
- package/dist/modules/manager/composer/range.js.map +1 -1
- package/dist/modules/manager/custom/utils.js +3 -1
- package/dist/modules/manager/custom/utils.js.map +1 -1
- package/dist/modules/manager/devbox/schema.js +2 -1
- package/dist/modules/manager/devbox/schema.js.map +1 -1
- package/dist/modules/manager/dockerfile/extract.js +10 -2
- package/dist/modules/manager/dockerfile/extract.js.map +1 -1
- package/dist/modules/manager/fingerprint.generated.js +1 -1
- package/dist/modules/manager/fingerprint.generated.js.map +1 -1
- package/dist/modules/manager/github-actions/parse.js +2 -1
- package/dist/modules/manager/github-actions/parse.js.map +1 -1
- package/dist/modules/manager/gomod/artifacts.js +5 -2
- package/dist/modules/manager/gomod/artifacts.js.map +1 -1
- package/dist/modules/manager/gradle/artifacts.js +5 -2
- package/dist/modules/manager/gradle/artifacts.js.map +1 -1
- package/dist/modules/manager/gradle/utils.js +2 -1
- package/dist/modules/manager/gradle/utils.js.map +1 -1
- package/dist/modules/manager/gradle-wrapper/utils.js +9 -5
- package/dist/modules/manager/gradle-wrapper/utils.js.map +1 -1
- package/dist/modules/manager/helm-values/util.js +1 -1
- package/dist/modules/manager/helm-values/util.js.map +1 -1
- package/dist/modules/manager/helmfile/artifacts.js +1 -1
- package/dist/modules/manager/helmfile/artifacts.js.map +1 -1
- package/dist/modules/manager/helmv3/artifacts.js +1 -1
- package/dist/modules/manager/helmv3/artifacts.js.map +1 -1
- package/dist/modules/manager/maven/extract.js +5 -2
- package/dist/modules/manager/maven/extract.js.map +1 -1
- package/dist/modules/manager/maven-wrapper/artifacts.js +3 -2
- package/dist/modules/manager/maven-wrapper/artifacts.js.map +1 -1
- package/dist/modules/manager/mise/artifacts.js +2 -1
- package/dist/modules/manager/mise/artifacts.js.map +1 -1
- package/dist/modules/manager/mise/extract.js.map +1 -1
- package/dist/modules/manager/npm/artifacts.js +3 -1
- package/dist/modules/manager/npm/artifacts.js.map +1 -1
- package/dist/modules/manager/npm/extract/common/dependency.js +4 -1
- package/dist/modules/manager/npm/extract/common/dependency.js.map +1 -1
- package/dist/modules/manager/npm/extract/common/package-file.js +2 -1
- package/dist/modules/manager/npm/extract/common/package-file.js.map +1 -1
- package/dist/modules/manager/npm/extract/index.js.map +1 -1
- package/dist/modules/manager/npm/extract/post/locked-versions.js.map +1 -1
- package/dist/modules/manager/npm/npmrc.js +2 -1
- package/dist/modules/manager/npm/npmrc.js.map +1 -1
- package/dist/modules/manager/npm/post-update/index.js +2 -1
- package/dist/modules/manager/npm/post-update/index.js.map +1 -1
- package/dist/modules/manager/npm/post-update/npm.js +2 -3
- package/dist/modules/manager/npm/post-update/npm.js.map +1 -1
- package/dist/modules/manager/npm/post-update/yarn.js.map +1 -1
- package/dist/modules/manager/npm/schema.js +6 -2
- package/dist/modules/manager/npm/schema.js.map +1 -1
- package/dist/modules/manager/npm/update/dependency/index.js +3 -2
- package/dist/modules/manager/npm/update/dependency/index.js.map +1 -1
- package/dist/modules/manager/npm/update/locked-dependency/common/parent-version.js +6 -2
- package/dist/modules/manager/npm/update/locked-dependency/common/parent-version.js.map +1 -1
- package/dist/modules/manager/npm/update/locked-dependency/package-lock/get-locked.js +2 -1
- package/dist/modules/manager/npm/update/locked-dependency/package-lock/get-locked.js.map +1 -1
- package/dist/modules/manager/nuget/package-tree.js +2 -1
- package/dist/modules/manager/nuget/package-tree.js.map +1 -1
- package/dist/modules/manager/paket/update-locked.js +4 -1
- package/dist/modules/manager/paket/update-locked.js.map +1 -1
- package/dist/modules/manager/pipenv/extract.js +4 -1
- package/dist/modules/manager/pipenv/extract.js.map +1 -1
- package/dist/modules/platform/azure/azure-helper.js +2 -1
- package/dist/modules/platform/azure/azure-helper.js.map +1 -1
- package/dist/modules/platform/azure/index.js +7 -3
- package/dist/modules/platform/azure/index.js.map +1 -1
- package/dist/modules/platform/bitbucket/index.js +13 -6
- package/dist/modules/platform/bitbucket/index.js.map +1 -1
- package/dist/modules/platform/bitbucket-server/index.js +13 -9
- package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
- package/dist/modules/platform/codecommit/index.js +2 -2
- package/dist/modules/platform/codecommit/index.js.map +1 -1
- package/dist/modules/platform/gerrit/client.js +4 -1
- package/dist/modules/platform/gerrit/client.js.map +1 -1
- package/dist/modules/platform/gerrit/index.js +3 -2
- package/dist/modules/platform/gerrit/index.js.map +1 -1
- package/dist/modules/platform/gitea/gitea-helper.js +5 -4
- package/dist/modules/platform/gitea/gitea-helper.js.map +1 -1
- package/dist/modules/platform/gitea/index.js +11 -4
- package/dist/modules/platform/gitea/index.js.map +1 -1
- package/dist/modules/platform/github/index.js +36 -23
- package/dist/modules/platform/github/index.js.map +1 -1
- package/dist/modules/platform/gitlab/index.js +16 -9
- package/dist/modules/platform/gitlab/index.js.map +1 -1
- package/dist/modules/platform/scm-manager/index.js +4 -1
- package/dist/modules/platform/scm-manager/index.js.map +1 -1
- package/dist/modules/platform/scm-manager/utils.js +2 -1
- package/dist/modules/platform/scm-manager/utils.js.map +1 -1
- package/dist/modules/versioning/cargo/index.js.map +1 -1
- package/dist/modules/versioning/composer/index.js +2 -1
- package/dist/modules/versioning/composer/index.js.map +1 -1
- package/dist/modules/versioning/conan/common.js +4 -1
- package/dist/modules/versioning/conan/common.js.map +1 -1
- package/dist/modules/versioning/debian/index.js +2 -1
- package/dist/modules/versioning/debian/index.js.map +1 -1
- package/dist/modules/versioning/gradle/compare.js +2 -1
- package/dist/modules/versioning/gradle/compare.js.map +1 -1
- package/dist/modules/versioning/hex/index.js +2 -1
- package/dist/modules/versioning/hex/index.js.map +1 -1
- package/dist/modules/versioning/julia/index.js.map +1 -1
- package/dist/modules/versioning/maven/compare.js +17 -7
- package/dist/modules/versioning/maven/compare.js.map +1 -1
- package/dist/modules/versioning/npm/index.js +2 -1
- package/dist/modules/versioning/npm/index.js.map +1 -1
- package/dist/modules/versioning/npm/range.js.map +1 -1
- package/dist/modules/versioning/paket/index.js +2 -1
- package/dist/modules/versioning/paket/index.js.map +1 -1
- package/dist/modules/versioning/paket/range.js +7 -3
- package/dist/modules/versioning/paket/range.js.map +1 -1
- package/dist/modules/versioning/pep440/index.js +2 -1
- package/dist/modules/versioning/pep440/index.js.map +1 -1
- package/dist/modules/versioning/poetry/index.js +2 -1
- package/dist/modules/versioning/poetry/index.js.map +1 -1
- package/dist/modules/versioning/regex/index.js +1 -1
- package/dist/modules/versioning/regex/index.js.map +1 -1
- package/dist/modules/versioning/rez/index.js +2 -1
- package/dist/modules/versioning/rez/index.js.map +1 -1
- package/dist/modules/versioning/vcpkg/index.js +2 -1
- package/dist/modules/versioning/vcpkg/index.js.map +1 -1
- package/dist/util/cache/package/impl/base.js +2 -1
- package/dist/util/cache/package/impl/base.js.map +1 -1
- package/dist/util/cache/package/with-cache.js +2 -1
- package/dist/util/cache/package/with-cache.js.map +1 -1
- package/dist/util/check-token.js +7 -4
- package/dist/util/check-token.js.map +1 -1
- package/dist/util/exec/utils.js +4 -1
- package/dist/util/exec/utils.js.map +1 -1
- package/dist/util/git/auth.js +5 -1
- package/dist/util/git/auth.js.map +1 -1
- package/dist/util/git/error.js.map +1 -1
- package/dist/util/host-rules.js +5 -3
- package/dist/util/host-rules.js.map +1 -1
- package/dist/util/http/cache/abstract-http-cache-provider.js +3 -2
- package/dist/util/http/cache/abstract-http-cache-provider.js.map +1 -1
- package/dist/util/http/cache/package-http-cache-provider.js +2 -1
- package/dist/util/http/cache/package-http-cache-provider.js.map +1 -1
- package/dist/util/http/github.js +15 -11
- package/dist/util/http/github.js.map +1 -1
- package/dist/util/http/gitlab.js +5 -4
- package/dist/util/http/gitlab.js.map +1 -1
- package/dist/util/http/http.js +2 -1
- package/dist/util/http/http.js.map +1 -1
- package/dist/util/http/jwt.js +2 -1
- package/dist/util/http/jwt.js.map +1 -1
- package/dist/util/http/retry-after.js +2 -1
- package/dist/util/http/retry-after.js.map +1 -1
- package/dist/util/http/status.js +95 -0
- package/dist/util/http/status.js.map +1 -0
- package/dist/util/merge-confidence/index.js +3 -2
- package/dist/util/merge-confidence/index.js.map +1 -1
- package/dist/util/package-rules/current-version.js +4 -1
- package/dist/util/package-rules/current-version.js.map +1 -1
- package/dist/util/package-rules/index.js +7 -3
- package/dist/util/package-rules/index.js.map +1 -1
- package/dist/util/schema-utils/index.js +5 -0
- package/dist/util/schema-utils/index.js.map +1 -1
- package/dist/workers/global/config/parse/host-rules-from-env.js +2 -1
- package/dist/workers/global/config/parse/host-rules-from-env.js.map +1 -1
- package/dist/workers/repository/common.js +4 -1
- package/dist/workers/repository/common.js.map +1 -1
- package/dist/workers/repository/config-migration/branch/index.js +2 -1
- package/dist/workers/repository/config-migration/branch/index.js.map +1 -1
- package/dist/workers/repository/dependency-dashboard.js +6 -2
- package/dist/workers/repository/dependency-dashboard.js.map +1 -1
- package/dist/workers/repository/finalize/repository-statistics.js +4 -1
- package/dist/workers/repository/finalize/repository-statistics.js.map +1 -1
- package/dist/workers/repository/init/merge.js +13 -3
- package/dist/workers/repository/init/merge.js.map +1 -1
- package/dist/workers/repository/onboarding/branch/check.js +2 -1
- package/dist/workers/repository/onboarding/branch/check.js.map +1 -1
- package/dist/workers/repository/onboarding/pr/pr-list.js +4 -2
- package/dist/workers/repository/onboarding/pr/pr-list.js.map +1 -1
- package/dist/workers/repository/process/extract-update.js +4 -1
- package/dist/workers/repository/process/extract-update.js.map +1 -1
- package/dist/workers/repository/process/lookup/digest.js +2 -1
- package/dist/workers/repository/process/lookup/digest.js.map +1 -1
- package/dist/workers/repository/process/lookup/generate.js +1 -1
- package/dist/workers/repository/process/lookup/generate.js.map +1 -1
- package/dist/workers/repository/process/lookup/index.js +4 -1
- package/dist/workers/repository/process/lookup/index.js.map +1 -1
- package/dist/workers/repository/process/lookup/utils.js +7 -1
- package/dist/workers/repository/process/lookup/utils.js.map +1 -1
- package/dist/workers/repository/process/vulnerabilities.js +10 -3
- package/dist/workers/repository/process/vulnerabilities.js.map +1 -1
- package/dist/workers/repository/reconfigure/index.js +2 -1
- package/dist/workers/repository/reconfigure/index.js.map +1 -1
- package/dist/workers/repository/update/branch/auto-replace.js +6 -2
- package/dist/workers/repository/update/branch/auto-replace.js.map +1 -1
- package/dist/workers/repository/update/branch/errors.js +2 -1
- package/dist/workers/repository/update/branch/errors.js.map +1 -1
- package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js +2 -2
- package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js.map +1 -1
- package/dist/workers/repository/update/branch/get-updated.js +1 -2
- package/dist/workers/repository/update/branch/get-updated.js.map +1 -1
- package/dist/workers/repository/update/branch/index.js +2 -1
- package/dist/workers/repository/update/branch/index.js.map +1 -1
- package/dist/workers/repository/update/branch/status-checks.js +2 -1
- package/dist/workers/repository/update/branch/status-checks.js.map +1 -1
- package/dist/workers/repository/update/pr/body/index.js.map +1 -1
- package/dist/workers/repository/update/pr/changelog/release-notes.js +3 -2
- package/dist/workers/repository/update/pr/changelog/release-notes.js.map +1 -1
- package/dist/workers/repository/update/pr/index.js +7 -3
- package/dist/workers/repository/update/pr/index.js.map +1 -1
- package/dist/workers/repository/updates/generate.js +6 -3
- 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":"compare.js","names":["isNull"],"sources":["../../../../lib/modules/versioning/maven/compare.ts"],"sourcesContent":["import { isBigint, isString } from '@sindresorhus/is';\nimport { regEx } from '../../../util/regex.ts';\nimport type { Range, Token } from './types.ts';\n\nconst PREFIX_DOT = 'PREFIX_DOT';\nconst PREFIX_HYPHEN = 'PREFIX_HYPHEN';\nconst ALPHA_SUFFIX = '-alpha';\n\nconst TYPE_NUMBER = 'TYPE_NUMBER';\nconst TYPE_QUALIFIER = 'TYPE_QUALIFIER';\n\nfunction iterateChars(\n str: string,\n cb: (p: string | null, n: string | null) => void,\n): void {\n let prev = null;\n let next = null;\n for (let i = 0; i < str.length; i += 1) {\n next = str.charAt(i);\n cb(prev, next);\n prev = next;\n }\n cb(prev, null);\n}\n\nfunction isDigit(char: string): boolean {\n return regEx(/^\\d$/).test(char);\n}\n\nfunction isLetter(char: string): boolean {\n return regEx(/^[a-z_+]$/i).test(char);\n}\n\nfunction isTransition(prevChar: string, nextChar: string): boolean {\n return (\n (isDigit(prevChar) && isLetter(nextChar)) ||\n (isLetter(prevChar) && isDigit(nextChar))\n );\n}\n\nfunction iterateTokens(versionStr: string, cb: (token: Token) => void): void {\n let currentPrefix = '';\n let currentVal = '';\n\n function yieldToken(transition = false): void {\n const val = currentVal || '0';\n if (regEx(/^\\d+$/).test(val)) {\n cb({\n prefix: currentPrefix,\n type: TYPE_NUMBER,\n val: BigInt(val),\n isTransition: transition,\n });\n } else {\n cb({\n prefix: currentPrefix,\n type: TYPE_QUALIFIER,\n val,\n isTransition: transition,\n });\n }\n }\n\n iterateChars(versionStr, (prevChar, nextChar) => {\n if (nextChar === null) {\n yieldToken();\n } else if (nextChar === '-') {\n yieldToken();\n currentPrefix = PREFIX_HYPHEN;\n currentVal = '';\n } else if (nextChar === '.') {\n yieldToken();\n currentPrefix = PREFIX_DOT;\n currentVal = '';\n } else if (prevChar === null && (nextChar === 'v' || nextChar === 'V')) {\n currentPrefix = nextChar;\n } else {\n if (currentVal !== '' && isTransition(prevChar!, nextChar)) {\n yieldToken(true);\n currentPrefix = PREFIX_HYPHEN;\n currentVal = nextChar;\n } else if (\n currentVal === '' &&\n (currentPrefix === 'v' || currentPrefix === 'V') &&\n !isDigit(nextChar)\n ) {\n currentVal = currentVal.concat(currentPrefix, nextChar);\n currentPrefix = '';\n } else {\n currentVal = currentVal.concat(nextChar);\n }\n }\n });\n}\n\nfunction isNull(token: Token): boolean {\n const val = token.val;\n return (\n val === 0n ||\n val === '' ||\n val === 'final' ||\n val === 'ga' ||\n val === 'release' ||\n val === 'latest' ||\n val === 'sr'\n );\n}\n\nfunction tokenize(versionStr: string, preserveMinorZeroes = false): Token[] {\n let buf: Token[] = [];\n let result: Token[] = [];\n let leadingZero = true;\n iterateTokens(versionStr.toLowerCase(), (token) => {\n if (token.prefix === PREFIX_HYPHEN || token.type === TYPE_QUALIFIER) {\n buf = [];\n }\n buf.push(token);\n if (!isNull(token)) {\n leadingZero = false;\n result = result.concat(buf);\n buf = [];\n } else if (leadingZero || preserveMinorZeroes) {\n result = result.concat(buf);\n buf = [];\n }\n });\n return result;\n}\n\nfunction nullFor(token: Token): Token {\n return token.type === TYPE_NUMBER\n ? {\n prefix: token.prefix,\n type: TYPE_NUMBER,\n val: 0n,\n }\n : {\n prefix: token.prefix,\n type: TYPE_QUALIFIER,\n val: '',\n };\n}\n\nfunction commonOrder(token: Token): number {\n if (token.type === TYPE_QUALIFIER) {\n return 1;\n }\n if (token.prefix === PREFIX_HYPHEN && token.type === TYPE_NUMBER) {\n return 2;\n }\n return 3;\n}\n\nexport const QualifierTypes = {\n Alpha: 1,\n Beta: 2,\n Milestone: 3,\n RC: 4,\n Snapshot: 5,\n Release: 6,\n SP: 7,\n} as const;\n\nexport function qualifierType(token: Token): number | null {\n const val = token.val;\n if (val === 'alpha' || (token.isTransition && val === 'a')) {\n return QualifierTypes.Alpha;\n }\n if (val === 'beta' || (token.isTransition && val === 'b')) {\n return QualifierTypes.Beta;\n }\n if (val === 'milestone' || (token.isTransition && val === 'm')) {\n return QualifierTypes.Milestone;\n }\n if (val === 'rc' || val === 'cr' || val === 'preview') {\n return QualifierTypes.RC;\n }\n if (val === 'snapshot' || val === 'snap') {\n return QualifierTypes.Snapshot;\n }\n if (\n val === '' ||\n val === 'final' ||\n val === 'ga' ||\n val === 'release' ||\n val === 'latest' ||\n val === 'sr'\n ) {\n return QualifierTypes.Release;\n }\n if (val === 'sp') {\n return QualifierTypes.SP;\n }\n return null;\n}\n\nfunction qualifierCmp(left: Token, right: Token): number {\n const leftOrder = qualifierType(left);\n const rightOrder = qualifierType(right);\n if (leftOrder && rightOrder) {\n if (leftOrder < rightOrder) {\n return -1;\n }\n if (leftOrder > rightOrder) {\n return 1;\n }\n return 0;\n }\n\n if (leftOrder && leftOrder < QualifierTypes.Release) {\n return -1;\n }\n if (rightOrder && rightOrder < QualifierTypes.Release) {\n return 1;\n }\n\n if (left.val < right.val) {\n return -1;\n }\n if (left.val > right.val) {\n return 1;\n }\n return 0;\n}\n\nfunction tokenCmp(left: Token, right: Token): number {\n const leftOrder = commonOrder(left);\n const rightOrder = commonOrder(right);\n\n if (leftOrder < rightOrder) {\n return -1;\n }\n if (leftOrder > rightOrder) {\n return 1;\n }\n\n if (left.type === TYPE_NUMBER && right.type === TYPE_NUMBER) {\n if (left.val < right.val) {\n return -1;\n }\n if (left.val > right.val) {\n return 1;\n }\n return 0;\n }\n\n return qualifierCmp(left, right);\n}\n\nfunction compare(left: string, right: string): number {\n const leftTokens = tokenize(left);\n const rightTokens = tokenize(right);\n const length = Math.max(leftTokens.length, rightTokens.length);\n for (let idx = 0; idx < length; idx += 1) {\n const leftToken = leftTokens[idx] || nullFor(rightTokens[idx]);\n const rightToken = rightTokens[idx] || nullFor(leftTokens[idx]);\n const cmpResult = tokenCmp(leftToken, rightToken);\n if (cmpResult !== 0) {\n return cmpResult;\n }\n }\n return 0;\n}\n\nfunction isVersion(version: unknown): version is string {\n if (!version || !isString(version)) {\n return false;\n }\n if (!regEx(/^[-.a-z_+0-9]+$/i).test(version)) {\n return false;\n }\n if (regEx(/^[.-]/).test(version)) {\n return false;\n }\n if (regEx(/[.-]$/).test(version)) {\n return false;\n }\n if (['latest', 'release'].includes(version.toLowerCase())) {\n return false;\n }\n const tokens = tokenize(version);\n return !!tokens.length;\n}\n\nconst INCLUDING_POINT = 'INCLUDING_POINT';\nconst EXCLUDING_POINT = 'EXCLUDING_POINT';\n\nfunction parseRange(rangeStr: string): Range[] | null {\n function emptyInterval(): Range {\n return {\n leftType: null,\n leftValue: null,\n leftBracket: null,\n rightType: null,\n rightValue: null,\n rightBracket: null,\n };\n }\n\n const commaSplit = rangeStr.split(regEx(/\\s*,\\s*/));\n let ranges: Range[] | null = [];\n let interval = emptyInterval();\n\n commaSplit.forEach((subStr) => {\n if (!ranges) {\n return;\n }\n if (interval.leftType === null) {\n if (regEx(/^\\[.*]$/).test(subStr)) {\n const ver = subStr.slice(1, -1);\n ranges.push({\n leftType: INCLUDING_POINT,\n leftValue: ver,\n leftBracket: '[',\n rightType: INCLUDING_POINT,\n rightValue: ver,\n rightBracket: ']',\n });\n interval = emptyInterval();\n } else if (subStr.startsWith('[')) {\n const ver = subStr.slice(1);\n interval.leftType = INCLUDING_POINT;\n interval.leftValue = ver;\n interval.leftBracket = '[';\n } else if (subStr.startsWith('(') || subStr.startsWith(']')) {\n const ver = subStr.slice(1);\n interval.leftType = EXCLUDING_POINT;\n interval.leftValue = ver;\n interval.leftBracket = subStr[0];\n } else {\n ranges = null;\n }\n } else if (subStr.endsWith(']')) {\n const ver = subStr.slice(0, -1);\n interval.rightType = INCLUDING_POINT;\n interval.rightValue = ver;\n interval.rightBracket = ']';\n ranges.push(interval);\n interval = emptyInterval();\n } else if (subStr.endsWith(')') || subStr.endsWith('[')) {\n const ver = subStr.slice(0, -1);\n interval.rightType = EXCLUDING_POINT;\n interval.rightValue = ver;\n interval.rightBracket = subStr.endsWith(')') ? ')' : '[';\n ranges.push(interval);\n interval = emptyInterval();\n } else {\n ranges = null;\n }\n });\n\n if (interval.leftType) {\n return null;\n } // something like '[1,2],[3'\n if (!ranges?.length) {\n return null;\n }\n\n const lastIdx = ranges.length - 1;\n let prevValue: string | null = null;\n const result: Range[] = [];\n for (let idx = 0; idx < ranges.length; idx += 1) {\n const range = ranges[idx];\n const { leftType, leftValue, rightType, rightValue } = range;\n\n if (idx === 0 && leftValue === '') {\n if (leftType === EXCLUDING_POINT && isVersion(rightValue)) {\n prevValue = rightValue;\n result.push({ ...range, leftValue: null });\n continue;\n }\n return null;\n }\n if (idx === lastIdx && rightValue === '') {\n if (rightType === EXCLUDING_POINT && isVersion(leftValue)) {\n if (prevValue && compare(prevValue, leftValue) === 1) {\n return null;\n }\n result.push({ ...range, rightValue: null });\n continue;\n }\n return null;\n }\n if (isVersion(leftValue) && isVersion(rightValue)) {\n if (compare(leftValue, rightValue) === 1) {\n return null;\n }\n if (prevValue && compare(prevValue, leftValue) === 1) {\n return null;\n }\n prevValue = rightValue;\n result.push(range);\n continue;\n }\n return null;\n }\n return result;\n}\n\nfunction isValid(str: string): boolean {\n if (!str) {\n return false;\n }\n return isVersion(str) || !!parseRange(str);\n}\n\nfunction rangeToStr(fullRange: Range[] | null): string | null {\n if (fullRange === null) {\n return null;\n }\n\n function valToStr(val: string | null): string {\n return val ?? '';\n }\n\n if (fullRange.length === 1) {\n const { leftBracket, rightBracket, leftValue, rightValue } = fullRange[0];\n if (\n leftValue === rightValue &&\n leftBracket === '[' &&\n rightBracket === ']'\n ) {\n return `[${valToStr(leftValue)}]`;\n }\n }\n\n const intervals = fullRange.map((val) =>\n [\n val.leftBracket,\n valToStr(val.leftValue),\n ',',\n valToStr(val.rightValue),\n val.rightBracket,\n ].join(''),\n );\n return intervals.join(',');\n}\n\nfunction tokensToStr(tokens: Token[]): string {\n let isTransition: boolean | undefined = false;\n return tokens.reduce((result: string, token: Token) => {\n let prefix: string;\n if (token.prefix === PREFIX_DOT) {\n prefix = '.';\n } else if (token.prefix === PREFIX_HYPHEN) {\n prefix = isTransition === true ? '' : '-';\n } else {\n prefix = token.prefix;\n }\n isTransition = token.isTransition;\n return `${result}${prefix}${token.val}`;\n }, '');\n}\n\nfunction coerceRangeValue(prev: string, next: string): string {\n const prevTokens = tokenize(prev, true);\n const nextTokens = tokenize(next, true);\n const resultTokens = nextTokens.slice(0, prevTokens.length);\n const align = Math.max(0, prevTokens.length - nextTokens.length);\n if (align > 0) {\n resultTokens.push(...prevTokens.slice(prevTokens.length - align));\n }\n return tokensToStr(resultTokens);\n}\n\nfunction incrementRangeValue(value: string): string {\n const tokens = tokenize(value);\n const lastToken = tokens.at(-1)!;\n if (isBigint(lastToken.val)) {\n lastToken.val += 1n;\n return coerceRangeValue(value, tokensToStr(tokens));\n }\n return value;\n}\n\nfunction autoExtendMavenRange(\n currentRepresentation: string,\n newValue: string,\n): string | null {\n const range = parseRange(currentRepresentation);\n if (!range) {\n return currentRepresentation;\n }\n function isPoint(vals: Range[]): boolean {\n if (vals.length !== 1) {\n return false;\n }\n const { leftType, leftValue, rightType, rightValue } = vals[0];\n return (\n leftType === 'INCLUDING_POINT' &&\n leftType === rightType &&\n leftValue === rightValue\n );\n }\n if (isPoint(range)) {\n return `[${newValue}]`;\n }\n\n const interval = [...range].reverse().find((elem) => {\n const { rightType, rightValue } = elem;\n return (\n rightValue === null ||\n (rightType === INCLUDING_POINT && compare(rightValue, newValue) === -1) ||\n (rightType === EXCLUDING_POINT && compare(rightValue, newValue) !== 1)\n );\n });\n\n if (!interval) {\n return currentRepresentation;\n }\n\n const { leftValue, rightValue } = interval;\n if (\n leftValue !== null &&\n rightValue !== null &&\n incrementRangeValue(leftValue) === rightValue\n ) {\n // if a range was detected where incrementing the lower value once results in the upper value\n // and the new version is outside the range, construct a new range that follows the same semantic\n // [1,2) / 4.3.2 => [4,5)\n //\n // the interval above is only picked when the new value is at or past the\n // upper bound, and here the upper bound is the lower one incremented, so\n // the new value can never sort below the lower bound\n interval.leftValue = coerceRangeValue(leftValue, newValue);\n interval.rightValue = incrementRangeValue(interval.leftValue);\n } else if (\n leftValue !== null &&\n rightValue !== null &&\n incrementRangeValue(leftValue) + ALPHA_SUFFIX === rightValue\n ) {\n // same as last if, but properly considering Maven ordering specification documented at\n // https://maven.apache.org/pom.html#Version_Order_Specification\n // 4-alpha is smaller than 4.0.0 for example\n // while often people that intend to only match version 1.x use [1,2)\n // this is not correct as it matches various 2.x versions, mostly pre-versions\n // so the correct range definition would be [1,2-alpha) as nothing\n // starting with 2 can be lower than 2-alpha in Maven version ordering logic\n //\n // so this if handles the conceptually same case as the last if\n // just for the case when proper Maven ranges are used\n // [1,2-alpha) / 4.3.2 => [4,5-alpha)\n interval.leftValue = coerceRangeValue(leftValue, newValue);\n interval.rightValue =\n incrementRangeValue(interval.leftValue) + ALPHA_SUFFIX;\n } else if (rightValue === null) {\n // an interval never has both bounds open: the parser only nulls the left\n // bound when the right one is a version, and the right one when the left\n // is a version\n interval.leftValue = coerceRangeValue(leftValue!, newValue);\n } else {\n if (interval.rightType === INCLUDING_POINT) {\n const tokens = tokenize(rightValue);\n const lastToken = tokens.at(-1)!;\n if (isBigint(lastToken.val)) {\n interval.rightValue = coerceRangeValue(rightValue, newValue);\n } else {\n interval.rightValue = newValue;\n }\n } else {\n interval.rightValue = incrementRangeValue(\n coerceRangeValue(rightValue, newValue),\n );\n }\n }\n\n return rangeToStr(range);\n}\n\nfunction isSubversion(majorVersion: string, minorVersion: string): boolean {\n const majorTokens = tokenize(majorVersion);\n const minorTokens = tokenize(minorVersion);\n\n let result = true;\n const len = majorTokens.length;\n for (let idx = 0; idx < len; idx += 1) {\n const major = majorTokens[idx];\n const minor = minorTokens[idx] || nullFor(majorTokens[idx]);\n const cmpResult = tokenCmp(major, minor);\n if (cmpResult !== 0) {\n result = false;\n break;\n }\n }\n return result;\n}\n\nexport {\n EXCLUDING_POINT,\n INCLUDING_POINT,\n PREFIX_DOT,\n PREFIX_HYPHEN,\n TYPE_NUMBER,\n TYPE_QUALIFIER,\n autoExtendMavenRange,\n compare,\n isSubversion,\n isValid,\n isVersion,\n isVersion as isSingleVersion,\n parseRange,\n rangeToStr,\n tokenize,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"compare.js","names":["isNull"],"sources":["../../../../lib/modules/versioning/maven/compare.ts"],"sourcesContent":["import { isBigint, isString } from '@sindresorhus/is';\nimport { regEx } from '../../../util/regex.ts';\nimport type { Range, Token } from './types.ts';\n\nconst PREFIX_DOT = 'PREFIX_DOT';\nconst PREFIX_HYPHEN = 'PREFIX_HYPHEN';\nconst ALPHA_SUFFIX = '-alpha';\n\nconst TYPE_NUMBER = 'TYPE_NUMBER';\nconst TYPE_QUALIFIER = 'TYPE_QUALIFIER';\n\nfunction iterateChars(\n str: string,\n cb: (p: string | null, n: string | null) => void,\n): void {\n let prev = null;\n let next = null;\n for (let i = 0; i < str.length; i += 1) {\n next = str.charAt(i);\n cb(prev, next);\n prev = next;\n }\n cb(prev, null);\n}\n\nfunction isDigit(char: string): boolean {\n return regEx(/^\\d$/).test(char);\n}\n\nfunction isLetter(char: string): boolean {\n return regEx(/^[a-z_+]$/i).test(char);\n}\n\nfunction isVPrefix(char: string): boolean {\n return char === 'v' || char === 'V';\n}\n\nfunction isTransition(prevChar: string, nextChar: string): boolean {\n if (isDigit(prevChar) && isLetter(nextChar)) {\n return true;\n }\n return isLetter(prevChar) && isDigit(nextChar);\n}\n\nfunction iterateTokens(versionStr: string, cb: (token: Token) => void): void {\n let currentPrefix = '';\n let currentVal = '';\n\n function yieldToken(transition = false): void {\n const val = currentVal || '0';\n if (regEx(/^\\d+$/).test(val)) {\n cb({\n prefix: currentPrefix,\n type: TYPE_NUMBER,\n val: BigInt(val),\n isTransition: transition,\n });\n } else {\n cb({\n prefix: currentPrefix,\n type: TYPE_QUALIFIER,\n val,\n isTransition: transition,\n });\n }\n }\n\n iterateChars(versionStr, (prevChar, nextChar) => {\n if (nextChar === null) {\n yieldToken();\n } else if (nextChar === '-') {\n yieldToken();\n currentPrefix = PREFIX_HYPHEN;\n currentVal = '';\n } else if (nextChar === '.') {\n yieldToken();\n currentPrefix = PREFIX_DOT;\n currentVal = '';\n } else if (prevChar === null && isVPrefix(nextChar)) {\n currentPrefix = nextChar;\n } else {\n if (currentVal !== '' && isTransition(prevChar!, nextChar)) {\n yieldToken(true);\n currentPrefix = PREFIX_HYPHEN;\n currentVal = nextChar;\n } else if (\n currentVal === '' &&\n isVPrefix(currentPrefix) &&\n !isDigit(nextChar)\n ) {\n currentVal = currentVal.concat(currentPrefix, nextChar);\n currentPrefix = '';\n } else {\n currentVal = currentVal.concat(nextChar);\n }\n }\n });\n}\n\nfunction isNull(token: Token): boolean {\n const val = token.val;\n return (\n val === 0n ||\n val === '' ||\n val === 'final' ||\n val === 'ga' ||\n val === 'release' ||\n val === 'latest' ||\n val === 'sr'\n );\n}\n\nfunction tokenize(versionStr: string, preserveMinorZeroes = false): Token[] {\n let buf: Token[] = [];\n let result: Token[] = [];\n let leadingZero = true;\n iterateTokens(versionStr.toLowerCase(), (token) => {\n if (token.prefix === PREFIX_HYPHEN || token.type === TYPE_QUALIFIER) {\n buf = [];\n }\n buf.push(token);\n if (!isNull(token)) {\n leadingZero = false;\n result = result.concat(buf);\n buf = [];\n } else if (leadingZero || preserveMinorZeroes) {\n result = result.concat(buf);\n buf = [];\n }\n });\n return result;\n}\n\nfunction nullFor(token: Token): Token {\n return token.type === TYPE_NUMBER\n ? {\n prefix: token.prefix,\n type: TYPE_NUMBER,\n val: 0n,\n }\n : {\n prefix: token.prefix,\n type: TYPE_QUALIFIER,\n val: '',\n };\n}\n\nfunction commonOrder(token: Token): number {\n if (token.type === TYPE_QUALIFIER) {\n return 1;\n }\n if (token.prefix === PREFIX_HYPHEN && token.type === TYPE_NUMBER) {\n return 2;\n }\n return 3;\n}\n\nexport const QualifierTypes = {\n Alpha: 1,\n Beta: 2,\n Milestone: 3,\n RC: 4,\n Snapshot: 5,\n Release: 6,\n SP: 7,\n} as const;\n\nfunction isQualifier(token: Token, name: string, shortName: string): boolean {\n if (token.val === name) {\n return true;\n }\n return !!token.isTransition && token.val === shortName;\n}\n\nexport function qualifierType(token: Token): number | null {\n const val = token.val;\n if (isQualifier(token, 'alpha', 'a')) {\n return QualifierTypes.Alpha;\n }\n if (isQualifier(token, 'beta', 'b')) {\n return QualifierTypes.Beta;\n }\n if (isQualifier(token, 'milestone', 'm')) {\n return QualifierTypes.Milestone;\n }\n if (val === 'rc' || val === 'cr' || val === 'preview') {\n return QualifierTypes.RC;\n }\n if (val === 'snapshot' || val === 'snap') {\n return QualifierTypes.Snapshot;\n }\n if (\n val === '' ||\n val === 'final' ||\n val === 'ga' ||\n val === 'release' ||\n val === 'latest' ||\n val === 'sr'\n ) {\n return QualifierTypes.Release;\n }\n if (val === 'sp') {\n return QualifierTypes.SP;\n }\n return null;\n}\n\nfunction qualifierCmp(left: Token, right: Token): number {\n const leftOrder = qualifierType(left);\n const rightOrder = qualifierType(right);\n if (leftOrder && rightOrder) {\n if (leftOrder < rightOrder) {\n return -1;\n }\n if (leftOrder > rightOrder) {\n return 1;\n }\n return 0;\n }\n\n if (leftOrder && leftOrder < QualifierTypes.Release) {\n return -1;\n }\n if (rightOrder && rightOrder < QualifierTypes.Release) {\n return 1;\n }\n\n if (left.val < right.val) {\n return -1;\n }\n if (left.val > right.val) {\n return 1;\n }\n return 0;\n}\n\nfunction tokenCmp(left: Token, right: Token): number {\n const leftOrder = commonOrder(left);\n const rightOrder = commonOrder(right);\n\n if (leftOrder < rightOrder) {\n return -1;\n }\n if (leftOrder > rightOrder) {\n return 1;\n }\n\n if (left.type === TYPE_NUMBER && right.type === TYPE_NUMBER) {\n if (left.val < right.val) {\n return -1;\n }\n if (left.val > right.val) {\n return 1;\n }\n return 0;\n }\n\n return qualifierCmp(left, right);\n}\n\nfunction compare(left: string, right: string): number {\n const leftTokens = tokenize(left);\n const rightTokens = tokenize(right);\n const length = Math.max(leftTokens.length, rightTokens.length);\n for (let idx = 0; idx < length; idx += 1) {\n const leftToken = leftTokens[idx] || nullFor(rightTokens[idx]);\n const rightToken = rightTokens[idx] || nullFor(leftTokens[idx]);\n const cmpResult = tokenCmp(leftToken, rightToken);\n if (cmpResult !== 0) {\n return cmpResult;\n }\n }\n return 0;\n}\n\nfunction isVersion(version: unknown): version is string {\n if (!version || !isString(version)) {\n return false;\n }\n if (!regEx(/^[-.a-z_+0-9]+$/i).test(version)) {\n return false;\n }\n if (regEx(/^[.-]/).test(version)) {\n return false;\n }\n if (regEx(/[.-]$/).test(version)) {\n return false;\n }\n if (['latest', 'release'].includes(version.toLowerCase())) {\n return false;\n }\n const tokens = tokenize(version);\n return !!tokens.length;\n}\n\nconst INCLUDING_POINT = 'INCLUDING_POINT';\nconst EXCLUDING_POINT = 'EXCLUDING_POINT';\n\nfunction parseRange(rangeStr: string): Range[] | null {\n function emptyInterval(): Range {\n return {\n leftType: null,\n leftValue: null,\n leftBracket: null,\n rightType: null,\n rightValue: null,\n rightBracket: null,\n };\n }\n\n const commaSplit = rangeStr.split(regEx(/\\s*,\\s*/));\n let ranges: Range[] | null = [];\n let interval = emptyInterval();\n\n commaSplit.forEach((subStr) => {\n if (!ranges) {\n return;\n }\n if (interval.leftType === null) {\n if (regEx(/^\\[.*]$/).test(subStr)) {\n const ver = subStr.slice(1, -1);\n ranges.push({\n leftType: INCLUDING_POINT,\n leftValue: ver,\n leftBracket: '[',\n rightType: INCLUDING_POINT,\n rightValue: ver,\n rightBracket: ']',\n });\n interval = emptyInterval();\n } else if (subStr.startsWith('[')) {\n const ver = subStr.slice(1);\n interval.leftType = INCLUDING_POINT;\n interval.leftValue = ver;\n interval.leftBracket = '[';\n } else if (subStr.startsWith('(') || subStr.startsWith(']')) {\n const ver = subStr.slice(1);\n interval.leftType = EXCLUDING_POINT;\n interval.leftValue = ver;\n interval.leftBracket = subStr[0];\n } else {\n ranges = null;\n }\n } else if (subStr.endsWith(']')) {\n const ver = subStr.slice(0, -1);\n interval.rightType = INCLUDING_POINT;\n interval.rightValue = ver;\n interval.rightBracket = ']';\n ranges.push(interval);\n interval = emptyInterval();\n } else if (subStr.endsWith(')') || subStr.endsWith('[')) {\n const ver = subStr.slice(0, -1);\n interval.rightType = EXCLUDING_POINT;\n interval.rightValue = ver;\n interval.rightBracket = subStr.endsWith(')') ? ')' : '[';\n ranges.push(interval);\n interval = emptyInterval();\n } else {\n ranges = null;\n }\n });\n\n if (interval.leftType) {\n return null;\n } // something like '[1,2],[3'\n if (!ranges?.length) {\n return null;\n }\n\n const lastIdx = ranges.length - 1;\n let prevValue: string | null = null;\n const result: Range[] = [];\n for (let idx = 0; idx < ranges.length; idx += 1) {\n const range = ranges[idx];\n const { leftType, leftValue, rightType, rightValue } = range;\n\n if (idx === 0 && leftValue === '') {\n if (leftType === EXCLUDING_POINT && isVersion(rightValue)) {\n prevValue = rightValue;\n result.push({ ...range, leftValue: null });\n continue;\n }\n return null;\n }\n if (idx === lastIdx && rightValue === '') {\n if (rightType === EXCLUDING_POINT && isVersion(leftValue)) {\n if (prevValue && compare(prevValue, leftValue) === 1) {\n return null;\n }\n result.push({ ...range, rightValue: null });\n continue;\n }\n return null;\n }\n if (isVersion(leftValue) && isVersion(rightValue)) {\n if (compare(leftValue, rightValue) === 1) {\n return null;\n }\n if (prevValue && compare(prevValue, leftValue) === 1) {\n return null;\n }\n prevValue = rightValue;\n result.push(range);\n continue;\n }\n return null;\n }\n return result;\n}\n\nfunction isValid(str: string): boolean {\n if (!str) {\n return false;\n }\n return isVersion(str) || !!parseRange(str);\n}\n\nfunction rangeToStr(fullRange: Range[] | null): string | null {\n if (fullRange === null) {\n return null;\n }\n\n function valToStr(val: string | null): string {\n return val ?? '';\n }\n\n if (fullRange.length === 1) {\n const { leftBracket, rightBracket, leftValue, rightValue } = fullRange[0];\n if (\n leftValue === rightValue &&\n leftBracket === '[' &&\n rightBracket === ']'\n ) {\n return `[${valToStr(leftValue)}]`;\n }\n }\n\n const intervals = fullRange.map((val) =>\n [\n val.leftBracket,\n valToStr(val.leftValue),\n ',',\n valToStr(val.rightValue),\n val.rightBracket,\n ].join(''),\n );\n return intervals.join(',');\n}\n\nfunction tokensToStr(tokens: Token[]): string {\n let isTransition: boolean | undefined = false;\n return tokens.reduce((result: string, token: Token) => {\n let prefix: string;\n if (token.prefix === PREFIX_DOT) {\n prefix = '.';\n } else if (token.prefix === PREFIX_HYPHEN) {\n prefix = isTransition === true ? '' : '-';\n } else {\n prefix = token.prefix;\n }\n isTransition = token.isTransition;\n return `${result}${prefix}${token.val}`;\n }, '');\n}\n\nfunction coerceRangeValue(prev: string, next: string): string {\n const prevTokens = tokenize(prev, true);\n const nextTokens = tokenize(next, true);\n const resultTokens = nextTokens.slice(0, prevTokens.length);\n const align = Math.max(0, prevTokens.length - nextTokens.length);\n if (align > 0) {\n resultTokens.push(...prevTokens.slice(prevTokens.length - align));\n }\n return tokensToStr(resultTokens);\n}\n\nfunction incrementRangeValue(value: string): string {\n const tokens = tokenize(value);\n const lastToken = tokens.at(-1)!;\n if (isBigint(lastToken.val)) {\n lastToken.val += 1n;\n return coerceRangeValue(value, tokensToStr(tokens));\n }\n return value;\n}\n\nfunction autoExtendMavenRange(\n currentRepresentation: string,\n newValue: string,\n): string | null {\n const range = parseRange(currentRepresentation);\n if (!range) {\n return currentRepresentation;\n }\n function isPoint(vals: Range[]): boolean {\n if (vals.length !== 1) {\n return false;\n }\n const { leftType, leftValue, rightType, rightValue } = vals[0];\n return (\n leftType === 'INCLUDING_POINT' &&\n leftType === rightType &&\n leftValue === rightValue\n );\n }\n if (isPoint(range)) {\n return `[${newValue}]`;\n }\n\n const interval = [...range].reverse().find((elem) => {\n const { rightType, rightValue } = elem;\n if (rightValue === null) {\n return true;\n }\n if (rightType === INCLUDING_POINT && compare(rightValue, newValue) === -1) {\n return true;\n }\n return rightType === EXCLUDING_POINT && compare(rightValue, newValue) !== 1;\n });\n\n if (!interval) {\n return currentRepresentation;\n }\n\n const { leftValue, rightValue } = interval;\n if (\n leftValue !== null &&\n rightValue !== null &&\n incrementRangeValue(leftValue) === rightValue\n ) {\n // if a range was detected where incrementing the lower value once results in the upper value\n // and the new version is outside the range, construct a new range that follows the same semantic\n // [1,2) / 4.3.2 => [4,5)\n //\n // the interval above is only picked when the new value is at or past the\n // upper bound, and here the upper bound is the lower one incremented, so\n // the new value can never sort below the lower bound\n interval.leftValue = coerceRangeValue(leftValue, newValue);\n interval.rightValue = incrementRangeValue(interval.leftValue);\n } else if (\n leftValue !== null &&\n rightValue !== null &&\n incrementRangeValue(leftValue) + ALPHA_SUFFIX === rightValue\n ) {\n // same as last if, but properly considering Maven ordering specification documented at\n // https://maven.apache.org/pom.html#Version_Order_Specification\n // 4-alpha is smaller than 4.0.0 for example\n // while often people that intend to only match version 1.x use [1,2)\n // this is not correct as it matches various 2.x versions, mostly pre-versions\n // so the correct range definition would be [1,2-alpha) as nothing\n // starting with 2 can be lower than 2-alpha in Maven version ordering logic\n //\n // so this if handles the conceptually same case as the last if\n // just for the case when proper Maven ranges are used\n // [1,2-alpha) / 4.3.2 => [4,5-alpha)\n interval.leftValue = coerceRangeValue(leftValue, newValue);\n interval.rightValue =\n incrementRangeValue(interval.leftValue) + ALPHA_SUFFIX;\n } else if (rightValue === null) {\n // an interval never has both bounds open: the parser only nulls the left\n // bound when the right one is a version, and the right one when the left\n // is a version\n interval.leftValue = coerceRangeValue(leftValue!, newValue);\n } else {\n if (interval.rightType === INCLUDING_POINT) {\n const tokens = tokenize(rightValue);\n const lastToken = tokens.at(-1)!;\n if (isBigint(lastToken.val)) {\n interval.rightValue = coerceRangeValue(rightValue, newValue);\n } else {\n interval.rightValue = newValue;\n }\n } else {\n interval.rightValue = incrementRangeValue(\n coerceRangeValue(rightValue, newValue),\n );\n }\n }\n\n return rangeToStr(range);\n}\n\nfunction isSubversion(majorVersion: string, minorVersion: string): boolean {\n const majorTokens = tokenize(majorVersion);\n const minorTokens = tokenize(minorVersion);\n\n let result = true;\n const len = majorTokens.length;\n for (let idx = 0; idx < len; idx += 1) {\n const major = majorTokens[idx];\n const minor = minorTokens[idx] || nullFor(majorTokens[idx]);\n const cmpResult = tokenCmp(major, minor);\n if (cmpResult !== 0) {\n result = false;\n break;\n }\n }\n return result;\n}\n\nexport {\n EXCLUDING_POINT,\n INCLUDING_POINT,\n PREFIX_DOT,\n PREFIX_HYPHEN,\n TYPE_NUMBER,\n TYPE_QUALIFIER,\n autoExtendMavenRange,\n compare,\n isSubversion,\n isValid,\n isVersion,\n isVersion as isSingleVersion,\n parseRange,\n rangeToStr,\n tokenize,\n};\n"],"mappings":"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"}
|
|
@@ -32,7 +32,8 @@ function intersects(range1, range2) {
|
|
|
32
32
|
return semverIntersects(normalizeNpmRange(range1), normalizeNpmRange(range2));
|
|
33
33
|
}
|
|
34
34
|
function isSingleVersion(constraint) {
|
|
35
|
-
|
|
35
|
+
if (isVersion(constraint)) return true;
|
|
36
|
+
return constraint?.startsWith("=") && isVersion(constraint.substring(1).trim());
|
|
36
37
|
}
|
|
37
38
|
const api = {
|
|
38
39
|
equals,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["valid","satisfies"],"sources":["../../../../lib/modules/versioning/npm/index.ts"],"sourcesContent":["import semver from 'semver';\nimport stable from 'semver-stable';\nimport type { RangeStrategy } from '../../../types/versioning.ts';\nimport { normalizeLegacyXRanges } from '../semver/common.ts';\nimport { isBreaking } from '../semver/index.ts';\nimport type { VersioningApi } from '../types.ts';\nimport { getNewValue } from './range.ts';\n\nexport const id = 'npm';\nexport const displayName = 'npm';\nexport const urls = [\n '[Semantic Versioning](https://semver.org/)',\n '[semver npm package](https://www.npmjs.com/package/semver)',\n '[npm - About semantic versioning](https://docs.npmjs.com/about-semantic-versioning)',\n '[npm semver calculator](https://semver.npmjs.com/)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n];\n\nconst {\n compare: sortVersions,\n maxSatisfying,\n minSatisfying,\n major: getMajor,\n minor: getMinor,\n patch: getPatch,\n satisfies,\n valid,\n validRange,\n ltr,\n gt: isGreaterThan,\n eq: equals,\n subset: semverSubset,\n intersects: semverIntersects,\n} = semver;\n\nfunction normalizeNpmRange(range: string): string {\n return normalizeLegacyXRanges(range);\n}\n\n// If this is left as an alias, inputs like \"17.04.0\" throw errors\nexport function isValid(input: string): boolean {\n return !!validRange(normalizeNpmRange(input));\n}\nexport function isVersion(input: string): boolean {\n return !!valid(input);\n}\n\nfunction matches(version: string, range: string): boolean {\n return satisfies(version, normalizeNpmRange(range));\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return maxSatisfying(versions, normalizeNpmRange(range));\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return minSatisfying(versions, normalizeNpmRange(range));\n}\n\nfunction isLessThanRange(version: string, range: string): boolean {\n return ltr(version, normalizeNpmRange(range));\n}\n\nfunction subset(subRange: string, superRange: string): boolean | undefined {\n return semverSubset(\n normalizeNpmRange(subRange),\n normalizeNpmRange(superRange),\n );\n}\n\nfunction intersects(range1: string, range2: string): boolean {\n return semverIntersects(normalizeNpmRange(range1), normalizeNpmRange(range2));\n}\n\nfunction isSingleVersion(constraint: string): boolean {\n
|
|
1
|
+
{"version":3,"file":"index.js","names":["valid","satisfies"],"sources":["../../../../lib/modules/versioning/npm/index.ts"],"sourcesContent":["import semver from 'semver';\nimport stable from 'semver-stable';\nimport type { RangeStrategy } from '../../../types/versioning.ts';\nimport { normalizeLegacyXRanges } from '../semver/common.ts';\nimport { isBreaking } from '../semver/index.ts';\nimport type { VersioningApi } from '../types.ts';\nimport { getNewValue } from './range.ts';\n\nexport const id = 'npm';\nexport const displayName = 'npm';\nexport const urls = [\n '[Semantic Versioning](https://semver.org/)',\n '[semver npm package](https://www.npmjs.com/package/semver)',\n '[npm - About semantic versioning](https://docs.npmjs.com/about-semantic-versioning)',\n '[npm semver calculator](https://semver.npmjs.com/)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n];\n\nconst {\n compare: sortVersions,\n maxSatisfying,\n minSatisfying,\n major: getMajor,\n minor: getMinor,\n patch: getPatch,\n satisfies,\n valid,\n validRange,\n ltr,\n gt: isGreaterThan,\n eq: equals,\n subset: semverSubset,\n intersects: semverIntersects,\n} = semver;\n\nfunction normalizeNpmRange(range: string): string {\n return normalizeLegacyXRanges(range);\n}\n\n// If this is left as an alias, inputs like \"17.04.0\" throw errors\nexport function isValid(input: string): boolean {\n return !!validRange(normalizeNpmRange(input));\n}\nexport function isVersion(input: string): boolean {\n return !!valid(input);\n}\n\nfunction matches(version: string, range: string): boolean {\n return satisfies(version, normalizeNpmRange(range));\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return maxSatisfying(versions, normalizeNpmRange(range));\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return minSatisfying(versions, normalizeNpmRange(range));\n}\n\nfunction isLessThanRange(version: string, range: string): boolean {\n return ltr(version, normalizeNpmRange(range));\n}\n\nfunction subset(subRange: string, superRange: string): boolean | undefined {\n return semverSubset(\n normalizeNpmRange(subRange),\n normalizeNpmRange(superRange),\n );\n}\n\nfunction intersects(range1: string, range2: string): boolean {\n return semverIntersects(normalizeNpmRange(range1), normalizeNpmRange(range2));\n}\n\nfunction isSingleVersion(constraint: string): boolean {\n if (isVersion(constraint)) {\n return true;\n }\n return (\n constraint?.startsWith('=') && isVersion(constraint.substring(1).trim())\n );\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getNewValue,\n getPatch,\n isBreaking,\n isCompatible: isVersion,\n isGreaterThan,\n isLessThanRange,\n isSingleVersion,\n isStable: stable.is,\n isValid,\n isVersion,\n matches,\n getSatisfyingVersion,\n minSatisfyingVersion,\n sortVersions,\n subset,\n intersects,\n};\n\nexport default api;\n"],"mappings":";;;;;AAuBA,MAAM,EACJ,SAAS,cACT,eACA,eACA,OAAO,UACP,OAAO,UACP,OAAO,UACP,WAAA,aACA,OAAA,SACA,YACA,KACA,IAAI,eACJ,IAAI,QACJ,QAAQ,cACR,YAAY,qBACV;AAEJ,SAAS,kBAAkB,OAAuB;CAChD,OAAO,uBAAuB,KAAK;AACrC;AAGA,SAAgB,QAAQ,OAAwB;CAC9C,OAAO,CAAC,CAAC,WAAW,kBAAkB,KAAK,CAAC;AAC9C;AACA,SAAgB,UAAU,OAAwB;CAChD,OAAO,CAAC,CAACA,QAAM,KAAK;AACtB;AAEA,SAAS,QAAQ,SAAiB,OAAwB;CACxD,OAAOC,YAAU,SAAS,kBAAkB,KAAK,CAAC;AACpD;AAEA,SAAS,qBACP,UACA,OACe;CACf,OAAO,cAAc,UAAU,kBAAkB,KAAK,CAAC;AACzD;AAEA,SAAS,qBACP,UACA,OACe;CACf,OAAO,cAAc,UAAU,kBAAkB,KAAK,CAAC;AACzD;AAEA,SAAS,gBAAgB,SAAiB,OAAwB;CAChE,OAAO,IAAI,SAAS,kBAAkB,KAAK,CAAC;AAC9C;AAEA,SAAS,OAAO,UAAkB,YAAyC;CACzE,OAAO,aACL,kBAAkB,QAAQ,GAC1B,kBAAkB,UAAU,CAC9B;AACF;AAEA,SAAS,WAAW,QAAgB,QAAyB;CAC3D,OAAO,iBAAiB,kBAAkB,MAAM,GAAG,kBAAkB,MAAM,CAAC;AAC9E;AAEA,SAAS,gBAAgB,YAA6B;CACpD,IAAI,UAAU,UAAU,GACtB,OAAO;CAET,OACE,YAAY,WAAW,GAAG,KAAK,UAAU,WAAW,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;AAE3E;AAEA,MAAa,MAAqB;CAChC;CACA;CACA;CACA;CACA;CACA;CACA,cAAc;CACd;CACA;CACA;CACA,UAAU,OAAO;CACjB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"range.js","names":["major","minor","satisfies"],"sources":["../../../../lib/modules/versioning/npm/range.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport semver from 'semver';\nimport semverUtils from 'semver-utils';\nimport { logger } from '../../../logger/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { isSemVerXRange, normalizeLegacyXRanges } from '../semver/common.ts';\nimport type { NewValueConfig } from '../types.ts';\n\nconst {\n inc: increment,\n valid: isVersion,\n major,\n minor,\n patch,\n prerelease,\n satisfies,\n} = semver;\n\nfunction replaceCaretValue(oldValue: string, newValue: string): string {\n const toVersionMajor = major(newValue);\n const toVersionMinor = minor(newValue);\n const toVersionPatch = patch(newValue);\n\n const currentMajor = major(oldValue);\n const currentMinor = minor(oldValue);\n const currentPatch = patch(oldValue);\n\n const oldTuple = [currentMajor, currentMinor, currentPatch];\n const newTuple = [toVersionMajor, toVersionMinor, toVersionPatch];\n const resultTuple = [];\n\n let leadingZero = true;\n let needReplace = false;\n for (let idx = 0; idx < 3; idx += 1) {\n const oldVal = oldTuple[idx];\n const newVal = newTuple[idx];\n\n let leadingDigit = false;\n if ((oldVal !== 0 || newVal !== 0) && leadingZero) {\n leadingZero = false;\n leadingDigit = true;\n }\n\n if (leadingDigit && newVal > oldVal) {\n needReplace = true;\n }\n\n if (!needReplace && newVal < oldVal) {\n return newValue;\n }\n\n resultTuple.push(leadingDigit ? newVal : 0);\n }\n\n return needReplace ? resultTuple.join('.') : oldValue;\n}\n\nfunction stripV(value: string): string {\n return value.replace(regEx(/^v/), '');\n}\n\nfunction satisfiesRange(version: string, range: string): boolean {\n return satisfies(version, normalizeLegacyXRanges(range));\n}\n\n// TODO: #22198\nexport function getNewValue({\n currentValue,\n rangeStrategy,\n currentVersion,\n newVersion,\n}: NewValueConfig): string | null {\n if (rangeStrategy !== 'update-lockfile' && isSemVerXRange(currentValue)) {\n return null;\n }\n if (isVersion(currentValue)) {\n return newVersion;\n }\n if (rangeStrategy === 'update-lockfile') {\n if (satisfiesRange(newVersion, currentValue)) {\n return currentValue;\n }\n return getNewValue({\n currentValue,\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n }\n const parsedRange = semverUtils.parseRange(currentValue);\n const element = parsedRange.at(-1)!;\n if (rangeStrategy === 'widen') {\n if (satisfiesRange(newVersion, currentValue)) {\n return currentValue;\n }\n const newValue = getNewValue({\n currentValue,\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n if (element.operator?.startsWith('<')) {\n // TODO fix this\n const splitCurrent = currentValue.split(element.operator);\n splitCurrent.pop();\n // TODO: types (#22198)\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 // TODO: types (#22198)\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 // TODO: types (#22198)\n return `${currentValue} || ${newValue!}`;\n }\n const toVersionMajor = major(newVersion);\n const toVersionMinor = minor(newVersion);\n const toVersionPatch = patch(newVersion);\n const toNewVersion = prerelease(newVersion);\n const suffix = toNewVersion ? `-${toNewVersion[0]}` : '';\n // Simple range\n if (rangeStrategy === 'bump') {\n if (parsedRange.length === 1) {\n if (!element.operator) {\n return stripV(newVersion);\n }\n if (element.operator === '^') {\n return `^${stripV(newVersion)}`;\n }\n if (element.operator === '~') {\n return `~${stripV(newVersion)}`;\n }\n if (element.operator === '=') {\n return `=${stripV(newVersion)}`;\n }\n if (element.operator === '>=') {\n return currentValue.includes('>= ')\n ? `>= ${stripV(newVersion)}`\n : `>=${stripV(newVersion)}`;\n }\n if (element.operator.startsWith('<')) {\n return currentValue;\n }\n } else {\n return semverUtils\n .parseRange(currentValue)\n .map((x) => x.semver)\n .filter(isString)\n .map((subRange) => {\n const bumpedSubRange = getNewValue({\n currentValue: subRange,\n rangeStrategy: 'bump',\n currentVersion,\n newVersion,\n });\n if (bumpedSubRange && satisfiesRange(newVersion, bumpedSubRange)) {\n return bumpedSubRange;\n }\n\n return getNewValue({\n currentValue: subRange,\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n })\n .filter((x) => x !== null && x !== '')\n .join(' ');\n }\n logger.debug(\n `Unsupported range type for rangeStrategy=bump: ${currentValue}`,\n );\n return null;\n }\n if (element.operator === '~>') {\n return `~> ${toVersionMajor}.${toVersionMinor}.0`;\n }\n if (element.operator === '^') {\n if (suffix.length || !currentVersion) {\n return `^${toVersionMajor}.${toVersionMinor}.${toVersionPatch}${suffix}`;\n }\n return `^${replaceCaretValue(currentVersion, newVersion)}`;\n }\n if (element.operator === '=') {\n return `=${stripV(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 = `<=${stripV(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 === '<') {\n let res;\n if (currentValue.endsWith('.0.0')) {\n const newMajor = toVersionMajor + 1;\n res = `<${newMajor}.0.0`;\n } else if (currentValue.endsWith('.0')) {\n const newMinor = toVersionMinor + 1;\n res = `<${toVersionMajor}.${newMinor}${element.patch ? '.0' : ''}`;\n } else if (element.patch) {\n // TODO: types (#22198)\n res = `<${increment(newVersion, 'patch')!}`;\n } else if (element.minor) {\n res = `<${toVersionMajor}.${toVersionMinor + 1}`;\n } else {\n res = `<${toVersionMajor + 1}`;\n }\n if (currentValue.includes('< ')) {\n res = res.replace(regEx(/</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 `${toVersionMajor}.${toVersionMinor}`;\n }\n return `${toVersionMajor}`;\n }\n return newVersion;\n}\n"],"mappings":";;;;;;;AAQA,MAAM,EACJ,KAAK,WACL,OAAO,WACP,OAAA,SACA,OAAA,SACA,OACA,YACA,WAAA,gBACE;AAEJ,SAAS,kBAAkB,UAAkB,UAA0B;CACrE,MAAM,iBAAiBA,QAAM,QAAQ;CACrC,MAAM,iBAAiBC,QAAM,QAAQ;CACrC,MAAM,iBAAiB,MAAM,QAAQ;CAMrC,MAAM,WAAW;EAJID,QAAM,QAIE;EAHRC,QAAM,QAGgB;EAFtB,MAAM,QAE8B;CAAC;CAC1D,MAAM,WAAW;EAAC;EAAgB;EAAgB;CAAc;CAChE,MAAM,cAAc,CAAC;CAErB,IAAI,cAAc;CAClB,IAAI,cAAc;CAClB,KAAK,IAAI,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG;EACnC,MAAM,SAAS,SAAS;EACxB,MAAM,SAAS,SAAS;EAExB,IAAI,eAAe;EACnB,KAAK,WAAW,KAAK,WAAW,MAAM,aAAa;GACjD,cAAc;GACd,eAAe;EACjB;EAEA,IAAI,gBAAgB,SAAS,QAC3B,cAAc;EAGhB,IAAI,CAAC,eAAe,SAAS,QAC3B,OAAO;EAGT,YAAY,KAAK,eAAe,SAAS,CAAC;CAC5C;CAEA,OAAO,cAAc,YAAY,KAAK,GAAG,IAAI;AAC/C;AAEA,SAAS,OAAO,OAAuB;CACrC,OAAO,MAAM,QAAQ,MAAM,IAAI,GAAG,EAAE;AACtC;AAEA,SAAS,eAAe,SAAiB,OAAwB;CAC/D,OAAOC,YAAU,SAAS,uBAAuB,KAAK,CAAC;AACzD;AAGA,SAAgB,YAAY,EAC1B,cACA,eACA,gBACA,cACgC;CAChC,IAAI,kBAAkB,qBAAqB,eAAe,YAAY,GACpE,OAAO;CAET,IAAI,UAAU,YAAY,GACxB,OAAO;CAET,IAAI,kBAAkB,mBAAmB;EACvC,IAAI,eAAe,YAAY,YAAY,GACzC,OAAO;EAET,OAAO,YAAY;GACjB;GACA,eAAe;GACf;GACA;EACF,CAAC;CACH;CACA,MAAM,cAAc,YAAY,WAAW,YAAY;CACvD,MAAM,UAAU,YAAY,GAAG,EAAE;CACjC,IAAI,kBAAkB,SAAS;EAC7B,IAAI,eAAe,YAAY,YAAY,GACzC,OAAO;EAET,MAAM,WAAW,YAAY;GAC3B;GACA,eAAe;GACf;GACA;EACF,CAAC;EACD,IAAI,QAAQ,UAAU,WAAW,GAAG,GAAG;GAErC,MAAM,eAAe,aAAa,MAAM,QAAQ,QAAQ;GACxD,aAAa,IAAI;GAEjB,OAAO,GAAG,aAAa,KAAK,QAAQ,QAAQ,IAAI;EAClD;EACA,IAAI,YAAY,SAAS,GAAG;GAE1B,IADwB,YAAY,GAAG,EACrB,CAAC,CAAC,aAAa,KAAK;IACpC,MAAM,eAAe,aAAa,MAAM,GAAG;IAC3C,aAAa,IAAI;IAEjB,OAAO,GAAG,aAAa,KAAK,GAAG,EAAE,IAAI;GACvC;GACA,IAAI,QAAQ,UAAU,WAAW,GAAG,GAAG;IACrC,OAAO,KAAK,yDAAyD;IACrE,OAAO;GACT;EACF;EAEA,OAAO,GAAG,aAAa,MAAM;CAC/B;CACA,MAAM,iBAAiBF,QAAM,UAAU;CACvC,MAAM,iBAAiBC,QAAM,UAAU;CACvC,MAAM,iBAAiB,MAAM,UAAU;CACvC,MAAM,eAAe,WAAW,UAAU;CAC1C,MAAM,SAAS,eAAe,IAAI,aAAa,OAAO;CAEtD,IAAI,kBAAkB,QAAQ;EAC5B,IAAI,YAAY,WAAW,GAAG;GAC5B,IAAI,CAAC,QAAQ,UACX,OAAO,OAAO,UAAU;GAE1B,IAAI,QAAQ,aAAa,KACvB,OAAO,IAAI,OAAO,UAAU;GAE9B,IAAI,QAAQ,aAAa,KACvB,OAAO,IAAI,OAAO,UAAU;GAE9B,IAAI,QAAQ,aAAa,KACvB,OAAO,IAAI,OAAO,UAAU;GAE9B,IAAI,QAAQ,aAAa,MACvB,OAAO,aAAa,SAAS,KAAK,IAC9B,MAAM,OAAO,UAAU,MACvB,KAAK,OAAO,UAAU;GAE5B,IAAI,QAAQ,SAAS,WAAW,GAAG,GACjC,OAAO;EAEX,OACE,OAAO,YACJ,WAAW,YAAY,CAAC,CACxB,KAAK,MAAM,EAAE,MAAM,CAAC,CACpB,OAAO,QAAQ,CAAC,CAChB,KAAK,aAAa;GACjB,MAAM,iBAAiB,YAAY;IACjC,cAAc;IACd,eAAe;IACf;IACA;GACF,CAAC;GACD,IAAI,kBAAkB,eAAe,YAAY,cAAc,GAC7D,OAAO;GAGT,OAAO,YAAY;IACjB,cAAc;IACd,eAAe;IACf;IACA;GACF,CAAC;EACH,CAAC,CAAC,CACD,QAAQ,MAAM,MAAM,QAAQ,MAAM,EAAE,CAAC,CACrC,KAAK,GAAG;EAEb,OAAO,MACL,kDAAkD,cACpD;EACA,OAAO;CACT;CACA,IAAI,QAAQ,aAAa,MACvB,OAAO,MAAM,eAAe,GAAG,eAAe;CAEhD,IAAI,QAAQ,aAAa,KAAK;EAC5B,IAAI,OAAO,UAAU,CAAC,gBACpB,OAAO,IAAI,eAAe,GAAG,eAAe,GAAG,iBAAiB;EAElE,OAAO,IAAI,kBAAkB,gBAAgB,UAAU;CACzD;CACA,IAAI,QAAQ,aAAa,KACvB,OAAO,IAAI,OAAO,UAAU;CAE9B,IAAI,QAAQ,aAAa,KAAK;EAC5B,IAAI,OAAO,QACT,OAAO,IAAI,eAAe,GAAG,eAAe,GAAG,iBAAiB;EAElE,OAAO,IAAI,eAAe,GAAG,eAAe;CAC9C;CACA,IAAI,QAAQ,aAAa,MAAM;EAC7B,IAAI;EACJ,IAAI,CAAC,CAAC,QAAQ,SAAS,OAAO,QAC5B,MAAM,KAAK,OAAO,UAAU;OACvB,IAAI,QAAQ,OACjB,MAAM,KAAK,eAAe,GAAG;OAE7B,MAAM,KAAK;EAEb,IAAI,aAAa,SAAS,KAAK,GAC7B,MAAM,IAAI,QAAQ,MAAM,KAAK;EAE/B,OAAO;CACT;CACA,IAAI,QAAQ,aAAa,KAAK;EAC5B,IAAI;EACJ,IAAI,aAAa,SAAS,MAAM,GAE9B,MAAM,IADW,iBAAiB,EACf;OACd,IAAI,aAAa,SAAS,IAAI,GAEnC,MAAM,IAAI,eAAe,GADR,iBAAiB,IACK,QAAQ,QAAQ,OAAO;OACzD,IAAI,QAAQ,OAEjB,MAAM,IAAI,UAAU,YAAY,OAAO;OAClC,IAAI,QAAQ,OACjB,MAAM,IAAI,eAAe,GAAG,iBAAiB;OAE7C,MAAM,IAAI,iBAAiB;EAE7B,IAAI,aAAa,SAAS,IAAI,GAC5B,MAAM,IAAI,QAAQ,MAAM,IAAI,GAAG,IAAI;EAErC,OAAO;CACT;CACA,IAAI,CAAC,QAAQ,UAAU;EACrB,IAAI,QAAQ,OAAO;GACjB,IAAI,QAAQ,UAAU,KACpB,OAAO,GAAG,eAAe;GAE3B,IAAI,QAAQ,UAAU,KACpB,OAAO,GAAG,eAAe;GAE3B,IAAI,QAAQ,UAAU,KACpB,OAAO,GAAG,eAAe,GAAG,eAAe;GAE7C,IAAI,QAAQ,UAAU,KACpB,OAAO,GAAG,eAAe,GAAG,eAAe;GAE7C,OAAO,GAAG,eAAe,GAAG;EAC9B;EACA,OAAO,GAAG;CACZ;CACA,OAAO;AACT"}
|
|
1
|
+
{"version":3,"file":"range.js","names":["major","minor","satisfies"],"sources":["../../../../lib/modules/versioning/npm/range.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport semver from 'semver';\nimport semverUtils from 'semver-utils';\nimport { logger } from '../../../logger/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { isSemVerXRange, normalizeLegacyXRanges } from '../semver/common.ts';\nimport type { NewValueConfig } from '../types.ts';\n\nconst {\n inc: increment,\n valid: isVersion,\n major,\n minor,\n patch,\n prerelease,\n satisfies,\n} = semver;\n\nfunction replaceCaretValue(oldValue: string, newValue: string): string {\n const toVersionMajor = major(newValue);\n const toVersionMinor = minor(newValue);\n const toVersionPatch = patch(newValue);\n\n const currentMajor = major(oldValue);\n const currentMinor = minor(oldValue);\n const currentPatch = patch(oldValue);\n\n const oldTuple = [currentMajor, currentMinor, currentPatch];\n const newTuple = [toVersionMajor, toVersionMinor, toVersionPatch];\n const resultTuple = [];\n\n let leadingZero = true;\n let needReplace = false;\n for (let idx = 0; idx < 3; idx += 1) {\n const oldVal = oldTuple[idx];\n const newVal = newTuple[idx];\n\n let leadingDigit = false;\n const isNonZero = oldVal !== 0 || newVal !== 0;\n if (isNonZero && leadingZero) {\n leadingZero = false;\n leadingDigit = true;\n }\n\n if (leadingDigit && newVal > oldVal) {\n needReplace = true;\n }\n\n if (!needReplace && newVal < oldVal) {\n return newValue;\n }\n\n resultTuple.push(leadingDigit ? newVal : 0);\n }\n\n return needReplace ? resultTuple.join('.') : oldValue;\n}\n\nfunction stripV(value: string): string {\n return value.replace(regEx(/^v/), '');\n}\n\nfunction satisfiesRange(version: string, range: string): boolean {\n return satisfies(version, normalizeLegacyXRanges(range));\n}\n\n// TODO: #22198\nexport function getNewValue({\n currentValue,\n rangeStrategy,\n currentVersion,\n newVersion,\n}: NewValueConfig): string | null {\n if (rangeStrategy !== 'update-lockfile' && isSemVerXRange(currentValue)) {\n return null;\n }\n if (isVersion(currentValue)) {\n return newVersion;\n }\n if (rangeStrategy === 'update-lockfile') {\n if (satisfiesRange(newVersion, currentValue)) {\n return currentValue;\n }\n return getNewValue({\n currentValue,\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n }\n const parsedRange = semverUtils.parseRange(currentValue);\n const element = parsedRange.at(-1)!;\n if (rangeStrategy === 'widen') {\n if (satisfiesRange(newVersion, currentValue)) {\n return currentValue;\n }\n const newValue = getNewValue({\n currentValue,\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n if (element.operator?.startsWith('<')) {\n // TODO fix this\n const splitCurrent = currentValue.split(element.operator);\n splitCurrent.pop();\n // TODO: types (#22198)\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 // TODO: types (#22198)\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 // TODO: types (#22198)\n return `${currentValue} || ${newValue!}`;\n }\n const toVersionMajor = major(newVersion);\n const toVersionMinor = minor(newVersion);\n const toVersionPatch = patch(newVersion);\n const toNewVersion = prerelease(newVersion);\n const suffix = toNewVersion ? `-${toNewVersion[0]}` : '';\n // Simple range\n if (rangeStrategy === 'bump') {\n if (parsedRange.length === 1) {\n if (!element.operator) {\n return stripV(newVersion);\n }\n if (element.operator === '^') {\n return `^${stripV(newVersion)}`;\n }\n if (element.operator === '~') {\n return `~${stripV(newVersion)}`;\n }\n if (element.operator === '=') {\n return `=${stripV(newVersion)}`;\n }\n if (element.operator === '>=') {\n return currentValue.includes('>= ')\n ? `>= ${stripV(newVersion)}`\n : `>=${stripV(newVersion)}`;\n }\n if (element.operator.startsWith('<')) {\n return currentValue;\n }\n } else {\n return semverUtils\n .parseRange(currentValue)\n .map((x) => x.semver)\n .filter(isString)\n .map((subRange) => {\n const bumpedSubRange = getNewValue({\n currentValue: subRange,\n rangeStrategy: 'bump',\n currentVersion,\n newVersion,\n });\n if (bumpedSubRange && satisfiesRange(newVersion, bumpedSubRange)) {\n return bumpedSubRange;\n }\n\n return getNewValue({\n currentValue: subRange,\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n })\n .filter((x) => x !== null && x !== '')\n .join(' ');\n }\n logger.debug(\n `Unsupported range type for rangeStrategy=bump: ${currentValue}`,\n );\n return null;\n }\n if (element.operator === '~>') {\n return `~> ${toVersionMajor}.${toVersionMinor}.0`;\n }\n if (element.operator === '^') {\n if (suffix.length || !currentVersion) {\n return `^${toVersionMajor}.${toVersionMinor}.${toVersionPatch}${suffix}`;\n }\n return `^${replaceCaretValue(currentVersion, newVersion)}`;\n }\n if (element.operator === '=') {\n return `=${stripV(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 = `<=${stripV(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 === '<') {\n let res;\n if (currentValue.endsWith('.0.0')) {\n const newMajor = toVersionMajor + 1;\n res = `<${newMajor}.0.0`;\n } else if (currentValue.endsWith('.0')) {\n const newMinor = toVersionMinor + 1;\n res = `<${toVersionMajor}.${newMinor}${element.patch ? '.0' : ''}`;\n } else if (element.patch) {\n // TODO: types (#22198)\n res = `<${increment(newVersion, 'patch')!}`;\n } else if (element.minor) {\n res = `<${toVersionMajor}.${toVersionMinor + 1}`;\n } else {\n res = `<${toVersionMajor + 1}`;\n }\n if (currentValue.includes('< ')) {\n res = res.replace(regEx(/</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 `${toVersionMajor}.${toVersionMinor}`;\n }\n return `${toVersionMajor}`;\n }\n return newVersion;\n}\n"],"mappings":"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"}
|
|
@@ -126,7 +126,8 @@ function pessimisticWithFloor(range, v) {
|
|
|
126
126
|
}
|
|
127
127
|
function replaceRange(range, v) {
|
|
128
128
|
const [first, second] = range.constraints;
|
|
129
|
-
|
|
129
|
+
const hasFloor = second?.operator === ">" || second?.operator === ">=";
|
|
130
|
+
if (first.operator === "~>" && hasFloor) return pessimisticWithFloor(range, v);
|
|
130
131
|
return {
|
|
131
132
|
...range,
|
|
132
133
|
constraints: range.constraints.map((c) => replaceConstraint(c, v))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["matchesRange"],"sources":["../../../../lib/modules/versioning/paket/index.ts"],"sourcesContent":["import type { RangeStrategy } from '../../../types/versioning.ts';\nimport { parseVersion } from '../nuget/parser.ts';\nimport type { NugetVersion } from '../nuget/types.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\nimport {\n adaptToPrecision,\n bumpAtPrecision,\n ensurePrereleaseMatches,\n intervalOf,\n isLessThanLowerBound,\n matches as matchesRange,\n parseRange,\n rangeToString,\n releaseParts,\n twiddle,\n} from './range.ts';\nimport type { PaketConstraint, PaketRange } from './types.ts';\nimport { compare, sameReleaseParts } from './version.ts';\n\nexport const id = 'paket';\nexport const displayName = 'Paket';\nexport const urls = [\n '[Paket version constraints](https://fsprojects.github.io/Paket/nuget-dependencies.html#Version-constraints)',\n '[NuGet package versioning](https://learn.microsoft.com/nuget/concepts/package-versioning)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n 'update-lockfile',\n];\n\nfunction isVersion(input: string | undefined | null): boolean {\n return !!input && parseVersion(input) !== null;\n}\n\nfunction isValid(input: string): boolean {\n return parseRange(input) !== null;\n}\n\nfunction isSingleVersionRange(range: PaketRange): boolean {\n if (range.constraints.length !== 1 || range.prereleaseTags.length > 0) {\n return false;\n }\n\n const { operator } = range.constraints[0];\n return operator === '' || operator === '=' || operator === '==';\n}\n\nfunction isSingleVersion(input: string): boolean {\n const range = parseRange(input);\n return !!range && isSingleVersionRange(range);\n}\n\nfunction isStable(input: string): boolean {\n const version = parseVersion(input);\n if (version) {\n return !version.prerelease;\n }\n\n const range = parseRange(input);\n return (\n !!range &&\n isSingleVersionRange(range) &&\n !range.constraints[0].version.prerelease\n );\n}\n\nfunction isCompatible(version: string): boolean {\n return isVersion(version);\n}\n\nfunction getMajor(version: string): number | null {\n return parseVersion(version)?.major ?? null;\n}\n\nfunction getMinor(version: string): number | null {\n return parseVersion(version)?.minor ?? null;\n}\n\nfunction getPatch(version: string): number | null {\n return parseVersion(version)?.patch ?? null;\n}\n\nfunction compareVersions(version: string, other: string): number | null {\n const x = parseVersion(version);\n const y = parseVersion(other);\n return x && y ? compare(x, y) : null;\n}\n\nfunction equals(version: string, other: string): boolean {\n return compareVersions(version, other) === 0;\n}\n\nfunction isGreaterThan(version: string, other: string): boolean {\n const cmp = compareVersions(version, other);\n return cmp !== null && cmp > 0;\n}\n\nfunction sortVersions(version: string, other: string): number {\n return compareVersions(version, other) ?? 0;\n}\n\nfunction matches(version: string, range: string): boolean {\n const v = parseVersion(version);\n const r = parseRange(range);\n return !!v && !!r && matchesRange(v, r);\n}\n\nfunction isLessThanRange(version: string, range: string): boolean {\n const v = parseVersion(version);\n const r = parseRange(range);\n return !!v && !!r && isLessThanLowerBound(v, r);\n}\n\nfunction satisfyingVersions(versions: string[], range: string): string[] {\n return versions.filter((v) => matches(v, range)).sort(sortVersions);\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return satisfyingVersions(versions, range).pop() ?? null;\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return satisfyingVersions(versions, range).shift() ?? null;\n}\n\nfunction getPinnedValue(newVersion: string): string {\n return newVersion;\n}\n\nfunction replaceConstraint(\n constraint: PaketConstraint,\n v: NugetVersion,\n): PaketConstraint {\n const { operator, version } = constraint;\n switch (operator) {\n case '':\n case '=':\n case '==':\n return { operator, version: v };\n case '>':\n case '>=':\n return constraint;\n case '<=':\n return compare(v, version) > 0 ? { operator, version: v } : constraint;\n case '<':\n return compare(v, version) >= 0 || sameReleaseParts(v, version)\n ? {\n operator,\n version: bumpAtPrecision(v, releaseParts(version).length),\n }\n : constraint;\n case '~>': {\n const cap = twiddle(version);\n return compare(v, cap) >= 0 || sameReleaseParts(v, cap)\n ? {\n operator,\n version: adaptToPrecision(v, releaseParts(version).length),\n }\n : constraint;\n }\n }\n}\n\n/**\n * Rewrite `~> band` optionally followed by a `>=`/`>` floor: the band follows\n * the new version at its old precision, and the floor sticks to the exact new\n * version unless it becomes redundant.\n */\nfunction pessimisticWithFloor(range: PaketRange, v: NugetVersion): PaketRange {\n const [pessimistic] = range.constraints;\n const band = adaptToPrecision(v, releaseParts(pessimistic.version).length);\n const constraints: PaketConstraint[] =\n compare(band, v) === 0\n ? [{ operator: '~>', version: band }]\n : [\n { operator: '~>', version: band },\n { operator: '>=', version: v },\n ];\n return { ...range, constraints };\n}\n\nfunction replaceRange(range: PaketRange, v: NugetVersion): PaketRange {\n const [first, second] = range.constraints;\n if (\n first.operator === '~>' &&\n (second?.operator === '>' || second?.operator === '>=')\n ) {\n return pessimisticWithFloor(range, v);\n }\n\n return {\n ...range,\n constraints: range.constraints.map((c) => replaceConstraint(c, v)),\n };\n}\n\nfunction bumpConstraint(\n constraint: PaketConstraint,\n v: NugetVersion,\n): PaketConstraint {\n const { operator, version } = constraint;\n switch (operator) {\n case '>=':\n return compare(v, version) > 0 ? { operator, version: v } : constraint;\n case '>':\n // the lower bound guard in `getNewValue` ensures `v` is above `version`\n return { operator: '>=', version: v };\n case '~>': {\n const adapted = adaptToPrecision(v, releaseParts(version).length);\n return compare(adapted, version) > 0\n ? { operator, version: adapted }\n : constraint;\n }\n default:\n return replaceConstraint(constraint, v);\n }\n}\n\nfunction bumpRange(range: PaketRange, v: NugetVersion): PaketRange {\n const [first, second] = range.constraints;\n if (\n first.operator === '~>' &&\n second?.operator !== '<' &&\n second?.operator !== '<='\n ) {\n return pessimisticWithFloor(range, v);\n }\n\n return {\n ...range,\n constraints: range.constraints.map((c) => bumpConstraint(c, v)),\n };\n}\n\nfunction widenRange(range: PaketRange, v: NugetVersion): PaketRange {\n const interval = intervalOf(range.constraints);\n const [first] = range.constraints;\n\n if (interval.kind !== 'range' || first.operator !== '~>') {\n return {\n ...range,\n constraints: range.constraints.map((c) => replaceConstraint(c, v)),\n };\n }\n\n const { from, fromInclusive, to, toInclusive } = interval;\n const upperViolated = toInclusive\n ? compare(v, to) > 0\n : compare(v, to) >= 0 || sameReleaseParts(v, to);\n if (!upperViolated) {\n return range;\n }\n\n // The pessimistic operator acts as both bounds, so decompose it into\n // explicit bounds to widen upwards while keeping the lower bound.\n const lower: PaketConstraint = {\n operator: fromInclusive ? '>=' : '>',\n version: from,\n };\n const upper: PaketConstraint = toInclusive\n ? { operator: '<=', version: v }\n : { operator: '<', version: bumpAtPrecision(v, releaseParts(to).length) };\n return { ...range, constraints: [lower, upper] };\n}\n\nfunction getNewValue({\n currentValue,\n rangeStrategy,\n newVersion,\n}: NewValueConfig): string | null {\n const v = parseVersion(newVersion);\n if (!v) {\n return null;\n }\n\n if (isVersion(currentValue)) {\n return newVersion;\n }\n\n const range = parseRange(currentValue);\n if (!range) {\n return null;\n }\n\n if (rangeStrategy === 'pin') {\n return `${range.strategy ?? ''}${newVersion}`;\n }\n\n if (isLessThanLowerBound(v, range)) {\n return currentValue;\n }\n\n let result: PaketRange;\n if (rangeStrategy === 'bump') {\n result = bumpRange(range, v);\n } else if (matchesRange(v, range)) {\n return currentValue;\n } else if (rangeStrategy === 'widen') {\n result = widenRange(range, v);\n } else {\n result = replaceRange(range, v);\n }\n\n const newValue = rangeToString(ensurePrereleaseMatches(result, v));\n return newValue === rangeToString(range) ? currentValue : newValue;\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n getNewValue,\n getPinnedValue,\n getSatisfyingVersion,\n minSatisfyingVersion,\n isCompatible,\n isGreaterThan,\n isLessThanRange,\n isSingleVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n sortVersions,\n};\n\nexport default api;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["matchesRange"],"sources":["../../../../lib/modules/versioning/paket/index.ts"],"sourcesContent":["import type { RangeStrategy } from '../../../types/versioning.ts';\nimport { parseVersion } from '../nuget/parser.ts';\nimport type { NugetVersion } from '../nuget/types.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\nimport {\n adaptToPrecision,\n bumpAtPrecision,\n ensurePrereleaseMatches,\n intervalOf,\n isLessThanLowerBound,\n matches as matchesRange,\n parseRange,\n rangeToString,\n releaseParts,\n twiddle,\n} from './range.ts';\nimport type { PaketConstraint, PaketRange } from './types.ts';\nimport { compare, sameReleaseParts } from './version.ts';\n\nexport const id = 'paket';\nexport const displayName = 'Paket';\nexport const urls = [\n '[Paket version constraints](https://fsprojects.github.io/Paket/nuget-dependencies.html#Version-constraints)',\n '[NuGet package versioning](https://learn.microsoft.com/nuget/concepts/package-versioning)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n 'update-lockfile',\n];\n\nfunction isVersion(input: string | undefined | null): boolean {\n return !!input && parseVersion(input) !== null;\n}\n\nfunction isValid(input: string): boolean {\n return parseRange(input) !== null;\n}\n\nfunction isSingleVersionRange(range: PaketRange): boolean {\n if (range.constraints.length !== 1 || range.prereleaseTags.length > 0) {\n return false;\n }\n\n const { operator } = range.constraints[0];\n return operator === '' || operator === '=' || operator === '==';\n}\n\nfunction isSingleVersion(input: string): boolean {\n const range = parseRange(input);\n return !!range && isSingleVersionRange(range);\n}\n\nfunction isStable(input: string): boolean {\n const version = parseVersion(input);\n if (version) {\n return !version.prerelease;\n }\n\n const range = parseRange(input);\n return (\n !!range &&\n isSingleVersionRange(range) &&\n !range.constraints[0].version.prerelease\n );\n}\n\nfunction isCompatible(version: string): boolean {\n return isVersion(version);\n}\n\nfunction getMajor(version: string): number | null {\n return parseVersion(version)?.major ?? null;\n}\n\nfunction getMinor(version: string): number | null {\n return parseVersion(version)?.minor ?? null;\n}\n\nfunction getPatch(version: string): number | null {\n return parseVersion(version)?.patch ?? null;\n}\n\nfunction compareVersions(version: string, other: string): number | null {\n const x = parseVersion(version);\n const y = parseVersion(other);\n return x && y ? compare(x, y) : null;\n}\n\nfunction equals(version: string, other: string): boolean {\n return compareVersions(version, other) === 0;\n}\n\nfunction isGreaterThan(version: string, other: string): boolean {\n const cmp = compareVersions(version, other);\n return cmp !== null && cmp > 0;\n}\n\nfunction sortVersions(version: string, other: string): number {\n return compareVersions(version, other) ?? 0;\n}\n\nfunction matches(version: string, range: string): boolean {\n const v = parseVersion(version);\n const r = parseRange(range);\n return !!v && !!r && matchesRange(v, r);\n}\n\nfunction isLessThanRange(version: string, range: string): boolean {\n const v = parseVersion(version);\n const r = parseRange(range);\n return !!v && !!r && isLessThanLowerBound(v, r);\n}\n\nfunction satisfyingVersions(versions: string[], range: string): string[] {\n return versions.filter((v) => matches(v, range)).sort(sortVersions);\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return satisfyingVersions(versions, range).pop() ?? null;\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return satisfyingVersions(versions, range).shift() ?? null;\n}\n\nfunction getPinnedValue(newVersion: string): string {\n return newVersion;\n}\n\nfunction replaceConstraint(\n constraint: PaketConstraint,\n v: NugetVersion,\n): PaketConstraint {\n const { operator, version } = constraint;\n switch (operator) {\n case '':\n case '=':\n case '==':\n return { operator, version: v };\n case '>':\n case '>=':\n return constraint;\n case '<=':\n return compare(v, version) > 0 ? { operator, version: v } : constraint;\n case '<':\n return compare(v, version) >= 0 || sameReleaseParts(v, version)\n ? {\n operator,\n version: bumpAtPrecision(v, releaseParts(version).length),\n }\n : constraint;\n case '~>': {\n const cap = twiddle(version);\n return compare(v, cap) >= 0 || sameReleaseParts(v, cap)\n ? {\n operator,\n version: adaptToPrecision(v, releaseParts(version).length),\n }\n : constraint;\n }\n }\n}\n\n/**\n * Rewrite `~> band` optionally followed by a `>=`/`>` floor: the band follows\n * the new version at its old precision, and the floor sticks to the exact new\n * version unless it becomes redundant.\n */\nfunction pessimisticWithFloor(range: PaketRange, v: NugetVersion): PaketRange {\n const [pessimistic] = range.constraints;\n const band = adaptToPrecision(v, releaseParts(pessimistic.version).length);\n const constraints: PaketConstraint[] =\n compare(band, v) === 0\n ? [{ operator: '~>', version: band }]\n : [\n { operator: '~>', version: band },\n { operator: '>=', version: v },\n ];\n return { ...range, constraints };\n}\n\nfunction replaceRange(range: PaketRange, v: NugetVersion): PaketRange {\n const [first, second] = range.constraints;\n const hasFloor = second?.operator === '>' || second?.operator === '>=';\n if (first.operator === '~>' && hasFloor) {\n return pessimisticWithFloor(range, v);\n }\n\n return {\n ...range,\n constraints: range.constraints.map((c) => replaceConstraint(c, v)),\n };\n}\n\nfunction bumpConstraint(\n constraint: PaketConstraint,\n v: NugetVersion,\n): PaketConstraint {\n const { operator, version } = constraint;\n switch (operator) {\n case '>=':\n return compare(v, version) > 0 ? { operator, version: v } : constraint;\n case '>':\n // the lower bound guard in `getNewValue` ensures `v` is above `version`\n return { operator: '>=', version: v };\n case '~>': {\n const adapted = adaptToPrecision(v, releaseParts(version).length);\n return compare(adapted, version) > 0\n ? { operator, version: adapted }\n : constraint;\n }\n default:\n return replaceConstraint(constraint, v);\n }\n}\n\nfunction bumpRange(range: PaketRange, v: NugetVersion): PaketRange {\n const [first, second] = range.constraints;\n if (\n first.operator === '~>' &&\n second?.operator !== '<' &&\n second?.operator !== '<='\n ) {\n return pessimisticWithFloor(range, v);\n }\n\n return {\n ...range,\n constraints: range.constraints.map((c) => bumpConstraint(c, v)),\n };\n}\n\nfunction widenRange(range: PaketRange, v: NugetVersion): PaketRange {\n const interval = intervalOf(range.constraints);\n const [first] = range.constraints;\n\n if (interval.kind !== 'range' || first.operator !== '~>') {\n return {\n ...range,\n constraints: range.constraints.map((c) => replaceConstraint(c, v)),\n };\n }\n\n const { from, fromInclusive, to, toInclusive } = interval;\n const upperViolated = toInclusive\n ? compare(v, to) > 0\n : compare(v, to) >= 0 || sameReleaseParts(v, to);\n if (!upperViolated) {\n return range;\n }\n\n // The pessimistic operator acts as both bounds, so decompose it into\n // explicit bounds to widen upwards while keeping the lower bound.\n const lower: PaketConstraint = {\n operator: fromInclusive ? '>=' : '>',\n version: from,\n };\n const upper: PaketConstraint = toInclusive\n ? { operator: '<=', version: v }\n : { operator: '<', version: bumpAtPrecision(v, releaseParts(to).length) };\n return { ...range, constraints: [lower, upper] };\n}\n\nfunction getNewValue({\n currentValue,\n rangeStrategy,\n newVersion,\n}: NewValueConfig): string | null {\n const v = parseVersion(newVersion);\n if (!v) {\n return null;\n }\n\n if (isVersion(currentValue)) {\n return newVersion;\n }\n\n const range = parseRange(currentValue);\n if (!range) {\n return null;\n }\n\n if (rangeStrategy === 'pin') {\n return `${range.strategy ?? ''}${newVersion}`;\n }\n\n if (isLessThanLowerBound(v, range)) {\n return currentValue;\n }\n\n let result: PaketRange;\n if (rangeStrategy === 'bump') {\n result = bumpRange(range, v);\n } else if (matchesRange(v, range)) {\n return currentValue;\n } else if (rangeStrategy === 'widen') {\n result = widenRange(range, v);\n } else {\n result = replaceRange(range, v);\n }\n\n const newValue = rangeToString(ensurePrereleaseMatches(result, v));\n return newValue === rangeToString(range) ? currentValue : newValue;\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n getNewValue,\n getPinnedValue,\n getSatisfyingVersion,\n minSatisfyingVersion,\n isCompatible,\n isGreaterThan,\n isLessThanRange,\n isSingleVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n sortVersions,\n};\n\nexport default api;\n"],"mappings":"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"}
|
|
@@ -216,12 +216,15 @@ function matches(version, range) {
|
|
|
216
216
|
case "override": return compare(version, interval.version) === 0;
|
|
217
217
|
case "minimum": {
|
|
218
218
|
const cmp = compare(version, interval.version);
|
|
219
|
-
|
|
219
|
+
if (cmp === 0) return true;
|
|
220
|
+
if (cmp > 0 && isPrereleaseAllowed(version, status)) return true;
|
|
221
|
+
return isPrereleaseOfBound(version, interval.version, status);
|
|
220
222
|
}
|
|
221
223
|
case "greater-than": return compare(version, interval.version) > 0 && isPrereleaseAllowed(version, status);
|
|
222
224
|
case "maximum": {
|
|
223
225
|
const cmp = compare(version, interval.version);
|
|
224
|
-
|
|
226
|
+
if (cmp === 0) return true;
|
|
227
|
+
return cmp < 0 && isPrereleaseAllowed(version, status);
|
|
225
228
|
}
|
|
226
229
|
case "less-than": return compare(version, interval.version) < 0 && isPrereleaseAllowed(version, status) && !isPrereleaseOfBound(version, interval.version, status);
|
|
227
230
|
case "range": {
|
|
@@ -230,7 +233,8 @@ function matches(version, range) {
|
|
|
230
233
|
const upperCmp = compare(version, to);
|
|
231
234
|
const inLower = fromInclusive ? lowerCmp >= 0 : lowerCmp > 0;
|
|
232
235
|
const inUpper = toInclusive ? upperCmp <= 0 : upperCmp < 0 && !isPrereleaseOfBound(version, to, status);
|
|
233
|
-
|
|
236
|
+
if (inLower && inUpper && isPrereleaseAllowed(version, status)) return true;
|
|
237
|
+
return isPrereleaseOfBound(version, from, status);
|
|
234
238
|
}
|
|
235
239
|
}
|
|
236
240
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"range.js","names":[],"sources":["../../../../lib/modules/versioning/paket/range.ts"],"sourcesContent":["import { isNotNullOrUndefined } from '../../../util/array.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { parseVersion } from '../nuget/parser.ts';\nimport type { NugetVersion } from '../nuget/types.ts';\nimport { versionToString } from '../nuget/version.ts';\nimport type {\n PaketConstraint,\n PaketInterval,\n PaketOperator,\n PaketRange,\n} from './types.ts';\nimport { compare, sameReleaseParts } from './version.ts';\n\nconst constraintOperators: readonly string[] = [\n '=',\n '==',\n '>',\n '>=',\n '<',\n '<=',\n '~>',\n];\n\nconst prereleaseTagRegex = regEx(/^[a-zA-Z][a-zA-Z0-9-]*$/);\n\n/**\n * Paket only accepts these operator combinations for two-part constraints.\n */\nfunction isValidPair(first: PaketOperator, second: PaketOperator): boolean {\n if (first === '~>') {\n return (\n second === '>' || second === '>=' || second === '<' || second === '<='\n );\n }\n\n if (first === '>' || first === '>=') {\n return second === '<' || second === '<=';\n }\n\n return false;\n}\n\nexport function parseRange(input: string): PaketRange | null {\n if (!input?.trim()) {\n return null;\n }\n\n let text = input.trim();\n let strategy: PaketRange['strategy'] = null;\n if (text.startsWith('!') || text.startsWith('@')) {\n strategy = text[0] as '!' | '@';\n text = text.slice(1).trim();\n }\n\n const tokens = text.split(regEx(/\\s+/));\n const constraints: PaketConstraint[] = [];\n let idx = 0;\n\n while (\n idx < tokens.length &&\n constraints.length < 2 &&\n constraintOperators.includes(tokens[idx])\n ) {\n const operator = tokens[idx] as PaketOperator;\n const versionToken = tokens[idx + 1];\n const version = versionToken ? parseVersion(versionToken) : null;\n if (!version) {\n return null;\n }\n constraints.push({ operator, version });\n idx += 2;\n }\n\n if (constraints.length === 0) {\n const version = parseVersion(tokens[0]);\n if (!version) {\n return null;\n }\n constraints.push({ operator: '', version });\n idx = 1;\n }\n\n if (\n constraints.length === 2 &&\n !isValidPair(constraints[0].operator, constraints[1].operator)\n ) {\n return null;\n }\n\n const prereleaseTags: string[] = [];\n for (const token of tokens.slice(idx)) {\n if (!prereleaseTagRegex.test(token)) {\n return null;\n }\n if (!prereleaseTags.includes(token)) {\n prereleaseTags.push(token);\n }\n }\n\n return { strategy, constraints, prereleaseTags };\n}\n\nexport function rangeToString(range: PaketRange): string {\n const parts: string[] = [];\n for (const { operator, version } of range.constraints) {\n const versionStr = versionToString(version);\n parts.push(operator === '' ? versionStr : `${operator} ${versionStr}`);\n }\n parts.push(...range.prereleaseTags);\n return `${range.strategy ?? ''}${parts.join(' ')}`;\n}\n\nexport function releaseParts(version: NugetVersion): number[] {\n const { major, minor, patch, revision } = version;\n return [major, minor, patch, revision].filter(isNotNullOrUndefined);\n}\n\nfunction versionFromParts(parts: number[]): NugetVersion {\n const [major, minor, patch, revision] = parts;\n const result: NugetVersion = { type: 'nuget-version', major };\n if (minor !== undefined) {\n result.minor = minor;\n }\n if (patch !== undefined) {\n result.patch = patch;\n }\n if (revision !== undefined) {\n result.revision = revision;\n }\n return result;\n}\n\nexport function adaptToPrecision(\n version: NugetVersion,\n precision: number,\n): NugetVersion {\n const parts = releaseParts(version).slice(0, precision);\n while (parts.length < precision) {\n parts.push(0);\n }\n return versionFromParts(parts);\n}\n\nexport function bumpAtPrecision(\n version: NugetVersion,\n precision: number,\n): NugetVersion {\n const parts = releaseParts(adaptToPrecision(version, precision));\n parts[precision - 1] += 1;\n return versionFromParts(parts);\n}\n\n/**\n * Upper bound of the pessimistic operator: chop off the last release part and\n * increment the remaining last number, so `~> 1.2.3` allows `< 1.3` and\n * `~> 1.2` allows `< 2`.\n */\nexport function twiddle(version: NugetVersion): NugetVersion {\n const precision = Math.max(releaseParts(version).length - 1, 1);\n return bumpAtPrecision(version, precision);\n}\n\nfunction intervalOfPair(\n first: PaketConstraint,\n second: PaketConstraint,\n): PaketInterval {\n if (first.operator === '~>') {\n const cap = twiddle(first.version);\n\n if (second.operator === '>' || second.operator === '>=') {\n return {\n kind: 'range',\n from: second.version,\n fromInclusive: second.operator === '>=',\n to: cap,\n toInclusive: false,\n };\n }\n\n const to = compare(second.version, cap) < 0 ? second.version : cap;\n return {\n kind: 'range',\n from: first.version,\n fromInclusive: true,\n to,\n toInclusive: second.operator === '<=',\n };\n }\n\n return {\n kind: 'range',\n from: first.version,\n fromInclusive: first.operator === '>=',\n to: second.version,\n toInclusive: second.operator === '<=',\n };\n}\n\nconst singleOperatorKind = {\n '': 'specific',\n '=': 'specific',\n '==': 'override',\n '>=': 'minimum',\n '>': 'greater-than',\n '<=': 'maximum',\n '<': 'less-than',\n} as const;\n\nexport function intervalOf(constraints: PaketConstraint[]): PaketInterval {\n if (constraints.length === 2) {\n return intervalOfPair(constraints[0], constraints[1]);\n }\n\n const [{ operator, version }] = constraints;\n if (operator === '~>') {\n return {\n kind: 'range',\n from: version,\n fromInclusive: true,\n to: twiddle(version),\n toInclusive: false,\n };\n }\n return { kind: singleOperatorKind[operator], version };\n}\n\nconst numericSegmentRegex = regEx(/^\\d+$/);\nconst channelPrefixRegex = regEx(/^[a-zA-Z]+(?:-[a-zA-Z]+)*/);\n\nfunction channelFromSegments(segments: string[]): string {\n const [first, second] = segments;\n if (first && !numericSegmentRegex.test(first)) {\n return first;\n }\n if (second && !numericSegmentRegex.test(second)) {\n return second;\n }\n return '';\n}\n\n/**\n * The channel name of a prerelease suffix, e.g. `alpha` for `alpha001` or\n * `beta` for `beta.2`.\n */\nexport function prereleaseChannel(prerelease: string): string {\n const segments = prerelease.split('.');\n if (segments.length > 1) {\n return channelFromSegments(segments);\n }\n\n const prefix = channelPrefixRegex.exec(prerelease);\n if (prefix) {\n return prefix[0];\n }\n\n return channelFromSegments(\n prerelease.split('-').filter((segment) => segment !== ''),\n );\n}\n\ntype PrereleaseStatus = 'none' | 'all' | string[];\n\nfunction prereleaseStatusOf(\n range: PaketRange,\n interval: PaketInterval,\n): PrereleaseStatus {\n const { prereleaseTags } = range;\n if (\n prereleaseTags.length === 1 &&\n prereleaseTags[0].toLowerCase() === 'prerelease'\n ) {\n return 'all';\n }\n if (prereleaseTags.length > 0) {\n return prereleaseTags;\n }\n\n // Without explicit tags, prerelease versions used in the constraint itself\n // allow their own channels, e.g. `~> 1.2.3-alpha001` allows `alpha` versions.\n const bounds =\n interval.kind === 'range'\n ? [interval.from, interval.to]\n : [interval.version];\n const channels: string[] = [];\n for (const bound of bounds) {\n if (!bound.prerelease) {\n continue;\n }\n const channel = prereleaseChannel(bound.prerelease);\n if (!channels.includes(channel)) {\n channels.push(channel);\n }\n }\n return channels.length > 0 ? channels : 'none';\n}\n\nfunction isPrereleaseAllowed(\n version: NugetVersion,\n status: PrereleaseStatus,\n): boolean {\n if (status === 'all') {\n return true;\n }\n if (status === 'none') {\n return !version.prerelease;\n }\n if (!version.prerelease) {\n return true;\n }\n return status.includes(prereleaseChannel(version.prerelease));\n}\n\n/**\n * Paket rule: a prerelease of a stable bound version counts as being in range\n * when its channel is allowed, e.g. `1.2.3-alpha1` satisfies `= 1.2.3 alpha`.\n */\nfunction isPrereleaseOfBound(\n version: NugetVersion,\n bound: NugetVersion,\n status: PrereleaseStatus,\n): boolean {\n return (\n status !== 'none' &&\n !bound.prerelease &&\n sameReleaseParts(version, bound) &&\n isPrereleaseAllowed(version, status)\n );\n}\n\nexport function matches(version: NugetVersion, range: PaketRange): boolean {\n const interval = intervalOf(range.constraints);\n const status = prereleaseStatusOf(range, interval);\n\n switch (interval.kind) {\n case 'specific':\n return (\n compare(version, interval.version) === 0 ||\n isPrereleaseOfBound(version, interval.version, status)\n );\n case 'override':\n return compare(version, interval.version) === 0;\n case 'minimum': {\n const cmp = compare(version, interval.version);\n return (\n cmp === 0 ||\n (cmp > 0 && isPrereleaseAllowed(version, status)) ||\n isPrereleaseOfBound(version, interval.version, status)\n );\n }\n case 'greater-than':\n return (\n compare(version, interval.version) > 0 &&\n isPrereleaseAllowed(version, status)\n );\n case 'maximum': {\n const cmp = compare(version, interval.version);\n return cmp === 0 || (cmp < 0 && isPrereleaseAllowed(version, status));\n }\n case 'less-than':\n return (\n compare(version, interval.version) < 0 &&\n isPrereleaseAllowed(version, status) &&\n !isPrereleaseOfBound(version, interval.version, status)\n );\n case 'range': {\n const { from, fromInclusive, to, toInclusive } = interval;\n const lowerCmp = compare(version, from);\n const upperCmp = compare(version, to);\n const inLower = fromInclusive ? lowerCmp >= 0 : lowerCmp > 0;\n const inUpper = toInclusive\n ? upperCmp <= 0\n : upperCmp < 0 && !isPrereleaseOfBound(version, to, status);\n return (\n (inLower && inUpper && isPrereleaseAllowed(version, status)) ||\n isPrereleaseOfBound(version, from, status)\n );\n }\n }\n}\n\nexport function isLessThanLowerBound(\n version: NugetVersion,\n range: PaketRange,\n): boolean {\n const interval = intervalOf(range.constraints);\n switch (interval.kind) {\n case 'specific':\n case 'override':\n case 'minimum':\n return compare(version, interval.version) < 0;\n case 'greater-than':\n return compare(version, interval.version) <= 0;\n case 'maximum':\n case 'less-than':\n return false;\n case 'range':\n return interval.fromInclusive\n ? compare(version, interval.from) < 0\n : compare(version, interval.from) <= 0;\n }\n}\n\n/**\n * A rewritten range admits the new version numerically, but its prerelease\n * channel may still be blocked, so allow the channel with an explicit tag.\n */\nexport function ensurePrereleaseMatches(\n range: PaketRange,\n version: NugetVersion,\n): PaketRange {\n if (!version.prerelease || matches(version, range)) {\n return range;\n }\n\n const channel = prereleaseChannel(version.prerelease);\n if (prereleaseTagRegex.test(channel)) {\n return { ...range, prereleaseTags: [...range.prereleaseTags, channel] };\n }\n return { ...range, prereleaseTags: ['prerelease'] };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"range.js","names":[],"sources":["../../../../lib/modules/versioning/paket/range.ts"],"sourcesContent":["import { isNotNullOrUndefined } from '../../../util/array.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { parseVersion } from '../nuget/parser.ts';\nimport type { NugetVersion } from '../nuget/types.ts';\nimport { versionToString } from '../nuget/version.ts';\nimport type {\n PaketConstraint,\n PaketInterval,\n PaketOperator,\n PaketRange,\n} from './types.ts';\nimport { compare, sameReleaseParts } from './version.ts';\n\nconst constraintOperators: readonly string[] = [\n '=',\n '==',\n '>',\n '>=',\n '<',\n '<=',\n '~>',\n];\n\nconst prereleaseTagRegex = regEx(/^[a-zA-Z][a-zA-Z0-9-]*$/);\n\n/**\n * Paket only accepts these operator combinations for two-part constraints.\n */\nfunction isValidPair(first: PaketOperator, second: PaketOperator): boolean {\n if (first === '~>') {\n return (\n second === '>' || second === '>=' || second === '<' || second === '<='\n );\n }\n\n if (first === '>' || first === '>=') {\n return second === '<' || second === '<=';\n }\n\n return false;\n}\n\nexport function parseRange(input: string): PaketRange | null {\n if (!input?.trim()) {\n return null;\n }\n\n let text = input.trim();\n let strategy: PaketRange['strategy'] = null;\n if (text.startsWith('!') || text.startsWith('@')) {\n strategy = text[0] as '!' | '@';\n text = text.slice(1).trim();\n }\n\n const tokens = text.split(regEx(/\\s+/));\n const constraints: PaketConstraint[] = [];\n let idx = 0;\n\n while (\n idx < tokens.length &&\n constraints.length < 2 &&\n constraintOperators.includes(tokens[idx])\n ) {\n const operator = tokens[idx] as PaketOperator;\n const versionToken = tokens[idx + 1];\n const version = versionToken ? parseVersion(versionToken) : null;\n if (!version) {\n return null;\n }\n constraints.push({ operator, version });\n idx += 2;\n }\n\n if (constraints.length === 0) {\n const version = parseVersion(tokens[0]);\n if (!version) {\n return null;\n }\n constraints.push({ operator: '', version });\n idx = 1;\n }\n\n if (\n constraints.length === 2 &&\n !isValidPair(constraints[0].operator, constraints[1].operator)\n ) {\n return null;\n }\n\n const prereleaseTags: string[] = [];\n for (const token of tokens.slice(idx)) {\n if (!prereleaseTagRegex.test(token)) {\n return null;\n }\n if (!prereleaseTags.includes(token)) {\n prereleaseTags.push(token);\n }\n }\n\n return { strategy, constraints, prereleaseTags };\n}\n\nexport function rangeToString(range: PaketRange): string {\n const parts: string[] = [];\n for (const { operator, version } of range.constraints) {\n const versionStr = versionToString(version);\n parts.push(operator === '' ? versionStr : `${operator} ${versionStr}`);\n }\n parts.push(...range.prereleaseTags);\n return `${range.strategy ?? ''}${parts.join(' ')}`;\n}\n\nexport function releaseParts(version: NugetVersion): number[] {\n const { major, minor, patch, revision } = version;\n return [major, minor, patch, revision].filter(isNotNullOrUndefined);\n}\n\nfunction versionFromParts(parts: number[]): NugetVersion {\n const [major, minor, patch, revision] = parts;\n const result: NugetVersion = { type: 'nuget-version', major };\n if (minor !== undefined) {\n result.minor = minor;\n }\n if (patch !== undefined) {\n result.patch = patch;\n }\n if (revision !== undefined) {\n result.revision = revision;\n }\n return result;\n}\n\nexport function adaptToPrecision(\n version: NugetVersion,\n precision: number,\n): NugetVersion {\n const parts = releaseParts(version).slice(0, precision);\n while (parts.length < precision) {\n parts.push(0);\n }\n return versionFromParts(parts);\n}\n\nexport function bumpAtPrecision(\n version: NugetVersion,\n precision: number,\n): NugetVersion {\n const parts = releaseParts(adaptToPrecision(version, precision));\n parts[precision - 1] += 1;\n return versionFromParts(parts);\n}\n\n/**\n * Upper bound of the pessimistic operator: chop off the last release part and\n * increment the remaining last number, so `~> 1.2.3` allows `< 1.3` and\n * `~> 1.2` allows `< 2`.\n */\nexport function twiddle(version: NugetVersion): NugetVersion {\n const precision = Math.max(releaseParts(version).length - 1, 1);\n return bumpAtPrecision(version, precision);\n}\n\nfunction intervalOfPair(\n first: PaketConstraint,\n second: PaketConstraint,\n): PaketInterval {\n if (first.operator === '~>') {\n const cap = twiddle(first.version);\n\n if (second.operator === '>' || second.operator === '>=') {\n return {\n kind: 'range',\n from: second.version,\n fromInclusive: second.operator === '>=',\n to: cap,\n toInclusive: false,\n };\n }\n\n const to = compare(second.version, cap) < 0 ? second.version : cap;\n return {\n kind: 'range',\n from: first.version,\n fromInclusive: true,\n to,\n toInclusive: second.operator === '<=',\n };\n }\n\n return {\n kind: 'range',\n from: first.version,\n fromInclusive: first.operator === '>=',\n to: second.version,\n toInclusive: second.operator === '<=',\n };\n}\n\nconst singleOperatorKind = {\n '': 'specific',\n '=': 'specific',\n '==': 'override',\n '>=': 'minimum',\n '>': 'greater-than',\n '<=': 'maximum',\n '<': 'less-than',\n} as const;\n\nexport function intervalOf(constraints: PaketConstraint[]): PaketInterval {\n if (constraints.length === 2) {\n return intervalOfPair(constraints[0], constraints[1]);\n }\n\n const [{ operator, version }] = constraints;\n if (operator === '~>') {\n return {\n kind: 'range',\n from: version,\n fromInclusive: true,\n to: twiddle(version),\n toInclusive: false,\n };\n }\n return { kind: singleOperatorKind[operator], version };\n}\n\nconst numericSegmentRegex = regEx(/^\\d+$/);\nconst channelPrefixRegex = regEx(/^[a-zA-Z]+(?:-[a-zA-Z]+)*/);\n\nfunction channelFromSegments(segments: string[]): string {\n const [first, second] = segments;\n if (first && !numericSegmentRegex.test(first)) {\n return first;\n }\n if (second && !numericSegmentRegex.test(second)) {\n return second;\n }\n return '';\n}\n\n/**\n * The channel name of a prerelease suffix, e.g. `alpha` for `alpha001` or\n * `beta` for `beta.2`.\n */\nexport function prereleaseChannel(prerelease: string): string {\n const segments = prerelease.split('.');\n if (segments.length > 1) {\n return channelFromSegments(segments);\n }\n\n const prefix = channelPrefixRegex.exec(prerelease);\n if (prefix) {\n return prefix[0];\n }\n\n return channelFromSegments(\n prerelease.split('-').filter((segment) => segment !== ''),\n );\n}\n\ntype PrereleaseStatus = 'none' | 'all' | string[];\n\nfunction prereleaseStatusOf(\n range: PaketRange,\n interval: PaketInterval,\n): PrereleaseStatus {\n const { prereleaseTags } = range;\n if (\n prereleaseTags.length === 1 &&\n prereleaseTags[0].toLowerCase() === 'prerelease'\n ) {\n return 'all';\n }\n if (prereleaseTags.length > 0) {\n return prereleaseTags;\n }\n\n // Without explicit tags, prerelease versions used in the constraint itself\n // allow their own channels, e.g. `~> 1.2.3-alpha001` allows `alpha` versions.\n const bounds =\n interval.kind === 'range'\n ? [interval.from, interval.to]\n : [interval.version];\n const channels: string[] = [];\n for (const bound of bounds) {\n if (!bound.prerelease) {\n continue;\n }\n const channel = prereleaseChannel(bound.prerelease);\n if (!channels.includes(channel)) {\n channels.push(channel);\n }\n }\n return channels.length > 0 ? channels : 'none';\n}\n\nfunction isPrereleaseAllowed(\n version: NugetVersion,\n status: PrereleaseStatus,\n): boolean {\n if (status === 'all') {\n return true;\n }\n if (status === 'none') {\n return !version.prerelease;\n }\n if (!version.prerelease) {\n return true;\n }\n return status.includes(prereleaseChannel(version.prerelease));\n}\n\n/**\n * Paket rule: a prerelease of a stable bound version counts as being in range\n * when its channel is allowed, e.g. `1.2.3-alpha1` satisfies `= 1.2.3 alpha`.\n */\nfunction isPrereleaseOfBound(\n version: NugetVersion,\n bound: NugetVersion,\n status: PrereleaseStatus,\n): boolean {\n return (\n status !== 'none' &&\n !bound.prerelease &&\n sameReleaseParts(version, bound) &&\n isPrereleaseAllowed(version, status)\n );\n}\n\nexport function matches(version: NugetVersion, range: PaketRange): boolean {\n const interval = intervalOf(range.constraints);\n const status = prereleaseStatusOf(range, interval);\n\n switch (interval.kind) {\n case 'specific':\n return (\n compare(version, interval.version) === 0 ||\n isPrereleaseOfBound(version, interval.version, status)\n );\n case 'override':\n return compare(version, interval.version) === 0;\n case 'minimum': {\n const cmp = compare(version, interval.version);\n if (cmp === 0) {\n return true;\n }\n if (cmp > 0 && isPrereleaseAllowed(version, status)) {\n return true;\n }\n return isPrereleaseOfBound(version, interval.version, status);\n }\n case 'greater-than':\n return (\n compare(version, interval.version) > 0 &&\n isPrereleaseAllowed(version, status)\n );\n case 'maximum': {\n const cmp = compare(version, interval.version);\n if (cmp === 0) {\n return true;\n }\n return cmp < 0 && isPrereleaseAllowed(version, status);\n }\n case 'less-than':\n return (\n compare(version, interval.version) < 0 &&\n isPrereleaseAllowed(version, status) &&\n !isPrereleaseOfBound(version, interval.version, status)\n );\n case 'range': {\n const { from, fromInclusive, to, toInclusive } = interval;\n const lowerCmp = compare(version, from);\n const upperCmp = compare(version, to);\n const inLower = fromInclusive ? lowerCmp >= 0 : lowerCmp > 0;\n const inUpper = toInclusive\n ? upperCmp <= 0\n : upperCmp < 0 && !isPrereleaseOfBound(version, to, status);\n if (inLower && inUpper && isPrereleaseAllowed(version, status)) {\n return true;\n }\n return isPrereleaseOfBound(version, from, status);\n }\n }\n}\n\nexport function isLessThanLowerBound(\n version: NugetVersion,\n range: PaketRange,\n): boolean {\n const interval = intervalOf(range.constraints);\n switch (interval.kind) {\n case 'specific':\n case 'override':\n case 'minimum':\n return compare(version, interval.version) < 0;\n case 'greater-than':\n return compare(version, interval.version) <= 0;\n case 'maximum':\n case 'less-than':\n return false;\n case 'range':\n return interval.fromInclusive\n ? compare(version, interval.from) < 0\n : compare(version, interval.from) <= 0;\n }\n}\n\n/**\n * A rewritten range admits the new version numerically, but its prerelease\n * channel may still be blocked, so allow the channel with an explicit tag.\n */\nexport function ensurePrereleaseMatches(\n range: PaketRange,\n version: NugetVersion,\n): PaketRange {\n if (!version.prerelease || matches(version, range)) {\n return range;\n }\n\n const channel = prereleaseChannel(version.prerelease);\n if (prereleaseTagRegex.test(channel)) {\n return { ...range, prereleaseTags: [...range.prereleaseTags, channel] };\n }\n return { ...range, prereleaseTags: ['prerelease'] };\n}\n"],"mappings":"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"}
|
|
@@ -23,7 +23,8 @@ function minSatisfyingVersion(versions, range) {
|
|
|
23
23
|
return found.length === 0 ? null : found[0];
|
|
24
24
|
}
|
|
25
25
|
function isSingleVersion(constraint) {
|
|
26
|
-
|
|
26
|
+
if (isVersion(constraint)) return true;
|
|
27
|
+
return constraint?.startsWith("==") && isVersion(constraint.substring(2).trim());
|
|
27
28
|
}
|
|
28
29
|
function equals(version1, version2) {
|
|
29
30
|
return isVersion(version1) && isVersion(version2) && eq(version1, version2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["satisfies"],"sources":["../../../../lib/modules/versioning/pep440/index.ts"],"sourcesContent":["import * as pep440 from '@renovatebot/pep440';\nimport type { RangeStrategy } from '../../../types/versioning.ts';\nimport type { VersioningApi } from '../types.ts';\nimport { getNewValue, getPinnedValue, isLessThanRange } from './range.ts';\n\nexport const id = 'pep440';\nexport const displayName = 'PEP440';\nexport const urls = [\n '[PEP 440 - Version Identification](https://www.python.org/dev/peps/pep-0440/)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n];\n\nconst {\n compare: sortVersions,\n satisfies,\n valid,\n validRange,\n explain,\n gt: isGreaterThan,\n major: getMajor,\n minor: getMinor,\n patch: getPatch,\n eq,\n} = pep440;\n\nfunction isVersion(input: string | undefined | null): boolean {\n // @renovatebot/pep440 isn't strict null save\n // oxlint-disable-next-line typescript/no-unnecessary-type-assertion\n return !!valid(input!);\n}\n\nfunction isStable(input: string): boolean {\n const version = explain(input);\n if (!version) {\n return false;\n }\n return !version.is_prerelease;\n}\n\n// If this is left as an alias, inputs like \"17.04.0\" throw errors\nexport function isValid(input: string): boolean {\n return validRange(input) || isVersion(input);\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n const found = pep440.filter(versions, range).sort(sortVersions);\n return found.length === 0 ? null : found.at(-1)!;\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n const found = pep440.filter(versions, range).sort(sortVersions);\n return found.length === 0 ? null : found[0];\n}\n\nexport function isSingleVersion(constraint: string): boolean {\n
|
|
1
|
+
{"version":3,"file":"index.js","names":["satisfies"],"sources":["../../../../lib/modules/versioning/pep440/index.ts"],"sourcesContent":["import * as pep440 from '@renovatebot/pep440';\nimport type { RangeStrategy } from '../../../types/versioning.ts';\nimport type { VersioningApi } from '../types.ts';\nimport { getNewValue, getPinnedValue, isLessThanRange } from './range.ts';\n\nexport const id = 'pep440';\nexport const displayName = 'PEP440';\nexport const urls = [\n '[PEP 440 - Version Identification](https://www.python.org/dev/peps/pep-0440/)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n];\n\nconst {\n compare: sortVersions,\n satisfies,\n valid,\n validRange,\n explain,\n gt: isGreaterThan,\n major: getMajor,\n minor: getMinor,\n patch: getPatch,\n eq,\n} = pep440;\n\nfunction isVersion(input: string | undefined | null): boolean {\n // @renovatebot/pep440 isn't strict null save\n // oxlint-disable-next-line typescript/no-unnecessary-type-assertion\n return !!valid(input!);\n}\n\nfunction isStable(input: string): boolean {\n const version = explain(input);\n if (!version) {\n return false;\n }\n return !version.is_prerelease;\n}\n\n// If this is left as an alias, inputs like \"17.04.0\" throw errors\nexport function isValid(input: string): boolean {\n return validRange(input) || isVersion(input);\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n const found = pep440.filter(versions, range).sort(sortVersions);\n return found.length === 0 ? null : found.at(-1)!;\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n const found = pep440.filter(versions, range).sort(sortVersions);\n return found.length === 0 ? null : found[0];\n}\n\nexport function isSingleVersion(constraint: string): boolean {\n if (isVersion(constraint)) {\n return true;\n }\n return (\n constraint?.startsWith('==') && isVersion(constraint.substring(2).trim())\n );\n}\n\nexport { isVersion, matches };\n\nfunction equals(version1: string, version2: string): boolean {\n return isVersion(version1) && isVersion(version2) && eq(version1, version2);\n}\n\nfunction matches(version: string, range: string): boolean {\n if (!isVersion(version)) {\n return false;\n }\n if (isVersion(range)) {\n return equals(version, range);\n }\n return isValid(range) && satisfies(version, range, { prereleases: true });\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n isCompatible: isVersion,\n isGreaterThan,\n isSingleVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n getSatisfyingVersion,\n minSatisfyingVersion,\n getNewValue,\n getPinnedValue,\n sortVersions,\n isLessThanRange,\n};\n\nexport default api;\n"],"mappings":";;;AAKA,MAAa,KAAK;AAYlB,MAAM,EACJ,SAAS,cACT,WAAA,aACA,OACA,YACA,SACA,IAAI,eACJ,OAAO,UACP,OAAO,UACP,OAAO,UACP,OACE;AAEJ,SAAS,UAAU,OAA2C;CAG5D,OAAO,CAAC,CAAC,MAAM,KAAM;AACvB;AAEA,SAAS,SAAS,OAAwB;CACxC,MAAM,UAAU,QAAQ,KAAK;CAC7B,IAAI,CAAC,SACH,OAAO;CAET,OAAO,CAAC,QAAQ;AAClB;AAGA,SAAgB,QAAQ,OAAwB;CAC9C,OAAO,WAAW,KAAK,KAAK,UAAU,KAAK;AAC7C;AAEA,SAAS,qBACP,UACA,OACe;CACf,MAAM,QAAQ,OAAO,OAAO,UAAU,KAAK,CAAC,CAAC,KAAK,YAAY;CAC9D,OAAO,MAAM,WAAW,IAAI,OAAO,MAAM,GAAG,EAAE;AAChD;AAEA,SAAS,qBACP,UACA,OACe;CACf,MAAM,QAAQ,OAAO,OAAO,UAAU,KAAK,CAAC,CAAC,KAAK,YAAY;CAC9D,OAAO,MAAM,WAAW,IAAI,OAAO,MAAM;AAC3C;AAEA,SAAgB,gBAAgB,YAA6B;CAC3D,IAAI,UAAU,UAAU,GACtB,OAAO;CAET,OACE,YAAY,WAAW,IAAI,KAAK,UAAU,WAAW,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;AAE5E;AAIA,SAAS,OAAO,UAAkB,UAA2B;CAC3D,OAAO,UAAU,QAAQ,KAAK,UAAU,QAAQ,KAAK,GAAG,UAAU,QAAQ;AAC5E;AAEA,SAAS,QAAQ,SAAiB,OAAwB;CACxD,IAAI,CAAC,UAAU,OAAO,GACpB,OAAO;CAET,IAAI,UAAU,KAAK,GACjB,OAAO,OAAO,SAAS,KAAK;CAE9B,OAAO,QAAQ,KAAK,KAAKA,YAAU,SAAS,OAAO,EAAE,aAAa,KAAK,CAAC;AAC1E;AAEA,MAAa,MAAqB;CAChC;CACA;CACA;CACA;CACA,cAAc;CACd;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
|
|
@@ -81,7 +81,8 @@ function minSatisfyingVersion(versions, range) {
|
|
|
81
81
|
return satisfyingVersion ? semver2poetry(satisfyingVersion) : null;
|
|
82
82
|
}
|
|
83
83
|
function isSingleVersion(constraint) {
|
|
84
|
-
|
|
84
|
+
if (constraint.trim().startsWith("=") && isVersion(constraint.trim().substring(1).trim())) return true;
|
|
85
|
+
return isVersion(constraint.trim());
|
|
85
86
|
}
|
|
86
87
|
function handleShort(operator, currentValue, newVersion) {
|
|
87
88
|
const toVersionMajor = getMajor(newVersion);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["npm","pep440"],"sources":["../../../../lib/modules/versioning/poetry/index.ts"],"sourcesContent":["import { parseRange } from 'semver-utils';\nimport { logger } from '../../../logger/index.ts';\nimport type { RangeStrategy } from '../../../types/versioning.ts';\nimport { api as npm } from '../npm/index.ts';\nimport { api as pep440 } from '../pep440/index.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\n\nimport { VERSION_PATTERN } from './patterns.ts';\nimport {\n npm2poetry,\n poetry2npm,\n poetry2semver,\n semver2poetry,\n} from './transform.ts';\n\nexport const id = 'poetry';\nexport const displayName = 'Poetry';\nexport const urls = [\n '[Poetry dependency specification](https://python-poetry.org/docs/dependency-specification/)',\n '[Poetry FAQ - Why does Poetry not adhere to semantic versioning?](https://python-poetry.org/docs/faq#why-does-poetry-not-adhere-to-semantic-versioning)',\n '[Poetry FAQ - Why does Poetry enforce PEP 440 versions?](https://python-poetry.org/docs/faq#why-does-poetry-enforce-pep-440-versions)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n];\n\nfunction equals(a: string, b: string): boolean {\n const semverA = poetry2semver(a);\n const semverB = poetry2semver(b);\n return !!(semverA && semverB && npm.equals(semverA, semverB));\n}\n\nfunction getMajor(version: string): number | null {\n const semverVersion = poetry2semver(version);\n return semverVersion ? npm.getMajor(semverVersion) : null;\n}\n\nfunction getMinor(version: string): number | null {\n const semverVersion = poetry2semver(version);\n return semverVersion ? npm.getMinor(semverVersion) : null;\n}\n\nfunction getPatch(version: string): number | null {\n const semverVersion = poetry2semver(version);\n return semverVersion ? npm.getPatch(semverVersion) : null;\n}\n\nfunction isVersion(input: string): boolean {\n return VERSION_PATTERN.test(input);\n}\n\nfunction isGreaterThan(a: string, b: string): boolean {\n return !!(a && b && pep440.isGreaterThan(a, b));\n}\n\nfunction isLessThanRange(version: string, range: string): boolean {\n if (!isPoetryRange(range)) {\n return pep440.isLessThanRange!(version, range);\n }\n\n const semverVersion = poetry2semver(version);\n return !!(\n isVersion(version) &&\n semverVersion &&\n npm.isLessThanRange?.(semverVersion, poetry2npm(range))\n );\n}\n\n/**\n * Whether the input is a range poetry's own syntax can express, which is what the npm-based implementation here understands.\n */\nfunction isPoetryRange(input: string): boolean {\n try {\n return npm.isValid(poetry2npm(input, true));\n } catch {\n logger.once.debug(\n { version: input },\n 'Poetry version or range is not supported by current implementation',\n );\n return false;\n }\n}\n\nexport function isValid(input: string): boolean {\n if (!input) {\n return false;\n }\n\n // Poetry accepts every PEP 440 specifier, including the ones its own syntax cannot express, such as the exclusions in `>=2.6, !=3.0.*, <4`\n return isPoetryRange(input) || pep440.isValid(input);\n}\n\nfunction isStable(version: string): boolean {\n const semverVersion = poetry2semver(version);\n return !!(semverVersion && npm.isStable(semverVersion));\n}\n\nfunction matches(version: string, range: string): boolean {\n if (!isPoetryRange(range)) {\n return pep440.matches(version, range);\n }\n\n const semverVersion = poetry2semver(version);\n return !!(\n isVersion(version) &&\n semverVersion &&\n npm.matches(semverVersion, poetry2npm(range))\n );\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n if (!isPoetryRange(range)) {\n return pep440.getSatisfyingVersion(versions, range);\n }\n\n const semverVersions: string[] = [];\n versions.forEach((version) => {\n const semverVersion = poetry2semver(version);\n if (semverVersion) {\n semverVersions.push(semverVersion);\n }\n });\n const npmRange = poetry2npm(range);\n const satisfyingVersion = npm.getSatisfyingVersion(semverVersions, npmRange);\n return satisfyingVersion ? semver2poetry(satisfyingVersion) : null;\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n if (!isPoetryRange(range)) {\n return pep440.minSatisfyingVersion(versions, range);\n }\n\n const semverVersions: string[] = [];\n versions.forEach((version) => {\n const semverVersion = poetry2semver(version);\n if (semverVersion) {\n semverVersions.push(semverVersion);\n }\n });\n const npmRange = poetry2npm(range);\n const satisfyingVersion = npm.minSatisfyingVersion(semverVersions, npmRange);\n return satisfyingVersion ? semver2poetry(satisfyingVersion) : null;\n}\n\nfunction isSingleVersion(constraint: string): boolean {\n return (\n (constraint.trim().startsWith('=') &&\n isVersion(constraint.trim().substring(1).trim())) ||\n isVersion(constraint.trim())\n );\n}\n\nfunction handleShort(\n operator: string,\n currentValue: string,\n newVersion: string,\n): string | null {\n const toVersionMajor = getMajor(newVersion);\n const toVersionMinor = getMinor(newVersion);\n const split = currentValue.split('.');\n if (toVersionMajor !== null && split.length === 1) {\n // [^,~]4\n return `${operator}${toVersionMajor}`;\n }\n if (\n toVersionMajor !== null &&\n toVersionMinor !== null &&\n split.length === 2\n ) {\n // [^,~]4.1\n return `${operator}${toVersionMajor}.${toVersionMinor}`;\n }\n return null;\n}\n\nfunction getNewValue(config: NewValueConfig): string | null {\n const { currentValue, rangeStrategy, currentVersion, newVersion } = config;\n if (!isPoetryRange(currentValue)) {\n return pep440.getNewValue(config);\n }\n\n if (rangeStrategy === 'replace') {\n const npmCurrentValue = poetry2npm(currentValue);\n try {\n const massagedNewVersion = poetry2semver(newVersion);\n if (\n massagedNewVersion &&\n isVersion(massagedNewVersion) &&\n npm.matches(massagedNewVersion, npmCurrentValue)\n ) {\n return currentValue;\n }\n } catch (err) /* istanbul ignore next */ {\n logger.info(\n { err },\n 'Poetry versioning: Error caught checking if newVersion satisfies currentValue',\n );\n }\n const parsedRange = parseRange(npmCurrentValue);\n const element = parsedRange.at(-1)!;\n if (parsedRange.length === 1 && element.operator) {\n if (element.operator === '^') {\n const version = handleShort('^', npmCurrentValue, newVersion);\n if (version) {\n return npm2poetry(version);\n }\n }\n if (element.operator === '~') {\n const version = handleShort('~', npmCurrentValue, newVersion);\n if (version) {\n return npm2poetry(version);\n }\n }\n }\n }\n\n // Explicitly check whether this is a fully-qualified version\n if (\n (VERSION_PATTERN.exec(newVersion)?.groups?.release ?? '').split('.')\n .length !== 3\n ) {\n logger.debug(\n 'Cannot massage python version to npm - returning currentValue',\n );\n return currentValue;\n }\n try {\n const currentSemverVersion =\n currentVersion && poetry2semver(currentVersion);\n\n const newSemverVersion = poetry2semver(newVersion);\n\n if (currentSemverVersion && newSemverVersion) {\n const newSemver = npm.getNewValue({\n currentValue: poetry2npm(currentValue),\n rangeStrategy,\n currentVersion: currentSemverVersion,\n newVersion: newSemverVersion,\n });\n const newPoetry = newSemver && npm2poetry(newSemver);\n if (newPoetry) {\n return newPoetry;\n }\n }\n } catch (err) /* istanbul ignore next */ {\n logger.debug(\n { currentValue, rangeStrategy, currentVersion, newVersion, err },\n 'Could not generate new value using npm.getNewValue()',\n );\n }\n\n // istanbul ignore next\n return currentValue;\n}\n\nfunction sortVersions(a: string, b: string): number {\n return pep440.sortVersions(a, b);\n}\n\nfunction subset(subRange: string, superRange: string): boolean | undefined {\n if (!isPoetryRange(subRange) || !isPoetryRange(superRange)) {\n return undefined;\n }\n\n return npm.subset!(poetry2npm(subRange), poetry2npm(superRange));\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n getNewValue,\n getSatisfyingVersion,\n isCompatible: isVersion,\n isGreaterThan,\n isLessThanRange,\n isSingleVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n minSatisfyingVersion,\n sortVersions,\n subset,\n};\nexport default api;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["npm","pep440"],"sources":["../../../../lib/modules/versioning/poetry/index.ts"],"sourcesContent":["import { parseRange } from 'semver-utils';\nimport { logger } from '../../../logger/index.ts';\nimport type { RangeStrategy } from '../../../types/versioning.ts';\nimport { api as npm } from '../npm/index.ts';\nimport { api as pep440 } from '../pep440/index.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\n\nimport { VERSION_PATTERN } from './patterns.ts';\nimport {\n npm2poetry,\n poetry2npm,\n poetry2semver,\n semver2poetry,\n} from './transform.ts';\n\nexport const id = 'poetry';\nexport const displayName = 'Poetry';\nexport const urls = [\n '[Poetry dependency specification](https://python-poetry.org/docs/dependency-specification/)',\n '[Poetry FAQ - Why does Poetry not adhere to semantic versioning?](https://python-poetry.org/docs/faq#why-does-poetry-not-adhere-to-semantic-versioning)',\n '[Poetry FAQ - Why does Poetry enforce PEP 440 versions?](https://python-poetry.org/docs/faq#why-does-poetry-enforce-pep-440-versions)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n];\n\nfunction equals(a: string, b: string): boolean {\n const semverA = poetry2semver(a);\n const semverB = poetry2semver(b);\n return !!(semverA && semverB && npm.equals(semverA, semverB));\n}\n\nfunction getMajor(version: string): number | null {\n const semverVersion = poetry2semver(version);\n return semverVersion ? npm.getMajor(semverVersion) : null;\n}\n\nfunction getMinor(version: string): number | null {\n const semverVersion = poetry2semver(version);\n return semverVersion ? npm.getMinor(semverVersion) : null;\n}\n\nfunction getPatch(version: string): number | null {\n const semverVersion = poetry2semver(version);\n return semverVersion ? npm.getPatch(semverVersion) : null;\n}\n\nfunction isVersion(input: string): boolean {\n return VERSION_PATTERN.test(input);\n}\n\nfunction isGreaterThan(a: string, b: string): boolean {\n return !!(a && b && pep440.isGreaterThan(a, b));\n}\n\nfunction isLessThanRange(version: string, range: string): boolean {\n if (!isPoetryRange(range)) {\n return pep440.isLessThanRange!(version, range);\n }\n\n const semverVersion = poetry2semver(version);\n return !!(\n isVersion(version) &&\n semverVersion &&\n npm.isLessThanRange?.(semverVersion, poetry2npm(range))\n );\n}\n\n/**\n * Whether the input is a range poetry's own syntax can express, which is what the npm-based implementation here understands.\n */\nfunction isPoetryRange(input: string): boolean {\n try {\n return npm.isValid(poetry2npm(input, true));\n } catch {\n logger.once.debug(\n { version: input },\n 'Poetry version or range is not supported by current implementation',\n );\n return false;\n }\n}\n\nexport function isValid(input: string): boolean {\n if (!input) {\n return false;\n }\n\n // Poetry accepts every PEP 440 specifier, including the ones its own syntax cannot express, such as the exclusions in `>=2.6, !=3.0.*, <4`\n return isPoetryRange(input) || pep440.isValid(input);\n}\n\nfunction isStable(version: string): boolean {\n const semverVersion = poetry2semver(version);\n return !!(semverVersion && npm.isStable(semverVersion));\n}\n\nfunction matches(version: string, range: string): boolean {\n if (!isPoetryRange(range)) {\n return pep440.matches(version, range);\n }\n\n const semverVersion = poetry2semver(version);\n return !!(\n isVersion(version) &&\n semverVersion &&\n npm.matches(semverVersion, poetry2npm(range))\n );\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n if (!isPoetryRange(range)) {\n return pep440.getSatisfyingVersion(versions, range);\n }\n\n const semverVersions: string[] = [];\n versions.forEach((version) => {\n const semverVersion = poetry2semver(version);\n if (semverVersion) {\n semverVersions.push(semverVersion);\n }\n });\n const npmRange = poetry2npm(range);\n const satisfyingVersion = npm.getSatisfyingVersion(semverVersions, npmRange);\n return satisfyingVersion ? semver2poetry(satisfyingVersion) : null;\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n if (!isPoetryRange(range)) {\n return pep440.minSatisfyingVersion(versions, range);\n }\n\n const semverVersions: string[] = [];\n versions.forEach((version) => {\n const semverVersion = poetry2semver(version);\n if (semverVersion) {\n semverVersions.push(semverVersion);\n }\n });\n const npmRange = poetry2npm(range);\n const satisfyingVersion = npm.minSatisfyingVersion(semverVersions, npmRange);\n return satisfyingVersion ? semver2poetry(satisfyingVersion) : null;\n}\n\nfunction isSingleVersion(constraint: string): boolean {\n if (\n constraint.trim().startsWith('=') &&\n isVersion(constraint.trim().substring(1).trim())\n ) {\n return true;\n }\n return isVersion(constraint.trim());\n}\n\nfunction handleShort(\n operator: string,\n currentValue: string,\n newVersion: string,\n): string | null {\n const toVersionMajor = getMajor(newVersion);\n const toVersionMinor = getMinor(newVersion);\n const split = currentValue.split('.');\n if (toVersionMajor !== null && split.length === 1) {\n // [^,~]4\n return `${operator}${toVersionMajor}`;\n }\n if (\n toVersionMajor !== null &&\n toVersionMinor !== null &&\n split.length === 2\n ) {\n // [^,~]4.1\n return `${operator}${toVersionMajor}.${toVersionMinor}`;\n }\n return null;\n}\n\nfunction getNewValue(config: NewValueConfig): string | null {\n const { currentValue, rangeStrategy, currentVersion, newVersion } = config;\n if (!isPoetryRange(currentValue)) {\n return pep440.getNewValue(config);\n }\n\n if (rangeStrategy === 'replace') {\n const npmCurrentValue = poetry2npm(currentValue);\n try {\n const massagedNewVersion = poetry2semver(newVersion);\n if (\n massagedNewVersion &&\n isVersion(massagedNewVersion) &&\n npm.matches(massagedNewVersion, npmCurrentValue)\n ) {\n return currentValue;\n }\n } catch (err) /* istanbul ignore next */ {\n logger.info(\n { err },\n 'Poetry versioning: Error caught checking if newVersion satisfies currentValue',\n );\n }\n const parsedRange = parseRange(npmCurrentValue);\n const element = parsedRange.at(-1)!;\n if (parsedRange.length === 1 && element.operator) {\n if (element.operator === '^') {\n const version = handleShort('^', npmCurrentValue, newVersion);\n if (version) {\n return npm2poetry(version);\n }\n }\n if (element.operator === '~') {\n const version = handleShort('~', npmCurrentValue, newVersion);\n if (version) {\n return npm2poetry(version);\n }\n }\n }\n }\n\n // Explicitly check whether this is a fully-qualified version\n if (\n (VERSION_PATTERN.exec(newVersion)?.groups?.release ?? '').split('.')\n .length !== 3\n ) {\n logger.debug(\n 'Cannot massage python version to npm - returning currentValue',\n );\n return currentValue;\n }\n try {\n const currentSemverVersion =\n currentVersion && poetry2semver(currentVersion);\n\n const newSemverVersion = poetry2semver(newVersion);\n\n if (currentSemverVersion && newSemverVersion) {\n const newSemver = npm.getNewValue({\n currentValue: poetry2npm(currentValue),\n rangeStrategy,\n currentVersion: currentSemverVersion,\n newVersion: newSemverVersion,\n });\n const newPoetry = newSemver && npm2poetry(newSemver);\n if (newPoetry) {\n return newPoetry;\n }\n }\n } catch (err) /* istanbul ignore next */ {\n logger.debug(\n { currentValue, rangeStrategy, currentVersion, newVersion, err },\n 'Could not generate new value using npm.getNewValue()',\n );\n }\n\n // istanbul ignore next\n return currentValue;\n}\n\nfunction sortVersions(a: string, b: string): number {\n return pep440.sortVersions(a, b);\n}\n\nfunction subset(subRange: string, superRange: string): boolean | undefined {\n if (!isPoetryRange(subRange) || !isPoetryRange(superRange)) {\n return undefined;\n }\n\n return npm.subset!(poetry2npm(subRange), poetry2npm(superRange));\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n getNewValue,\n getSatisfyingVersion,\n isCompatible: isVersion,\n isGreaterThan,\n isLessThanRange,\n isSingleVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n minSatisfyingVersion,\n sortVersions,\n subset,\n};\nexport default api;\n"],"mappings":"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"}
|
|
@@ -50,7 +50,7 @@ var RegExpVersioningApi = class extends GenericVersioningApi {
|
|
|
50
50
|
}
|
|
51
51
|
isSingleVersion(input) {
|
|
52
52
|
const range = parseRange(input, (v) => this.isVersion(v));
|
|
53
|
-
if (range) return range.length === 1 &&
|
|
53
|
+
if (range) return range.length === 1 && ["=", "=="].includes(range[0].operator);
|
|
54
54
|
return this.isVersion(input);
|
|
55
55
|
}
|
|
56
56
|
matches(version, range) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/regex/index.ts"],"sourcesContent":["import { isUndefined } from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../../../constants/error-messages.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { GenericVersioningApi } from '../generic.ts';\nimport { parseRange, satisfiesComparator } from '../generic-range.ts';\nimport type { VersioningApiConstructor } from '../types.ts';\nimport type { RegExpVersion } from './types.ts';\n\nexport const id = 'regex';\nexport const displayName = 'Regular Expression';\nexport const urls = [];\nexport const supportsRanges = false;\n\nexport class RegExpVersioningApi extends GenericVersioningApi<RegExpVersion> {\n // config is expected to be overridden by a user-specified RegExp value\n // sample values:\n //\n // * emulates the \"semver\" configuration:\n // RegExp('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(-(?<prerelease>.*))?$')\n // * emulates the \"docker\" configuration:\n // RegExp('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(-(?<compatibility>.*))?$')\n // * matches the versioning approach used by the Python images on DockerHub:\n // RegExp('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(?<prerelease>[^.-]+)?(-(?<compatibility>.*))?$');\n // * matches the versioning approach used by the Bitnami images on DockerHub:\n // RegExp('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(:?-(?<compatibility>.*-r)(?<build>\\\\d+))?$');\n protected readonly _config: RegExp;\n\n constructor(_new_config: string | undefined) {\n super();\n const new_config = _new_config ?? '^(?<major>\\\\d+)?$';\n\n // without at least one of {major, minor, patch} specified in the regex,\n // this versioner will not work properly\n if (\n !new_config.includes('<major>') &&\n !new_config.includes('<minor>') &&\n !new_config.includes('<patch>')\n ) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = new_config;\n error.validationError =\n 'regex versioning needs at least one major, minor or patch group defined';\n throw error;\n }\n\n // TODO: should we validate the user has not added extra unsupported\n // capture groups? (#9717)\n this._config = regEx(new_config);\n }\n\n // convenience method for passing a string into a Version given current config.\n protected _parse(version: string): RegExpVersion | null {\n const groups = this._config?.exec(version)?.groups;\n if (!groups) {\n return null;\n }\n\n const { major, minor, patch, build, revision, prerelease, compatibility } =\n groups;\n const release = [\n isUndefined(major) ? 0 : Number.parseInt(major, 10),\n isUndefined(minor) ? 0 : Number.parseInt(minor, 10),\n isUndefined(patch) ? 0 : Number.parseInt(patch, 10),\n ];\n\n if (build) {\n release.push(Number.parseInt(build, 10));\n if (revision) {\n release.push(Number.parseInt(revision, 10));\n }\n }\n\n return {\n release,\n prerelease,\n compatibility,\n };\n }\n\n override isCompatible(version: string, current: string): boolean {\n const parsedVersion = this._parse(version);\n const parsedCurrent = this._parse(current);\n return !!(\n parsedVersion &&\n parsedVersion.compatibility === parsedCurrent?.compatibility\n );\n }\n\n override isValid(input: string): boolean {\n return (\n this.isVersion(input) ||\n parseRange(input, (v) => this.isVersion(v)) !== null\n );\n }\n\n override isVersion(version: string): boolean {\n return this._parse(version) !== null;\n }\n\n override isSingleVersion(input: string): boolean {\n const range = parseRange(input, (v) => this.isVersion(v));\n if (range) {\n return
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/regex/index.ts"],"sourcesContent":["import { isUndefined } from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../../../constants/error-messages.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { GenericVersioningApi } from '../generic.ts';\nimport { parseRange, satisfiesComparator } from '../generic-range.ts';\nimport type { VersioningApiConstructor } from '../types.ts';\nimport type { RegExpVersion } from './types.ts';\n\nexport const id = 'regex';\nexport const displayName = 'Regular Expression';\nexport const urls = [];\nexport const supportsRanges = false;\n\nexport class RegExpVersioningApi extends GenericVersioningApi<RegExpVersion> {\n // config is expected to be overridden by a user-specified RegExp value\n // sample values:\n //\n // * emulates the \"semver\" configuration:\n // RegExp('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(-(?<prerelease>.*))?$')\n // * emulates the \"docker\" configuration:\n // RegExp('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(-(?<compatibility>.*))?$')\n // * matches the versioning approach used by the Python images on DockerHub:\n // RegExp('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(?<prerelease>[^.-]+)?(-(?<compatibility>.*))?$');\n // * matches the versioning approach used by the Bitnami images on DockerHub:\n // RegExp('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(:?-(?<compatibility>.*-r)(?<build>\\\\d+))?$');\n protected readonly _config: RegExp;\n\n constructor(_new_config: string | undefined) {\n super();\n const new_config = _new_config ?? '^(?<major>\\\\d+)?$';\n\n // without at least one of {major, minor, patch} specified in the regex,\n // this versioner will not work properly\n if (\n !new_config.includes('<major>') &&\n !new_config.includes('<minor>') &&\n !new_config.includes('<patch>')\n ) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = new_config;\n error.validationError =\n 'regex versioning needs at least one major, minor or patch group defined';\n throw error;\n }\n\n // TODO: should we validate the user has not added extra unsupported\n // capture groups? (#9717)\n this._config = regEx(new_config);\n }\n\n // convenience method for passing a string into a Version given current config.\n protected _parse(version: string): RegExpVersion | null {\n const groups = this._config?.exec(version)?.groups;\n if (!groups) {\n return null;\n }\n\n const { major, minor, patch, build, revision, prerelease, compatibility } =\n groups;\n const release = [\n isUndefined(major) ? 0 : Number.parseInt(major, 10),\n isUndefined(minor) ? 0 : Number.parseInt(minor, 10),\n isUndefined(patch) ? 0 : Number.parseInt(patch, 10),\n ];\n\n if (build) {\n release.push(Number.parseInt(build, 10));\n if (revision) {\n release.push(Number.parseInt(revision, 10));\n }\n }\n\n return {\n release,\n prerelease,\n compatibility,\n };\n }\n\n override isCompatible(version: string, current: string): boolean {\n const parsedVersion = this._parse(version);\n const parsedCurrent = this._parse(current);\n return !!(\n parsedVersion &&\n parsedVersion.compatibility === parsedCurrent?.compatibility\n );\n }\n\n override isValid(input: string): boolean {\n return (\n this.isVersion(input) ||\n parseRange(input, (v) => this.isVersion(v)) !== null\n );\n }\n\n override isVersion(version: string): boolean {\n return this._parse(version) !== null;\n }\n\n override isSingleVersion(input: string): boolean {\n const range = parseRange(input, (v) => this.isVersion(v));\n if (range) {\n return range.length === 1 && ['=', '=='].includes(range[0].operator);\n }\n return this.isVersion(input);\n }\n\n override matches(version: string, range: string): boolean {\n const comparators = parseRange(range, (v) => this.isVersion(v));\n if (!comparators) {\n return this.equals(version, range);\n }\n return comparators.every((comparator) =>\n satisfiesComparator(\n this._compare(version, comparator.version),\n comparator.operator,\n ),\n );\n }\n\n override getSatisfyingVersion(\n versions: string[],\n range: string,\n ): string | null {\n if (parseRange(range, (v) => this.isVersion(v)) === null) {\n return super.getSatisfyingVersion(versions, range);\n }\n const matching = versions.filter((v) => this.matches(v, range));\n matching.sort((a, b) => this._compare(a, b));\n return matching.at(-1) ?? null;\n }\n\n override minSatisfyingVersion(\n versions: string[],\n range: string,\n ): string | null {\n if (parseRange(range, (v) => this.isVersion(v)) === null) {\n return super.minSatisfyingVersion(versions, range);\n }\n const matching = versions.filter((v) => this.matches(v, range));\n matching.sort((a, b) => this._compare(a, b));\n return matching.at(0) ?? null;\n }\n}\n\nexport const api: VersioningApiConstructor = RegExpVersioningApi;\n\nexport default api;\n"],"mappings":";;;;;;AAQA,MAAa,KAAK;AAKlB,IAAa,sBAAb,cAAyC,qBAAoC;CAY3E;CAEA,YAAY,aAAiC;EAC3C,MAAM;EACN,MAAM,aAAa,eAAe;EAIlC,IACE,CAAC,WAAW,SAAS,SAAS,KAC9B,CAAC,WAAW,SAAS,SAAS,KAC9B,CAAC,WAAW,SAAS,SAAS,GAC9B;GACA,MAAM,QAAQ,IAAI,MAAM,iBAAiB;GACzC,MAAM,mBAAmB;GACzB,MAAM,kBACJ;GACF,MAAM;EACR;EAIA,KAAK,UAAU,MAAM,UAAU;CACjC;CAGA,OAAiB,SAAuC;EACtD,MAAM,SAAS,KAAK,SAAS,KAAK,OAAO,CAAC,EAAE;EAC5C,IAAI,CAAC,QACH,OAAO;EAGT,MAAM,EAAE,OAAO,OAAO,OAAO,OAAO,UAAU,YAAY,kBACxD;EACF,MAAM,UAAU;GACd,YAAY,KAAK,IAAI,IAAI,OAAO,SAAS,OAAO,EAAE;GAClD,YAAY,KAAK,IAAI,IAAI,OAAO,SAAS,OAAO,EAAE;GAClD,YAAY,KAAK,IAAI,IAAI,OAAO,SAAS,OAAO,EAAE;EACpD;EAEA,IAAI,OAAO;GACT,QAAQ,KAAK,OAAO,SAAS,OAAO,EAAE,CAAC;GACvC,IAAI,UACF,QAAQ,KAAK,OAAO,SAAS,UAAU,EAAE,CAAC;EAE9C;EAEA,OAAO;GACL;GACA;GACA;EACF;CACF;CAEA,aAAsB,SAAiB,SAA0B;EAC/D,MAAM,gBAAgB,KAAK,OAAO,OAAO;EACzC,MAAM,gBAAgB,KAAK,OAAO,OAAO;EACzC,OAAO,CAAC,EACN,iBACA,cAAc,kBAAkB,eAAe;CAEnD;CAEA,QAAiB,OAAwB;EACvC,OACE,KAAK,UAAU,KAAK,KACpB,WAAW,QAAQ,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM;CAEpD;CAEA,UAAmB,SAA0B;EAC3C,OAAO,KAAK,OAAO,OAAO,MAAM;CAClC;CAEA,gBAAyB,OAAwB;EAC/C,MAAM,QAAQ,WAAW,QAAQ,MAAM,KAAK,UAAU,CAAC,CAAC;EACxD,IAAI,OACF,OAAO,MAAM,WAAW,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,QAAQ;EAErE,OAAO,KAAK,UAAU,KAAK;CAC7B;CAEA,QAAiB,SAAiB,OAAwB;EACxD,MAAM,cAAc,WAAW,QAAQ,MAAM,KAAK,UAAU,CAAC,CAAC;EAC9D,IAAI,CAAC,aACH,OAAO,KAAK,OAAO,SAAS,KAAK;EAEnC,OAAO,YAAY,OAAO,eACxB,oBACE,KAAK,SAAS,SAAS,WAAW,OAAO,GACzC,WAAW,QACb,CACF;CACF;CAEA,qBACE,UACA,OACe;EACf,IAAI,WAAW,QAAQ,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,MAClD,OAAO,MAAM,qBAAqB,UAAU,KAAK;EAEnD,MAAM,WAAW,SAAS,QAAQ,MAAM,KAAK,QAAQ,GAAG,KAAK,CAAC;EAC9D,SAAS,MAAM,GAAG,MAAM,KAAK,SAAS,GAAG,CAAC,CAAC;EAC3C,OAAO,SAAS,GAAG,EAAE,KAAK;CAC5B;CAEA,qBACE,UACA,OACe;EACf,IAAI,WAAW,QAAQ,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,MAClD,OAAO,MAAM,qBAAqB,UAAU,KAAK;EAEnD,MAAM,WAAW,SAAS,QAAQ,MAAM,KAAK,QAAQ,GAAG,KAAK,CAAC;EAC9D,SAAS,MAAM,GAAG,MAAM,KAAK,SAAS,GAAG,CAAC,CAAC;EAC3C,OAAO,SAAS,GAAG,CAAC,KAAK;CAC3B;AACF;AAEA,MAAa,MAAgC"}
|