renovate 44.30.0 → 44.30.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/dist/config/migration.js +3 -3
  2. package/dist/config/migration.js.map +1 -1
  3. package/dist/config/migrations/custom/azure-gitlab-automerge-migration.js.map +1 -1
  4. package/dist/config/migrations/custom/dep-types-migration.js.map +1 -1
  5. package/dist/config/options/env.js +2 -1
  6. package/dist/config/options/env.js.map +1 -1
  7. package/dist/config/options/index.js +1 -1
  8. package/dist/config/options/index.js.map +1 -1
  9. package/dist/global-config-option-defaults.generated.js +1 -1
  10. package/dist/global-config-option-defaults.generated.js.map +1 -1
  11. package/dist/logger/utils.js +3 -3
  12. package/dist/logger/utils.js.map +1 -1
  13. package/dist/modules/datasource/crate/index.js +3 -3
  14. package/dist/modules/datasource/crate/index.js.map +1 -1
  15. package/dist/modules/datasource/go/base.js +1 -1
  16. package/dist/modules/datasource/go/base.js.map +1 -1
  17. package/dist/modules/datasource/go/goproxy-parser.js +1 -1
  18. package/dist/modules/datasource/go/goproxy-parser.js.map +1 -1
  19. package/dist/modules/datasource/hexpm-bob/index.js +3 -3
  20. package/dist/modules/datasource/hexpm-bob/index.js.map +1 -1
  21. package/dist/modules/datasource/maven/util.js +1 -1
  22. package/dist/modules/datasource/maven/util.js.map +1 -1
  23. package/dist/modules/datasource/packagist/schema.js +2 -1
  24. package/dist/modules/datasource/packagist/schema.js.map +1 -1
  25. package/dist/modules/datasource/pypi/common.js +1 -1
  26. package/dist/modules/datasource/pypi/common.js.map +1 -1
  27. package/dist/modules/datasource/rpm/repomd.js +2 -1
  28. package/dist/modules/datasource/rpm/repomd.js.map +1 -1
  29. package/dist/modules/datasource/sbt-package/util.js +3 -3
  30. package/dist/modules/datasource/sbt-package/util.js.map +1 -1
  31. package/dist/modules/datasource/terraform-provider/index.js +1 -1
  32. package/dist/modules/datasource/terraform-provider/index.js.map +1 -1
  33. package/dist/modules/manager/ansible-galaxy/util.js +4 -4
  34. package/dist/modules/manager/ansible-galaxy/util.js.map +1 -1
  35. package/dist/modules/manager/asdf/upgradeable-tooling.js +5 -5
  36. package/dist/modules/manager/asdf/upgradeable-tooling.js.map +1 -1
  37. package/dist/modules/manager/bazel-module/extract.js +2 -1
  38. package/dist/modules/manager/bazel-module/extract.js.map +1 -1
  39. package/dist/modules/manager/bazel-module/parser/repo-rules.js +1 -1
  40. package/dist/modules/manager/bazel-module/parser/repo-rules.js.map +1 -1
  41. package/dist/modules/manager/bitbucket-pipelines/extract.js +2 -2
  42. package/dist/modules/manager/bitbucket-pipelines/extract.js.map +1 -1
  43. package/dist/modules/manager/bun/utils.js +2 -1
  44. package/dist/modules/manager/bun/utils.js.map +1 -1
  45. package/dist/modules/manager/bundler/extract.js +1 -1
  46. package/dist/modules/manager/bundler/extract.js.map +1 -1
  47. package/dist/modules/manager/cake/index.js.map +1 -1
  48. package/dist/modules/manager/composer/schema.js +2 -2
  49. package/dist/modules/manager/composer/schema.js.map +1 -1
  50. package/dist/modules/manager/cpanfile/language.js.map +1 -1
  51. package/dist/modules/manager/cpanfile/parser.js +4 -4
  52. package/dist/modules/manager/cpanfile/parser.js.map +1 -1
  53. package/dist/modules/manager/crossplane/extract.js +2 -1
  54. package/dist/modules/manager/crossplane/extract.js.map +1 -1
  55. package/dist/modules/manager/deps-edn/extract.js +1 -1
  56. package/dist/modules/manager/deps-edn/extract.js.map +1 -1
  57. package/dist/modules/manager/deps-edn/parser.js.map +1 -1
  58. package/dist/modules/manager/dockerfile/extract.js +2 -2
  59. package/dist/modules/manager/dockerfile/extract.js.map +1 -1
  60. package/dist/modules/manager/flux/extract.js +2 -2
  61. package/dist/modules/manager/flux/extract.js.map +1 -1
  62. package/dist/modules/manager/git-submodules/extract.js +1 -1
  63. package/dist/modules/manager/git-submodules/extract.js.map +1 -1
  64. package/dist/modules/manager/gomod/artifacts.js +1 -1
  65. package/dist/modules/manager/gomod/artifacts.js.map +1 -1
  66. package/dist/modules/manager/gradle/extract/consistent-versions-plugin.js +2 -2
  67. package/dist/modules/manager/gradle/extract/consistent-versions-plugin.js.map +1 -1
  68. package/dist/modules/manager/gradle-wrapper/artifacts.js +2 -2
  69. package/dist/modules/manager/gradle-wrapper/artifacts.js.map +1 -1
  70. package/dist/modules/manager/helmv3/utils.js +2 -1
  71. package/dist/modules/manager/helmv3/utils.js.map +1 -1
  72. package/dist/modules/manager/hermit/extract.js +1 -1
  73. package/dist/modules/manager/hermit/extract.js.map +1 -1
  74. package/dist/modules/manager/homebrew/utils.js +3 -3
  75. package/dist/modules/manager/homebrew/utils.js.map +1 -1
  76. package/dist/modules/manager/jsonnet-bundler/extract.js +2 -1
  77. package/dist/modules/manager/jsonnet-bundler/extract.js.map +1 -1
  78. package/dist/modules/manager/leiningen/extract.js +2 -2
  79. package/dist/modules/manager/leiningen/extract.js.map +1 -1
  80. package/dist/modules/manager/maven-wrapper/artifacts.js +6 -6
  81. package/dist/modules/manager/maven-wrapper/artifacts.js.map +1 -1
  82. package/dist/modules/manager/mise/backends.js +3 -3
  83. package/dist/modules/manager/mise/backends.js.map +1 -1
  84. package/dist/modules/manager/mise/upgradeable-tooling.js +1 -1
  85. package/dist/modules/manager/mise/upgradeable-tooling.js.map +1 -1
  86. package/dist/modules/manager/npm/extract/common/dependency.js +2 -2
  87. package/dist/modules/manager/npm/extract/common/dependency.js.map +1 -1
  88. package/dist/modules/manager/npm/extract/post/locked-versions.js +2 -1
  89. package/dist/modules/manager/npm/extract/post/locked-versions.js.map +1 -1
  90. package/dist/modules/manager/npm/post-update/index.js +1 -1
  91. package/dist/modules/manager/npm/post-update/index.js.map +1 -1
  92. package/dist/modules/manager/npm/post-update/npm.js +2 -1
  93. package/dist/modules/manager/npm/post-update/npm.js.map +1 -1
  94. package/dist/modules/manager/npm/post-update/yarn.js +2 -2
  95. package/dist/modules/manager/npm/post-update/yarn.js.map +1 -1
  96. package/dist/modules/manager/npm/schema.js +2 -1
  97. package/dist/modules/manager/npm/schema.js.map +1 -1
  98. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/get-locked.js +2 -1
  99. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/get-locked.js.map +1 -1
  100. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/replace.js +1 -1
  101. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/replace.js.map +1 -1
  102. package/dist/modules/manager/nuget/extract.js +1 -1
  103. package/dist/modules/manager/nuget/extract.js.map +1 -1
  104. package/dist/modules/manager/nvm/extract.js +2 -1
  105. package/dist/modules/manager/nvm/extract.js.map +1 -1
  106. package/dist/modules/manager/osgi/extract.js +2 -1
  107. package/dist/modules/manager/osgi/extract.js.map +1 -1
  108. package/dist/modules/manager/pep621/processors/uv.js +2 -1
  109. package/dist/modules/manager/pep621/processors/uv.js.map +1 -1
  110. package/dist/modules/manager/pip_requirements/extract.js +1 -1
  111. package/dist/modules/manager/pip_requirements/extract.js.map +1 -1
  112. package/dist/modules/manager/pip_setup/extract.js +3 -3
  113. package/dist/modules/manager/pip_setup/extract.js.map +1 -1
  114. package/dist/modules/manager/pixi/schema.js +2 -1
  115. package/dist/modules/manager/pixi/schema.js.map +1 -1
  116. package/dist/modules/manager/setup-cfg/extract.js +1 -1
  117. package/dist/modules/manager/setup-cfg/extract.js.map +1 -1
  118. package/dist/modules/manager/sveltos/util.js +1 -1
  119. package/dist/modules/manager/sveltos/util.js.map +1 -1
  120. package/dist/modules/manager/typst/extract.js +2 -2
  121. package/dist/modules/manager/typst/extract.js.map +1 -1
  122. package/dist/modules/platform/azure/issue.js +2 -1
  123. package/dist/modules/platform/azure/issue.js.map +1 -1
  124. package/dist/modules/platform/bitbucket/index.js +1 -1
  125. package/dist/modules/platform/bitbucket/index.js.map +1 -1
  126. package/dist/modules/platform/bitbucket/schema.js +2 -1
  127. package/dist/modules/platform/bitbucket/schema.js.map +1 -1
  128. package/dist/modules/platform/codecommit/codecommit-client.js +2 -1
  129. package/dist/modules/platform/codecommit/codecommit-client.js.map +1 -1
  130. package/dist/modules/platform/gerrit/utils.js +1 -1
  131. package/dist/modules/platform/gerrit/utils.js.map +1 -1
  132. package/dist/modules/platform/github/index.js +8 -8
  133. package/dist/modules/platform/github/index.js.map +1 -1
  134. package/dist/modules/platform/github/massage-markdown-links.js +6 -3
  135. package/dist/modules/platform/github/massage-markdown-links.js.map +1 -1
  136. package/dist/modules/versioning/apk/index.js +15 -15
  137. package/dist/modules/versioning/apk/index.js.map +1 -1
  138. package/dist/modules/versioning/bazel-module/bzlmod-version.js +3 -2
  139. package/dist/modules/versioning/bazel-module/bzlmod-version.js.map +1 -1
  140. package/dist/modules/versioning/bazel-module/index.js +2 -1
  141. package/dist/modules/versioning/bazel-module/index.js.map +1 -1
  142. package/dist/modules/versioning/composer/index.js +2 -2
  143. package/dist/modules/versioning/composer/index.js.map +1 -1
  144. package/dist/modules/versioning/conan/range.js +4 -3
  145. package/dist/modules/versioning/conan/range.js.map +1 -1
  146. package/dist/modules/versioning/conda/index.js +4 -3
  147. package/dist/modules/versioning/conda/index.js.map +1 -1
  148. package/dist/modules/versioning/distro.js +2 -1
  149. package/dist/modules/versioning/distro.js.map +1 -1
  150. package/dist/modules/versioning/generic.js +2 -1
  151. package/dist/modules/versioning/generic.js.map +1 -1
  152. package/dist/modules/versioning/hashicorp/convertor.js +1 -1
  153. package/dist/modules/versioning/hashicorp/convertor.js.map +1 -1
  154. package/dist/modules/versioning/npm/range.js +1 -1
  155. package/dist/modules/versioning/npm/range.js.map +1 -1
  156. package/dist/modules/versioning/nuget/range.js +2 -1
  157. package/dist/modules/versioning/nuget/range.js.map +1 -1
  158. package/dist/modules/versioning/perl/index.js +1 -1
  159. package/dist/modules/versioning/perl/index.js.map +1 -1
  160. package/dist/modules/versioning/poetry/transform.js +2 -2
  161. package/dist/modules/versioning/poetry/transform.js.map +1 -1
  162. package/dist/modules/versioning/rez/pattern.js.map +1 -1
  163. package/dist/modules/versioning/ruby/index.js +1 -1
  164. package/dist/modules/versioning/ruby/index.js.map +1 -1
  165. package/dist/modules/versioning/semver/index.js +2 -1
  166. package/dist/modules/versioning/semver/index.js.map +1 -1
  167. package/dist/modules/versioning/semver-coerced/index.js +1 -1
  168. package/dist/modules/versioning/semver-coerced/index.js.map +1 -1
  169. package/dist/util/emoji.js.map +1 -1
  170. package/dist/util/exec/containerbase.js +2 -1
  171. package/dist/util/exec/containerbase.js.map +1 -1
  172. package/dist/util/exec/env.js +2 -1
  173. package/dist/util/exec/env.js.map +1 -1
  174. package/dist/util/git/private-key.js +1 -1
  175. package/dist/util/git/private-key.js.map +1 -1
  176. package/dist/util/github/graphql/datasource-fetcher.js +2 -1
  177. package/dist/util/github/graphql/datasource-fetcher.js.map +1 -1
  178. package/dist/util/http/forgejo.js +2 -1
  179. package/dist/util/http/forgejo.js.map +1 -1
  180. package/dist/util/http/gitea.js +2 -1
  181. package/dist/util/http/gitea.js.map +1 -1
  182. package/dist/util/number.js +2 -1
  183. package/dist/util/number.js.map +1 -1
  184. package/dist/util/string-match.js +1 -1
  185. package/dist/util/string-match.js.map +1 -1
  186. package/dist/util/url.js +2 -2
  187. package/dist/util/url.js.map +1 -1
  188. package/dist/workers/global/config/parse/cli.js +1 -1
  189. package/dist/workers/global/config/parse/cli.js.map +1 -1
  190. package/dist/workers/global/config/parse/coersions.js +2 -1
  191. package/dist/workers/global/config/parse/coersions.js.map +1 -1
  192. package/dist/workers/global/config/parse/host-rules-from-env.js +2 -1
  193. package/dist/workers/global/config/parse/host-rules-from-env.js.map +1 -1
  194. package/dist/workers/repository/model/commit-message.js +2 -1
  195. package/dist/workers/repository/model/commit-message.js.map +1 -1
  196. package/dist/workers/repository/model/semantic-commit-message.js +2 -1
  197. package/dist/workers/repository/model/semantic-commit-message.js.map +1 -1
  198. package/dist/workers/repository/update/pr/changelog/common.js +1 -1
  199. package/dist/workers/repository/update/pr/changelog/common.js.map +1 -1
  200. package/dist/workers/repository/updates/generate.js +1 -1
  201. package/dist/workers/repository/updates/generate.js.map +1 -1
  202. package/package.json +1 -1
  203. package/renovate-schema.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/conda/index.ts"],"sourcesContent":["import { Version, VersionSpec } from '@baszalmstra/rattler';\nimport type { SemVer } from 'semver';\n\nimport type { RangeStrategy } from '../../../types/versioning.ts';\nimport * as pep440 from '../pep440/index.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\n\nfunction parse(v: string): Version | null {\n try {\n return new Version(v);\n } catch {\n return null;\n }\n}\n\nexport const id = 'conda';\nexport const displayName = 'conda';\nexport const urls = [\n '[Conda package match specifications](https://docs.conda.io/projects/conda-build/en/stable/resources/package-spec.html#package-match-specifications)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n];\n\nfunction isValidVersion(s: string): boolean {\n try {\n new Version(s);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isValidVersionSpec(s: string): boolean {\n try {\n new VersionSpec(s);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isValid(input: string): boolean {\n return isValidVersion(input) || isValidVersionSpec(input);\n}\n\nfunction matches(version: string, range: string): boolean {\n try {\n return new VersionSpec(range).matches(new Version(version));\n } catch {\n return false;\n }\n}\n\nfunction isSingleVersion(input: string): boolean {\n if (!input.startsWith('=')) {\n return false;\n }\n\n return isValidVersion(input.replace(/^==/, '').trimStart());\n}\n\nfunction getPinnedValue(newVersion: string): string {\n return `==${newVersion}`;\n}\n\nfunction getNewValue({\n currentValue,\n rangeStrategy,\n currentVersion,\n newVersion,\n isReplacement,\n}: NewValueConfig): string | null {\n if (currentValue === '*') {\n if (rangeStrategy === 'bump') {\n return `>=${newVersion}`;\n }\n\n // don't think you can widen or replace `*`\n return null;\n }\n\n const normalizedCurrentValue = new VersionSpec(currentValue).toString();\n\n // it's valid range spec in conda to write `3.12.*`, translate to pep440 `==3.12.*`\n if (/^(\\d+\\.)+\\*$/.test(normalizedCurrentValue)) {\n const newValue = pep440.api.getNewValue({\n currentValue: `==${normalizedCurrentValue}`,\n rangeStrategy,\n currentVersion,\n newVersion,\n isReplacement,\n });\n\n return newValue?.replace(/^==/, '') ?? null;\n }\n\n return pep440.api.getNewValue({\n currentValue: normalizedCurrentValue,\n rangeStrategy,\n currentVersion,\n newVersion,\n isReplacement,\n });\n}\n\nfunction sortVersions(version: string, other: string): number {\n return new Version(version).compare(new Version(other));\n}\n\nfunction equals(version: string, other: string): boolean {\n const v2 = parse(other);\n if (!v2) {\n return false;\n }\n\n return parse(version)?.equals(v2) ?? false;\n}\n\nfunction isStable(version: string): boolean {\n return !(parse(version)?.isDev ?? true);\n}\n\nfunction isCompatible(_version: string, _current?: string): boolean {\n return true;\n}\n\nfunction getMajor(version: string | SemVer): null | number {\n return parse(version as string)?.asMajorMinor?.()?.[0] ?? null;\n}\nfunction getMinor(version: string | SemVer): null | number {\n return parse(version as string)?.asMajorMinor?.()?.[1] ?? null;\n}\n\nfunction getPatch(version: string | SemVer): null | number {\n try {\n return pep440.api.getPatch(version);\n } catch {\n return null;\n }\n}\n\nfunction isGreaterThan(version: string, other: string): boolean {\n return sortVersions(version, other) > 0;\n}\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n const spec = new VersionSpec(range);\n\n const satisfiedVersions = versions\n .map((v) => {\n return [new Version(v), v] as const;\n })\n .filter(([v, _raw]) => spec.matches(v))\n .sort((a, b) => {\n return a[0].compare(b[0]);\n });\n\n if (satisfiedVersions.length === 0) {\n return null;\n }\n\n return satisfiedVersions.at(-1)![1];\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n const spec = new VersionSpec(range);\n\n const satisfiedVersions = versions\n .map((v) => {\n return [new Version(v), v] as const;\n })\n .filter(([v, _raw]) => spec.matches(v))\n .sort((a, b) => {\n return a[0].compare(b[0]);\n });\n\n if (satisfiedVersions.length === 0) {\n return null;\n }\n\n return satisfiedVersions[0][1];\n}\n\nexport const api = {\n equals,\n isValid,\n isVersion: isValidVersion,\n isSingleVersion,\n\n // conda doesn't have stable version and non-stable version\n // for example, tzdata has version 2024a but it's stable\n isStable,\n\n // conda use version are always compatible with each other.\n isCompatible,\n\n getMajor,\n getMinor,\n // sadly conda version doesn't have a concept of patch version\n // so we try to use pep440 get a patch version.\n getPatch,\n\n isGreaterThan,\n getSatisfyingVersion,\n\n minSatisfyingVersion,\n getNewValue,\n getPinnedValue,\n matches,\n sortVersions,\n} satisfies VersioningApi;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/conda/index.ts"],"sourcesContent":["import { Version, VersionSpec } from '@baszalmstra/rattler';\nimport type { SemVer } from 'semver';\n\nimport type { RangeStrategy } from '../../../types/versioning.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport * as pep440 from '../pep440/index.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\n\nfunction parse(v: string): Version | null {\n try {\n return new Version(v);\n } catch {\n return null;\n }\n}\n\nexport const id = 'conda';\nexport const displayName = 'conda';\nexport const urls = [\n '[Conda package match specifications](https://docs.conda.io/projects/conda-build/en/stable/resources/package-spec.html#package-match-specifications)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n];\n\nfunction isValidVersion(s: string): boolean {\n try {\n new Version(s);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isValidVersionSpec(s: string): boolean {\n try {\n new VersionSpec(s);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isValid(input: string): boolean {\n return isValidVersion(input) || isValidVersionSpec(input);\n}\n\nfunction matches(version: string, range: string): boolean {\n try {\n return new VersionSpec(range).matches(new Version(version));\n } catch {\n return false;\n }\n}\n\nfunction isSingleVersion(input: string): boolean {\n if (!input.startsWith('=')) {\n return false;\n }\n\n return isValidVersion(input.replace(regEx(/^==/), '').trimStart());\n}\n\nfunction getPinnedValue(newVersion: string): string {\n return `==${newVersion}`;\n}\n\nfunction getNewValue({\n currentValue,\n rangeStrategy,\n currentVersion,\n newVersion,\n isReplacement,\n}: NewValueConfig): string | null {\n if (currentValue === '*') {\n if (rangeStrategy === 'bump') {\n return `>=${newVersion}`;\n }\n\n // don't think you can widen or replace `*`\n return null;\n }\n\n const normalizedCurrentValue = new VersionSpec(currentValue).toString();\n\n // it's valid range spec in conda to write `3.12.*`, translate to pep440 `==3.12.*`\n if (regEx(/^(\\d+\\.)+\\*$/).test(normalizedCurrentValue)) {\n const newValue = pep440.api.getNewValue({\n currentValue: `==${normalizedCurrentValue}`,\n rangeStrategy,\n currentVersion,\n newVersion,\n isReplacement,\n });\n\n return newValue?.replace(regEx(/^==/), '') ?? null;\n }\n\n return pep440.api.getNewValue({\n currentValue: normalizedCurrentValue,\n rangeStrategy,\n currentVersion,\n newVersion,\n isReplacement,\n });\n}\n\nfunction sortVersions(version: string, other: string): number {\n return new Version(version).compare(new Version(other));\n}\n\nfunction equals(version: string, other: string): boolean {\n const v2 = parse(other);\n if (!v2) {\n return false;\n }\n\n return parse(version)?.equals(v2) ?? false;\n}\n\nfunction isStable(version: string): boolean {\n return !(parse(version)?.isDev ?? true);\n}\n\nfunction isCompatible(_version: string, _current?: string): boolean {\n return true;\n}\n\nfunction getMajor(version: string | SemVer): null | number {\n return parse(version as string)?.asMajorMinor?.()?.[0] ?? null;\n}\nfunction getMinor(version: string | SemVer): null | number {\n return parse(version as string)?.asMajorMinor?.()?.[1] ?? null;\n}\n\nfunction getPatch(version: string | SemVer): null | number {\n try {\n return pep440.api.getPatch(version);\n } catch {\n return null;\n }\n}\n\nfunction isGreaterThan(version: string, other: string): boolean {\n return sortVersions(version, other) > 0;\n}\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n const spec = new VersionSpec(range);\n\n const satisfiedVersions = versions\n .map((v) => {\n return [new Version(v), v] as const;\n })\n .filter(([v, _raw]) => spec.matches(v))\n .sort((a, b) => {\n return a[0].compare(b[0]);\n });\n\n if (satisfiedVersions.length === 0) {\n return null;\n }\n\n return satisfiedVersions.at(-1)![1];\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n const spec = new VersionSpec(range);\n\n const satisfiedVersions = versions\n .map((v) => {\n return [new Version(v), v] as const;\n })\n .filter(([v, _raw]) => spec.matches(v))\n .sort((a, b) => {\n return a[0].compare(b[0]);\n });\n\n if (satisfiedVersions.length === 0) {\n return null;\n }\n\n return satisfiedVersions[0][1];\n}\n\nexport const api = {\n equals,\n isValid,\n isVersion: isValidVersion,\n isSingleVersion,\n\n // conda doesn't have stable version and non-stable version\n // for example, tzdata has version 2024a but it's stable\n isStable,\n\n // conda use version are always compatible with each other.\n isCompatible,\n\n getMajor,\n getMinor,\n // sadly conda version doesn't have a concept of patch version\n // so we try to use pep440 get a patch version.\n getPatch,\n\n isGreaterThan,\n getSatisfyingVersion,\n\n minSatisfyingVersion,\n getNewValue,\n getPinnedValue,\n matches,\n sortVersions,\n} satisfies VersioningApi;\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { regEx } from "../../util/regex.js";
1
2
  import data from "../../data-files.generated.js";
2
3
  import { DateTime } from "luxon";
3
4
  //#region lib/modules/versioning/distro.ts
@@ -7,7 +8,7 @@ var DistroInfo = class {
7
8
  _sortedInfo = [];
8
9
  _distroInfo;
9
10
  constructor(distroJsonKey) {
10
- this._distroInfo = JSON.parse(data.get(distroJsonKey).replace(/v([\d.]+)\b/gm, "$1"));
11
+ this._distroInfo = JSON.parse(data.get(distroJsonKey).replace(regEx(/v([\d.]+)\b/gm), "$1"));
11
12
  for (const version of Object.keys(this._distroInfo)) {
12
13
  const schedule = this._distroInfo[version];
13
14
  this._codenameToVersion.set(schedule.series, {
@@ -1 +1 @@
1
- {"version":3,"file":"distro.js","names":["dataFiles"],"sources":["../../../lib/modules/versioning/distro.ts"],"sourcesContent":["import { DateTime } from 'luxon';\nimport dataFiles from '../../data-files.generated.ts';\n\nexport interface DistroSchedule {\n codename: string;\n series: string;\n created: string;\n release?: string;\n eol?: string;\n eol_server?: string;\n eol_esm?: string;\n eol_lts?: string;\n eol_elts?: string;\n}\n\nexport type DistroDataFile =\n | 'data/ubuntu-distro-info.json'\n | 'data/debian-distro-info.json';\n\nexport type DistroInfoRecord = Record<string, DistroSchedule>;\n\nexport type DistroInfoRecordWithVersion = { version: string } & DistroSchedule;\n\n// Days to delay new releases\nconst delay = 1;\n\nexport class DistroInfo {\n private readonly _codenameToVersion = new Map<\n string,\n DistroInfoRecordWithVersion\n >();\n\n private readonly _sortedInfo: DistroInfoRecordWithVersion[] = [];\n\n private readonly _distroInfo: DistroInfoRecord;\n\n constructor(distroJsonKey: DistroDataFile) {\n this._distroInfo = JSON.parse(\n dataFiles.get(distroJsonKey)!.replace(/v([\\d.]+)\\b/gm, '$1'),\n );\n\n for (const version of Object.keys(this._distroInfo)) {\n const schedule = this._distroInfo[version];\n this._codenameToVersion.set(schedule.series, { version, ...schedule });\n }\n\n const arr = Object.keys(this._distroInfo).sort(\n (a, b) => parseFloat(a) - parseFloat(b),\n );\n\n for (const v of arr) {\n const obj = { version: v, ...this._distroInfo[v.toString()] };\n if (!obj.release) {\n // istanbul ignore next\n continue;\n }\n this._sortedInfo.push(obj);\n }\n }\n\n /**\n * Check if input is a valid release codename\n * @param input A codename\n * @returns true if input is a codename, false otherwise\n */\n public isCodename(input: string): boolean {\n return this._codenameToVersion.has(input);\n }\n\n /**\n * Checks if given input string is a valid release version\n * @param input A codename/semVer\n * @returns true if release exists, false otherwise\n */\n public exists(input: string): boolean {\n const ver = this.getVersionByCodename(input);\n return !!this._distroInfo[ver];\n }\n\n /**\n * Get semVer representation of a given codename\n * @param input A codename\n * @returns A semVer if exists, otherwise input string is returned\n */\n public getVersionByCodename(input: string): string {\n const schedule = this._codenameToVersion.get(input);\n if (schedule) {\n return schedule.version;\n }\n return input;\n }\n\n /**\n * Get codename representation of a given semVer\n * @param input A semVer\n * @returns A codename if exists, otherwise input string is returned\n */\n public getCodenameByVersion(input: string): string {\n const di = this._distroInfo[input];\n if (di) {\n return di.series;\n }\n // istanbul ignore next\n return input;\n }\n\n /**\n * Get schedule of a given release\n * @param input A codename/semVer\n * @returns A schedule if available, otherwise undefined\n */\n public getSchedule(input: string): DistroSchedule | null {\n const ver = this.getVersionByCodename(input);\n return this._distroInfo[ver] ?? null;\n }\n\n /**\n * Check if a given release has passed its EOL\n * @param input A codename/semVer\n * @returns false if still supported, true otherwise\n */\n public isEolLts(input: string): boolean {\n const ver = this.getVersionByCodename(input);\n const schedule = this.getSchedule(ver);\n const endLts = schedule?.eol ?? null;\n let end = schedule?.eol_lts ?? null;\n\n // ubuntu: does not have eol_lts\n // debian: only \"Stable\" has no eol_lts, old and oldold has both\n end ??= endLts;\n\n if (end) {\n const now = DateTime.now().toUTC();\n const eol = DateTime.fromISO(end, { zone: 'utc' });\n return eol < now;\n }\n\n return true;\n }\n\n /**\n * Check if a given version has been released\n * @param input A codename/semVer\n * @returns false if unreleased or has no schedule, true otherwise\n */\n public isReleased(input: string): boolean {\n const ver = this.getVersionByCodename(input);\n const schedule = this.getSchedule(ver);\n\n if (!schedule?.release) {\n return false;\n }\n\n const now = DateTime.now().minus({ day: delay }).toUTC();\n const release = DateTime.fromISO(schedule.release, { zone: 'utc' });\n\n return release < now;\n }\n\n /**\n * Check if a given version has been created\n * @param input A codename/semVer\n * @returns false if unreleased or has no schedule, true otherwise\n */\n public isCreated(input: string): boolean {\n const ver = this.getVersionByCodename(input);\n const schedule = this.getSchedule(ver);\n\n if (!schedule) {\n return false;\n }\n\n const now = DateTime.now().minus({ day: delay }).toUTC();\n const created = DateTime.fromISO(schedule.created, { zone: 'utc' });\n\n return created < now;\n }\n\n /**\n * Get distro info for the release that has N other newer releases.\n * Example: n=0 corresponds to the latest available release, n=1 the release before, etc.\n * In Debian terms: N = 0 -> stable, N = 1 -> oldstable, N = 2 -> oldoldstalbe\n * @param n\n * @returns Distro info of the Nth latest release\n */\n public getNLatest(n: number): DistroInfoRecordWithVersion | null {\n const len = this._sortedInfo.length - 1;\n let idx = -1;\n\n if (n < 0) {\n return null;\n }\n\n for (let i = len; i >= 0; i--) {\n if (this.isReleased(this._sortedInfo[i].version)) {\n // 'i' holds the latest released version index\n // compensate for the requested 'n'\n idx = i - Math.floor(n);\n break;\n }\n }\n\n if (idx > len || idx < 0) {\n return null;\n }\n\n return this._sortedInfo[idx];\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"distro.js","names":["dataFiles"],"sources":["../../../lib/modules/versioning/distro.ts"],"sourcesContent":["import { DateTime } from 'luxon';\nimport dataFiles from '../../data-files.generated.ts';\nimport { regEx } from '../../util/regex.ts';\n\nexport interface DistroSchedule {\n codename: string;\n series: string;\n created: string;\n release?: string;\n eol?: string;\n eol_server?: string;\n eol_esm?: string;\n eol_lts?: string;\n eol_elts?: string;\n}\n\nexport type DistroDataFile =\n | 'data/ubuntu-distro-info.json'\n | 'data/debian-distro-info.json';\n\nexport type DistroInfoRecord = Record<string, DistroSchedule>;\n\nexport type DistroInfoRecordWithVersion = { version: string } & DistroSchedule;\n\n// Days to delay new releases\nconst delay = 1;\n\nexport class DistroInfo {\n private readonly _codenameToVersion = new Map<\n string,\n DistroInfoRecordWithVersion\n >();\n\n private readonly _sortedInfo: DistroInfoRecordWithVersion[] = [];\n\n private readonly _distroInfo: DistroInfoRecord;\n\n constructor(distroJsonKey: DistroDataFile) {\n this._distroInfo = JSON.parse(\n dataFiles.get(distroJsonKey)!.replace(regEx(/v([\\d.]+)\\b/gm), '$1'),\n );\n\n for (const version of Object.keys(this._distroInfo)) {\n const schedule = this._distroInfo[version];\n this._codenameToVersion.set(schedule.series, { version, ...schedule });\n }\n\n const arr = Object.keys(this._distroInfo).sort(\n (a, b) => parseFloat(a) - parseFloat(b),\n );\n\n for (const v of arr) {\n const obj = { version: v, ...this._distroInfo[v.toString()] };\n if (!obj.release) {\n // istanbul ignore next\n continue;\n }\n this._sortedInfo.push(obj);\n }\n }\n\n /**\n * Check if input is a valid release codename\n * @param input A codename\n * @returns true if input is a codename, false otherwise\n */\n public isCodename(input: string): boolean {\n return this._codenameToVersion.has(input);\n }\n\n /**\n * Checks if given input string is a valid release version\n * @param input A codename/semVer\n * @returns true if release exists, false otherwise\n */\n public exists(input: string): boolean {\n const ver = this.getVersionByCodename(input);\n return !!this._distroInfo[ver];\n }\n\n /**\n * Get semVer representation of a given codename\n * @param input A codename\n * @returns A semVer if exists, otherwise input string is returned\n */\n public getVersionByCodename(input: string): string {\n const schedule = this._codenameToVersion.get(input);\n if (schedule) {\n return schedule.version;\n }\n return input;\n }\n\n /**\n * Get codename representation of a given semVer\n * @param input A semVer\n * @returns A codename if exists, otherwise input string is returned\n */\n public getCodenameByVersion(input: string): string {\n const di = this._distroInfo[input];\n if (di) {\n return di.series;\n }\n // istanbul ignore next\n return input;\n }\n\n /**\n * Get schedule of a given release\n * @param input A codename/semVer\n * @returns A schedule if available, otherwise undefined\n */\n public getSchedule(input: string): DistroSchedule | null {\n const ver = this.getVersionByCodename(input);\n return this._distroInfo[ver] ?? null;\n }\n\n /**\n * Check if a given release has passed its EOL\n * @param input A codename/semVer\n * @returns false if still supported, true otherwise\n */\n public isEolLts(input: string): boolean {\n const ver = this.getVersionByCodename(input);\n const schedule = this.getSchedule(ver);\n const endLts = schedule?.eol ?? null;\n let end = schedule?.eol_lts ?? null;\n\n // ubuntu: does not have eol_lts\n // debian: only \"Stable\" has no eol_lts, old and oldold has both\n end ??= endLts;\n\n if (end) {\n const now = DateTime.now().toUTC();\n const eol = DateTime.fromISO(end, { zone: 'utc' });\n return eol < now;\n }\n\n return true;\n }\n\n /**\n * Check if a given version has been released\n * @param input A codename/semVer\n * @returns false if unreleased or has no schedule, true otherwise\n */\n public isReleased(input: string): boolean {\n const ver = this.getVersionByCodename(input);\n const schedule = this.getSchedule(ver);\n\n if (!schedule?.release) {\n return false;\n }\n\n const now = DateTime.now().minus({ day: delay }).toUTC();\n const release = DateTime.fromISO(schedule.release, { zone: 'utc' });\n\n return release < now;\n }\n\n /**\n * Check if a given version has been created\n * @param input A codename/semVer\n * @returns false if unreleased or has no schedule, true otherwise\n */\n public isCreated(input: string): boolean {\n const ver = this.getVersionByCodename(input);\n const schedule = this.getSchedule(ver);\n\n if (!schedule) {\n return false;\n }\n\n const now = DateTime.now().minus({ day: delay }).toUTC();\n const created = DateTime.fromISO(schedule.created, { zone: 'utc' });\n\n return created < now;\n }\n\n /**\n * Get distro info for the release that has N other newer releases.\n * Example: n=0 corresponds to the latest available release, n=1 the release before, etc.\n * In Debian terms: N = 0 -> stable, N = 1 -> oldstable, N = 2 -> oldoldstalbe\n * @param n\n * @returns Distro info of the Nth latest release\n */\n public getNLatest(n: number): DistroInfoRecordWithVersion | null {\n const len = this._sortedInfo.length - 1;\n let idx = -1;\n\n if (n < 0) {\n return null;\n }\n\n for (let i = len; i >= 0; i--) {\n if (this.isReleased(this._sortedInfo[i].version)) {\n // 'i' holds the latest released version index\n // compensate for the requested 'n'\n idx = i - Math.floor(n);\n break;\n }\n }\n\n if (idx > len || idx < 0) {\n return null;\n }\n\n return this._sortedInfo[idx];\n }\n}\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { regEx } from "../../util/regex.js";
1
2
  import { isNonEmptyString } from "@sindresorhus/is";
2
3
  //#region lib/modules/versioning/generic.ts
3
4
  var GenericVersioningApi = class {
@@ -67,7 +68,7 @@ var GenericVersioningApi = class {
67
68
  return versions.find((v) => this.equals(v, range)) ?? null;
68
69
  }
69
70
  getNewValue({ currentValue, currentVersion, newVersion }) {
70
- if (currentVersion === `v${currentValue}`) return newVersion.replace(/^v/, "");
71
+ if (currentVersion === `v${currentValue}`) return newVersion.replace(regEx(/^v/), "");
71
72
  return newVersion ?? null;
72
73
  }
73
74
  sortVersions(version, other) {
@@ -1 +1 @@
1
- {"version":3,"file":"generic.js","names":[],"sources":["../../../lib/modules/versioning/generic.ts"],"sourcesContent":["import { isNonEmptyString } from '@sindresorhus/is';\nimport type { NewValueConfig, VersioningApi } from './types.ts';\n\nexport interface GenericVersion {\n release: number[];\n /** prereleases are treated in the standard semver manner, if present */\n prerelease?: string;\n suffix?: string;\n}\nexport type VersionParser = (version: string) => GenericVersion;\n\nexport type VersionComparator = (version: string, other: string) => number;\n\nexport abstract class GenericVersioningApi<\n T extends GenericVersion = GenericVersion,\n> implements VersioningApi {\n private _getSection(version: string, index: number): number | null {\n const parsed = this._parse(version);\n return parsed && parsed.release.length > index\n ? parsed.release[index]\n : null;\n }\n\n protected _compare(version: string, other: string): number {\n const left = this._parse(version);\n const right = this._parse(other);\n\n // istanbul ignore if\n if (!(left && right)) {\n return 1;\n }\n\n // support variable length compare\n const length = Math.max(left.release.length, right.release.length);\n for (let i = 0; i < length; i += 1) {\n // 2.1 and 2.1.0 are equivalent\n const part1 = left.release[i] ?? 0;\n const part2 = right.release[i] ?? 0;\n if (part1 !== part2) {\n return part1 - part2;\n }\n }\n\n if (\n isNonEmptyString(left.prerelease) &&\n isNonEmptyString(right.prerelease)\n ) {\n const pre = left.prerelease.localeCompare(right.prerelease, undefined, {\n numeric: true,\n });\n\n if (pre !== 0) {\n return pre;\n }\n } else if (isNonEmptyString(left.prerelease)) {\n return -1;\n } else if (isNonEmptyString(right.prerelease)) {\n return 1;\n }\n\n return this._compareOther(left, right);\n }\n\n /*\n * virtual\n */\n\n protected _compareOther(_left: T, _right: T): number {\n return 0;\n }\n\n protected abstract _parse(version: string): T | null;\n\n isValid(version: string): boolean {\n return this._parse(version) !== null;\n }\n\n isCompatible(version: string, _current: string): boolean {\n return this.isValid(version);\n }\n\n isStable(version: string): boolean {\n const parsed = this._parse(version);\n return !!(parsed && !parsed.prerelease);\n }\n\n isSingleVersion(version: string): boolean {\n return this.isValid(version);\n }\n\n isVersion(version: string): boolean {\n return this.isValid(version);\n }\n\n getMajor(version: string): number | null {\n return this._getSection(version, 0);\n }\n\n getMinor(version: string): number | null {\n return this._getSection(version, 1);\n }\n\n getPatch(version: string): number | null {\n return this._getSection(version, 2);\n }\n\n equals(version: string, other: string): boolean {\n return this._compare(version, other) === 0;\n }\n\n isGreaterThan(version: string, other: string): boolean {\n return this._compare(version, other) > 0;\n }\n\n isLessThanRange(version: string, range: string): boolean {\n return this._compare(version, range) < 0;\n }\n\n getSatisfyingVersion(versions: string[], range: string): string | null {\n const result = versions.find((v) => this.equals(v, range));\n return result ?? null;\n }\n\n minSatisfyingVersion(versions: string[], range: string): string | null {\n const result = versions.find((v) => this.equals(v, range));\n return result ?? null;\n }\n\n getNewValue({\n currentValue,\n currentVersion,\n newVersion,\n }: NewValueConfig): string | null {\n if (currentVersion === `v${currentValue}`) {\n return newVersion.replace(/^v/, '');\n }\n return newVersion ?? null;\n }\n\n sortVersions(version: string, other: string): number {\n return this._compare(version, other);\n }\n\n matches(version: string, range: string): boolean {\n return this.equals(version, range);\n }\n\n isSame(type: 'major' | 'minor' | 'patch', a: string, b: string): boolean {\n if (type === 'major') {\n return this.getMajor(a) === this.getMajor(b);\n }\n if (type === 'minor') {\n return this.getMinor(a) === this.getMinor(b);\n }\n return this.getPatch(a) === this.getPatch(b);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"generic.js","names":[],"sources":["../../../lib/modules/versioning/generic.ts"],"sourcesContent":["import { isNonEmptyString } from '@sindresorhus/is';\nimport { regEx } from '../../util/regex.ts';\nimport type { NewValueConfig, VersioningApi } from './types.ts';\n\nexport interface GenericVersion {\n release: number[];\n /** prereleases are treated in the standard semver manner, if present */\n prerelease?: string;\n suffix?: string;\n}\nexport type VersionParser = (version: string) => GenericVersion;\n\nexport type VersionComparator = (version: string, other: string) => number;\n\nexport abstract class GenericVersioningApi<\n T extends GenericVersion = GenericVersion,\n> implements VersioningApi {\n private _getSection(version: string, index: number): number | null {\n const parsed = this._parse(version);\n return parsed && parsed.release.length > index\n ? parsed.release[index]\n : null;\n }\n\n protected _compare(version: string, other: string): number {\n const left = this._parse(version);\n const right = this._parse(other);\n\n // istanbul ignore if\n if (!(left && right)) {\n return 1;\n }\n\n // support variable length compare\n const length = Math.max(left.release.length, right.release.length);\n for (let i = 0; i < length; i += 1) {\n // 2.1 and 2.1.0 are equivalent\n const part1 = left.release[i] ?? 0;\n const part2 = right.release[i] ?? 0;\n if (part1 !== part2) {\n return part1 - part2;\n }\n }\n\n if (\n isNonEmptyString(left.prerelease) &&\n isNonEmptyString(right.prerelease)\n ) {\n const pre = left.prerelease.localeCompare(right.prerelease, undefined, {\n numeric: true,\n });\n\n if (pre !== 0) {\n return pre;\n }\n } else if (isNonEmptyString(left.prerelease)) {\n return -1;\n } else if (isNonEmptyString(right.prerelease)) {\n return 1;\n }\n\n return this._compareOther(left, right);\n }\n\n /*\n * virtual\n */\n\n protected _compareOther(_left: T, _right: T): number {\n return 0;\n }\n\n protected abstract _parse(version: string): T | null;\n\n isValid(version: string): boolean {\n return this._parse(version) !== null;\n }\n\n isCompatible(version: string, _current: string): boolean {\n return this.isValid(version);\n }\n\n isStable(version: string): boolean {\n const parsed = this._parse(version);\n return !!(parsed && !parsed.prerelease);\n }\n\n isSingleVersion(version: string): boolean {\n return this.isValid(version);\n }\n\n isVersion(version: string): boolean {\n return this.isValid(version);\n }\n\n getMajor(version: string): number | null {\n return this._getSection(version, 0);\n }\n\n getMinor(version: string): number | null {\n return this._getSection(version, 1);\n }\n\n getPatch(version: string): number | null {\n return this._getSection(version, 2);\n }\n\n equals(version: string, other: string): boolean {\n return this._compare(version, other) === 0;\n }\n\n isGreaterThan(version: string, other: string): boolean {\n return this._compare(version, other) > 0;\n }\n\n isLessThanRange(version: string, range: string): boolean {\n return this._compare(version, range) < 0;\n }\n\n getSatisfyingVersion(versions: string[], range: string): string | null {\n const result = versions.find((v) => this.equals(v, range));\n return result ?? null;\n }\n\n minSatisfyingVersion(versions: string[], range: string): string | null {\n const result = versions.find((v) => this.equals(v, range));\n return result ?? null;\n }\n\n getNewValue({\n currentValue,\n currentVersion,\n newVersion,\n }: NewValueConfig): string | null {\n if (currentVersion === `v${currentValue}`) {\n return newVersion.replace(regEx(/^v/), '');\n }\n return newVersion ?? null;\n }\n\n sortVersions(version: string, other: string): number {\n return this._compare(version, other);\n }\n\n matches(version: string, range: string): boolean {\n return this.equals(version, range);\n }\n\n isSame(type: 'major' | 'minor' | 'patch', a: string, b: string): boolean {\n if (type === 'major') {\n return this.getMajor(a) === this.getMajor(b);\n }\n if (type === 'minor') {\n return this.getMinor(a) === this.getMinor(b);\n }\n return this.getPatch(a) === this.getPatch(b);\n }\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { regEx } from "../../../util/regex.js";
2
2
  import { logger } from "../../../logger/index.js";
3
3
  //#region lib/modules/versioning/hashicorp/convertor.ts
4
- const semverRegex = /(0|[1-9]\d*)(\.(0|[1-9]\d*))?(\.(0|[1-9]\d*))?(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?/;
4
+ const semverRegex = regEx(/(0|[1-9]\d*)(\.(0|[1-9]\d*))?(\.(0|[1-9]\d*))?(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?/);
5
5
  /**
6
6
  * This can convert most hashicorp ranges to valid npm syntax
7
7
  * The `!=` syntax is currently unsupported as there is no direct
@@ -1 +1 @@
1
- {"version":3,"file":"convertor.js","names":[],"sources":["../../../../lib/modules/versioning/hashicorp/convertor.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { regEx } from '../../../util/regex.ts';\n\n// Taken from https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string. Licensed under CC BY 3.0\n// Removed the ^ and $.\n// Made minor and patch versions optional by surrounding them in parentheses followed by a question mark.\nconst semverRegex =\n /(0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?(\\.(0|[1-9]\\d*))?(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?/;\n\n/**\n * This can convert most hashicorp ranges to valid npm syntax\n * The `!=` syntax is currently unsupported as there is no direct\n * equivalent in npm and isn't widely used\n * The version part of the constraint is parsed as a semver but with the minor and patch versions being optional.\n * The prerelease syntax is less well-defined for hashicorp and will\n * cause issues if it is not semvar compatible as no attempts to convert it\n * are made\n */\nexport function hashicorp2npm(input: string): string {\n if (!input) {\n return input;\n }\n return input\n .split(',')\n .map((single) => {\n const r = single.match(\n regEx(\n `^\\\\s*(?<operator>(|=|!=|>|<|>=|<=|~>))\\\\s*v?(?<version>${semverRegex.source})\\\\s*$`,\n ),\n );\n if (!r) {\n logger.warn(\n { constraint: input, element: single },\n 'Invalid hashicorp constraint',\n );\n throw new Error('Invalid hashicorp constraint');\n }\n if (r.groups!.operator === '!=') {\n logger.warn(\n { constraint: input, element: single },\n 'Unsupported hashicorp constraint',\n );\n throw new Error('Unsupported hashicorp constraint');\n }\n return {\n operator: r.groups!.operator,\n version: r.groups!.version,\n };\n })\n .map(({ operator, version }) => {\n switch (operator) {\n case '=':\n return version;\n case '~>':\n if (version.match(regEx(/^\\d+$/))) {\n return `>=${version}`;\n }\n if (version.match(regEx(/^\\d+\\.\\d+$/))) {\n return `^${version}`;\n }\n return `~${version}`;\n default:\n return `${operator}${version}`;\n }\n })\n .join(' ');\n}\n\n/**\n * This can convert a limited set of npm range syntax to hashicorp,\n * it supports all the syntax that hashicorp2npm can output\n * It cannot handle `*`, `1.x.x`, range with `-`, `||`\n */\nexport function npm2hashicorp(input: string): string {\n if (!input) {\n return input;\n }\n return input\n .split(' ')\n .map((single) => {\n const r = single.match(\n regEx(\n `^(?<operator>(|>|<|>=|<=|~|\\\\^))v?(?<version>${semverRegex.source})$`,\n ),\n );\n if (!r) {\n throw new Error('invalid npm constraint');\n }\n return {\n operator: r.groups!.operator,\n version: r.groups!.version,\n };\n })\n .map(({ operator, version }) => {\n switch (operator) {\n case '^': {\n if (version.match(regEx(/^\\d+$/))) {\n return `~> ${version}.0`;\n }\n const withZero = version.match(regEx(/^(\\d+\\.\\d+)\\.0$/));\n if (withZero) {\n return `~> ${withZero[1]}`;\n }\n const nonZero = version.match(regEx(/^(\\d+\\.\\d+)\\.\\d+$/));\n if (nonZero) {\n // not including`>= ${version}`, which makes this less accurate\n // but makes the results cleaner\n return `~> ${nonZero[1]}`;\n }\n return `~> ${version}`;\n }\n case '~':\n if (version.match(regEx(/^\\d+$/))) {\n return `~> ${version}.0`;\n }\n if (version.match(regEx(/^\\d+\\.\\d+$/))) {\n return `~> ${version}.0`;\n }\n return `~> ${version}`;\n case '':\n return `${version}`;\n default:\n return `${operator} ${version}`;\n }\n })\n .join(', ');\n}\n"],"mappings":";;;AAMA,MAAM,cACJ;;;;;;;;;;AAWF,SAAgB,cAAc,OAAuB;CACnD,IAAI,CAAC,OACH,OAAO;CAET,OAAO,MACJ,MAAM,GAAG,CAAC,CACV,KAAK,WAAW;EACf,MAAM,IAAI,OAAO,MACf,MACE,0DAA0D,YAAY,OAAO,OAC/E,CACF;EACA,IAAI,CAAC,GAAG;GACN,OAAO,KACL;IAAE,YAAY;IAAO,SAAS;GAAO,GACrC,8BACF;GACA,MAAM,IAAI,MAAM,8BAA8B;EAChD;EACA,IAAI,EAAE,OAAQ,aAAa,MAAM;GAC/B,OAAO,KACL;IAAE,YAAY;IAAO,SAAS;GAAO,GACrC,kCACF;GACA,MAAM,IAAI,MAAM,kCAAkC;EACpD;EACA,OAAO;GACL,UAAU,EAAE,OAAQ;GACpB,SAAS,EAAE,OAAQ;EACrB;CACF,CAAC,CAAC,CACD,KAAK,EAAE,UAAU,cAAc;EAC9B,QAAQ,UAAR;GACE,KAAK,KACH,OAAO;GACT,KAAK;IACH,IAAI,QAAQ,MAAM,MAAM,OAAO,CAAC,GAC9B,OAAO,KAAK;IAEd,IAAI,QAAQ,MAAM,MAAM,YAAY,CAAC,GACnC,OAAO,IAAI;IAEb,OAAO,IAAI;GACb,SACE,OAAO,GAAG,WAAW;EACzB;CACF,CAAC,CAAC,CACD,KAAK,GAAG;AACb;;;;;;AAOA,SAAgB,cAAc,OAAuB;CACnD,IAAI,CAAC,OACH,OAAO;CAET,OAAO,MACJ,MAAM,GAAG,CAAC,CACV,KAAK,WAAW;EACf,MAAM,IAAI,OAAO,MACf,MACE,gDAAgD,YAAY,OAAO,GACrE,CACF;EACA,IAAI,CAAC,GACH,MAAM,IAAI,MAAM,wBAAwB;EAE1C,OAAO;GACL,UAAU,EAAE,OAAQ;GACpB,SAAS,EAAE,OAAQ;EACrB;CACF,CAAC,CAAC,CACD,KAAK,EAAE,UAAU,cAAc;EAC9B,QAAQ,UAAR;GACE,KAAK,KAAK;IACR,IAAI,QAAQ,MAAM,MAAM,OAAO,CAAC,GAC9B,OAAO,MAAM,QAAQ;IAEvB,MAAM,WAAW,QAAQ,MAAM,MAAM,iBAAiB,CAAC;IACvD,IAAI,UACF,OAAO,MAAM,SAAS;IAExB,MAAM,UAAU,QAAQ,MAAM,MAAM,mBAAmB,CAAC;IACxD,IAAI,SAGF,OAAO,MAAM,QAAQ;IAEvB,OAAO,MAAM;GACf;GACA,KAAK;IACH,IAAI,QAAQ,MAAM,MAAM,OAAO,CAAC,GAC9B,OAAO,MAAM,QAAQ;IAEvB,IAAI,QAAQ,MAAM,MAAM,YAAY,CAAC,GACnC,OAAO,MAAM,QAAQ;IAEvB,OAAO,MAAM;GACf,KAAK,IACH,OAAO,GAAG;GACZ,SACE,OAAO,GAAG,SAAS,GAAG;EAC1B;CACF,CAAC,CAAC,CACD,KAAK,IAAI;AACd"}
1
+ {"version":3,"file":"convertor.js","names":[],"sources":["../../../../lib/modules/versioning/hashicorp/convertor.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { regEx } from '../../../util/regex.ts';\n\n// Taken from https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string. Licensed under CC BY 3.0\n// Removed the ^ and $.\n// Made minor and patch versions optional by surrounding them in parentheses followed by a question mark.\nconst semverRegex = regEx(\n /(0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?(\\.(0|[1-9]\\d*))?(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?/,\n);\n\n/**\n * This can convert most hashicorp ranges to valid npm syntax\n * The `!=` syntax is currently unsupported as there is no direct\n * equivalent in npm and isn't widely used\n * The version part of the constraint is parsed as a semver but with the minor and patch versions being optional.\n * The prerelease syntax is less well-defined for hashicorp and will\n * cause issues if it is not semvar compatible as no attempts to convert it\n * are made\n */\nexport function hashicorp2npm(input: string): string {\n if (!input) {\n return input;\n }\n return input\n .split(',')\n .map((single) => {\n const r = single.match(\n regEx(\n `^\\\\s*(?<operator>(|=|!=|>|<|>=|<=|~>))\\\\s*v?(?<version>${semverRegex.source})\\\\s*$`,\n ),\n );\n if (!r) {\n logger.warn(\n { constraint: input, element: single },\n 'Invalid hashicorp constraint',\n );\n throw new Error('Invalid hashicorp constraint');\n }\n if (r.groups!.operator === '!=') {\n logger.warn(\n { constraint: input, element: single },\n 'Unsupported hashicorp constraint',\n );\n throw new Error('Unsupported hashicorp constraint');\n }\n return {\n operator: r.groups!.operator,\n version: r.groups!.version,\n };\n })\n .map(({ operator, version }) => {\n switch (operator) {\n case '=':\n return version;\n case '~>':\n if (version.match(regEx(/^\\d+$/))) {\n return `>=${version}`;\n }\n if (version.match(regEx(/^\\d+\\.\\d+$/))) {\n return `^${version}`;\n }\n return `~${version}`;\n default:\n return `${operator}${version}`;\n }\n })\n .join(' ');\n}\n\n/**\n * This can convert a limited set of npm range syntax to hashicorp,\n * it supports all the syntax that hashicorp2npm can output\n * It cannot handle `*`, `1.x.x`, range with `-`, `||`\n */\nexport function npm2hashicorp(input: string): string {\n if (!input) {\n return input;\n }\n return input\n .split(' ')\n .map((single) => {\n const r = single.match(\n regEx(\n `^(?<operator>(|>|<|>=|<=|~|\\\\^))v?(?<version>${semverRegex.source})$`,\n ),\n );\n if (!r) {\n throw new Error('invalid npm constraint');\n }\n return {\n operator: r.groups!.operator,\n version: r.groups!.version,\n };\n })\n .map(({ operator, version }) => {\n switch (operator) {\n case '^': {\n if (version.match(regEx(/^\\d+$/))) {\n return `~> ${version}.0`;\n }\n const withZero = version.match(regEx(/^(\\d+\\.\\d+)\\.0$/));\n if (withZero) {\n return `~> ${withZero[1]}`;\n }\n const nonZero = version.match(regEx(/^(\\d+\\.\\d+)\\.\\d+$/));\n if (nonZero) {\n // not including`>= ${version}`, which makes this less accurate\n // but makes the results cleaner\n return `~> ${nonZero[1]}`;\n }\n return `~> ${version}`;\n }\n case '~':\n if (version.match(regEx(/^\\d+$/))) {\n return `~> ${version}.0`;\n }\n if (version.match(regEx(/^\\d+\\.\\d+$/))) {\n return `~> ${version}.0`;\n }\n return `~> ${version}`;\n case '':\n return `${version}`;\n default:\n return `${operator} ${version}`;\n }\n })\n .join(', ');\n}\n"],"mappings":";;;AAMA,MAAM,cAAc,MAClB,yLACF;;;;;;;;;;AAWA,SAAgB,cAAc,OAAuB;CACnD,IAAI,CAAC,OACH,OAAO;CAET,OAAO,MACJ,MAAM,GAAG,CAAC,CACV,KAAK,WAAW;EACf,MAAM,IAAI,OAAO,MACf,MACE,0DAA0D,YAAY,OAAO,OAC/E,CACF;EACA,IAAI,CAAC,GAAG;GACN,OAAO,KACL;IAAE,YAAY;IAAO,SAAS;GAAO,GACrC,8BACF;GACA,MAAM,IAAI,MAAM,8BAA8B;EAChD;EACA,IAAI,EAAE,OAAQ,aAAa,MAAM;GAC/B,OAAO,KACL;IAAE,YAAY;IAAO,SAAS;GAAO,GACrC,kCACF;GACA,MAAM,IAAI,MAAM,kCAAkC;EACpD;EACA,OAAO;GACL,UAAU,EAAE,OAAQ;GACpB,SAAS,EAAE,OAAQ;EACrB;CACF,CAAC,CAAC,CACD,KAAK,EAAE,UAAU,cAAc;EAC9B,QAAQ,UAAR;GACE,KAAK,KACH,OAAO;GACT,KAAK;IACH,IAAI,QAAQ,MAAM,MAAM,OAAO,CAAC,GAC9B,OAAO,KAAK;IAEd,IAAI,QAAQ,MAAM,MAAM,YAAY,CAAC,GACnC,OAAO,IAAI;IAEb,OAAO,IAAI;GACb,SACE,OAAO,GAAG,WAAW;EACzB;CACF,CAAC,CAAC,CACD,KAAK,GAAG;AACb;;;;;;AAOA,SAAgB,cAAc,OAAuB;CACnD,IAAI,CAAC,OACH,OAAO;CAET,OAAO,MACJ,MAAM,GAAG,CAAC,CACV,KAAK,WAAW;EACf,MAAM,IAAI,OAAO,MACf,MACE,gDAAgD,YAAY,OAAO,GACrE,CACF;EACA,IAAI,CAAC,GACH,MAAM,IAAI,MAAM,wBAAwB;EAE1C,OAAO;GACL,UAAU,EAAE,OAAQ;GACpB,SAAS,EAAE,OAAQ;EACrB;CACF,CAAC,CAAC,CACD,KAAK,EAAE,UAAU,cAAc;EAC9B,QAAQ,UAAR;GACE,KAAK,KAAK;IACR,IAAI,QAAQ,MAAM,MAAM,OAAO,CAAC,GAC9B,OAAO,MAAM,QAAQ;IAEvB,MAAM,WAAW,QAAQ,MAAM,MAAM,iBAAiB,CAAC;IACvD,IAAI,UACF,OAAO,MAAM,SAAS;IAExB,MAAM,UAAU,QAAQ,MAAM,MAAM,mBAAmB,CAAC;IACxD,IAAI,SAGF,OAAO,MAAM,QAAQ;IAEvB,OAAO,MAAM;GACf;GACA,KAAK;IACH,IAAI,QAAQ,MAAM,MAAM,OAAO,CAAC,GAC9B,OAAO,MAAM,QAAQ;IAEvB,IAAI,QAAQ,MAAM,MAAM,YAAY,CAAC,GACnC,OAAO,MAAM,QAAQ;IAEvB,OAAO,MAAM;GACf,KAAK,IACH,OAAO,GAAG;GACZ,SACE,OAAO,GAAG,SAAS,GAAG;EAC1B;CACF,CAAC,CAAC,CACD,KAAK,IAAI;AACd"}
@@ -38,7 +38,7 @@ function replaceCaretValue(oldValue, newValue) {
38
38
  return needReplace ? resultTuple.join(".") : oldValue;
39
39
  }
40
40
  function stripV(value) {
41
- return value.replace(/^v/, "");
41
+ return value.replace(regEx(/^v/), "");
42
42
  }
43
43
  function satisfiesRange(version, range) {
44
44
  return satisfies$1(version, normalizeLegacyXRanges(range));
@@ -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(/^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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"}
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":"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"}
@@ -1,3 +1,4 @@
1
+ import { regEx } from "../../../util/regex.js";
1
2
  import { compare, versionToString } from "./version.js";
2
3
  //#region lib/modules/versioning/nuget/range.ts
3
4
  function getFloatingRangeLowerBound(range) {
@@ -14,7 +15,7 @@ function getFloatingRangeLowerBound(range) {
14
15
  const lastIdx = parts.length - 1;
15
16
  const last = parts[lastIdx];
16
17
  if (last === "*") parts[lastIdx] = "0";
17
- else parts[lastIdx] = last.replace(/\*$/, "");
18
+ else parts[lastIdx] = last.replace(regEx(/\*$/), "");
18
19
  res.prerelease = parts.join(".");
19
20
  }
20
21
  return res;
@@ -1 +1 @@
1
- {"version":3,"file":"range.js","names":[],"sources":["../../../../lib/modules/versioning/nuget/range.ts"],"sourcesContent":["import type { NugetFloatingRange, NugetRange, NugetVersion } from './types.ts';\nimport { compare, versionToString } from './version.ts';\n\nexport function getFloatingRangeLowerBound(\n range: NugetFloatingRange,\n): NugetVersion {\n const { major, minor = 0, patch = 0, revision = 0, prerelease } = range;\n const res: NugetVersion = {\n type: 'nuget-version',\n major,\n minor,\n patch,\n revision,\n };\n\n if (prerelease) {\n const parts = prerelease.split('.');\n const lastIdx = parts.length - 1;\n const last = parts[lastIdx];\n if (last === '*') {\n parts[lastIdx] = '0';\n } else {\n parts[lastIdx] = last.replace(/\\*$/, '');\n }\n res.prerelease = parts.join('.');\n }\n\n return res;\n}\n\nexport function matches(v: NugetVersion, r: NugetRange): boolean {\n if (r.type === 'nuget-exact-range') {\n return compare(v, r.version) === 0;\n }\n\n if (r.type === 'nuget-floating-range') {\n if (!r.prerelease && v.prerelease) {\n return false;\n }\n\n const lowerBound = getFloatingRangeLowerBound(r);\n return compare(v, lowerBound) >= 0;\n }\n\n let minBoundMatches = false;\n let maxBoundMatches = false;\n\n const { min, minInclusive, max, maxInclusive } = r;\n\n if (min) {\n const minBound =\n min.type === 'nuget-version' ? min : getFloatingRangeLowerBound(min);\n const cmp = compare(v, minBound);\n minBoundMatches = minInclusive ? cmp >= 0 : cmp > 0;\n } else {\n minBoundMatches = true;\n }\n\n if (max) {\n if (!(v.prerelease && !max.prerelease)) {\n const cmp = compare(v, max);\n maxBoundMatches = maxInclusive ? cmp <= 0 : cmp < 0;\n }\n } else {\n maxBoundMatches = true;\n }\n\n return minBoundMatches && maxBoundMatches;\n}\n\nfunction floatingComponentToString(component: number): string {\n const int = component / 10;\n return int === 0 ? '*' : `${int}*`;\n}\n\nexport function coerceFloatingComponent(component: number | undefined): number {\n return component ? Math.floor(component / 10) * 10 : 0;\n}\n\nexport function rangeToString(range: NugetRange): string {\n if (range.type === 'nuget-exact-range') {\n return `[${versionToString(range.version)}]`;\n }\n\n if (range.type === 'nuget-floating-range') {\n const { major, minor, patch, revision, floating, prerelease } = range;\n let res = '';\n\n if (prerelease) {\n res = `-${prerelease}`;\n }\n\n if (revision !== undefined) {\n const revisionPart =\n floating === 'revision'\n ? floatingComponentToString(revision)\n : `${revision}`;\n res = `.${revisionPart}${res}`;\n }\n\n if (patch !== undefined) {\n const patchPart =\n floating === 'patch' ? floatingComponentToString(patch) : `${patch}`;\n res = `.${patchPart}${res}`;\n }\n\n if (minor !== undefined) {\n const minorPart =\n floating === 'minor' ? floatingComponentToString(minor) : `${minor}`;\n res = `.${minorPart}${res}`;\n }\n\n if (major !== undefined) {\n const majorPart =\n floating === 'major' ? floatingComponentToString(major) : `${major}`;\n res = `${majorPart}${res}`;\n }\n\n return res;\n }\n\n const { min, max, minInclusive, maxInclusive } = range;\n const leftBracket = minInclusive ? '[' : '(';\n const rightBracket = maxInclusive ? ']' : ')';\n if (min && max) {\n const minStr =\n min.type === 'nuget-version' ? versionToString(min) : rangeToString(min);\n const maxStr = versionToString(max);\n return `${leftBracket}${minStr},${maxStr}${rightBracket}`;\n }\n\n if (min) {\n const minStr =\n min.type === 'nuget-version' ? versionToString(min) : rangeToString(min);\n return `${leftBracket}${minStr},${rightBracket}`;\n }\n\n const maxStr = versionToString(max);\n return `${leftBracket},${maxStr}${rightBracket}`;\n}\n\nexport function tryBump(r: NugetRange, v: NugetVersion, x: string): string {\n return matches(v, r) ? rangeToString(r) : x;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"range.js","names":[],"sources":["../../../../lib/modules/versioning/nuget/range.ts"],"sourcesContent":["import { regEx } from '../../../util/regex.ts';\nimport type { NugetFloatingRange, NugetRange, NugetVersion } from './types.ts';\nimport { compare, versionToString } from './version.ts';\n\nexport function getFloatingRangeLowerBound(\n range: NugetFloatingRange,\n): NugetVersion {\n const { major, minor = 0, patch = 0, revision = 0, prerelease } = range;\n const res: NugetVersion = {\n type: 'nuget-version',\n major,\n minor,\n patch,\n revision,\n };\n\n if (prerelease) {\n const parts = prerelease.split('.');\n const lastIdx = parts.length - 1;\n const last = parts[lastIdx];\n if (last === '*') {\n parts[lastIdx] = '0';\n } else {\n parts[lastIdx] = last.replace(regEx(/\\*$/), '');\n }\n res.prerelease = parts.join('.');\n }\n\n return res;\n}\n\nexport function matches(v: NugetVersion, r: NugetRange): boolean {\n if (r.type === 'nuget-exact-range') {\n return compare(v, r.version) === 0;\n }\n\n if (r.type === 'nuget-floating-range') {\n if (!r.prerelease && v.prerelease) {\n return false;\n }\n\n const lowerBound = getFloatingRangeLowerBound(r);\n return compare(v, lowerBound) >= 0;\n }\n\n let minBoundMatches = false;\n let maxBoundMatches = false;\n\n const { min, minInclusive, max, maxInclusive } = r;\n\n if (min) {\n const minBound =\n min.type === 'nuget-version' ? min : getFloatingRangeLowerBound(min);\n const cmp = compare(v, minBound);\n minBoundMatches = minInclusive ? cmp >= 0 : cmp > 0;\n } else {\n minBoundMatches = true;\n }\n\n if (max) {\n if (!(v.prerelease && !max.prerelease)) {\n const cmp = compare(v, max);\n maxBoundMatches = maxInclusive ? cmp <= 0 : cmp < 0;\n }\n } else {\n maxBoundMatches = true;\n }\n\n return minBoundMatches && maxBoundMatches;\n}\n\nfunction floatingComponentToString(component: number): string {\n const int = component / 10;\n return int === 0 ? '*' : `${int}*`;\n}\n\nexport function coerceFloatingComponent(component: number | undefined): number {\n return component ? Math.floor(component / 10) * 10 : 0;\n}\n\nexport function rangeToString(range: NugetRange): string {\n if (range.type === 'nuget-exact-range') {\n return `[${versionToString(range.version)}]`;\n }\n\n if (range.type === 'nuget-floating-range') {\n const { major, minor, patch, revision, floating, prerelease } = range;\n let res = '';\n\n if (prerelease) {\n res = `-${prerelease}`;\n }\n\n if (revision !== undefined) {\n const revisionPart =\n floating === 'revision'\n ? floatingComponentToString(revision)\n : `${revision}`;\n res = `.${revisionPart}${res}`;\n }\n\n if (patch !== undefined) {\n const patchPart =\n floating === 'patch' ? floatingComponentToString(patch) : `${patch}`;\n res = `.${patchPart}${res}`;\n }\n\n if (minor !== undefined) {\n const minorPart =\n floating === 'minor' ? floatingComponentToString(minor) : `${minor}`;\n res = `.${minorPart}${res}`;\n }\n\n if (major !== undefined) {\n const majorPart =\n floating === 'major' ? floatingComponentToString(major) : `${major}`;\n res = `${majorPart}${res}`;\n }\n\n return res;\n }\n\n const { min, max, minInclusive, maxInclusive } = range;\n const leftBracket = minInclusive ? '[' : '(';\n const rightBracket = maxInclusive ? ']' : ')';\n if (min && max) {\n const minStr =\n min.type === 'nuget-version' ? versionToString(min) : rangeToString(min);\n const maxStr = versionToString(max);\n return `${leftBracket}${minStr},${maxStr}${rightBracket}`;\n }\n\n if (min) {\n const minStr =\n min.type === 'nuget-version' ? versionToString(min) : rangeToString(min);\n return `${leftBracket}${minStr},${rightBracket}`;\n }\n\n const maxStr = versionToString(max);\n return `${leftBracket},${maxStr}${rightBracket}`;\n}\n\nexport function tryBump(r: NugetRange, v: NugetVersion, x: string): string {\n return matches(v, r) ? rangeToString(r) : x;\n}\n"],"mappings":"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"}
@@ -13,7 +13,7 @@ var PerlVersioningApi = class extends GenericVersioningApi {
13
13
  if (!matches) return null;
14
14
  const [, intPart, decimalPart] = matches;
15
15
  const prerelease = decimalPart.includes("_") ? "alpha" : "";
16
- const decimalComponents = decimalPart.replace(/_/g, "").match(/.{1,3}/g)?.map((value) => {
16
+ const decimalComponents = decimalPart.replace(regEx(/_/g), "").match(regEx(/.{1,3}/g))?.map((value) => {
17
17
  let component = value;
18
18
  while (component.length < 3) component += "0";
19
19
  return Number.parseInt(component, 10);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/perl/index.ts"],"sourcesContent":["import { regEx } from '../../../util/regex.ts';\nimport type { GenericVersion } from '../generic.ts';\nimport { GenericVersioningApi } from '../generic.ts';\nimport type { VersioningApi } from '../types.ts';\n\nexport const id = 'perl';\nexport const displayName = 'Perl';\nexport const urls = ['[Perl version module](https://metacpan.org/pod/version)'];\nexport const supportsRanges = false;\n\n// https://metacpan.org/pod/version#Decimal-Versions\nconst decimalVersionPattern = regEx(/^(\\d+)\\.(\\d+(?:_\\d+)?)$/);\n// https://metacpan.org/pod/version#Dotted-Decimal-Versions\nconst dottedDecimalVersionPattern = regEx(/^v?(\\d+(?:\\.\\d+)*(?:_\\d+)?)$/);\n\nclass PerlVersioningApi extends GenericVersioningApi {\n protected _parse(version: string): GenericVersion | null {\n return (\n this._parseDecimalVersion(version) ??\n this._parseDottedDecimalVersion(version)\n );\n }\n\n private _parseDecimalVersion(version: string): GenericVersion | null {\n const matches = decimalVersionPattern.exec(version);\n if (!matches) {\n return null;\n }\n const [, intPart, decimalPart] = matches;\n const prerelease = decimalPart.includes('_') ? 'alpha' : '';\n\n const decimalComponents =\n decimalPart\n .replace(/_/g, '')\n .match(/.{1,3}/g)\n ?.map((value) => {\n let component = value;\n while (component.length < 3) {\n component += '0';\n }\n return Number.parseInt(component, 10);\n }) ?? /* istanbul ignore next */ [];\n const release = [Number.parseInt(intPart, 10), ...decimalComponents];\n return { release, prerelease };\n }\n\n private _parseDottedDecimalVersion(version: string): GenericVersion | null {\n const matches = dottedDecimalVersionPattern.exec(version);\n if (!matches) {\n return null;\n }\n const [, versionValue] = matches;\n const prerelease = versionValue.includes('_') ? 'alpha' : '';\n const release = versionValue.split(regEx(/[._]/)).map(Number);\n return { release, prerelease };\n }\n}\n\nexport const api: VersioningApi = new PerlVersioningApi();\n\nexport default api;\n"],"mappings":";;;AAKA,MAAa,KAAK;AAMlB,MAAM,wBAAwB,MAAM,yBAAyB;AAE7D,MAAM,8BAA8B,MAAM,8BAA8B;AAExE,IAAM,oBAAN,cAAgC,qBAAqB;CACnD,OAAiB,SAAwC;EACvD,OACE,KAAK,qBAAqB,OAAO,KACjC,KAAK,2BAA2B,OAAO;CAE3C;CAEA,qBAA6B,SAAwC;EACnE,MAAM,UAAU,sBAAsB,KAAK,OAAO;EAClD,IAAI,CAAC,SACH,OAAO;EAET,MAAM,GAAG,SAAS,eAAe;EACjC,MAAM,aAAa,YAAY,SAAS,GAAG,IAAI,UAAU;EAEzD,MAAM,oBACJ,YACG,QAAQ,MAAM,EAAE,CAAC,CACjB,MAAM,SAAS,CAAC,EACf,KAAK,UAAU;GACf,IAAI,YAAY;GAChB,OAAO,UAAU,SAAS,GACxB,aAAa;GAEf,OAAO,OAAO,SAAS,WAAW,EAAE;EACtC,CAAC,gCAAgC,CAAC;EAEtC,OAAO;GAAE,SAAA,CADQ,OAAO,SAAS,SAAS,EAAE,GAAG,GAAG,iBACnC;GAAG;EAAW;CAC/B;CAEA,2BAAmC,SAAwC;EACzE,MAAM,UAAU,4BAA4B,KAAK,OAAO;EACxD,IAAI,CAAC,SACH,OAAO;EAET,MAAM,GAAG,gBAAgB;EACzB,MAAM,aAAa,aAAa,SAAS,GAAG,IAAI,UAAU;EAE1D,OAAO;GAAE,SADO,aAAa,MAAM,MAAM,MAAM,CAAC,CAAC,CAAC,IAAI,MACvC;GAAG;EAAW;CAC/B;AACF;AAEA,MAAa,MAAqB,IAAI,kBAAkB"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/perl/index.ts"],"sourcesContent":["import { regEx } from '../../../util/regex.ts';\nimport type { GenericVersion } from '../generic.ts';\nimport { GenericVersioningApi } from '../generic.ts';\nimport type { VersioningApi } from '../types.ts';\n\nexport const id = 'perl';\nexport const displayName = 'Perl';\nexport const urls = ['[Perl version module](https://metacpan.org/pod/version)'];\nexport const supportsRanges = false;\n\n// https://metacpan.org/pod/version#Decimal-Versions\nconst decimalVersionPattern = regEx(/^(\\d+)\\.(\\d+(?:_\\d+)?)$/);\n// https://metacpan.org/pod/version#Dotted-Decimal-Versions\nconst dottedDecimalVersionPattern = regEx(/^v?(\\d+(?:\\.\\d+)*(?:_\\d+)?)$/);\n\nclass PerlVersioningApi extends GenericVersioningApi {\n protected _parse(version: string): GenericVersion | null {\n return (\n this._parseDecimalVersion(version) ??\n this._parseDottedDecimalVersion(version)\n );\n }\n\n private _parseDecimalVersion(version: string): GenericVersion | null {\n const matches = decimalVersionPattern.exec(version);\n if (!matches) {\n return null;\n }\n const [, intPart, decimalPart] = matches;\n const prerelease = decimalPart.includes('_') ? 'alpha' : '';\n\n const decimalComponents =\n decimalPart\n .replace(regEx(/_/g), '')\n .match(regEx(/.{1,3}/g))\n ?.map((value) => {\n let component = value;\n while (component.length < 3) {\n component += '0';\n }\n return Number.parseInt(component, 10);\n }) ?? /* istanbul ignore next */ [];\n const release = [Number.parseInt(intPart, 10), ...decimalComponents];\n return { release, prerelease };\n }\n\n private _parseDottedDecimalVersion(version: string): GenericVersion | null {\n const matches = dottedDecimalVersionPattern.exec(version);\n if (!matches) {\n return null;\n }\n const [, versionValue] = matches;\n const prerelease = versionValue.includes('_') ? 'alpha' : '';\n const release = versionValue.split(regEx(/[._]/)).map(Number);\n return { release, prerelease };\n }\n}\n\nexport const api: VersioningApi = new PerlVersioningApi();\n\nexport default api;\n"],"mappings":";;;AAKA,MAAa,KAAK;AAMlB,MAAM,wBAAwB,MAAM,yBAAyB;AAE7D,MAAM,8BAA8B,MAAM,8BAA8B;AAExE,IAAM,oBAAN,cAAgC,qBAAqB;CACnD,OAAiB,SAAwC;EACvD,OACE,KAAK,qBAAqB,OAAO,KACjC,KAAK,2BAA2B,OAAO;CAE3C;CAEA,qBAA6B,SAAwC;EACnE,MAAM,UAAU,sBAAsB,KAAK,OAAO;EAClD,IAAI,CAAC,SACH,OAAO;EAET,MAAM,GAAG,SAAS,eAAe;EACjC,MAAM,aAAa,YAAY,SAAS,GAAG,IAAI,UAAU;EAEzD,MAAM,oBACJ,YACG,QAAQ,MAAM,IAAI,GAAG,EAAE,CAAC,CACxB,MAAM,MAAM,SAAS,CAAC,CAAC,EACtB,KAAK,UAAU;GACf,IAAI,YAAY;GAChB,OAAO,UAAU,SAAS,GACxB,aAAa;GAEf,OAAO,OAAO,SAAS,WAAW,EAAE;EACtC,CAAC,gCAAgC,CAAC;EAEtC,OAAO;GAAE,SAAA,CADQ,OAAO,SAAS,SAAS,EAAE,GAAG,GAAG,iBACnC;GAAG;EAAW;CAC/B;CAEA,2BAAmC,SAAwC;EACzE,MAAM,UAAU,4BAA4B,KAAK,OAAO;EACxD,IAAI,CAAC,SACH,OAAO;EAET,MAAM,GAAG,gBAAgB;EACzB,MAAM,aAAa,aAAa,SAAS,GAAG,IAAI,UAAU;EAE1D,OAAO;GAAE,SADO,aAAa,MAAM,MAAM,MAAM,CAAC,CAAC,CAAC,IAAI,MACvC;GAAG;EAAW;CAC/B;AACF;AAEA,MAAa,MAAqB,IAAI,kBAAkB"}
@@ -75,7 +75,7 @@ function semver2poetry(version) {
75
75
  * exact versions.
76
76
  */
77
77
  function poetry2npm(input, throwOnUnsupported = false) {
78
- const transformed = input.split(",").map((str) => str.trim()).filter(notEmpty).join(" ").split(RANGE_COMPARATOR_PATTERN).map((chunk) => poetry2semver(chunk, false) ?? chunk).join("").replace(/===/, "=");
78
+ const transformed = input.split(",").map((str) => str.trim()).filter(notEmpty).join(" ").split(RANGE_COMPARATOR_PATTERN).map((chunk) => poetry2semver(chunk, false) ?? chunk).join("").replace(regEx(/===/), "=");
79
79
  if (throwOnUnsupported) {
80
80
  if (transformed.split(regEx(/\s+/)).some((part) => part.startsWith("!="))) throw new Error("Unsupported by Poetry versioning implementation");
81
81
  }
@@ -103,7 +103,7 @@ function npm2poetry(range) {
103
103
  const newValue = `${res[i]} ${res[i + 1]}`;
104
104
  res.splice(i, 2, newValue);
105
105
  }
106
- return res.join(", ").replace(/\s*,?\s*\|\|\s*,?\s*/g, " || ");
106
+ return res.join(", ").replace(regEx(/\s*,?\s*\|\|\s*,?\s*/g), " || ");
107
107
  }
108
108
  //#endregion
109
109
  export { npm2poetry, poetry2npm, poetry2semver, semver2poetry };
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","names":[],"sources":["../../../../lib/modules/versioning/poetry/transform.ts"],"sourcesContent":["import semver from 'semver';\nimport { regEx } from '../../../util/regex.ts';\nimport { RANGE_COMPARATOR_PATTERN, VERSION_PATTERN } from './patterns.ts';\n\ninterface LetterTag {\n letter: string;\n number: string;\n}\n\nfunction parseLetterTag(letter?: string, number?: string): LetterTag | null {\n if (letter !== undefined) {\n // apply the same normalizations as poetry\n const spellings: Record<string, string> = {\n alpha: 'a',\n beta: 'b',\n c: 'rc',\n pre: 'rc',\n preview: 'rc',\n r: 'post',\n rev: 'post',\n };\n return {\n letter: spellings[letter] || letter,\n number: number ?? '0',\n };\n }\n if (letter === undefined && number !== undefined) {\n return { letter: 'post', number };\n }\n return null;\n}\n\nfunction notEmpty(s: string): boolean {\n return s !== '';\n}\n\n/**\n * Parse versions like poetry.core.masonry.version.Version does (union of SemVer\n * and PEP440, with normalization of certain prerelease tags), and emit in SemVer\n * format. NOTE: this silently discards the epoch field in PEP440 versions, as\n * it has no equivalent in SemVer.\n */\nexport function poetry2semver(\n poetry_version: string,\n padRelease = true,\n): string | null {\n const matchGroups = VERSION_PATTERN.exec(poetry_version)?.groups;\n if (!matchGroups) {\n return null;\n }\n // trim leading zeros from valid numbers\n const releaseParts = matchGroups.release\n .split('.')\n .map((segment) => parseInt(segment, 10));\n while (padRelease && releaseParts.length < 3) {\n releaseParts.push(0);\n }\n const pre = parseLetterTag(matchGroups.pre_l, matchGroups.pre_n);\n const post = matchGroups.post_n1\n ? parseLetterTag(undefined, matchGroups.post_n1)\n : parseLetterTag(matchGroups.post_l, matchGroups.post_n);\n const dev = parseLetterTag(matchGroups.dev_l, matchGroups.dev_n);\n\n const parts = [releaseParts.map((num) => num.toString()).join('.')];\n if (pre !== null) {\n // trim leading zeros from valid numbers\n pre.number = pre.number.replace(regEx(/^0+(\\d+)/), '$1');\n parts.push(`-${pre.letter}.${pre.number}`);\n }\n if (post !== null) {\n // trim leading zeros from valid numbers\n post.number = post.number.replace(regEx(/^0+(\\d+)/), '$1');\n parts.push(`-${post.letter}.${post.number}`);\n }\n if (dev !== null) {\n // trim leading zeros from valid numbers\n dev.number = dev.number.replace(regEx(/^0+(\\d+)/), '$1');\n parts.push(`-${dev.letter}.${dev.number}`);\n }\n\n return semver.valid(parts.join(''));\n}\n\n/** Reverse normalizations applied by poetry2semver */\nexport function semver2poetry(version?: string): string | null {\n if (!version) {\n return null;\n }\n const s = semver.parse(version);\n if (!s) {\n return null;\n }\n const spellings: Record<string, string> = {\n a: 'alpha',\n b: 'beta',\n c: 'rc',\n dev: 'alpha',\n };\n s.prerelease = s.prerelease.map((letter) => spellings[letter] ?? letter);\n return s.format();\n}\n\n/**\n * Translate a poetry-style version range to npm format\n *\n * This function works like cargo2npm, but it doesn't\n * add a '^', because poetry treats versions without operators as\n * exact versions.\n */\nexport function poetry2npm(input: string, throwOnUnsupported = false): string {\n // replace commas with spaces, then split at valid semver comparators\n const chunks = input\n .split(',')\n .map((str) => str.trim())\n .filter(notEmpty)\n .join(' ')\n .split(RANGE_COMPARATOR_PATTERN);\n // do not pad versions with zeros in a range\n const transformed = chunks\n .map((chunk) => poetry2semver(chunk, false) ?? chunk)\n .join('')\n .replace(/===/, '=');\n if (throwOnUnsupported) {\n const isUnsupported = transformed\n .split(regEx(/\\s+/))\n .some((part) => part.startsWith('!=')); // Patterns like `!=1.2.3` can't be easily translated between poetry/npm\n if (isUnsupported) {\n throw new Error('Unsupported by Poetry versioning implementation');\n }\n }\n return transformed;\n}\n\n/**\n * Translate an npm-style version range to poetry format\n *\n * NOTE: This function is largely copied from cargo versioning code.\n * Poetry uses commas (like in cargo) instead of spaces (like in npm)\n * for AND operation.\n */\nexport function npm2poetry(range: string): string {\n // apply poetry-style normalizations to versions embedded in range string\n // (i.e. anything that is not a range operator, potentially surrounded by whitespace)\n const transformedRange = range\n .split(RANGE_COMPARATOR_PATTERN)\n .map((chunk) => semver2poetry(chunk) ?? chunk)\n .join('');\n\n // Note: this doesn't remove the ^\n const res = transformedRange\n .split(' ')\n .map((str) => str.trim())\n .filter(notEmpty);\n\n const operators = ['^', '~', '=', '>', '<', '<=', '>='];\n for (let i = 0; i < res.length - 1; i += 1) {\n if (operators.includes(res[i])) {\n const newValue = `${res[i]} ${res[i + 1]}`;\n res.splice(i, 2, newValue);\n }\n }\n return res.join(', ').replace(/\\s*,?\\s*\\|\\|\\s*,?\\s*/g, ' || ');\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"transform.js","names":[],"sources":["../../../../lib/modules/versioning/poetry/transform.ts"],"sourcesContent":["import semver from 'semver';\nimport { regEx } from '../../../util/regex.ts';\nimport { RANGE_COMPARATOR_PATTERN, VERSION_PATTERN } from './patterns.ts';\n\ninterface LetterTag {\n letter: string;\n number: string;\n}\n\nfunction parseLetterTag(letter?: string, number?: string): LetterTag | null {\n if (letter !== undefined) {\n // apply the same normalizations as poetry\n const spellings: Record<string, string> = {\n alpha: 'a',\n beta: 'b',\n c: 'rc',\n pre: 'rc',\n preview: 'rc',\n r: 'post',\n rev: 'post',\n };\n return {\n letter: spellings[letter] || letter,\n number: number ?? '0',\n };\n }\n if (letter === undefined && number !== undefined) {\n return { letter: 'post', number };\n }\n return null;\n}\n\nfunction notEmpty(s: string): boolean {\n return s !== '';\n}\n\n/**\n * Parse versions like poetry.core.masonry.version.Version does (union of SemVer\n * and PEP440, with normalization of certain prerelease tags), and emit in SemVer\n * format. NOTE: this silently discards the epoch field in PEP440 versions, as\n * it has no equivalent in SemVer.\n */\nexport function poetry2semver(\n poetry_version: string,\n padRelease = true,\n): string | null {\n const matchGroups = VERSION_PATTERN.exec(poetry_version)?.groups;\n if (!matchGroups) {\n return null;\n }\n // trim leading zeros from valid numbers\n const releaseParts = matchGroups.release\n .split('.')\n .map((segment) => parseInt(segment, 10));\n while (padRelease && releaseParts.length < 3) {\n releaseParts.push(0);\n }\n const pre = parseLetterTag(matchGroups.pre_l, matchGroups.pre_n);\n const post = matchGroups.post_n1\n ? parseLetterTag(undefined, matchGroups.post_n1)\n : parseLetterTag(matchGroups.post_l, matchGroups.post_n);\n const dev = parseLetterTag(matchGroups.dev_l, matchGroups.dev_n);\n\n const parts = [releaseParts.map((num) => num.toString()).join('.')];\n if (pre !== null) {\n // trim leading zeros from valid numbers\n pre.number = pre.number.replace(regEx(/^0+(\\d+)/), '$1');\n parts.push(`-${pre.letter}.${pre.number}`);\n }\n if (post !== null) {\n // trim leading zeros from valid numbers\n post.number = post.number.replace(regEx(/^0+(\\d+)/), '$1');\n parts.push(`-${post.letter}.${post.number}`);\n }\n if (dev !== null) {\n // trim leading zeros from valid numbers\n dev.number = dev.number.replace(regEx(/^0+(\\d+)/), '$1');\n parts.push(`-${dev.letter}.${dev.number}`);\n }\n\n return semver.valid(parts.join(''));\n}\n\n/** Reverse normalizations applied by poetry2semver */\nexport function semver2poetry(version?: string): string | null {\n if (!version) {\n return null;\n }\n const s = semver.parse(version);\n if (!s) {\n return null;\n }\n const spellings: Record<string, string> = {\n a: 'alpha',\n b: 'beta',\n c: 'rc',\n dev: 'alpha',\n };\n s.prerelease = s.prerelease.map((letter) => spellings[letter] ?? letter);\n return s.format();\n}\n\n/**\n * Translate a poetry-style version range to npm format\n *\n * This function works like cargo2npm, but it doesn't\n * add a '^', because poetry treats versions without operators as\n * exact versions.\n */\nexport function poetry2npm(input: string, throwOnUnsupported = false): string {\n // replace commas with spaces, then split at valid semver comparators\n const chunks = input\n .split(',')\n .map((str) => str.trim())\n .filter(notEmpty)\n .join(' ')\n .split(RANGE_COMPARATOR_PATTERN);\n // do not pad versions with zeros in a range\n const transformed = chunks\n .map((chunk) => poetry2semver(chunk, false) ?? chunk)\n .join('')\n .replace(regEx(/===/), '=');\n if (throwOnUnsupported) {\n const isUnsupported = transformed\n .split(regEx(/\\s+/))\n .some((part) => part.startsWith('!=')); // Patterns like `!=1.2.3` can't be easily translated between poetry/npm\n if (isUnsupported) {\n throw new Error('Unsupported by Poetry versioning implementation');\n }\n }\n return transformed;\n}\n\n/**\n * Translate an npm-style version range to poetry format\n *\n * NOTE: This function is largely copied from cargo versioning code.\n * Poetry uses commas (like in cargo) instead of spaces (like in npm)\n * for AND operation.\n */\nexport function npm2poetry(range: string): string {\n // apply poetry-style normalizations to versions embedded in range string\n // (i.e. anything that is not a range operator, potentially surrounded by whitespace)\n const transformedRange = range\n .split(RANGE_COMPARATOR_PATTERN)\n .map((chunk) => semver2poetry(chunk) ?? chunk)\n .join('');\n\n // Note: this doesn't remove the ^\n const res = transformedRange\n .split(' ')\n .map((str) => str.trim())\n .filter(notEmpty);\n\n const operators = ['^', '~', '=', '>', '<', '<=', '>='];\n for (let i = 0; i < res.length - 1; i += 1) {\n if (operators.includes(res[i])) {\n const newValue = `${res[i]} ${res[i + 1]}`;\n res.splice(i, 2, newValue);\n }\n }\n return res.join(', ').replace(regEx(/\\s*,?\\s*\\|\\|\\s*,?\\s*/g), ' || ');\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pattern.js","names":[],"sources":["../../../../lib/modules/versioning/rez/pattern.ts"],"sourcesContent":["// Regular Expressions have been copied from, some more work were necessary to make it work:\n// original rez regex written in python (#11634)\n// version_range_regex = (\n// # Match a version number (e.g. 1.0.0)\n// r\" ^(?P<version>{version_group})$\"\n// \"|\"\n// # Or match an exact version number (e.g. ==1.0.0)\n// \" ^(?P<exact_version>\"\n// \" ==\" # Required == operator\n// \" (?P<exact_version_group>{version_group})?\"\n// \" )$\"\n// \"|\"\n// # Or match an inclusive bound (e.g. 1.0.0..2.0.0)\n// \" ^(?P<inclusive_bound>\"\n// \" (?P<inclusive_lower_version>{version_group})?\"\n// \" \\.\\.\" # Required .. operator\n// \" (?P<inclusive_upper_version>{version_group})?\"\n// \" )$\"\n// \"|\"\n// # Or match a lower bound (e.g. 1.0.0+)\n// \" ^(?P<lower_bound>\"\n// \" (?P<lower_bound_prefix>>|>=)?\" # Bound is exclusive?\n// \" (?P<lower_version>{version_group})?\"\n// \" (?(lower_bound_prefix)|\\+)\" # + only if bound is not exclusive\n// \" )$\"\n// \"|\"\n// # Or match an upper bound (e.g. <=1.0.0)\n// \" ^(?P<upper_bound>\"\n// \" (?P<upper_bound_prefix><(?={version_group})|<=)?\" # Bound is exclusive?\n// \" (?P<upper_version>{version_group})?\"\n// \" )$\"\n// \"|\"\n// # Or match a range in ascending order (e.g. 1.0.0+<2.0.0)\n// \" ^(?P<range_asc>\"\n// \" (?P<range_lower_asc>\"\n// \" (?P<range_lower_asc_prefix>>|>=)?\" # Lower bound is exclusive?\n// \" (?P<range_lower_asc_version>{version_group})?\"\n// \" (?(range_lower_asc_prefix)|\\+)?\" # + only if lower bound is not exclusive\n// \" )(?P<range_upper_asc>\"\n// \" (?(range_lower_asc_version),?|)\" # , only if lower bound is found\n// \" (?P<range_upper_asc_prefix><(?={version_group})|<=)\" # <= only if followed by a version group\n// \" (?P<range_upper_asc_version>{version_group})?\"\n// \" )\"\n// \" )$\"\n// \"|\"\n// # Or match a range in descending order (e.g. <=2.0.0,1.0.0+)\n// \" ^(?P<range_desc>\"\n// \" (?P<range_upper_desc>\"\n// \" (?P<range_upper_desc_prefix><|<=)?\" # Upper bound is exclusive?\n// \" (?P<range_upper_desc_version>{version_group})?\"\n// \" (?(range_upper_desc_prefix)|\\+)?\" # + only if upper bound is not exclusive\n// \" )(?P<range_lower_desc>\"\n// \" (?(range_upper_desc_version),|)\" # Comma is not optional because we don't want to recognize something like \"<4>3\"\n// \" (?P<range_lower_desc_prefix><(?={version_group})|>=?)\" # >= or > only if followed by a version group\n// \" (?P<range_lower_desc_version>{version_group})?\"\n// \" )\"\n// \" )$\"\n// ).format(version_group=version_group)\n// - Replace {version_group} -> ${versionGroup}\n// - Replace (?P<...>) -> (?<...>)\n// - Replace ?(...) -> \\k<...>\n\nimport { regEx } from '../../../util/regex.ts';\n\n// - Replace single \\ -> double \\\nexport const versionGroup = '([0-9a-zA-Z_]+(?:[.-][0-9a-zA-Z_]+)*)';\nexport const matchVersion = regEx(\n `^(?<version>${versionGroup})$`,\n); /* Match a version number (e.g. 1.0.0) */\nexport const exactVersion = regEx(\n `^(?<exact_version>==(?<exact_version_group>${versionGroup})?)$`,\n); /* Match an exact version number (e.g. ==1.0.0) */\n// inclusiveBound is called inclusive but behavior in rez is this:\n// package-1..3 will match versions 1.2.3, 2.3.4, but not 3.0.0 or above\nexport const inclusiveBound = regEx(\n `^(?<inclusive_bound>(?<inclusive_lower_version>${versionGroup})?\\\\.\\\\.(?<inclusive_upper_version>${versionGroup})?)$`,\n); /* Match an inclusive bound (e.g. 1.0.0..2.0.0) */\n// Add ? after |\\\\+) in order to match >=1.15\nexport const lowerBound = new RegExp( // TODO #12872 named backreference\n `^(?<lower_bound>(?<lower_bound_prefix>>|>=)?(?<lower_version>${versionGroup})?(\\\\k<lower_bound_prefix>|\\\\+)?)$`,\n); /* Match a lower bound (e.g. 1.0.0+) */\nexport const upperBound = new RegExp( // TODO #12872 lookahead\n `^(?<upper_bound>(?<upper_bound_prefix><(?=${versionGroup})|<=)?(?<upper_version>${versionGroup})?)$`,\n); /* Match an upper bound (e.g. <=1.0.0) */\n// Add ,? to match >=7,<9 (otherwise it just matches >=7<9)\nexport const ascendingRange = new RegExp( // TODO #12872 named backreference\n `^(?<range_asc>(?<range_lower_asc>(?<range_lower_asc_prefix>>|>=)?(?<range_lower_asc_version>${versionGroup})?(\\\\k<range_lower_asc_prefix>|\\\\+)?),?(?<range_upper_asc>(\\\\k<range_lower_asc_version>,?|)(?<range_upper_asc_prefix><(?=${versionGroup})|<=)(?<range_upper_asc_version>${versionGroup})?))$`,\n); /* Match a range in ascending order (e.g. 1.0.0+<2.0.0) */\n// Add , to match <9,>=7 (otherwise it just matches <9>=7)\nexport const descendingRange = new RegExp( // TODO #12872 named backreference\n `^(?<range_desc>(?<range_upper_desc>(?<range_upper_desc_prefix><|<=)?(?<range_upper_desc_version>${versionGroup})?(\\\\k<range_upper_desc_prefix>|\\\\+)?),(?<range_lower_desc>(\\\\k<range_upper_desc_version>,|)(?<range_lower_desc_prefix><(?=${versionGroup})|>=?)(?<range_lower_desc_version>${versionGroup})?))$`,\n); /* Match a range in descending order (e.g. <=2.0.0,1.0.0+) */\n"],"mappings":";;AAiEA,MAAa,eAAe;AAC5B,MAAa,eAAe,MAC1B,eAAe,aAAa,GAC9B;AACA,MAAa,eAAe,MAC1B,8CAA8C,aAAa,KAC7D;AAGA,MAAa,iBAAiB,MAC5B,kDAAkD,aAAa,qCAAqC,aAAa,KACnH;AAEA,MAAa,aAAa,IAAI,OAC5B,gEAAgE,aAAa,mCAC/E;AACA,MAAa,aAAa,IAAI,OAC5B,6CAA6C,aAAa,yBAAyB,aAAa,KAClG;AAEA,MAAa,iBAAiB,IAAI,OAChC,+FAA+F,aAAa,2HAA2H,aAAa,kCAAkC,aAAa,MACrS;AAEA,MAAa,kBAAkB,IAAI,OACjC,mGAAmG,aAAa,6HAA6H,aAAa,oCAAoC,aAAa,MAC7S"}
1
+ {"version":3,"file":"pattern.js","names":[],"sources":["../../../../lib/modules/versioning/rez/pattern.ts"],"sourcesContent":["// Regular Expressions have been copied from, some more work were necessary to make it work:\n// original rez regex written in python (#11634)\n// version_range_regex = (\n// # Match a version number (e.g. 1.0.0)\n// r\" ^(?P<version>{version_group})$\"\n// \"|\"\n// # Or match an exact version number (e.g. ==1.0.0)\n// \" ^(?P<exact_version>\"\n// \" ==\" # Required == operator\n// \" (?P<exact_version_group>{version_group})?\"\n// \" )$\"\n// \"|\"\n// # Or match an inclusive bound (e.g. 1.0.0..2.0.0)\n// \" ^(?P<inclusive_bound>\"\n// \" (?P<inclusive_lower_version>{version_group})?\"\n// \" \\.\\.\" # Required .. operator\n// \" (?P<inclusive_upper_version>{version_group})?\"\n// \" )$\"\n// \"|\"\n// # Or match a lower bound (e.g. 1.0.0+)\n// \" ^(?P<lower_bound>\"\n// \" (?P<lower_bound_prefix>>|>=)?\" # Bound is exclusive?\n// \" (?P<lower_version>{version_group})?\"\n// \" (?(lower_bound_prefix)|\\+)\" # + only if bound is not exclusive\n// \" )$\"\n// \"|\"\n// # Or match an upper bound (e.g. <=1.0.0)\n// \" ^(?P<upper_bound>\"\n// \" (?P<upper_bound_prefix><(?={version_group})|<=)?\" # Bound is exclusive?\n// \" (?P<upper_version>{version_group})?\"\n// \" )$\"\n// \"|\"\n// # Or match a range in ascending order (e.g. 1.0.0+<2.0.0)\n// \" ^(?P<range_asc>\"\n// \" (?P<range_lower_asc>\"\n// \" (?P<range_lower_asc_prefix>>|>=)?\" # Lower bound is exclusive?\n// \" (?P<range_lower_asc_version>{version_group})?\"\n// \" (?(range_lower_asc_prefix)|\\+)?\" # + only if lower bound is not exclusive\n// \" )(?P<range_upper_asc>\"\n// \" (?(range_lower_asc_version),?|)\" # , only if lower bound is found\n// \" (?P<range_upper_asc_prefix><(?={version_group})|<=)\" # <= only if followed by a version group\n// \" (?P<range_upper_asc_version>{version_group})?\"\n// \" )\"\n// \" )$\"\n// \"|\"\n// # Or match a range in descending order (e.g. <=2.0.0,1.0.0+)\n// \" ^(?P<range_desc>\"\n// \" (?P<range_upper_desc>\"\n// \" (?P<range_upper_desc_prefix><|<=)?\" # Upper bound is exclusive?\n// \" (?P<range_upper_desc_version>{version_group})?\"\n// \" (?(range_upper_desc_prefix)|\\+)?\" # + only if upper bound is not exclusive\n// \" )(?P<range_lower_desc>\"\n// \" (?(range_upper_desc_version),|)\" # Comma is not optional because we don't want to recognize something like \"<4>3\"\n// \" (?P<range_lower_desc_prefix><(?={version_group})|>=?)\" # >= or > only if followed by a version group\n// \" (?P<range_lower_desc_version>{version_group})?\"\n// \" )\"\n// \" )$\"\n// ).format(version_group=version_group)\n// - Replace {version_group} -> ${versionGroup}\n// - Replace (?P<...>) -> (?<...>)\n// - Replace ?(...) -> \\k<...>\n\nimport { regEx } from '../../../util/regex.ts';\n\n// - Replace single \\ -> double \\\nexport const versionGroup = '([0-9a-zA-Z_]+(?:[.-][0-9a-zA-Z_]+)*)';\nexport const matchVersion = regEx(\n `^(?<version>${versionGroup})$`,\n); /* Match a version number (e.g. 1.0.0) */\nexport const exactVersion = regEx(\n `^(?<exact_version>==(?<exact_version_group>${versionGroup})?)$`,\n); /* Match an exact version number (e.g. ==1.0.0) */\n// inclusiveBound is called inclusive but behavior in rez is this:\n// package-1..3 will match versions 1.2.3, 2.3.4, but not 3.0.0 or above\nexport const inclusiveBound = regEx(\n `^(?<inclusive_bound>(?<inclusive_lower_version>${versionGroup})?\\\\.\\\\.(?<inclusive_upper_version>${versionGroup})?)$`,\n); /* Match an inclusive bound (e.g. 1.0.0..2.0.0) */\n/* oxlint-disable renovate/require-regex-util -- the bound/range patterns below emulate Python conditional patterns via named backreferences (\\k<...>) and lookaheads (?=...), neither of which RE2 supports, TODO #12872 */\n// Add ? after |\\\\+) in order to match >=1.15\nexport const lowerBound = new RegExp(\n `^(?<lower_bound>(?<lower_bound_prefix>>|>=)?(?<lower_version>${versionGroup})?(\\\\k<lower_bound_prefix>|\\\\+)?)$`,\n); /* Match a lower bound (e.g. 1.0.0+) */\nexport const upperBound = new RegExp(\n `^(?<upper_bound>(?<upper_bound_prefix><(?=${versionGroup})|<=)?(?<upper_version>${versionGroup})?)$`,\n); /* Match an upper bound (e.g. <=1.0.0) */\n// Add ,? to match >=7,<9 (otherwise it just matches >=7<9)\nexport const ascendingRange = new RegExp(\n `^(?<range_asc>(?<range_lower_asc>(?<range_lower_asc_prefix>>|>=)?(?<range_lower_asc_version>${versionGroup})?(\\\\k<range_lower_asc_prefix>|\\\\+)?),?(?<range_upper_asc>(\\\\k<range_lower_asc_version>,?|)(?<range_upper_asc_prefix><(?=${versionGroup})|<=)(?<range_upper_asc_version>${versionGroup})?))$`,\n); /* Match a range in ascending order (e.g. 1.0.0+<2.0.0) */\n// Add , to match <9,>=7 (otherwise it just matches <9>=7)\nexport const descendingRange = new RegExp(\n `^(?<range_desc>(?<range_upper_desc>(?<range_upper_desc_prefix><|<=)?(?<range_upper_desc_version>${versionGroup})?(\\\\k<range_upper_desc_prefix>|\\\\+)?),(?<range_lower_desc>(\\\\k<range_upper_desc_version>,|)(?<range_lower_desc_prefix><(?=${versionGroup})|>=?)(?<range_lower_desc_version>${versionGroup})?))$`,\n); /* Match a range in descending order (e.g. <=2.0.0,1.0.0+) */\n/* oxlint-enable renovate/require-regex-util */\n"],"mappings":";;AAiEA,MAAa,eAAe;AAC5B,MAAa,eAAe,MAC1B,eAAe,aAAa,GAC9B;AACA,MAAa,eAAe,MAC1B,8CAA8C,aAAa,KAC7D;AAGA,MAAa,iBAAiB,MAC5B,kDAAkD,aAAa,qCAAqC,aAAa,KACnH;AAGA,MAAa,aAAa,IAAI,OAC5B,gEAAgE,aAAa,mCAC/E;AACA,MAAa,aAAa,IAAI,OAC5B,6CAA6C,aAAa,yBAAyB,aAAa,KAClG;AAEA,MAAa,iBAAiB,IAAI,OAChC,+FAA+F,aAAa,2HAA2H,aAAa,kCAAkC,aAAa,MACrS;AAEA,MAAa,kBAAkB,IAAI,OACjC,mGAAmG,aAAa,6HAA6H,aAAa,oCAAoC,aAAa,MAC7S"}
@@ -100,7 +100,7 @@ function getNewValue({ currentValue, rangeStrategy, currentVersion, newVersion }
100
100
  }
101
101
  if (newValue && regEx(/^('|")/).exec(currentValue)) {
102
102
  const delimiter = currentValue[0];
103
- return newValue.split(",").map((element) => element.replace(regEx(`^(?<whitespace>\\s*)`), `$<whitespace>${delimiter}`)).map((element) => element.replace(/(?<whitespace>\s*)$/, `${delimiter}$<whitespace>`)).join(",");
103
+ return newValue.split(",").map((element) => element.replace(regEx(`^(?<whitespace>\\s*)`), `$<whitespace>${delimiter}`)).map((element) => element.replace(regEx(/(?<whitespace>\s*)$/), `${delimiter}$<whitespace>`)).join(",");
104
104
  }
105
105
  return newValue;
106
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["parseVersion","parseRange","bump","replace","widen"],"sources":["../../../../lib/modules/versioning/ruby/index.ts"],"sourcesContent":["import {\n eq,\n gt,\n maxSatisfying,\n minSatisfying,\n satisfies,\n valid,\n} from '@renovatebot/ruby-semver';\nimport { isString } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport type { RangeStrategy } from '../../../types/versioning.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\nimport { isSingleOperator, isValidOperator } from './operator.ts';\nimport { ltr, parse as parseRange } from './range.ts';\nimport { bump, replace, widen } from './strategies/index.ts';\nimport { parse as parseVersion } from './version.ts';\n\nexport const id = 'ruby';\nexport const displayName = 'Ruby';\nexport const urls = [\n '[RubyGems patterns](https://guides.rubygems.org/patterns/)',\n '[Bundler Gemfile guide](https://bundler.io/guides/gemfile.html)',\n '[Understanding Gem versions](https://www.devalot.com/articles/2012/04/gem-versions.html)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n];\n\nfunction vtrim<T = unknown>(version: T): string | T {\n if (isString(version)) {\n return version.replace(regEx(/^v/), '').replace(regEx(/('|\")/g), '');\n }\n return version;\n}\n\nfunction equals(left: string, right: string): boolean {\n return eq(vtrim(left), vtrim(right));\n}\n\nfunction getMajor(version: string): number {\n return parseVersion(vtrim(version)).major;\n}\nfunction getMinor(version: string): number {\n return parseVersion(vtrim(version)).minor;\n}\nfunction getPatch(version: string): number {\n return parseVersion(vtrim(version)).patch;\n}\n\nexport function isVersion(version: string): boolean {\n return !!valid(vtrim(version));\n}\nfunction isGreaterThan(left: string, right: string): boolean {\n return gt(vtrim(left), vtrim(right));\n}\nfunction isLessThanRange(version: string, range: string): boolean {\n return !!ltr(vtrim(version), vtrim(range));\n}\n\nfunction isSingleVersion(range: string): boolean {\n const { version, operator } = parseRange(vtrim(range));\n\n return operator\n ? isVersion(version) && isSingleOperator(operator)\n : isVersion(version);\n}\n\nfunction isStable(version: string): boolean {\n const v = vtrim(version);\n return parseVersion(v).prerelease ? false : isVersion(v);\n}\n\nexport function isValid(input: string): boolean {\n return input\n .split(',')\n .map((piece) => vtrim(piece.trim()))\n .every((range) => {\n const { version, operator } = parseRange(range);\n\n return operator\n ? isVersion(version) && isValidOperator(operator)\n : isVersion(version);\n });\n}\n\nexport function matches(version: string, range: string): boolean {\n return satisfies(vtrim(version), vtrim(range));\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return maxSatisfying(versions.map(vtrim), vtrim(range));\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return minSatisfying(versions.map(vtrim), vtrim(range));\n}\n\nfunction getPinnedValue(value: string): string {\n return vtrim(value);\n}\n\nfunction getNewValue({\n currentValue,\n rangeStrategy,\n currentVersion,\n newVersion,\n}: NewValueConfig): string | null {\n let newValue = null;\n if (isVersion(currentValue)) {\n newValue =\n currentValue.startsWith('v') && !newVersion.startsWith('v')\n ? `v${newVersion}`\n : newVersion;\n } else if (currentValue.replace(regEx(/^=\\s*/), '') === currentVersion) {\n newValue = currentValue.replace(currentVersion, newVersion);\n } else {\n switch (rangeStrategy) {\n case 'update-lockfile':\n if (satisfies(newVersion, vtrim(currentValue))) {\n newValue = vtrim(currentValue);\n } else {\n return getNewValue({\n currentValue,\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n }\n break;\n case 'bump':\n newValue = bump({ range: vtrim(currentValue), to: vtrim(newVersion) });\n break;\n case 'auto':\n case 'replace':\n newValue = replace({\n range: vtrim(currentValue),\n to: vtrim(newVersion),\n });\n break;\n case 'widen':\n newValue = widen({\n range: vtrim(currentValue),\n to: vtrim(newVersion),\n });\n break;\n // istanbul ignore next\n default:\n logger.warn({ rangeStrategy }, 'Unsupported range strategy');\n }\n }\n if (newValue && regEx(/^('|\")/).exec(currentValue)) {\n const delimiter = currentValue[0];\n return newValue\n .split(',')\n .map((element) =>\n element.replace(\n regEx(`^(?<whitespace>\\\\s*)`),\n `$<whitespace>${delimiter}`,\n ),\n )\n .map(\n (element) =>\n element.replace(/(?<whitespace>\\s*)$/, `${delimiter}$<whitespace>`), // TODO #12875 adds ' at front when re2 is used\n )\n .join(',');\n }\n return newValue;\n}\n\nexport function sortVersions(left: string, right: string): number {\n return gt(vtrim(left), vtrim(right)) ? 1 : -1;\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n isCompatible: isVersion,\n isGreaterThan,\n isLessThanRange,\n isSingleVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n getSatisfyingVersion,\n minSatisfyingVersion,\n getPinnedValue,\n getNewValue,\n sortVersions,\n};\nexport default api;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["parseVersion","parseRange","bump","replace","widen"],"sources":["../../../../lib/modules/versioning/ruby/index.ts"],"sourcesContent":["import {\n eq,\n gt,\n maxSatisfying,\n minSatisfying,\n satisfies,\n valid,\n} from '@renovatebot/ruby-semver';\nimport { isString } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport type { RangeStrategy } from '../../../types/versioning.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\nimport { isSingleOperator, isValidOperator } from './operator.ts';\nimport { ltr, parse as parseRange } from './range.ts';\nimport { bump, replace, widen } from './strategies/index.ts';\nimport { parse as parseVersion } from './version.ts';\n\nexport const id = 'ruby';\nexport const displayName = 'Ruby';\nexport const urls = [\n '[RubyGems patterns](https://guides.rubygems.org/patterns/)',\n '[Bundler Gemfile guide](https://bundler.io/guides/gemfile.html)',\n '[Understanding Gem versions](https://www.devalot.com/articles/2012/04/gem-versions.html)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n];\n\nfunction vtrim<T = unknown>(version: T): string | T {\n if (isString(version)) {\n return version.replace(regEx(/^v/), '').replace(regEx(/('|\")/g), '');\n }\n return version;\n}\n\nfunction equals(left: string, right: string): boolean {\n return eq(vtrim(left), vtrim(right));\n}\n\nfunction getMajor(version: string): number {\n return parseVersion(vtrim(version)).major;\n}\nfunction getMinor(version: string): number {\n return parseVersion(vtrim(version)).minor;\n}\nfunction getPatch(version: string): number {\n return parseVersion(vtrim(version)).patch;\n}\n\nexport function isVersion(version: string): boolean {\n return !!valid(vtrim(version));\n}\nfunction isGreaterThan(left: string, right: string): boolean {\n return gt(vtrim(left), vtrim(right));\n}\nfunction isLessThanRange(version: string, range: string): boolean {\n return !!ltr(vtrim(version), vtrim(range));\n}\n\nfunction isSingleVersion(range: string): boolean {\n const { version, operator } = parseRange(vtrim(range));\n\n return operator\n ? isVersion(version) && isSingleOperator(operator)\n : isVersion(version);\n}\n\nfunction isStable(version: string): boolean {\n const v = vtrim(version);\n return parseVersion(v).prerelease ? false : isVersion(v);\n}\n\nexport function isValid(input: string): boolean {\n return input\n .split(',')\n .map((piece) => vtrim(piece.trim()))\n .every((range) => {\n const { version, operator } = parseRange(range);\n\n return operator\n ? isVersion(version) && isValidOperator(operator)\n : isVersion(version);\n });\n}\n\nexport function matches(version: string, range: string): boolean {\n return satisfies(vtrim(version), vtrim(range));\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return maxSatisfying(versions.map(vtrim), vtrim(range));\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return minSatisfying(versions.map(vtrim), vtrim(range));\n}\n\nfunction getPinnedValue(value: string): string {\n return vtrim(value);\n}\n\nfunction getNewValue({\n currentValue,\n rangeStrategy,\n currentVersion,\n newVersion,\n}: NewValueConfig): string | null {\n let newValue = null;\n if (isVersion(currentValue)) {\n newValue =\n currentValue.startsWith('v') && !newVersion.startsWith('v')\n ? `v${newVersion}`\n : newVersion;\n } else if (currentValue.replace(regEx(/^=\\s*/), '') === currentVersion) {\n newValue = currentValue.replace(currentVersion, newVersion);\n } else {\n switch (rangeStrategy) {\n case 'update-lockfile':\n if (satisfies(newVersion, vtrim(currentValue))) {\n newValue = vtrim(currentValue);\n } else {\n return getNewValue({\n currentValue,\n rangeStrategy: 'replace',\n currentVersion,\n newVersion,\n });\n }\n break;\n case 'bump':\n newValue = bump({ range: vtrim(currentValue), to: vtrim(newVersion) });\n break;\n case 'auto':\n case 'replace':\n newValue = replace({\n range: vtrim(currentValue),\n to: vtrim(newVersion),\n });\n break;\n case 'widen':\n newValue = widen({\n range: vtrim(currentValue),\n to: vtrim(newVersion),\n });\n break;\n // istanbul ignore next\n default:\n logger.warn({ rangeStrategy }, 'Unsupported range strategy');\n }\n }\n if (newValue && regEx(/^('|\")/).exec(currentValue)) {\n const delimiter = currentValue[0];\n return newValue\n .split(',')\n .map((element) =>\n element.replace(\n regEx(`^(?<whitespace>\\\\s*)`),\n `$<whitespace>${delimiter}`,\n ),\n )\n .map(\n (element) =>\n element.replace(\n regEx(/(?<whitespace>\\s*)$/),\n `${delimiter}$<whitespace>`,\n ), // TODO #12875 adds ' at front when re2 is used\n )\n .join(',');\n }\n return newValue;\n}\n\nexport function sortVersions(left: string, right: string): number {\n return gt(vtrim(left), vtrim(right)) ? 1 : -1;\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n isCompatible: isVersion,\n isGreaterThan,\n isLessThanRange,\n isSingleVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n getSatisfyingVersion,\n minSatisfyingVersion,\n getPinnedValue,\n getNewValue,\n sortVersions,\n};\nexport default api;\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { regEx } from "../../../util/regex.js";
1
2
  import semver from "semver";
2
3
  import stable from "semver-stable";
3
4
  //#region lib/modules/versioning/semver/index.ts
@@ -8,7 +9,7 @@ function isVersion(input) {
8
9
  return !!valid$1(input);
9
10
  }
10
11
  function getNewValue({ currentValue, currentVersion, newVersion }) {
11
- if (currentVersion === `v${currentValue}`) return newVersion.replace(/^v/, "");
12
+ if (currentVersion === `v${currentValue}`) return newVersion.replace(regEx(/^v/), "");
12
13
  return newVersion;
13
14
  }
14
15
  function isBreaking(current, version) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["valid"],"sources":["../../../../lib/modules/versioning/semver/index.ts"],"sourcesContent":["import semver from 'semver';\nimport stable from 'semver-stable';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\n\nexport const id = 'semver';\nexport const displayName = 'Semantic';\nexport const urls = ['[Semantic Versioning](https://semver.org/)'];\nexport const supportsRanges = false;\n\nconst { is: isStable } = stable;\n\nconst {\n compare: sortVersions,\n maxSatisfying: getSatisfyingVersion,\n minSatisfying: minSatisfyingVersion,\n major: getMajor,\n minor: getMinor,\n patch: getPatch,\n satisfies: matches,\n valid,\n ltr: isLessThanRange,\n gt: isGreaterThan,\n eq: equals,\n} = semver;\n\n// If this is left as an alias, inputs like \"17.04.0\" throw errors\nexport function isVersion(input: string): boolean {\n return !!valid(input);\n}\n\nexport { getSatisfyingVersion, isVersion as isValid };\n\nfunction getNewValue({\n currentValue,\n currentVersion,\n newVersion,\n}: NewValueConfig): string {\n if (currentVersion === `v${currentValue}`) {\n return newVersion.replace(/^v/, '');\n }\n return newVersion;\n}\n\nexport function isBreaking(current: string, version: string): boolean {\n // The change may be breaking if either version is unstable\n if (!isStable(version) || !isStable(current)) {\n return true;\n }\n const currentMajor = getMajor(current);\n if (currentMajor === 0) {\n // All v0.x updates might be breaking\n return true;\n }\n // Otherwise, only major updates are breaking\n return currentMajor !== getMajor(version);\n}\n\nfunction isCompatible(version: string): boolean {\n return isVersion(version);\n}\n\nfunction isSingleVersion(version: string): boolean {\n return isVersion(version);\n}\n\nfunction isValid(input: string): boolean {\n return isVersion(input);\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n isBreaking,\n isCompatible,\n isGreaterThan,\n isLessThanRange,\n isSingleVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n getSatisfyingVersion,\n minSatisfyingVersion,\n getNewValue,\n sortVersions,\n};\nexport default api;\n"],"mappings":";;;AAIA,MAAa,KAAK;AAKlB,MAAM,EAAE,IAAI,aAAa;AAEzB,MAAM,EACJ,SAAS,cACT,eAAe,sBACf,eAAe,sBACf,OAAO,UACP,OAAO,UACP,OAAO,UACP,WAAW,SACX,OAAA,SACA,KAAK,iBACL,IAAI,eACJ,IAAI,WACF;AAGJ,SAAgB,UAAU,OAAwB;CAChD,OAAO,CAAC,CAACA,QAAM,KAAK;AACtB;AAIA,SAAS,YAAY,EACnB,cACA,gBACA,cACyB;CACzB,IAAI,mBAAmB,IAAI,gBACzB,OAAO,WAAW,QAAQ,MAAM,EAAE;CAEpC,OAAO;AACT;AAEA,SAAgB,WAAW,SAAiB,SAA0B;CAEpE,IAAI,CAAC,SAAS,OAAO,KAAK,CAAC,SAAS,OAAO,GACzC,OAAO;CAET,MAAM,eAAe,SAAS,OAAO;CACrC,IAAI,iBAAiB,GAEnB,OAAO;CAGT,OAAO,iBAAiB,SAAS,OAAO;AAC1C;AAEA,SAAS,aAAa,SAA0B;CAC9C,OAAO,UAAU,OAAO;AAC1B;AAEA,SAAS,gBAAgB,SAA0B;CACjD,OAAO,UAAU,OAAO;AAC1B;AAEA,SAAS,QAAQ,OAAwB;CACvC,OAAO,UAAU,KAAK;AACxB;AAEA,MAAa,MAAqB;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
1
+ {"version":3,"file":"index.js","names":["valid"],"sources":["../../../../lib/modules/versioning/semver/index.ts"],"sourcesContent":["import semver from 'semver';\nimport stable from 'semver-stable';\nimport { regEx } from '../../../util/regex.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\n\nexport const id = 'semver';\nexport const displayName = 'Semantic';\nexport const urls = ['[Semantic Versioning](https://semver.org/)'];\nexport const supportsRanges = false;\n\nconst { is: isStable } = stable;\n\nconst {\n compare: sortVersions,\n maxSatisfying: getSatisfyingVersion,\n minSatisfying: minSatisfyingVersion,\n major: getMajor,\n minor: getMinor,\n patch: getPatch,\n satisfies: matches,\n valid,\n ltr: isLessThanRange,\n gt: isGreaterThan,\n eq: equals,\n} = semver;\n\n// If this is left as an alias, inputs like \"17.04.0\" throw errors\nexport function isVersion(input: string): boolean {\n return !!valid(input);\n}\n\nexport { getSatisfyingVersion, isVersion as isValid };\n\nfunction getNewValue({\n currentValue,\n currentVersion,\n newVersion,\n}: NewValueConfig): string {\n if (currentVersion === `v${currentValue}`) {\n return newVersion.replace(regEx(/^v/), '');\n }\n return newVersion;\n}\n\nexport function isBreaking(current: string, version: string): boolean {\n // The change may be breaking if either version is unstable\n if (!isStable(version) || !isStable(current)) {\n return true;\n }\n const currentMajor = getMajor(current);\n if (currentMajor === 0) {\n // All v0.x updates might be breaking\n return true;\n }\n // Otherwise, only major updates are breaking\n return currentMajor !== getMajor(version);\n}\n\nfunction isCompatible(version: string): boolean {\n return isVersion(version);\n}\n\nfunction isSingleVersion(version: string): boolean {\n return isVersion(version);\n}\n\nfunction isValid(input: string): boolean {\n return isVersion(input);\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n isBreaking,\n isCompatible,\n isGreaterThan,\n isLessThanRange,\n isSingleVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n getSatisfyingVersion,\n minSatisfyingVersion,\n getNewValue,\n sortVersions,\n};\nexport default api;\n"],"mappings":";;;;AAKA,MAAa,KAAK;AAKlB,MAAM,EAAE,IAAI,aAAa;AAEzB,MAAM,EACJ,SAAS,cACT,eAAe,sBACf,eAAe,sBACf,OAAO,UACP,OAAO,UACP,OAAO,UACP,WAAW,SACX,OAAA,SACA,KAAK,iBACL,IAAI,eACJ,IAAI,WACF;AAGJ,SAAgB,UAAU,OAAwB;CAChD,OAAO,CAAC,CAACA,QAAM,KAAK;AACtB;AAIA,SAAS,YAAY,EACnB,cACA,gBACA,cACyB;CACzB,IAAI,mBAAmB,IAAI,gBACzB,OAAO,WAAW,QAAQ,MAAM,IAAI,GAAG,EAAE;CAE3C,OAAO;AACT;AAEA,SAAgB,WAAW,SAAiB,SAA0B;CAEpE,IAAI,CAAC,SAAS,OAAO,KAAK,CAAC,SAAS,OAAO,GACzC,OAAO;CAET,MAAM,eAAe,SAAS,OAAO;CACrC,IAAI,iBAAiB,GAEnB,OAAO;CAGT,OAAO,iBAAiB,SAAS,OAAO;AAC1C;AAEA,SAAS,aAAa,SAA0B;CAC9C,OAAO,UAAU,OAAO;AAC1B;AAEA,SAAS,gBAAgB,SAA0B;CACjD,OAAO,UAAU,OAAO;AAC1B;AAEA,SAAS,QAAQ,OAAwB;CACvC,OAAO,UAAU,KAAK;AACxB;AAEA,MAAa,MAAqB;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
@@ -85,7 +85,7 @@ function isVersion(input) {
85
85
  return isValid(input);
86
86
  }
87
87
  function getNewValue({ currentValue, currentVersion, newVersion }) {
88
- if (currentVersion === `v${currentValue}`) return newVersion.replace(/^v/, "");
88
+ if (currentVersion === `v${currentValue}`) return newVersion.replace(regEx(/^v/), "");
89
89
  return newVersion;
90
90
  }
91
91
  function isBreaking(version, current) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["semverIsBreaking"],"sources":["../../../../lib/modules/versioning/semver-coerced/index.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport type { SemVer } from 'semver';\nimport semver from 'semver';\nimport stable from 'semver-stable';\nimport { regEx } from '../../../util/regex.ts';\nimport { isBreaking as semverIsBreaking } from '../semver/index.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\n\nexport const id = 'semver-coerced';\nexport const displayName = 'Coerced Semantic Versioning';\nexport const urls = ['[Semantic Versioning](https://semver.org/)'];\nexport const supportsRanges = false;\n\nfunction isStable(version: string): boolean {\n // matching a version with the semver prefix\n // v1.2.3, 1.2.3, v1.2, 1.2, v1, 1\n const regx = regEx(\n /^v?(?<major>\\d+)(?<minor>\\.\\d+)?(?<patch>\\.\\d+)?(?<others>.+)?/,\n );\n const m = regx.exec(version);\n\n if (!m?.groups) {\n return false;\n }\n\n const major = m.groups.major;\n const newMinor = m.groups.minor ?? '.0';\n const newPatch = m.groups.patch ?? '.0';\n const others = m.groups.others ?? '';\n const fixed = major + newMinor + newPatch + others;\n return stable.is(fixed);\n}\n\nfunction sortVersions(a: string, b: string): number {\n const aCoerced = semver.coerce(a);\n const bCoerced = semver.coerce(b);\n\n return aCoerced && bCoerced ? semver.compare(aCoerced, bCoerced) : 0;\n}\n\nfunction getMajor(a: string | SemVer): number | null {\n const aCoerced = semver.coerce(a);\n return aCoerced ? semver.major(aCoerced) : null;\n}\n\nfunction getMinor(a: string | SemVer): number | null {\n const aCoerced = semver.coerce(a);\n return aCoerced ? semver.minor(aCoerced) : null;\n}\n\nfunction getPatch(a: string | SemVer): number | null {\n const aCoerced = semver.coerce(a);\n return aCoerced ? semver.patch(aCoerced) : null;\n}\n\nfunction matches(version: string, range: string): boolean {\n const coercedVersion = semver.coerce(version);\n return coercedVersion ? semver.satisfies(coercedVersion, range) : false;\n}\n\nfunction equals(a: string, b: string): boolean {\n const aCoerced = semver.coerce(a);\n const bCoerced = semver.coerce(b);\n return aCoerced && bCoerced ? semver.eq(aCoerced, bCoerced) : false;\n}\n\nfunction isValid(version: string): boolean {\n return !!semver.valid(semver.coerce(version));\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n const coercedVersions = versions\n .map((version) =>\n semver.valid(version) ? version : semver.coerce(version)?.version,\n )\n .filter(isString);\n\n return semver.maxSatisfying(coercedVersions, range);\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n const coercedVersions = versions\n .map((version) => semver.coerce(version)?.version)\n .filter(isString);\n\n return semver.minSatisfying(coercedVersions, range);\n}\n\nfunction isLessThanRange(version: string, range: string): boolean {\n const coercedVersion = semver.coerce(version);\n return coercedVersion ? semver.ltr(coercedVersion, range) : false;\n}\n\nfunction isGreaterThan(version: string, other: string): boolean {\n const coercedVersion = semver.coerce(version);\n const coercedOther = semver.coerce(other);\n if (!coercedVersion || !coercedOther) {\n return false;\n }\n return semver.gt(coercedVersion, coercedOther);\n}\n\nconst startsWithNumberRegex = regEx(`^\\\\d`);\n\nfunction isSingleVersion(version: string): boolean {\n // Since coercion accepts ranges as well as versions, we have to manually\n // check that the version string starts with either 'v' or a digit.\n if (!version.startsWith('v') && !startsWithNumberRegex.exec(version)) {\n return false;\n }\n\n return !!semver.valid(semver.coerce(version));\n}\n\n// If this is left as an alias, inputs like \"17.04.0\" throw errors\nexport function isVersion(input: string): boolean {\n return isValid(input);\n}\n\nexport { getSatisfyingVersion, isVersion as isValid };\n\nfunction getNewValue({\n currentValue,\n currentVersion,\n newVersion,\n}: NewValueConfig): string {\n if (currentVersion === `v${currentValue}`) {\n return newVersion.replace(/^v/, '');\n }\n return newVersion;\n}\n\nfunction isBreaking(version: string, current: string): boolean {\n const coercedVersion = semver.coerce(version)?.toString();\n const coercedCurrent = semver.coerce(current)?.toString();\n return !!(\n coercedVersion &&\n coercedCurrent &&\n semverIsBreaking(coercedVersion, coercedCurrent)\n );\n}\n\nfunction isCompatible(version: string): boolean {\n return isVersion(version);\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n isBreaking,\n isCompatible,\n isGreaterThan,\n isLessThanRange,\n isSingleVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n getSatisfyingVersion,\n minSatisfyingVersion,\n getNewValue,\n sortVersions,\n};\nexport default api;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["semverIsBreaking"],"sources":["../../../../lib/modules/versioning/semver-coerced/index.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport type { SemVer } from 'semver';\nimport semver from 'semver';\nimport stable from 'semver-stable';\nimport { regEx } from '../../../util/regex.ts';\nimport { isBreaking as semverIsBreaking } from '../semver/index.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\n\nexport const id = 'semver-coerced';\nexport const displayName = 'Coerced Semantic Versioning';\nexport const urls = ['[Semantic Versioning](https://semver.org/)'];\nexport const supportsRanges = false;\n\nfunction isStable(version: string): boolean {\n // matching a version with the semver prefix\n // v1.2.3, 1.2.3, v1.2, 1.2, v1, 1\n const regx = regEx(\n /^v?(?<major>\\d+)(?<minor>\\.\\d+)?(?<patch>\\.\\d+)?(?<others>.+)?/,\n );\n const m = regx.exec(version);\n\n if (!m?.groups) {\n return false;\n }\n\n const major = m.groups.major;\n const newMinor = m.groups.minor ?? '.0';\n const newPatch = m.groups.patch ?? '.0';\n const others = m.groups.others ?? '';\n const fixed = major + newMinor + newPatch + others;\n return stable.is(fixed);\n}\n\nfunction sortVersions(a: string, b: string): number {\n const aCoerced = semver.coerce(a);\n const bCoerced = semver.coerce(b);\n\n return aCoerced && bCoerced ? semver.compare(aCoerced, bCoerced) : 0;\n}\n\nfunction getMajor(a: string | SemVer): number | null {\n const aCoerced = semver.coerce(a);\n return aCoerced ? semver.major(aCoerced) : null;\n}\n\nfunction getMinor(a: string | SemVer): number | null {\n const aCoerced = semver.coerce(a);\n return aCoerced ? semver.minor(aCoerced) : null;\n}\n\nfunction getPatch(a: string | SemVer): number | null {\n const aCoerced = semver.coerce(a);\n return aCoerced ? semver.patch(aCoerced) : null;\n}\n\nfunction matches(version: string, range: string): boolean {\n const coercedVersion = semver.coerce(version);\n return coercedVersion ? semver.satisfies(coercedVersion, range) : false;\n}\n\nfunction equals(a: string, b: string): boolean {\n const aCoerced = semver.coerce(a);\n const bCoerced = semver.coerce(b);\n return aCoerced && bCoerced ? semver.eq(aCoerced, bCoerced) : false;\n}\n\nfunction isValid(version: string): boolean {\n return !!semver.valid(semver.coerce(version));\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n const coercedVersions = versions\n .map((version) =>\n semver.valid(version) ? version : semver.coerce(version)?.version,\n )\n .filter(isString);\n\n return semver.maxSatisfying(coercedVersions, range);\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n const coercedVersions = versions\n .map((version) => semver.coerce(version)?.version)\n .filter(isString);\n\n return semver.minSatisfying(coercedVersions, range);\n}\n\nfunction isLessThanRange(version: string, range: string): boolean {\n const coercedVersion = semver.coerce(version);\n return coercedVersion ? semver.ltr(coercedVersion, range) : false;\n}\n\nfunction isGreaterThan(version: string, other: string): boolean {\n const coercedVersion = semver.coerce(version);\n const coercedOther = semver.coerce(other);\n if (!coercedVersion || !coercedOther) {\n return false;\n }\n return semver.gt(coercedVersion, coercedOther);\n}\n\nconst startsWithNumberRegex = regEx(`^\\\\d`);\n\nfunction isSingleVersion(version: string): boolean {\n // Since coercion accepts ranges as well as versions, we have to manually\n // check that the version string starts with either 'v' or a digit.\n if (!version.startsWith('v') && !startsWithNumberRegex.exec(version)) {\n return false;\n }\n\n return !!semver.valid(semver.coerce(version));\n}\n\n// If this is left as an alias, inputs like \"17.04.0\" throw errors\nexport function isVersion(input: string): boolean {\n return isValid(input);\n}\n\nexport { getSatisfyingVersion, isVersion as isValid };\n\nfunction getNewValue({\n currentValue,\n currentVersion,\n newVersion,\n}: NewValueConfig): string {\n if (currentVersion === `v${currentValue}`) {\n return newVersion.replace(regEx(/^v/), '');\n }\n return newVersion;\n}\n\nfunction isBreaking(version: string, current: string): boolean {\n const coercedVersion = semver.coerce(version)?.toString();\n const coercedCurrent = semver.coerce(current)?.toString();\n return !!(\n coercedVersion &&\n coercedCurrent &&\n semverIsBreaking(coercedVersion, coercedCurrent)\n );\n}\n\nfunction isCompatible(version: string): boolean {\n return isVersion(version);\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n isBreaking,\n isCompatible,\n isGreaterThan,\n isLessThanRange,\n isSingleVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n getSatisfyingVersion,\n minSatisfyingVersion,\n getNewValue,\n sortVersions,\n};\nexport default api;\n"],"mappings":"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"}