renovate 44.48.0 → 44.48.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 (90) hide show
  1. package/dist/config/options/index.js +1 -1
  2. package/dist/config/options/index.js.map +1 -1
  3. package/dist/global-config-option-defaults.generated.js +1 -1
  4. package/dist/global-config-option-defaults.generated.js.map +1 -1
  5. package/dist/modules/datasource/docker/dockerhub-cache.js.map +1 -1
  6. package/dist/modules/datasource/go/common.js.map +1 -1
  7. package/dist/modules/datasource/rubygems/versions-endpoint-cache.js.map +1 -1
  8. package/dist/modules/datasource/rust-version/index.js.map +1 -1
  9. package/dist/modules/datasource/rust-version/parse.js.map +1 -1
  10. package/dist/modules/manager/asdf/extract.js.map +1 -1
  11. package/dist/modules/manager/asdf/upgradeable-tooling.js.map +1 -1
  12. package/dist/modules/manager/bazel-module/extract.js.map +1 -1
  13. package/dist/modules/manager/bazel-module/parser/context.js.map +1 -1
  14. package/dist/modules/manager/bazel-module/parser/fragments.js +1 -1
  15. package/dist/modules/manager/bazel-module/parser/fragments.js.map +1 -1
  16. package/dist/modules/manager/bazel-module/parser/index.js.map +1 -1
  17. package/dist/modules/manager/bazel-module/rules.js.map +1 -1
  18. package/dist/modules/manager/custom/jsonata/utils.js.map +1 -1
  19. package/dist/modules/manager/custom/regex/utils.js.map +1 -1
  20. package/dist/modules/manager/custom/types.d.ts +1 -0
  21. package/dist/modules/manager/custom/utils.d.ts +1 -0
  22. package/dist/modules/manager/custom/utils.js.map +1 -1
  23. package/dist/modules/manager/devbox/tool-versioning.js.map +1 -1
  24. package/dist/modules/manager/fingerprint.generated.js +2 -2
  25. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  26. package/dist/modules/manager/github-actions/community.js.map +1 -1
  27. package/dist/modules/manager/github-actions/extract.js.map +1 -1
  28. package/dist/modules/manager/github-actions/parse.js.map +1 -1
  29. package/dist/modules/manager/github-actions/schema.js.map +1 -1
  30. package/dist/modules/manager/haskell-cabal/extract.js.map +1 -1
  31. package/dist/modules/manager/haskell-cabal/index.js.map +1 -1
  32. package/dist/modules/manager/homebrew/handlers/github.js.map +1 -1
  33. package/dist/modules/manager/homebrew/handlers/npm.js.map +1 -1
  34. package/dist/modules/manager/mise/backends.js.map +1 -1
  35. package/dist/modules/manager/mise/extract.js.map +1 -1
  36. package/dist/modules/manager/mise/lockfile.js.map +1 -1
  37. package/dist/modules/manager/mise/upgradeable-tooling.js.map +1 -1
  38. package/dist/modules/manager/npm/npmrc.js.map +1 -1
  39. package/dist/modules/manager/npm/post-update/node-version.js.map +1 -1
  40. package/dist/modules/manager/npm/post-update/npm.js.map +1 -1
  41. package/dist/modules/manager/npm/post-update/rules.js.map +1 -1
  42. package/dist/modules/manager/npm/post-update/utils.js.map +1 -1
  43. package/dist/modules/manager/pixi/lockfile.js.map +1 -1
  44. package/dist/modules/manager/proto/extract.js.map +1 -1
  45. package/dist/modules/manager/proto/upgradeable-tooling.js.map +1 -1
  46. package/dist/modules/manager/terragrunt/util.js.map +1 -1
  47. package/dist/modules/platform/azure/azure-helper.js.map +1 -1
  48. package/dist/modules/platform/azure/types.js.map +1 -1
  49. package/dist/modules/platform/bitbucket/comments.js.map +1 -1
  50. package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
  51. package/dist/modules/platform/bitbucket-server/utils.js.map +1 -1
  52. package/dist/modules/platform/codecommit/index.js.map +1 -1
  53. package/dist/modules/versioning/apk/index.js.map +1 -1
  54. package/dist/modules/versioning/aws-machine-image/index.js.map +1 -1
  55. package/dist/modules/versioning/azure-rest-api/index.js.map +1 -1
  56. package/dist/modules/versioning/deb/index.js.map +1 -1
  57. package/dist/modules/versioning/debian/common.js.map +1 -1
  58. package/dist/modules/versioning/debian/index.js.map +1 -1
  59. package/dist/modules/versioning/devbox/index.js.map +1 -1
  60. package/dist/modules/versioning/distro.js.map +1 -1
  61. package/dist/modules/versioning/docker/index.js.map +1 -1
  62. package/dist/modules/versioning/generic.d.ts +2 -10
  63. package/dist/modules/versioning/generic.js.map +1 -1
  64. package/dist/modules/versioning/git/index.js.map +1 -1
  65. package/dist/modules/versioning/glasskube/index.js.map +1 -1
  66. package/dist/modules/versioning/gradle/compare.js.map +1 -1
  67. package/dist/modules/versioning/hermit/index.js.map +1 -1
  68. package/dist/modules/versioning/index.d.ts +2 -2
  69. package/dist/modules/versioning/ivy/parse.js.map +1 -1
  70. package/dist/modules/versioning/lambda-node/schedule.js.map +1 -1
  71. package/dist/modules/versioning/loose/index.js.map +1 -1
  72. package/dist/modules/versioning/maven/compare.js.map +1 -1
  73. package/dist/modules/versioning/nixpkgs/index.js.map +1 -1
  74. package/dist/modules/versioning/node/schedule.js.map +1 -1
  75. package/dist/modules/versioning/paket/index.js.map +1 -1
  76. package/dist/modules/versioning/paket/range.js.map +1 -1
  77. package/dist/modules/versioning/perl/index.js.map +1 -1
  78. package/dist/modules/versioning/redhat/index.js.map +1 -1
  79. package/dist/modules/versioning/regex/index.js.map +1 -1
  80. package/dist/modules/versioning/rpm/index.js.map +1 -1
  81. package/dist/modules/versioning/ruby/range.js.map +1 -1
  82. package/dist/modules/versioning/ruby/strategies/bump.js.map +1 -1
  83. package/dist/modules/versioning/ruby/strategies/replace.js.map +1 -1
  84. package/dist/modules/versioning/ruby/strategies/widen.js.map +1 -1
  85. package/dist/modules/versioning/semver/common.js.map +1 -1
  86. package/dist/modules/versioning/types.d.ts +25 -1
  87. package/dist/modules/versioning/unity3d/index.js.map +1 -1
  88. package/dist/modules/versioning/unity3d-packages/index.js.map +1 -1
  89. package/package.json +1 -1
  90. package/renovate-schema.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"compare.js","names":[],"sources":["../../../../lib/modules/versioning/gradle/compare.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { regEx } from '../../../util/regex.ts';\n\nexport const TokenType = {\n Number: 1,\n String: 2,\n};\n\ninterface Token {\n type: number;\n val: string | number;\n}\n\nfunction iterateChars(\n str: string,\n cb: (p: string | null, n: string | null) => void,\n): void {\n let prev = null;\n let next = null;\n for (let i = 0; i < str.length; i += 1) {\n next = str.charAt(i);\n cb(prev, next);\n prev = next;\n }\n cb(prev, null);\n}\n\nfunction isSeparator(char: string): boolean {\n return regEx(/^[-._+]$/i).test(char);\n}\n\nfunction isDigit(char: string): boolean {\n return regEx(/^\\d$/).test(char);\n}\n\nfunction isLetter(char: string): boolean {\n return !isSeparator(char) && !isDigit(char);\n}\n\nfunction isTransition(prevChar: string, nextChar: string): boolean {\n return (\n (isDigit(prevChar) && isLetter(nextChar)) ||\n (isLetter(prevChar) && isDigit(nextChar))\n );\n}\n\nexport function tokenize(versionStr: string): Token[] | null {\n let result: Token[] | null = [];\n let currentVal = '';\n\n function yieldToken(): void {\n if (result) {\n const val = currentVal;\n if (regEx(/^\\d+$/).test(val)) {\n result.push({\n type: TokenType.Number,\n val: parseInt(val, 10),\n });\n } else {\n result.push({\n type: TokenType.String,\n val,\n });\n }\n }\n }\n\n iterateChars(versionStr, (prevChar, nextChar) => {\n if (nextChar === null) {\n yieldToken();\n } else if (isSeparator(nextChar)) {\n if (prevChar && !isSeparator(prevChar)) {\n yieldToken();\n currentVal = '';\n } else {\n result = null;\n }\n } else if (prevChar !== null && isTransition(prevChar, nextChar)) {\n yieldToken();\n currentVal = nextChar;\n } else {\n currentVal = currentVal.concat(nextChar);\n }\n });\n\n return result;\n}\n\nexport const QualifierRank = {\n Dev: -1,\n Default: 0,\n RC: 1,\n Snapshot: 2,\n Final: 3,\n GA: 4,\n Release: 5,\n SP: 6,\n} as const;\n\nexport function qualifierRank(input: string): number {\n const val = input.toLowerCase();\n if (val === 'dev') {\n return QualifierRank.Dev;\n }\n if (val === 'rc' || val === 'cr') {\n return QualifierRank.RC;\n }\n if (val === 'snapshot') {\n return QualifierRank.Snapshot;\n }\n if (val === 'ga') {\n return QualifierRank.GA;\n }\n if (val === 'final') {\n return QualifierRank.Final;\n }\n if (val === 'release' || val === 'latest' || val === 'sr') {\n return QualifierRank.Release;\n }\n if (val === 'sp') {\n return QualifierRank.SP;\n }\n return QualifierRank.Default;\n}\n\nfunction stringTokenCmp(left: string, right: string): number {\n const leftRank = qualifierRank(left);\n const rightRank = qualifierRank(right);\n if (leftRank === 0 && rightRank === 0) {\n if (left < right) {\n return -1;\n }\n\n if (left > right) {\n return 1;\n }\n } else {\n if (leftRank < rightRank) {\n return -1;\n }\n if (leftRank > rightRank) {\n return 1;\n }\n }\n return 0;\n}\n\nfunction tokenCmp(left: Token | null, right: Token | null): number {\n if (left === null) {\n if (right?.type === TokenType.String) {\n return 1;\n }\n return -1;\n }\n\n if (right === null) {\n if (left.type === TokenType.String) {\n return -1;\n }\n return 1;\n }\n\n if (left.type === TokenType.Number && right.type === TokenType.Number) {\n if (left.val < right.val) {\n return -1;\n }\n if (left.val > right.val) {\n return 1;\n }\n } else if (isString(left.val) && isString(right.val)) {\n return stringTokenCmp(left.val, right.val);\n } else if (right.type === TokenType.Number) {\n return -1;\n } else if (left.type === TokenType.Number) {\n return 1;\n }\n\n return 0;\n}\n\nexport function compare(left: string, right: string): number {\n const leftTokens = tokenize(left) ?? [];\n const rightTokens = tokenize(right) ?? [];\n const length = Math.max(leftTokens.length, rightTokens.length);\n for (let idx = 0; idx < length; idx += 1) {\n const leftToken = leftTokens[idx] || null;\n const rightToken = rightTokens[idx] || null;\n const cmpResult = tokenCmp(leftToken, rightToken);\n if (cmpResult !== 0) {\n return cmpResult;\n }\n }\n return 0;\n}\n\nexport function parse(input: string): Token[] | null {\n if (!input) {\n return null;\n }\n\n if (!regEx(/^[-._+a-zA-Z0-9]+$/i).test(input)) {\n return null;\n }\n\n if (regEx(/^latest\\.?/i).test(input)) {\n return null;\n }\n\n const tokens = tokenize(input);\n // istanbul ignore if: should not happen\n if (!tokens?.length) {\n return null;\n }\n return tokens;\n}\n\nexport function isVersion(input: string): boolean {\n return !!parse(input);\n}\n\ninterface PrefixRange {\n tokens: Token[];\n}\n\nexport type RangeBound = 'inclusive' | 'exclusive';\n\ninterface MavenBasedRange {\n leftBound: RangeBound;\n leftBoundStr: string;\n leftVal: string | null;\n separator: string;\n rightBound: RangeBound;\n rightBoundStr: string;\n rightVal: string | null;\n // The existence of preferredVal implies the \"strictly\" keyword \"!!\"\n // leading up to preferredVal: \"!![preferred version]\"\n preferredVal: string | null;\n}\n\nexport function parsePrefixRange(input: string): PrefixRange | null {\n if (!input) {\n return null;\n }\n\n if (input.trim() === '+') {\n return { tokens: [] };\n }\n\n const postfixRegex = regEx(/[^-._+][-._]\\+$/);\n if (postfixRegex.test(input)) {\n const prefixValue = input.replace(regEx(/[-._]\\+$/), '');\n const tokens = tokenize(prefixValue);\n if (tokens) {\n return { tokens };\n }\n }\n\n return null;\n}\n\nconst mavenBasedRangeRegex = regEx(\n /^(?<leftBoundStr>[[\\](]\\s*)(?<leftVal>[-._+a-zA-Z0-9]*?)(?<separator>\\s*,\\s*)(?<rightVal>[-._+a-zA-Z0-9]*?)(?<rightBoundStr>\\s*[[\\])])(?:!!(?<preferredVal>[-._+a-zA-Z0-9]+))?$/,\n);\n\nexport function parseMavenBasedRange(input: string): MavenBasedRange | null {\n if (!input) {\n return null;\n }\n\n const matchGroups = mavenBasedRangeRegex.exec(input)?.groups;\n if (!matchGroups) {\n return null;\n }\n\n const { leftBoundStr, separator, rightBoundStr } = matchGroups;\n const leftVal = matchGroups.leftVal || null;\n const rightVal = matchGroups.rightVal || null;\n const preferredVal = matchGroups.preferredVal || null;\n const isVersionLeft = isString(leftVal) && isVersion(leftVal);\n const isVersionRight = isString(rightVal) && isVersion(rightVal);\n if (\n (leftVal !== null && !isVersionLeft) ||\n (rightVal !== null && !isVersionRight)\n ) {\n return null;\n }\n\n if (\n isVersionLeft &&\n isVersionRight &&\n leftVal &&\n rightVal &&\n compare(leftVal, rightVal) === 1\n ) {\n return null;\n }\n\n const leftBound = leftBoundStr.trim() === '[' ? 'inclusive' : 'exclusive';\n const rightBound = rightBoundStr.trim() === ']' ? 'inclusive' : 'exclusive';\n\n return {\n leftBound,\n leftBoundStr,\n leftVal,\n separator,\n rightBound,\n rightBoundStr,\n rightVal,\n preferredVal,\n };\n}\n\ninterface SingleVersionRange {\n val: string;\n}\n\nconst singleVersionRangeRegex = regEx(/^\\[\\s*(?<val>[-._+a-zA-Z0-9]*?)\\s*\\]$/);\n\nexport function parseSingleVersionRange(\n input: string,\n): SingleVersionRange | null {\n const matchGroups = singleVersionRangeRegex.exec(input)?.groups;\n if (!matchGroups) {\n return null;\n }\n\n const { val } = matchGroups;\n if (!isVersion(val)) {\n return null;\n }\n\n return { val };\n}\n\nexport function isValid(str: string): boolean {\n if (!str) {\n return false;\n }\n\n return (\n isVersion(str) ||\n !!parsePrefixRange(str) ||\n !!parseMavenBasedRange(str) ||\n !!parseSingleVersionRange(str)\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"compare.js","names":[],"sources":["../../../../lib/modules/versioning/gradle/compare.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { regEx } from '../../../util/regex.ts';\n\nexport const TokenType = {\n Number: 1,\n String: 2,\n};\n\ninterface Token {\n type: number;\n val: string | number;\n}\n\nfunction iterateChars(\n str: string,\n cb: (p: string | null, n: string | null) => void,\n): void {\n let prev = null;\n let next = null;\n for (let i = 0; i < str.length; i += 1) {\n next = str.charAt(i);\n cb(prev, next);\n prev = next;\n }\n cb(prev, null);\n}\n\nfunction isSeparator(char: string): boolean {\n return regEx(/^[-._+]$/i).test(char);\n}\n\nfunction isDigit(char: string): boolean {\n return regEx(/^\\d$/).test(char);\n}\n\nfunction isLetter(char: string): boolean {\n return !isSeparator(char) && !isDigit(char);\n}\n\nfunction isTransition(prevChar: string, nextChar: string): boolean {\n return (\n (isDigit(prevChar) && isLetter(nextChar)) ||\n (isLetter(prevChar) && isDigit(nextChar))\n );\n}\n\nexport function tokenize(versionStr: string): Token[] | null {\n let result: Token[] | null = [];\n let currentVal = '';\n\n function yieldToken(): void {\n if (result) {\n const val = currentVal;\n if (regEx(/^\\d+$/).test(val)) {\n result.push({\n type: TokenType.Number,\n val: parseInt(val, 10),\n });\n } else {\n result.push({\n type: TokenType.String,\n val,\n });\n }\n }\n }\n\n iterateChars(versionStr, (prevChar, nextChar) => {\n if (nextChar === null) {\n yieldToken();\n } else if (isSeparator(nextChar)) {\n if (prevChar && !isSeparator(prevChar)) {\n yieldToken();\n currentVal = '';\n } else {\n result = null;\n }\n } else if (prevChar !== null && isTransition(prevChar, nextChar)) {\n yieldToken();\n currentVal = nextChar;\n } else {\n currentVal = currentVal.concat(nextChar);\n }\n });\n\n return result;\n}\n\nexport const QualifierRank = {\n Dev: -1,\n Default: 0,\n RC: 1,\n Snapshot: 2,\n Final: 3,\n GA: 4,\n Release: 5,\n SP: 6,\n} as const;\n\nexport function qualifierRank(input: string): number {\n const val = input.toLowerCase();\n if (val === 'dev') {\n return QualifierRank.Dev;\n }\n if (val === 'rc' || val === 'cr') {\n return QualifierRank.RC;\n }\n if (val === 'snapshot') {\n return QualifierRank.Snapshot;\n }\n if (val === 'ga') {\n return QualifierRank.GA;\n }\n if (val === 'final') {\n return QualifierRank.Final;\n }\n if (val === 'release' || val === 'latest' || val === 'sr') {\n return QualifierRank.Release;\n }\n if (val === 'sp') {\n return QualifierRank.SP;\n }\n return QualifierRank.Default;\n}\n\nfunction stringTokenCmp(left: string, right: string): number {\n const leftRank = qualifierRank(left);\n const rightRank = qualifierRank(right);\n if (leftRank === 0 && rightRank === 0) {\n if (left < right) {\n return -1;\n }\n\n if (left > right) {\n return 1;\n }\n } else {\n if (leftRank < rightRank) {\n return -1;\n }\n if (leftRank > rightRank) {\n return 1;\n }\n }\n return 0;\n}\n\nfunction tokenCmp(left: Token | null, right: Token | null): number {\n if (left === null) {\n if (right?.type === TokenType.String) {\n return 1;\n }\n return -1;\n }\n\n if (right === null) {\n if (left.type === TokenType.String) {\n return -1;\n }\n return 1;\n }\n\n if (left.type === TokenType.Number && right.type === TokenType.Number) {\n if (left.val < right.val) {\n return -1;\n }\n if (left.val > right.val) {\n return 1;\n }\n } else if (isString(left.val) && isString(right.val)) {\n return stringTokenCmp(left.val, right.val);\n } else if (right.type === TokenType.Number) {\n return -1;\n } else if (left.type === TokenType.Number) {\n return 1;\n }\n\n return 0;\n}\n\nexport function compare(left: string, right: string): number {\n const leftTokens = tokenize(left) ?? [];\n const rightTokens = tokenize(right) ?? [];\n const length = Math.max(leftTokens.length, rightTokens.length);\n for (let idx = 0; idx < length; idx += 1) {\n const leftToken = leftTokens[idx] || null;\n const rightToken = rightTokens[idx] || null;\n const cmpResult = tokenCmp(leftToken, rightToken);\n if (cmpResult !== 0) {\n return cmpResult;\n }\n }\n return 0;\n}\n\nexport function parse(input: string): Token[] | null {\n if (!input) {\n return null;\n }\n\n if (!regEx(/^[-._+a-zA-Z0-9]+$/i).test(input)) {\n return null;\n }\n\n if (regEx(/^latest\\.?/i).test(input)) {\n return null;\n }\n\n const tokens = tokenize(input);\n // istanbul ignore if: should not happen\n if (!tokens?.length) {\n return null;\n }\n return tokens;\n}\n\nexport function isVersion(input: string): boolean {\n return !!parse(input);\n}\n\ninterface PrefixRange {\n tokens: Token[];\n}\n\ntype RangeBound = 'inclusive' | 'exclusive';\n\ninterface MavenBasedRange {\n leftBound: RangeBound;\n leftBoundStr: string;\n leftVal: string | null;\n separator: string;\n rightBound: RangeBound;\n rightBoundStr: string;\n rightVal: string | null;\n // The existence of preferredVal implies the \"strictly\" keyword \"!!\"\n // leading up to preferredVal: \"!![preferred version]\"\n preferredVal: string | null;\n}\n\nexport function parsePrefixRange(input: string): PrefixRange | null {\n if (!input) {\n return null;\n }\n\n if (input.trim() === '+') {\n return { tokens: [] };\n }\n\n const postfixRegex = regEx(/[^-._+][-._]\\+$/);\n if (postfixRegex.test(input)) {\n const prefixValue = input.replace(regEx(/[-._]\\+$/), '');\n const tokens = tokenize(prefixValue);\n if (tokens) {\n return { tokens };\n }\n }\n\n return null;\n}\n\nconst mavenBasedRangeRegex = regEx(\n /^(?<leftBoundStr>[[\\](]\\s*)(?<leftVal>[-._+a-zA-Z0-9]*?)(?<separator>\\s*,\\s*)(?<rightVal>[-._+a-zA-Z0-9]*?)(?<rightBoundStr>\\s*[[\\])])(?:!!(?<preferredVal>[-._+a-zA-Z0-9]+))?$/,\n);\n\nexport function parseMavenBasedRange(input: string): MavenBasedRange | null {\n if (!input) {\n return null;\n }\n\n const matchGroups = mavenBasedRangeRegex.exec(input)?.groups;\n if (!matchGroups) {\n return null;\n }\n\n const { leftBoundStr, separator, rightBoundStr } = matchGroups;\n const leftVal = matchGroups.leftVal || null;\n const rightVal = matchGroups.rightVal || null;\n const preferredVal = matchGroups.preferredVal || null;\n const isVersionLeft = isString(leftVal) && isVersion(leftVal);\n const isVersionRight = isString(rightVal) && isVersion(rightVal);\n if (\n (leftVal !== null && !isVersionLeft) ||\n (rightVal !== null && !isVersionRight)\n ) {\n return null;\n }\n\n if (\n isVersionLeft &&\n isVersionRight &&\n leftVal &&\n rightVal &&\n compare(leftVal, rightVal) === 1\n ) {\n return null;\n }\n\n const leftBound = leftBoundStr.trim() === '[' ? 'inclusive' : 'exclusive';\n const rightBound = rightBoundStr.trim() === ']' ? 'inclusive' : 'exclusive';\n\n return {\n leftBound,\n leftBoundStr,\n leftVal,\n separator,\n rightBound,\n rightBoundStr,\n rightVal,\n preferredVal,\n };\n}\n\ninterface SingleVersionRange {\n val: string;\n}\n\nconst singleVersionRangeRegex = regEx(/^\\[\\s*(?<val>[-._+a-zA-Z0-9]*?)\\s*\\]$/);\n\nexport function parseSingleVersionRange(\n input: string,\n): SingleVersionRange | null {\n const matchGroups = singleVersionRangeRegex.exec(input)?.groups;\n if (!matchGroups) {\n return null;\n }\n\n const { val } = matchGroups;\n if (!isVersion(val)) {\n return null;\n }\n\n return { val };\n}\n\nexport function isValid(str: string): boolean {\n if (!str) {\n return false;\n }\n\n return (\n isVersion(str) ||\n !!parsePrefixRange(str) ||\n !!parseMavenBasedRange(str) ||\n !!parseSingleVersionRange(str)\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/hermit/index.ts"],"sourcesContent":["import { isUndefined } from '@sindresorhus/is';\nimport { satisfies } from 'semver';\nimport type { RegExpVersion } from '../regex/index.ts';\nimport { RegExpVersioningApi } from '../regex/index.ts';\nimport type { VersioningApiConstructor } from '../types.ts';\n\nexport const id = 'hermit';\nexport const displayName = 'Hermit';\nexport const urls = [\n '[Hermit packaging reference - Versions](https://cashapp.github.io/hermit/packaging/reference/#versions)',\n];\nexport const supportsRanges = false;\n\nexport class HermitVersioning extends RegExpVersioningApi {\n // add <supplement> element to accomondate openjdk versioning defined in JEP322\n // https://openjdk.org/jeps/322\n static versionRegex =\n '^(?<major>\\\\d+)(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?(\\\\.(?<supplement>\\\\d+))?(_(?<build>\\\\d+))?([-]?(?<prerelease>[^.+][^+]*))?([+](?<compatibility>[^.-][^+]*))?$';\n\n public constructor() {\n super(HermitVersioning.versionRegex);\n }\n\n private _isValid(version: string): boolean {\n return super._parse(version) !== null;\n }\n\n private _parseHermitVersioning(version: string): RegExpVersion | null {\n const groups = this._config?.exec(version)?.groups;\n if (!groups) {\n return null;\n }\n\n const {\n major,\n minor,\n patch,\n supplement,\n build,\n prerelease,\n compatibility,\n } = groups;\n const release = [\n Number.parseInt(major, 10),\n isUndefined(minor) ? 0 : Number.parseInt(minor, 10),\n isUndefined(patch) ? 0 : Number.parseInt(patch, 10),\n isUndefined(supplement) ? 0 : Number.parseInt(supplement, 10),\n ];\n\n if (build) {\n release.push(Number.parseInt(build, 10));\n }\n\n return {\n release,\n prerelease,\n compatibility,\n };\n }\n\n protected override _parse(version: string): RegExpVersion | null {\n const parsed = this._parseHermitVersioning(version);\n if (parsed) {\n return parsed;\n }\n const channelVer = HermitVersioning._getChannel(version);\n\n const groups = this._config?.exec(channelVer)?.groups;\n\n if (!groups) {\n return null;\n }\n\n const {\n major,\n minor,\n patch,\n supplement,\n build,\n prerelease,\n compatibility,\n } = groups;\n const release = [];\n\n if (major) {\n release.push(Number.parseInt(major, 10));\n }\n\n if (minor) {\n release.push(Number.parseInt(minor, 10));\n }\n if (patch) {\n release.push(Number.parseInt(patch, 10));\n }\n if (supplement) {\n release.push(Number.parseInt(supplement, 10));\n }\n if (build) {\n release.push(Number.parseInt(build, 10));\n }\n\n return {\n release,\n prerelease,\n compatibility,\n };\n }\n\n private static _isChannel(version: string): boolean {\n return version.startsWith('@');\n }\n\n private static _getChannel(version: string): string {\n return version.substring(1);\n }\n\n override isStable(version: string): boolean {\n if (this._isValid(version)) {\n return super.isStable(version);\n }\n\n // channel and the rest should be considered unstable version\n // as channels are changing values\n return false;\n }\n\n override isValid(version: string): boolean {\n return this._isValid(version) || HermitVersioning._isChannel(version);\n }\n\n override isLessThanRange(version: string, range: string): boolean {\n return this._compare(version, range) < 0;\n }\n\n protected override _compare(version: string, other: string): number {\n if (this._isValid(version) && this._isValid(other)) {\n return super._compare(version, other);\n }\n\n const parsedVersion = this._parse(version);\n const parsedOther = this._parse(other);\n\n if (parsedVersion === null || parsedOther === null) {\n if (parsedVersion === null && parsedOther === null) {\n return version.localeCompare(other);\n }\n return parsedVersion === null ? -1 : 1;\n }\n\n const versionReleases = parsedVersion.release;\n const otherReleases = parsedOther.release;\n\n const maxLength =\n versionReleases.length > otherReleases.length\n ? versionReleases.length\n : otherReleases.length;\n\n for (let i = 0; i < maxLength; i++) {\n const verVal = versionReleases[i];\n const otherVal = otherReleases[i];\n\n if (\n verVal !== undefined &&\n otherVal !== undefined &&\n verVal !== otherVal\n ) {\n return verVal - otherVal;\n }\n if (verVal === undefined) {\n return 1;\n }\n if (otherVal === undefined) {\n return -1;\n }\n }\n\n return 0;\n }\n\n override matches(version: string, range: string): boolean {\n if (\n HermitVersioning._isChannel(version) ||\n HermitVersioning._isChannel(range)\n ) {\n return this.equals(version, range);\n }\n\n return satisfies(version, range);\n }\n}\n\nexport const api: VersioningApiConstructor = HermitVersioning;\n\nexport default api;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/hermit/index.ts"],"sourcesContent":["import { isUndefined } from '@sindresorhus/is';\nimport { satisfies } from 'semver';\nimport { RegExpVersioningApi } from '../regex/index.ts';\nimport type { RegExpVersion } from '../regex/types.ts';\nimport type { VersioningApiConstructor } from '../types.ts';\n\nexport const id = 'hermit';\nexport const displayName = 'Hermit';\nexport const urls = [\n '[Hermit packaging reference - Versions](https://cashapp.github.io/hermit/packaging/reference/#versions)',\n];\nexport const supportsRanges = false;\n\nexport class HermitVersioning extends RegExpVersioningApi {\n // add <supplement> element to accomondate openjdk versioning defined in JEP322\n // https://openjdk.org/jeps/322\n static versionRegex =\n '^(?<major>\\\\d+)(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?(\\\\.(?<supplement>\\\\d+))?(_(?<build>\\\\d+))?([-]?(?<prerelease>[^.+][^+]*))?([+](?<compatibility>[^.-][^+]*))?$';\n\n public constructor() {\n super(HermitVersioning.versionRegex);\n }\n\n private _isValid(version: string): boolean {\n return super._parse(version) !== null;\n }\n\n private _parseHermitVersioning(version: string): RegExpVersion | null {\n const groups = this._config?.exec(version)?.groups;\n if (!groups) {\n return null;\n }\n\n const {\n major,\n minor,\n patch,\n supplement,\n build,\n prerelease,\n compatibility,\n } = groups;\n const release = [\n Number.parseInt(major, 10),\n isUndefined(minor) ? 0 : Number.parseInt(minor, 10),\n isUndefined(patch) ? 0 : Number.parseInt(patch, 10),\n isUndefined(supplement) ? 0 : Number.parseInt(supplement, 10),\n ];\n\n if (build) {\n release.push(Number.parseInt(build, 10));\n }\n\n return {\n release,\n prerelease,\n compatibility,\n };\n }\n\n protected override _parse(version: string): RegExpVersion | null {\n const parsed = this._parseHermitVersioning(version);\n if (parsed) {\n return parsed;\n }\n const channelVer = HermitVersioning._getChannel(version);\n\n const groups = this._config?.exec(channelVer)?.groups;\n\n if (!groups) {\n return null;\n }\n\n const {\n major,\n minor,\n patch,\n supplement,\n build,\n prerelease,\n compatibility,\n } = groups;\n const release = [];\n\n if (major) {\n release.push(Number.parseInt(major, 10));\n }\n\n if (minor) {\n release.push(Number.parseInt(minor, 10));\n }\n if (patch) {\n release.push(Number.parseInt(patch, 10));\n }\n if (supplement) {\n release.push(Number.parseInt(supplement, 10));\n }\n if (build) {\n release.push(Number.parseInt(build, 10));\n }\n\n return {\n release,\n prerelease,\n compatibility,\n };\n }\n\n private static _isChannel(version: string): boolean {\n return version.startsWith('@');\n }\n\n private static _getChannel(version: string): string {\n return version.substring(1);\n }\n\n override isStable(version: string): boolean {\n if (this._isValid(version)) {\n return super.isStable(version);\n }\n\n // channel and the rest should be considered unstable version\n // as channels are changing values\n return false;\n }\n\n override isValid(version: string): boolean {\n return this._isValid(version) || HermitVersioning._isChannel(version);\n }\n\n override isLessThanRange(version: string, range: string): boolean {\n return this._compare(version, range) < 0;\n }\n\n protected override _compare(version: string, other: string): number {\n if (this._isValid(version) && this._isValid(other)) {\n return super._compare(version, other);\n }\n\n const parsedVersion = this._parse(version);\n const parsedOther = this._parse(other);\n\n if (parsedVersion === null || parsedOther === null) {\n if (parsedVersion === null && parsedOther === null) {\n return version.localeCompare(other);\n }\n return parsedVersion === null ? -1 : 1;\n }\n\n const versionReleases = parsedVersion.release;\n const otherReleases = parsedOther.release;\n\n const maxLength =\n versionReleases.length > otherReleases.length\n ? versionReleases.length\n : otherReleases.length;\n\n for (let i = 0; i < maxLength; i++) {\n const verVal = versionReleases[i];\n const otherVal = otherReleases[i];\n\n if (\n verVal !== undefined &&\n otherVal !== undefined &&\n verVal !== otherVal\n ) {\n return verVal - otherVal;\n }\n if (verVal === undefined) {\n return 1;\n }\n if (otherVal === undefined) {\n return -1;\n }\n }\n\n return 0;\n }\n\n override matches(version: string, range: string): boolean {\n if (\n HermitVersioning._isChannel(version) ||\n HermitVersioning._isChannel(range)\n ) {\n return this.equals(version, range);\n }\n\n return satisfies(version, range);\n }\n}\n\nexport const api: VersioningApiConstructor = HermitVersioning;\n\nexport default api;\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { NewValueConfig, VersioningApi, VersioningApiConstructor } from "./types.js";
1
+ import { DistroDataFile, DistroInfoRecord, DistroInfoRecordWithVersion, DistroSchedule, GenericVersion, NewValueConfig, VersionComparator, VersionParser, VersioningApi, VersioningApiConstructor } from "./types.js";
2
2
  import { index_d_exports } from "./semver-coerced/index.js";
3
3
  //#region lib/modules/versioning/index.d.ts
4
4
  declare const defaultVersioning: typeof index_d_exports;
@@ -9,5 +9,5 @@ declare function getVersioningList(): string[];
9
9
  declare function getVersionings(): Map<string, VersioningApi | VersioningApiConstructor>;
10
10
  declare function get(versioning: string | null | undefined): VersioningApi;
11
11
  //#endregion
12
- export { NewValueConfig, VersioningApi, VersioningApiConstructor, defaultVersioning, get, getVersioningList, getVersionings };
12
+ export { DistroDataFile, DistroInfoRecord, DistroInfoRecordWithVersion, DistroSchedule, GenericVersion, NewValueConfig, VersionComparator, VersionParser, VersioningApi, VersioningApiConstructor, defaultVersioning, get, getVersioningList, getVersionings };
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","names":["isSingleVersion"],"sources":["../../../../lib/modules/versioning/ivy/parse.ts"],"sourcesContent":["import { regEx } from '../../../util/regex.ts';\nimport { isSingleVersion, parseRange, rangeToStr } from '../maven/compare.ts';\n\nconst REV_TYPE_LATEST = 'REV_TYPE_LATEST';\nconst REV_TYPE_SUBREV = 'REV_TYPE_SUBREVISION';\nconst REV_TYPE_RANGE = 'REV_TYPE_RANGE';\n\nexport interface Revision {\n type: typeof REV_TYPE_LATEST | typeof REV_TYPE_RANGE | typeof REV_TYPE_SUBREV;\n\n value: string;\n}\n\nexport const LATEST_REGEX = regEx(/^latest\\.|^latest$/i);\n\nfunction parseDynamicRevision(str: string): Revision | null {\n if (!str) {\n return null;\n }\n\n if (LATEST_REGEX.test(str)) {\n const value = str.replace(LATEST_REGEX, '').toLowerCase() || '';\n return {\n type: REV_TYPE_LATEST,\n value: value === 'integration' ? '' : value,\n };\n }\n\n const SUBREV_REGEX = regEx(/\\.\\+$/);\n if (str.endsWith('.+')) {\n const value = str.replace(SUBREV_REGEX, '');\n if (isSingleVersion(value)) {\n return {\n type: REV_TYPE_SUBREV,\n value,\n };\n }\n }\n\n const range = parseRange(str);\n if (range?.length === 1) {\n const rangeValue = rangeToStr(range);\n if (rangeValue) {\n return {\n type: REV_TYPE_RANGE,\n value: rangeValue,\n };\n }\n }\n\n return null;\n}\n\nexport {\n REV_TYPE_LATEST,\n REV_TYPE_RANGE,\n REV_TYPE_SUBREV,\n parseDynamicRevision,\n};\n"],"mappings":";;;AAGA,MAAM,kBAAkB;AACxB,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AAQvB,MAAa,eAAe,MAAM,qBAAqB;AAEvD,SAAS,qBAAqB,KAA8B;CAC1D,IAAI,CAAC,KACH,OAAO;CAGT,IAAI,aAAa,KAAK,GAAG,GAAG;EAC1B,MAAM,QAAQ,IAAI,QAAQ,cAAc,EAAE,CAAC,CAAC,YAAY,KAAK;EAC7D,OAAO;GACL,MAAM;GACN,OAAO,UAAU,gBAAgB,KAAK;EACxC;CACF;CAEA,MAAM,eAAe,MAAM,OAAO;CAClC,IAAI,IAAI,SAAS,IAAI,GAAG;EACtB,MAAM,QAAQ,IAAI,QAAQ,cAAc,EAAE;EAC1C,IAAIA,UAAgB,KAAK,GACvB,OAAO;GACL,MAAM;GACN;EACF;CAEJ;CAEA,MAAM,QAAQ,WAAW,GAAG;CAC5B,IAAI,OAAO,WAAW,GAAG;EACvB,MAAM,aAAa,WAAW,KAAK;EACnC,IAAI,YACF,OAAO;GACL,MAAM;GACN,OAAO;EACT;CAEJ;CAEA,OAAO;AACT"}
1
+ {"version":3,"file":"parse.js","names":["isSingleVersion"],"sources":["../../../../lib/modules/versioning/ivy/parse.ts"],"sourcesContent":["import { regEx } from '../../../util/regex.ts';\nimport { isSingleVersion, parseRange, rangeToStr } from '../maven/compare.ts';\nimport type { Revision } from './types.ts';\n\nconst REV_TYPE_LATEST = 'REV_TYPE_LATEST';\nconst REV_TYPE_SUBREV = 'REV_TYPE_SUBREVISION';\nconst REV_TYPE_RANGE = 'REV_TYPE_RANGE';\n\nexport const LATEST_REGEX = regEx(/^latest\\.|^latest$/i);\n\nfunction parseDynamicRevision(str: string): Revision | null {\n if (!str) {\n return null;\n }\n\n if (LATEST_REGEX.test(str)) {\n const value = str.replace(LATEST_REGEX, '').toLowerCase() || '';\n return {\n type: REV_TYPE_LATEST,\n value: value === 'integration' ? '' : value,\n };\n }\n\n const SUBREV_REGEX = regEx(/\\.\\+$/);\n if (str.endsWith('.+')) {\n const value = str.replace(SUBREV_REGEX, '');\n if (isSingleVersion(value)) {\n return {\n type: REV_TYPE_SUBREV,\n value,\n };\n }\n }\n\n const range = parseRange(str);\n if (range?.length === 1) {\n const rangeValue = rangeToStr(range);\n if (rangeValue) {\n return {\n type: REV_TYPE_RANGE,\n value: rangeValue,\n };\n }\n }\n\n return null;\n}\n\nexport {\n REV_TYPE_LATEST,\n REV_TYPE_RANGE,\n REV_TYPE_SUBREV,\n parseDynamicRevision,\n};\n"],"mappings":";;;AAIA,MAAM,kBAAkB;AACxB,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AAEvB,MAAa,eAAe,MAAM,qBAAqB;AAEvD,SAAS,qBAAqB,KAA8B;CAC1D,IAAI,CAAC,KACH,OAAO;CAGT,IAAI,aAAa,KAAK,GAAG,GAAG;EAC1B,MAAM,QAAQ,IAAI,QAAQ,cAAc,EAAE,CAAC,CAAC,YAAY,KAAK;EAC7D,OAAO;GACL,MAAM;GACN,OAAO,UAAU,gBAAgB,KAAK;EACxC;CACF;CAEA,MAAM,eAAe,MAAM,OAAO;CAClC,IAAI,IAAI,SAAS,IAAI,GAAG;EACtB,MAAM,QAAQ,IAAI,QAAQ,cAAc,EAAE;EAC1C,IAAIA,UAAgB,KAAK,GACvB,OAAO;GACL,MAAM;GACN;EACF;CAEJ;CAEA,MAAM,QAAQ,WAAW,GAAG;CAC5B,IAAI,OAAO,WAAW,GAAG;EACvB,MAAM,aAAa,WAAW,KAAK;EACnC,IAAI,YACF,OAAO;GACL,MAAM;GACN,OAAO;EACT;CAEJ;CAEA,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"schedule.js","names":["dataFiles"],"sources":["../../../../lib/modules/versioning/lambda-node/schedule.ts"],"sourcesContent":["import dataFiles from '../../../data-files.generated.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { isStable } from '../node/index.ts';\n\ninterface LambdaSchedule {\n cycle: string;\n\n /**\n * Either `true` if currently in support or a string indicating the date at which support will end\n */\n support: true | string;\n}\n\nexport type LambdaData = Record<string, LambdaSchedule>;\n\nconst lambdaSchedule: LambdaData = JSON.parse(\n dataFiles.get('data/lambda-node-js-schedule.json')!,\n);\n\nexport function findLambdaScheduleForVersion(\n version: string,\n): LambdaSchedule | null {\n const majorVersionMatch = regEx(/^v?([0-9]+)\\./).exec(version);\n\n if (!majorVersionMatch) {\n return null;\n }\n\n if (!isStable(version)) {\n return null;\n }\n\n return lambdaSchedule[majorVersionMatch[1]] ?? null;\n}\n"],"mappings":";;;;AAeA,MAAM,iBAA6B,KAAK,MACtCA,KAAU,IAAI,mCAAmC,CACnD;AAEA,SAAgB,6BACd,SACuB;CACvB,MAAM,oBAAoB,MAAM,eAAe,CAAC,CAAC,KAAK,OAAO;CAE7D,IAAI,CAAC,mBACH,OAAO;CAGT,IAAI,CAAC,SAAS,OAAO,GACnB,OAAO;CAGT,OAAO,eAAe,kBAAkB,OAAO;AACjD"}
1
+ {"version":3,"file":"schedule.js","names":["dataFiles"],"sources":["../../../../lib/modules/versioning/lambda-node/schedule.ts"],"sourcesContent":["import dataFiles from '../../../data-files.generated.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { isStable } from '../node/index.ts';\nimport type { LambdaData, LambdaSchedule } from './types.ts';\n\nconst lambdaSchedule: LambdaData = JSON.parse(\n dataFiles.get('data/lambda-node-js-schedule.json')!,\n);\n\nexport function findLambdaScheduleForVersion(\n version: string,\n): LambdaSchedule | null {\n const majorVersionMatch = regEx(/^v?([0-9]+)\\./).exec(version);\n\n if (!majorVersionMatch) {\n return null;\n }\n\n if (!isStable(version)) {\n return null;\n }\n\n return lambdaSchedule[majorVersionMatch[1]] ?? null;\n}\n"],"mappings":";;;;AAKA,MAAM,iBAA6B,KAAK,MACtCA,KAAU,IAAI,mCAAmC,CACnD;AAEA,SAAgB,6BACd,SACuB;CACvB,MAAM,oBAAoB,MAAM,eAAe,CAAC,CAAC,KAAK,OAAO;CAE7D,IAAI,CAAC,mBACH,OAAO;CAGT,IAAI,CAAC,SAAS,OAAO,GACnB,OAAO;CAGT,OAAO,eAAe,kBAAkB,OAAO;AACjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/loose/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 = 'loose';\nexport const displayName = 'Loose';\nexport const urls = [];\nexport const supportsRanges = false;\n\nconst versionPattern = regEx(/^[vV]?(\\d+(?:\\.\\d+)*)(.*)$/);\nconst commitHashPattern = regEx(/^[a-f0-9]{7,40}$/);\nconst numericPattern = regEx(/^[0-9]+$/);\n\nclass LooseVersioningApi extends GenericVersioningApi {\n protected _parse(version: string): GenericVersion | null {\n if (commitHashPattern.test(version) && !numericPattern.test(version)) {\n return null;\n }\n const matches = versionPattern.exec(version);\n if (!matches) {\n return null;\n }\n const [, prefix, suffix] = matches;\n const release = prefix.split('.').map(Number);\n if (release.length > 6) {\n return null;\n }\n return { release, suffix: suffix || '' };\n }\n\n protected override _compare(version: string, other: string): number {\n const parsed1 = this._parse(version);\n const parsed2 = this._parse(other);\n // istanbul ignore if\n if (!(parsed1 && parsed2)) {\n return 1;\n }\n const length = Math.max(parsed1.release.length, parsed2.release.length);\n for (let i = 0; i < length; i += 1) {\n const part1 = parsed1.release[i];\n const part2 = parsed2.release[i];\n // shorter is smaller 2.1 < 2.1.0\n if (part1 === undefined) {\n return -1;\n }\n if (part2 === undefined) {\n return 1;\n }\n if (part1 !== part2) {\n return part1 - part2;\n }\n }\n\n if (parsed1.suffix && parsed2.suffix) {\n return parsed1.suffix.localeCompare(parsed2.suffix, undefined, {\n numeric: true,\n });\n }\n\n if (parsed1.suffix) {\n return -1;\n }\n\n if (parsed2.suffix) {\n return 1;\n }\n\n // istanbul ignore next\n return 0;\n }\n}\n\nexport const api: VersioningApi = new LooseVersioningApi();\n\nexport default api;\n"],"mappings":";;;AAKA,MAAa,KAAK;AAKlB,MAAM,iBAAiB,MAAM,4BAA4B;AACzD,MAAM,oBAAoB,MAAM,kBAAkB;AAClD,MAAM,iBAAiB,MAAM,UAAU;AAEvC,IAAM,qBAAN,cAAiC,qBAAqB;CACpD,OAAiB,SAAwC;EACvD,IAAI,kBAAkB,KAAK,OAAO,KAAK,CAAC,eAAe,KAAK,OAAO,GACjE,OAAO;EAET,MAAM,UAAU,eAAe,KAAK,OAAO;EAC3C,IAAI,CAAC,SACH,OAAO;EAET,MAAM,GAAG,QAAQ,UAAU;EAC3B,MAAM,UAAU,OAAO,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM;EAC5C,IAAI,QAAQ,SAAS,GACnB,OAAO;EAET,OAAO;GAAE;GAAS,QAAQ,UAAU;EAAG;CACzC;CAEA,SAA4B,SAAiB,OAAuB;EAClE,MAAM,UAAU,KAAK,OAAO,OAAO;EACnC,MAAM,UAAU,KAAK,OAAO,KAAK;;EAEjC,IAAI,EAAE,WAAW,UACf,OAAO;EAET,MAAM,SAAS,KAAK,IAAI,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;EACtE,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;GAClC,MAAM,QAAQ,QAAQ,QAAQ;GAC9B,MAAM,QAAQ,QAAQ,QAAQ;GAE9B,IAAI,UAAU,KAAA,GACZ,OAAO;GAET,IAAI,UAAU,KAAA,GACZ,OAAO;GAET,IAAI,UAAU,OACZ,OAAO,QAAQ;EAEnB;EAEA,IAAI,QAAQ,UAAU,QAAQ,QAC5B,OAAO,QAAQ,OAAO,cAAc,QAAQ,QAAQ,KAAA,GAAW,EAC7D,SAAS,KACX,CAAC;EAGH,IAAI,QAAQ,QACV,OAAO;EAGT,IAAI,QAAQ,QACV,OAAO;;EAIT,OAAO;CACT;AACF;AAEA,MAAa,MAAqB,IAAI,mBAAmB"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/loose/index.ts"],"sourcesContent":["import { regEx } from '../../../util/regex.ts';\nimport { GenericVersioningApi } from '../generic.ts';\nimport type { GenericVersion, VersioningApi } from '../types.ts';\n\nexport const id = 'loose';\nexport const displayName = 'Loose';\nexport const urls = [];\nexport const supportsRanges = false;\n\nconst versionPattern = regEx(/^[vV]?(\\d+(?:\\.\\d+)*)(.*)$/);\nconst commitHashPattern = regEx(/^[a-f0-9]{7,40}$/);\nconst numericPattern = regEx(/^[0-9]+$/);\n\nclass LooseVersioningApi extends GenericVersioningApi {\n protected _parse(version: string): GenericVersion | null {\n if (commitHashPattern.test(version) && !numericPattern.test(version)) {\n return null;\n }\n const matches = versionPattern.exec(version);\n if (!matches) {\n return null;\n }\n const [, prefix, suffix] = matches;\n const release = prefix.split('.').map(Number);\n if (release.length > 6) {\n return null;\n }\n return { release, suffix: suffix || '' };\n }\n\n protected override _compare(version: string, other: string): number {\n const parsed1 = this._parse(version);\n const parsed2 = this._parse(other);\n // istanbul ignore if\n if (!(parsed1 && parsed2)) {\n return 1;\n }\n const length = Math.max(parsed1.release.length, parsed2.release.length);\n for (let i = 0; i < length; i += 1) {\n const part1 = parsed1.release[i];\n const part2 = parsed2.release[i];\n // shorter is smaller 2.1 < 2.1.0\n if (part1 === undefined) {\n return -1;\n }\n if (part2 === undefined) {\n return 1;\n }\n if (part1 !== part2) {\n return part1 - part2;\n }\n }\n\n if (parsed1.suffix && parsed2.suffix) {\n return parsed1.suffix.localeCompare(parsed2.suffix, undefined, {\n numeric: true,\n });\n }\n\n if (parsed1.suffix) {\n return -1;\n }\n\n if (parsed2.suffix) {\n return 1;\n }\n\n // istanbul ignore next\n return 0;\n }\n}\n\nexport const api: VersioningApi = new LooseVersioningApi();\n\nexport default api;\n"],"mappings":";;;AAIA,MAAa,KAAK;AAKlB,MAAM,iBAAiB,MAAM,4BAA4B;AACzD,MAAM,oBAAoB,MAAM,kBAAkB;AAClD,MAAM,iBAAiB,MAAM,UAAU;AAEvC,IAAM,qBAAN,cAAiC,qBAAqB;CACpD,OAAiB,SAAwC;EACvD,IAAI,kBAAkB,KAAK,OAAO,KAAK,CAAC,eAAe,KAAK,OAAO,GACjE,OAAO;EAET,MAAM,UAAU,eAAe,KAAK,OAAO;EAC3C,IAAI,CAAC,SACH,OAAO;EAET,MAAM,GAAG,QAAQ,UAAU;EAC3B,MAAM,UAAU,OAAO,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM;EAC5C,IAAI,QAAQ,SAAS,GACnB,OAAO;EAET,OAAO;GAAE;GAAS,QAAQ,UAAU;EAAG;CACzC;CAEA,SAA4B,SAAiB,OAAuB;EAClE,MAAM,UAAU,KAAK,OAAO,OAAO;EACnC,MAAM,UAAU,KAAK,OAAO,KAAK;;EAEjC,IAAI,EAAE,WAAW,UACf,OAAO;EAET,MAAM,SAAS,KAAK,IAAI,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;EACtE,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;GAClC,MAAM,QAAQ,QAAQ,QAAQ;GAC9B,MAAM,QAAQ,QAAQ,QAAQ;GAE9B,IAAI,UAAU,KAAA,GACZ,OAAO;GAET,IAAI,UAAU,KAAA,GACZ,OAAO;GAET,IAAI,UAAU,OACZ,OAAO,QAAQ;EAEnB;EAEA,IAAI,QAAQ,UAAU,QAAQ,QAC5B,OAAO,QAAQ,OAAO,cAAc,QAAQ,QAAQ,KAAA,GAAW,EAC7D,SAAS,KACX,CAAC;EAGH,IAAI,QAAQ,QACV,OAAO;EAGT,IAAI,QAAQ,QACV,OAAO;;EAIT,OAAO;CACT;AACF;AAEA,MAAa,MAAqB,IAAI,mBAAmB"}
@@ -1 +1 @@
1
- {"version":3,"file":"compare.js","names":["isNull"],"sources":["../../../../lib/modules/versioning/maven/compare.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { regEx } from '../../../util/regex.ts';\n\nconst PREFIX_DOT = 'PREFIX_DOT';\nconst PREFIX_HYPHEN = 'PREFIX_HYPHEN';\nconst ALPHA_SUFFIX = '-alpha';\n\nconst TYPE_NUMBER = 'TYPE_NUMBER';\nconst TYPE_QUALIFIER = 'TYPE_QUALIFIER';\n\nexport interface BaseToken {\n prefix: string;\n type: typeof TYPE_NUMBER | typeof TYPE_QUALIFIER;\n val: number | string;\n isTransition?: boolean;\n}\n\nexport interface NumberToken extends BaseToken {\n type: typeof TYPE_NUMBER;\n val: number;\n}\n\nexport interface QualifierToken extends BaseToken {\n type: typeof TYPE_QUALIFIER;\n val: string;\n}\n\nexport type Token = NumberToken | QualifierToken;\n\nfunction iterateChars(\n str: string,\n cb: (p: string | null, n: string | null) => void,\n): void {\n let prev = null;\n let next = null;\n for (let i = 0; i < str.length; i += 1) {\n next = str.charAt(i);\n cb(prev, next);\n prev = next;\n }\n cb(prev, null);\n}\n\nfunction isDigit(char: string): boolean {\n return regEx(/^\\d$/).test(char);\n}\n\nfunction isLetter(char: string): boolean {\n return regEx(/^[a-z_+]$/i).test(char);\n}\n\nfunction isTransition(prevChar: string, nextChar: string): boolean {\n return (\n (isDigit(prevChar) && isLetter(nextChar)) ||\n (isLetter(prevChar) && isDigit(nextChar))\n );\n}\n\nfunction iterateTokens(versionStr: string, cb: (token: Token) => void): void {\n let currentPrefix = '';\n let currentVal = '';\n\n function yieldToken(transition = false): void {\n const val = currentVal || '0';\n if (regEx(/^\\d+$/).test(val)) {\n cb({\n prefix: currentPrefix,\n type: TYPE_NUMBER,\n val: parseInt(val, 10),\n isTransition: transition,\n });\n } else {\n cb({\n prefix: currentPrefix,\n type: TYPE_QUALIFIER,\n val,\n isTransition: transition,\n });\n }\n }\n\n iterateChars(versionStr, (prevChar, nextChar) => {\n if (nextChar === null) {\n yieldToken();\n } else if (nextChar === '-') {\n yieldToken();\n currentPrefix = PREFIX_HYPHEN;\n currentVal = '';\n } else if (nextChar === '.') {\n yieldToken();\n currentPrefix = PREFIX_DOT;\n currentVal = '';\n } else if (prevChar === null && (nextChar === 'v' || nextChar === 'V')) {\n currentPrefix = nextChar;\n } else {\n if (currentVal !== '' && isTransition(prevChar!, nextChar)) {\n yieldToken(true);\n currentPrefix = PREFIX_HYPHEN;\n currentVal = nextChar;\n } else if (\n currentVal === '' &&\n (currentPrefix === 'v' || currentPrefix === 'V') &&\n !isDigit(nextChar)\n ) {\n currentVal = currentVal.concat(currentPrefix, nextChar);\n currentPrefix = '';\n } else {\n currentVal = currentVal.concat(nextChar);\n }\n }\n });\n}\n\nfunction isNull(token: Token): boolean {\n const val = token.val;\n return (\n val === 0 ||\n val === '' ||\n val === 'final' ||\n val === 'ga' ||\n val === 'release' ||\n val === 'latest' ||\n val === 'sr'\n );\n}\n\nfunction tokenize(versionStr: string, preserveMinorZeroes = false): Token[] {\n let buf: Token[] = [];\n let result: Token[] = [];\n let leadingZero = true;\n iterateTokens(versionStr.toLowerCase(), (token) => {\n if (token.prefix === PREFIX_HYPHEN || token.type === TYPE_QUALIFIER) {\n buf = [];\n }\n buf.push(token);\n if (!isNull(token)) {\n leadingZero = false;\n result = result.concat(buf);\n buf = [];\n } else if (leadingZero || preserveMinorZeroes) {\n result = result.concat(buf);\n buf = [];\n }\n });\n return result;\n}\n\nfunction nullFor(token: Token): Token {\n return token.type === TYPE_NUMBER\n ? {\n prefix: token.prefix,\n type: TYPE_NUMBER,\n val: 0,\n }\n : {\n prefix: token.prefix,\n type: TYPE_QUALIFIER,\n val: '',\n };\n}\n\nfunction commonOrder(token: Token): number {\n if (token.type === TYPE_QUALIFIER) {\n return 1;\n }\n if (token.prefix === PREFIX_HYPHEN && token.type === TYPE_NUMBER) {\n return 2;\n }\n return 3;\n}\n\nexport const QualifierTypes = {\n Alpha: 1,\n Beta: 2,\n Milestone: 3,\n RC: 4,\n Snapshot: 5,\n Release: 6,\n SP: 7,\n} as const;\n\nexport function qualifierType(token: Token): number | null {\n const val = token.val;\n if (val === 'alpha' || (token.isTransition && val === 'a')) {\n return QualifierTypes.Alpha;\n }\n if (val === 'beta' || (token.isTransition && val === 'b')) {\n return QualifierTypes.Beta;\n }\n if (val === 'milestone' || (token.isTransition && val === 'm')) {\n return QualifierTypes.Milestone;\n }\n if (val === 'rc' || val === 'cr' || val === 'preview') {\n return QualifierTypes.RC;\n }\n if (val === 'snapshot' || val === 'snap') {\n return QualifierTypes.Snapshot;\n }\n if (\n val === '' ||\n val === 'final' ||\n val === 'ga' ||\n val === 'release' ||\n val === 'latest' ||\n val === 'sr'\n ) {\n return QualifierTypes.Release;\n }\n if (val === 'sp') {\n return QualifierTypes.SP;\n }\n return null;\n}\n\nfunction qualifierCmp(left: Token, right: Token): number {\n const leftOrder = qualifierType(left);\n const rightOrder = qualifierType(right);\n if (leftOrder && rightOrder) {\n if (leftOrder < rightOrder) {\n return -1;\n }\n if (leftOrder > rightOrder) {\n return 1;\n }\n return 0;\n }\n\n if (leftOrder && leftOrder < QualifierTypes.Release) {\n return -1;\n }\n if (rightOrder && rightOrder < QualifierTypes.Release) {\n return 1;\n }\n\n if (left.val < right.val) {\n return -1;\n }\n if (left.val > right.val) {\n return 1;\n }\n return 0;\n}\n\nfunction tokenCmp(left: Token, right: Token): number {\n const leftOrder = commonOrder(left);\n const rightOrder = commonOrder(right);\n\n if (leftOrder < rightOrder) {\n return -1;\n }\n if (leftOrder > rightOrder) {\n return 1;\n }\n\n if (left.type === TYPE_NUMBER && right.type === TYPE_NUMBER) {\n if (left.val < right.val) {\n return -1;\n }\n if (left.val > right.val) {\n return 1;\n }\n return 0;\n }\n\n return qualifierCmp(left, right);\n}\n\nfunction compare(left: string, right: string): number {\n const leftTokens = tokenize(left);\n const rightTokens = tokenize(right);\n const length = Math.max(leftTokens.length, rightTokens.length);\n for (let idx = 0; idx < length; idx += 1) {\n const leftToken = leftTokens[idx] || nullFor(rightTokens[idx]);\n const rightToken = rightTokens[idx] || nullFor(leftTokens[idx]);\n const cmpResult = tokenCmp(leftToken, rightToken);\n if (cmpResult !== 0) {\n return cmpResult;\n }\n }\n return 0;\n}\n\nfunction isVersion(version: unknown): version is string {\n if (!version || !isString(version)) {\n return false;\n }\n if (!regEx(/^[-.a-z_+0-9]+$/i).test(version)) {\n return false;\n }\n if (regEx(/^[.-]/).test(version)) {\n return false;\n }\n if (regEx(/[.-]$/).test(version)) {\n return false;\n }\n if (['latest', 'release'].includes(version.toLowerCase())) {\n return false;\n }\n const tokens = tokenize(version);\n return !!tokens.length;\n}\n\nconst INCLUDING_POINT = 'INCLUDING_POINT';\nconst EXCLUDING_POINT = 'EXCLUDING_POINT';\n\nfunction parseRange(rangeStr: string): Range[] | null {\n function emptyInterval(): Range {\n return {\n leftType: null,\n leftValue: null,\n leftBracket: null,\n rightType: null,\n rightValue: null,\n rightBracket: null,\n };\n }\n\n const commaSplit = rangeStr.split(regEx(/\\s*,\\s*/));\n let ranges: Range[] | null = [];\n let interval = emptyInterval();\n\n commaSplit.forEach((subStr) => {\n if (!ranges) {\n return;\n }\n if (interval.leftType === null) {\n if (regEx(/^\\[.*]$/).test(subStr)) {\n const ver = subStr.slice(1, -1);\n ranges.push({\n leftType: INCLUDING_POINT,\n leftValue: ver,\n leftBracket: '[',\n rightType: INCLUDING_POINT,\n rightValue: ver,\n rightBracket: ']',\n });\n interval = emptyInterval();\n } else if (subStr.startsWith('[')) {\n const ver = subStr.slice(1);\n interval.leftType = INCLUDING_POINT;\n interval.leftValue = ver;\n interval.leftBracket = '[';\n } else if (subStr.startsWith('(') || subStr.startsWith(']')) {\n const ver = subStr.slice(1);\n interval.leftType = EXCLUDING_POINT;\n interval.leftValue = ver;\n interval.leftBracket = subStr[0];\n } else {\n ranges = null;\n }\n } else if (subStr.endsWith(']')) {\n const ver = subStr.slice(0, -1);\n interval.rightType = INCLUDING_POINT;\n interval.rightValue = ver;\n interval.rightBracket = ']';\n ranges.push(interval);\n interval = emptyInterval();\n } else if (subStr.endsWith(')') || subStr.endsWith('[')) {\n const ver = subStr.slice(0, -1);\n interval.rightType = EXCLUDING_POINT;\n interval.rightValue = ver;\n interval.rightBracket = subStr.endsWith(')') ? ')' : '[';\n ranges.push(interval);\n interval = emptyInterval();\n } else {\n ranges = null;\n }\n });\n\n if (interval.leftType) {\n return null;\n } // something like '[1,2],[3'\n if (!ranges?.length) {\n return null;\n }\n\n const lastIdx = ranges.length - 1;\n let prevValue: string | null = null;\n const result: Range[] = [];\n for (let idx = 0; idx < ranges.length; idx += 1) {\n const range = ranges[idx];\n const { leftType, leftValue, rightType, rightValue } = range;\n\n if (idx === 0 && leftValue === '') {\n if (leftType === EXCLUDING_POINT && isVersion(rightValue)) {\n prevValue = rightValue;\n result.push({ ...range, leftValue: null });\n continue;\n }\n return null;\n }\n if (idx === lastIdx && rightValue === '') {\n if (rightType === EXCLUDING_POINT && isVersion(leftValue)) {\n if (prevValue && compare(prevValue, leftValue) === 1) {\n return null;\n }\n result.push({ ...range, rightValue: null });\n continue;\n }\n return null;\n }\n if (isVersion(leftValue) && isVersion(rightValue)) {\n if (compare(leftValue, rightValue) === 1) {\n return null;\n }\n if (prevValue && compare(prevValue, leftValue) === 1) {\n return null;\n }\n prevValue = rightValue;\n result.push(range);\n continue;\n }\n return null;\n }\n return result;\n}\n\nfunction isValid(str: string): boolean {\n if (!str) {\n return false;\n }\n return isVersion(str) || !!parseRange(str);\n}\n\nexport interface Range {\n leftType: typeof INCLUDING_POINT | typeof EXCLUDING_POINT | null;\n leftValue: string | null;\n leftBracket: string | null;\n rightType: typeof INCLUDING_POINT | typeof EXCLUDING_POINT | null;\n rightValue: string | null;\n rightBracket: string | null;\n}\n\nfunction rangeToStr(fullRange: Range[] | null): string | null {\n if (fullRange === null) {\n return null;\n }\n\n function valToStr(val: string | null): string {\n return val ?? '';\n }\n\n if (fullRange.length === 1) {\n const { leftBracket, rightBracket, leftValue, rightValue } = fullRange[0];\n if (\n leftValue === rightValue &&\n leftBracket === '[' &&\n rightBracket === ']'\n ) {\n return `[${valToStr(leftValue)}]`;\n }\n }\n\n const intervals = fullRange.map((val) =>\n [\n val.leftBracket,\n valToStr(val.leftValue),\n ',',\n valToStr(val.rightValue),\n val.rightBracket,\n ].join(''),\n );\n return intervals.join(',');\n}\n\nfunction tokensToStr(tokens: Token[]): string {\n let isTransition: boolean | undefined = false;\n return tokens.reduce((result: string, token: Token) => {\n let prefix: string;\n if (token.prefix === PREFIX_DOT) {\n prefix = '.';\n } else if (token.prefix === PREFIX_HYPHEN) {\n prefix = isTransition === true ? '' : '-';\n } else {\n prefix = token.prefix;\n }\n isTransition = token.isTransition;\n return `${result}${prefix}${token.val}`;\n }, '');\n}\n\nfunction coerceRangeValue(prev: string, next: string): string {\n const prevTokens = tokenize(prev, true);\n const nextTokens = tokenize(next, true);\n const resultTokens = nextTokens.slice(0, prevTokens.length);\n const align = Math.max(0, prevTokens.length - nextTokens.length);\n if (align > 0) {\n resultTokens.push(...prevTokens.slice(prevTokens.length - align));\n }\n return tokensToStr(resultTokens);\n}\n\nfunction incrementRangeValue(value: string): string {\n const tokens = tokenize(value);\n const lastToken = tokens.at(-1)!;\n if (typeof lastToken.val === 'number') {\n lastToken.val += 1;\n return coerceRangeValue(value, tokensToStr(tokens));\n }\n return value;\n}\n\nfunction autoExtendMavenRange(\n currentRepresentation: string,\n newValue: string,\n): string | null {\n const range = parseRange(currentRepresentation);\n if (!range) {\n return currentRepresentation;\n }\n function isPoint(vals: Range[]): boolean {\n if (vals.length !== 1) {\n return false;\n }\n const { leftType, leftValue, rightType, rightValue } = vals[0];\n return (\n leftType === 'INCLUDING_POINT' &&\n leftType === rightType &&\n leftValue === rightValue\n );\n }\n if (isPoint(range)) {\n return `[${newValue}]`;\n }\n\n const interval = [...range].reverse().find((elem) => {\n const { rightType, rightValue } = elem;\n return (\n rightValue === null ||\n (rightType === INCLUDING_POINT && compare(rightValue, newValue) === -1) ||\n (rightType === EXCLUDING_POINT && compare(rightValue, newValue) !== 1)\n );\n });\n\n if (!interval) {\n return currentRepresentation;\n }\n\n const { leftValue, rightValue } = interval;\n if (\n leftValue !== null &&\n rightValue !== null &&\n incrementRangeValue(leftValue) === rightValue\n ) {\n // if a range was detected where incrementing the lower value once results in the upper value\n // and the new version is outside the range, construct a new range that follows the same semantic\n // [1,2) / 4.3.2 => [4,5)\n if (compare(newValue, leftValue) !== -1) {\n interval.leftValue = coerceRangeValue(leftValue, newValue);\n interval.rightValue = incrementRangeValue(interval.leftValue);\n }\n } else if (\n leftValue !== null &&\n rightValue !== null &&\n incrementRangeValue(leftValue) + ALPHA_SUFFIX === rightValue\n ) {\n // same as last if, but properly considering Maven ordering specification documented at\n // https://maven.apache.org/pom.html#Version_Order_Specification\n // 4-alpha is smaller than 4.0.0 for example\n // while often people that intend to only match version 1.x use [1,2)\n // this is not correct as it matches various 2.x versions, mostly pre-versions\n // so the correct range definition would be [1,2-alpha) as nothing\n // starting with 2 can be lower than 2-alpha in Maven version ordering logic\n //\n // so this if handles the conceptually same case as the last if\n // just for the case when proper Maven ranges are used\n // [1,2-alpha) / 4.3.2 => [4,5-alpha)\n interval.leftValue = coerceRangeValue(leftValue, newValue);\n interval.rightValue =\n incrementRangeValue(interval.leftValue) + ALPHA_SUFFIX;\n } else if (rightValue !== null) {\n if (interval.rightType === INCLUDING_POINT) {\n const tokens = tokenize(rightValue);\n const lastToken = tokens.at(-1)!;\n if (typeof lastToken.val === 'number') {\n interval.rightValue = coerceRangeValue(rightValue, newValue);\n } else {\n interval.rightValue = newValue;\n }\n } else {\n interval.rightValue = incrementRangeValue(\n coerceRangeValue(rightValue, newValue),\n );\n }\n } else if (leftValue !== null) {\n interval.leftValue = coerceRangeValue(leftValue, newValue);\n }\n\n return rangeToStr(range);\n}\n\nfunction isSubversion(majorVersion: string, minorVersion: string): boolean {\n const majorTokens = tokenize(majorVersion);\n const minorTokens = tokenize(minorVersion);\n\n let result = true;\n const len = majorTokens.length;\n for (let idx = 0; idx < len; idx += 1) {\n const major = majorTokens[idx];\n const minor = minorTokens[idx] || nullFor(majorTokens[idx]);\n const cmpResult = tokenCmp(major, minor);\n if (cmpResult !== 0) {\n result = false;\n break;\n }\n }\n return result;\n}\n\nexport {\n EXCLUDING_POINT,\n INCLUDING_POINT,\n PREFIX_DOT,\n PREFIX_HYPHEN,\n TYPE_NUMBER,\n TYPE_QUALIFIER,\n autoExtendMavenRange,\n compare,\n isSubversion,\n isValid,\n isVersion,\n isVersion as isSingleVersion,\n parseRange,\n rangeToStr,\n tokenize,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"compare.js","names":["isNull"],"sources":["../../../../lib/modules/versioning/maven/compare.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { regEx } from '../../../util/regex.ts';\nimport type { Range, Token } from './types.ts';\n\nconst PREFIX_DOT = 'PREFIX_DOT';\nconst PREFIX_HYPHEN = 'PREFIX_HYPHEN';\nconst ALPHA_SUFFIX = '-alpha';\n\nconst TYPE_NUMBER = 'TYPE_NUMBER';\nconst TYPE_QUALIFIER = 'TYPE_QUALIFIER';\n\nfunction iterateChars(\n str: string,\n cb: (p: string | null, n: string | null) => void,\n): void {\n let prev = null;\n let next = null;\n for (let i = 0; i < str.length; i += 1) {\n next = str.charAt(i);\n cb(prev, next);\n prev = next;\n }\n cb(prev, null);\n}\n\nfunction isDigit(char: string): boolean {\n return regEx(/^\\d$/).test(char);\n}\n\nfunction isLetter(char: string): boolean {\n return regEx(/^[a-z_+]$/i).test(char);\n}\n\nfunction isTransition(prevChar: string, nextChar: string): boolean {\n return (\n (isDigit(prevChar) && isLetter(nextChar)) ||\n (isLetter(prevChar) && isDigit(nextChar))\n );\n}\n\nfunction iterateTokens(versionStr: string, cb: (token: Token) => void): void {\n let currentPrefix = '';\n let currentVal = '';\n\n function yieldToken(transition = false): void {\n const val = currentVal || '0';\n if (regEx(/^\\d+$/).test(val)) {\n cb({\n prefix: currentPrefix,\n type: TYPE_NUMBER,\n val: parseInt(val, 10),\n isTransition: transition,\n });\n } else {\n cb({\n prefix: currentPrefix,\n type: TYPE_QUALIFIER,\n val,\n isTransition: transition,\n });\n }\n }\n\n iterateChars(versionStr, (prevChar, nextChar) => {\n if (nextChar === null) {\n yieldToken();\n } else if (nextChar === '-') {\n yieldToken();\n currentPrefix = PREFIX_HYPHEN;\n currentVal = '';\n } else if (nextChar === '.') {\n yieldToken();\n currentPrefix = PREFIX_DOT;\n currentVal = '';\n } else if (prevChar === null && (nextChar === 'v' || nextChar === 'V')) {\n currentPrefix = nextChar;\n } else {\n if (currentVal !== '' && isTransition(prevChar!, nextChar)) {\n yieldToken(true);\n currentPrefix = PREFIX_HYPHEN;\n currentVal = nextChar;\n } else if (\n currentVal === '' &&\n (currentPrefix === 'v' || currentPrefix === 'V') &&\n !isDigit(nextChar)\n ) {\n currentVal = currentVal.concat(currentPrefix, nextChar);\n currentPrefix = '';\n } else {\n currentVal = currentVal.concat(nextChar);\n }\n }\n });\n}\n\nfunction isNull(token: Token): boolean {\n const val = token.val;\n return (\n val === 0 ||\n val === '' ||\n val === 'final' ||\n val === 'ga' ||\n val === 'release' ||\n val === 'latest' ||\n val === 'sr'\n );\n}\n\nfunction tokenize(versionStr: string, preserveMinorZeroes = false): Token[] {\n let buf: Token[] = [];\n let result: Token[] = [];\n let leadingZero = true;\n iterateTokens(versionStr.toLowerCase(), (token) => {\n if (token.prefix === PREFIX_HYPHEN || token.type === TYPE_QUALIFIER) {\n buf = [];\n }\n buf.push(token);\n if (!isNull(token)) {\n leadingZero = false;\n result = result.concat(buf);\n buf = [];\n } else if (leadingZero || preserveMinorZeroes) {\n result = result.concat(buf);\n buf = [];\n }\n });\n return result;\n}\n\nfunction nullFor(token: Token): Token {\n return token.type === TYPE_NUMBER\n ? {\n prefix: token.prefix,\n type: TYPE_NUMBER,\n val: 0,\n }\n : {\n prefix: token.prefix,\n type: TYPE_QUALIFIER,\n val: '',\n };\n}\n\nfunction commonOrder(token: Token): number {\n if (token.type === TYPE_QUALIFIER) {\n return 1;\n }\n if (token.prefix === PREFIX_HYPHEN && token.type === TYPE_NUMBER) {\n return 2;\n }\n return 3;\n}\n\nexport const QualifierTypes = {\n Alpha: 1,\n Beta: 2,\n Milestone: 3,\n RC: 4,\n Snapshot: 5,\n Release: 6,\n SP: 7,\n} as const;\n\nexport function qualifierType(token: Token): number | null {\n const val = token.val;\n if (val === 'alpha' || (token.isTransition && val === 'a')) {\n return QualifierTypes.Alpha;\n }\n if (val === 'beta' || (token.isTransition && val === 'b')) {\n return QualifierTypes.Beta;\n }\n if (val === 'milestone' || (token.isTransition && val === 'm')) {\n return QualifierTypes.Milestone;\n }\n if (val === 'rc' || val === 'cr' || val === 'preview') {\n return QualifierTypes.RC;\n }\n if (val === 'snapshot' || val === 'snap') {\n return QualifierTypes.Snapshot;\n }\n if (\n val === '' ||\n val === 'final' ||\n val === 'ga' ||\n val === 'release' ||\n val === 'latest' ||\n val === 'sr'\n ) {\n return QualifierTypes.Release;\n }\n if (val === 'sp') {\n return QualifierTypes.SP;\n }\n return null;\n}\n\nfunction qualifierCmp(left: Token, right: Token): number {\n const leftOrder = qualifierType(left);\n const rightOrder = qualifierType(right);\n if (leftOrder && rightOrder) {\n if (leftOrder < rightOrder) {\n return -1;\n }\n if (leftOrder > rightOrder) {\n return 1;\n }\n return 0;\n }\n\n if (leftOrder && leftOrder < QualifierTypes.Release) {\n return -1;\n }\n if (rightOrder && rightOrder < QualifierTypes.Release) {\n return 1;\n }\n\n if (left.val < right.val) {\n return -1;\n }\n if (left.val > right.val) {\n return 1;\n }\n return 0;\n}\n\nfunction tokenCmp(left: Token, right: Token): number {\n const leftOrder = commonOrder(left);\n const rightOrder = commonOrder(right);\n\n if (leftOrder < rightOrder) {\n return -1;\n }\n if (leftOrder > rightOrder) {\n return 1;\n }\n\n if (left.type === TYPE_NUMBER && right.type === TYPE_NUMBER) {\n if (left.val < right.val) {\n return -1;\n }\n if (left.val > right.val) {\n return 1;\n }\n return 0;\n }\n\n return qualifierCmp(left, right);\n}\n\nfunction compare(left: string, right: string): number {\n const leftTokens = tokenize(left);\n const rightTokens = tokenize(right);\n const length = Math.max(leftTokens.length, rightTokens.length);\n for (let idx = 0; idx < length; idx += 1) {\n const leftToken = leftTokens[idx] || nullFor(rightTokens[idx]);\n const rightToken = rightTokens[idx] || nullFor(leftTokens[idx]);\n const cmpResult = tokenCmp(leftToken, rightToken);\n if (cmpResult !== 0) {\n return cmpResult;\n }\n }\n return 0;\n}\n\nfunction isVersion(version: unknown): version is string {\n if (!version || !isString(version)) {\n return false;\n }\n if (!regEx(/^[-.a-z_+0-9]+$/i).test(version)) {\n return false;\n }\n if (regEx(/^[.-]/).test(version)) {\n return false;\n }\n if (regEx(/[.-]$/).test(version)) {\n return false;\n }\n if (['latest', 'release'].includes(version.toLowerCase())) {\n return false;\n }\n const tokens = tokenize(version);\n return !!tokens.length;\n}\n\nconst INCLUDING_POINT = 'INCLUDING_POINT';\nconst EXCLUDING_POINT = 'EXCLUDING_POINT';\n\nfunction parseRange(rangeStr: string): Range[] | null {\n function emptyInterval(): Range {\n return {\n leftType: null,\n leftValue: null,\n leftBracket: null,\n rightType: null,\n rightValue: null,\n rightBracket: null,\n };\n }\n\n const commaSplit = rangeStr.split(regEx(/\\s*,\\s*/));\n let ranges: Range[] | null = [];\n let interval = emptyInterval();\n\n commaSplit.forEach((subStr) => {\n if (!ranges) {\n return;\n }\n if (interval.leftType === null) {\n if (regEx(/^\\[.*]$/).test(subStr)) {\n const ver = subStr.slice(1, -1);\n ranges.push({\n leftType: INCLUDING_POINT,\n leftValue: ver,\n leftBracket: '[',\n rightType: INCLUDING_POINT,\n rightValue: ver,\n rightBracket: ']',\n });\n interval = emptyInterval();\n } else if (subStr.startsWith('[')) {\n const ver = subStr.slice(1);\n interval.leftType = INCLUDING_POINT;\n interval.leftValue = ver;\n interval.leftBracket = '[';\n } else if (subStr.startsWith('(') || subStr.startsWith(']')) {\n const ver = subStr.slice(1);\n interval.leftType = EXCLUDING_POINT;\n interval.leftValue = ver;\n interval.leftBracket = subStr[0];\n } else {\n ranges = null;\n }\n } else if (subStr.endsWith(']')) {\n const ver = subStr.slice(0, -1);\n interval.rightType = INCLUDING_POINT;\n interval.rightValue = ver;\n interval.rightBracket = ']';\n ranges.push(interval);\n interval = emptyInterval();\n } else if (subStr.endsWith(')') || subStr.endsWith('[')) {\n const ver = subStr.slice(0, -1);\n interval.rightType = EXCLUDING_POINT;\n interval.rightValue = ver;\n interval.rightBracket = subStr.endsWith(')') ? ')' : '[';\n ranges.push(interval);\n interval = emptyInterval();\n } else {\n ranges = null;\n }\n });\n\n if (interval.leftType) {\n return null;\n } // something like '[1,2],[3'\n if (!ranges?.length) {\n return null;\n }\n\n const lastIdx = ranges.length - 1;\n let prevValue: string | null = null;\n const result: Range[] = [];\n for (let idx = 0; idx < ranges.length; idx += 1) {\n const range = ranges[idx];\n const { leftType, leftValue, rightType, rightValue } = range;\n\n if (idx === 0 && leftValue === '') {\n if (leftType === EXCLUDING_POINT && isVersion(rightValue)) {\n prevValue = rightValue;\n result.push({ ...range, leftValue: null });\n continue;\n }\n return null;\n }\n if (idx === lastIdx && rightValue === '') {\n if (rightType === EXCLUDING_POINT && isVersion(leftValue)) {\n if (prevValue && compare(prevValue, leftValue) === 1) {\n return null;\n }\n result.push({ ...range, rightValue: null });\n continue;\n }\n return null;\n }\n if (isVersion(leftValue) && isVersion(rightValue)) {\n if (compare(leftValue, rightValue) === 1) {\n return null;\n }\n if (prevValue && compare(prevValue, leftValue) === 1) {\n return null;\n }\n prevValue = rightValue;\n result.push(range);\n continue;\n }\n return null;\n }\n return result;\n}\n\nfunction isValid(str: string): boolean {\n if (!str) {\n return false;\n }\n return isVersion(str) || !!parseRange(str);\n}\n\nfunction rangeToStr(fullRange: Range[] | null): string | null {\n if (fullRange === null) {\n return null;\n }\n\n function valToStr(val: string | null): string {\n return val ?? '';\n }\n\n if (fullRange.length === 1) {\n const { leftBracket, rightBracket, leftValue, rightValue } = fullRange[0];\n if (\n leftValue === rightValue &&\n leftBracket === '[' &&\n rightBracket === ']'\n ) {\n return `[${valToStr(leftValue)}]`;\n }\n }\n\n const intervals = fullRange.map((val) =>\n [\n val.leftBracket,\n valToStr(val.leftValue),\n ',',\n valToStr(val.rightValue),\n val.rightBracket,\n ].join(''),\n );\n return intervals.join(',');\n}\n\nfunction tokensToStr(tokens: Token[]): string {\n let isTransition: boolean | undefined = false;\n return tokens.reduce((result: string, token: Token) => {\n let prefix: string;\n if (token.prefix === PREFIX_DOT) {\n prefix = '.';\n } else if (token.prefix === PREFIX_HYPHEN) {\n prefix = isTransition === true ? '' : '-';\n } else {\n prefix = token.prefix;\n }\n isTransition = token.isTransition;\n return `${result}${prefix}${token.val}`;\n }, '');\n}\n\nfunction coerceRangeValue(prev: string, next: string): string {\n const prevTokens = tokenize(prev, true);\n const nextTokens = tokenize(next, true);\n const resultTokens = nextTokens.slice(0, prevTokens.length);\n const align = Math.max(0, prevTokens.length - nextTokens.length);\n if (align > 0) {\n resultTokens.push(...prevTokens.slice(prevTokens.length - align));\n }\n return tokensToStr(resultTokens);\n}\n\nfunction incrementRangeValue(value: string): string {\n const tokens = tokenize(value);\n const lastToken = tokens.at(-1)!;\n if (typeof lastToken.val === 'number') {\n lastToken.val += 1;\n return coerceRangeValue(value, tokensToStr(tokens));\n }\n return value;\n}\n\nfunction autoExtendMavenRange(\n currentRepresentation: string,\n newValue: string,\n): string | null {\n const range = parseRange(currentRepresentation);\n if (!range) {\n return currentRepresentation;\n }\n function isPoint(vals: Range[]): boolean {\n if (vals.length !== 1) {\n return false;\n }\n const { leftType, leftValue, rightType, rightValue } = vals[0];\n return (\n leftType === 'INCLUDING_POINT' &&\n leftType === rightType &&\n leftValue === rightValue\n );\n }\n if (isPoint(range)) {\n return `[${newValue}]`;\n }\n\n const interval = [...range].reverse().find((elem) => {\n const { rightType, rightValue } = elem;\n return (\n rightValue === null ||\n (rightType === INCLUDING_POINT && compare(rightValue, newValue) === -1) ||\n (rightType === EXCLUDING_POINT && compare(rightValue, newValue) !== 1)\n );\n });\n\n if (!interval) {\n return currentRepresentation;\n }\n\n const { leftValue, rightValue } = interval;\n if (\n leftValue !== null &&\n rightValue !== null &&\n incrementRangeValue(leftValue) === rightValue\n ) {\n // if a range was detected where incrementing the lower value once results in the upper value\n // and the new version is outside the range, construct a new range that follows the same semantic\n // [1,2) / 4.3.2 => [4,5)\n if (compare(newValue, leftValue) !== -1) {\n interval.leftValue = coerceRangeValue(leftValue, newValue);\n interval.rightValue = incrementRangeValue(interval.leftValue);\n }\n } else if (\n leftValue !== null &&\n rightValue !== null &&\n incrementRangeValue(leftValue) + ALPHA_SUFFIX === rightValue\n ) {\n // same as last if, but properly considering Maven ordering specification documented at\n // https://maven.apache.org/pom.html#Version_Order_Specification\n // 4-alpha is smaller than 4.0.0 for example\n // while often people that intend to only match version 1.x use [1,2)\n // this is not correct as it matches various 2.x versions, mostly pre-versions\n // so the correct range definition would be [1,2-alpha) as nothing\n // starting with 2 can be lower than 2-alpha in Maven version ordering logic\n //\n // so this if handles the conceptually same case as the last if\n // just for the case when proper Maven ranges are used\n // [1,2-alpha) / 4.3.2 => [4,5-alpha)\n interval.leftValue = coerceRangeValue(leftValue, newValue);\n interval.rightValue =\n incrementRangeValue(interval.leftValue) + ALPHA_SUFFIX;\n } else if (rightValue !== null) {\n if (interval.rightType === INCLUDING_POINT) {\n const tokens = tokenize(rightValue);\n const lastToken = tokens.at(-1)!;\n if (typeof lastToken.val === 'number') {\n interval.rightValue = coerceRangeValue(rightValue, newValue);\n } else {\n interval.rightValue = newValue;\n }\n } else {\n interval.rightValue = incrementRangeValue(\n coerceRangeValue(rightValue, newValue),\n );\n }\n } else if (leftValue !== null) {\n interval.leftValue = coerceRangeValue(leftValue, newValue);\n }\n\n return rangeToStr(range);\n}\n\nfunction isSubversion(majorVersion: string, minorVersion: string): boolean {\n const majorTokens = tokenize(majorVersion);\n const minorTokens = tokenize(minorVersion);\n\n let result = true;\n const len = majorTokens.length;\n for (let idx = 0; idx < len; idx += 1) {\n const major = majorTokens[idx];\n const minor = minorTokens[idx] || nullFor(majorTokens[idx]);\n const cmpResult = tokenCmp(major, minor);\n if (cmpResult !== 0) {\n result = false;\n break;\n }\n }\n return result;\n}\n\nexport {\n EXCLUDING_POINT,\n INCLUDING_POINT,\n PREFIX_DOT,\n PREFIX_HYPHEN,\n TYPE_NUMBER,\n TYPE_QUALIFIER,\n autoExtendMavenRange,\n compare,\n isSubversion,\n isValid,\n isVersion,\n isVersion as isSingleVersion,\n parseRange,\n rangeToStr,\n tokenize,\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/nixpkgs/index.ts"],"sourcesContent":["import {\n isEmptyArray,\n isNonEmptyArray,\n isNonEmptyStringAndNotWhitespace,\n} from '@sindresorhus/is';\nimport type { RegExpVersion } from '../regex/index.ts';\nimport { RegExpVersioningApi } from '../regex/index.ts';\nimport type { VersioningApiConstructor } from '../types.ts';\n\nexport const id = 'nixpkgs';\nexport const displayName = 'Nixpkgs';\nexport const urls = ['[Nixpkgs repository](https://github.com/NixOS/nixpkgs)'];\nexport const supportsRanges = false;\n\nexport class NixPkgsVersioning extends RegExpVersioningApi {\n private static readonly versionRegex =\n '^(?<prefix>(nixos|nixpkgs|release))-((?<major>\\\\d{2})\\\\.(?<minor>\\\\d{2})|unstable)(-(?<suffix>(small|aarch64|darwin)))?$';\n\n constructor() {\n super(NixPkgsVersioning.versionRegex);\n }\n\n protected override _parse(version: string): RegExpVersion | null {\n const groups = this._config?.exec(version)?.groups;\n\n if (!groups) {\n return null;\n }\n\n const { prefix, major, minor, suffix } = groups;\n const release = [];\n\n if (major) {\n release.push(Number.parseInt(major, 10));\n }\n\n if (minor) {\n release.push(Number.parseInt(minor, 10));\n }\n\n const compatibility = isNonEmptyStringAndNotWhitespace(suffix)\n ? `${prefix}-${suffix}`\n : prefix;\n\n return {\n release,\n compatibility,\n };\n }\n\n override isStable(version: string): boolean {\n const parsed = this._parse(version);\n return isNonEmptyArray(parsed?.release);\n }\n\n protected override _compare(version: string, other: string): number {\n const left = this._parse(version);\n const right = this._parse(other);\n\n // empty version is equal to 'unstable'\n if (isEmptyArray(left?.release) && isEmptyArray(right?.release)) {\n return 0;\n }\n if (isEmptyArray(left?.release)) {\n return 1;\n }\n if (isEmptyArray(right?.release)) {\n return -1;\n }\n return super._compare(version, other);\n }\n}\n\nexport const api: VersioningApiConstructor = NixPkgsVersioning;\n\nexport default api;\n"],"mappings":";;;AASA,MAAa,KAAK;AAKlB,IAAa,oBAAb,MAAa,0BAA0B,oBAAoB;CACzD,OAAwB,eACtB;CAEF,cAAc;EACZ,MAAM,kBAAkB,YAAY;CACtC;CAEA,OAA0B,SAAuC;EAC/D,MAAM,SAAS,KAAK,SAAS,KAAK,OAAO,CAAC,EAAE;EAE5C,IAAI,CAAC,QACH,OAAO;EAGT,MAAM,EAAE,QAAQ,OAAO,OAAO,WAAW;EACzC,MAAM,UAAU,CAAC;EAEjB,IAAI,OACF,QAAQ,KAAK,OAAO,SAAS,OAAO,EAAE,CAAC;EAGzC,IAAI,OACF,QAAQ,KAAK,OAAO,SAAS,OAAO,EAAE,CAAC;EAOzC,OAAO;GACL;GACA,eANoB,iCAAiC,MAAM,IACzD,GAAG,OAAO,GAAG,WACb;EAKJ;CACF;CAEA,SAAkB,SAA0B;EAC1C,MAAM,SAAS,KAAK,OAAO,OAAO;EAClC,OAAO,gBAAgB,QAAQ,OAAO;CACxC;CAEA,SAA4B,SAAiB,OAAuB;EAClE,MAAM,OAAO,KAAK,OAAO,OAAO;EAChC,MAAM,QAAQ,KAAK,OAAO,KAAK;EAG/B,IAAI,aAAa,MAAM,OAAO,KAAK,aAAa,OAAO,OAAO,GAC5D,OAAO;EAET,IAAI,aAAa,MAAM,OAAO,GAC5B,OAAO;EAET,IAAI,aAAa,OAAO,OAAO,GAC7B,OAAO;EAET,OAAO,MAAM,SAAS,SAAS,KAAK;CACtC;AACF;AAEA,MAAa,MAAgC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/nixpkgs/index.ts"],"sourcesContent":["import {\n isEmptyArray,\n isNonEmptyArray,\n isNonEmptyStringAndNotWhitespace,\n} from '@sindresorhus/is';\nimport { RegExpVersioningApi } from '../regex/index.ts';\nimport type { RegExpVersion } from '../regex/types.ts';\nimport type { VersioningApiConstructor } from '../types.ts';\n\nexport const id = 'nixpkgs';\nexport const displayName = 'Nixpkgs';\nexport const urls = ['[Nixpkgs repository](https://github.com/NixOS/nixpkgs)'];\nexport const supportsRanges = false;\n\nexport class NixPkgsVersioning extends RegExpVersioningApi {\n private static readonly versionRegex =\n '^(?<prefix>(nixos|nixpkgs|release))-((?<major>\\\\d{2})\\\\.(?<minor>\\\\d{2})|unstable)(-(?<suffix>(small|aarch64|darwin)))?$';\n\n constructor() {\n super(NixPkgsVersioning.versionRegex);\n }\n\n protected override _parse(version: string): RegExpVersion | null {\n const groups = this._config?.exec(version)?.groups;\n\n if (!groups) {\n return null;\n }\n\n const { prefix, major, minor, suffix } = groups;\n const release = [];\n\n if (major) {\n release.push(Number.parseInt(major, 10));\n }\n\n if (minor) {\n release.push(Number.parseInt(minor, 10));\n }\n\n const compatibility = isNonEmptyStringAndNotWhitespace(suffix)\n ? `${prefix}-${suffix}`\n : prefix;\n\n return {\n release,\n compatibility,\n };\n }\n\n override isStable(version: string): boolean {\n const parsed = this._parse(version);\n return isNonEmptyArray(parsed?.release);\n }\n\n protected override _compare(version: string, other: string): number {\n const left = this._parse(version);\n const right = this._parse(other);\n\n // empty version is equal to 'unstable'\n if (isEmptyArray(left?.release) && isEmptyArray(right?.release)) {\n return 0;\n }\n if (isEmptyArray(left?.release)) {\n return 1;\n }\n if (isEmptyArray(right?.release)) {\n return -1;\n }\n return super._compare(version, other);\n }\n}\n\nexport const api: VersioningApiConstructor = NixPkgsVersioning;\n\nexport default api;\n"],"mappings":";;;AASA,MAAa,KAAK;AAKlB,IAAa,oBAAb,MAAa,0BAA0B,oBAAoB;CACzD,OAAwB,eACtB;CAEF,cAAc;EACZ,MAAM,kBAAkB,YAAY;CACtC;CAEA,OAA0B,SAAuC;EAC/D,MAAM,SAAS,KAAK,SAAS,KAAK,OAAO,CAAC,EAAE;EAE5C,IAAI,CAAC,QACH,OAAO;EAGT,MAAM,EAAE,QAAQ,OAAO,OAAO,WAAW;EACzC,MAAM,UAAU,CAAC;EAEjB,IAAI,OACF,QAAQ,KAAK,OAAO,SAAS,OAAO,EAAE,CAAC;EAGzC,IAAI,OACF,QAAQ,KAAK,OAAO,SAAS,OAAO,EAAE,CAAC;EAOzC,OAAO;GACL;GACA,eANoB,iCAAiC,MAAM,IACzD,GAAG,OAAO,GAAG,WACb;EAKJ;CACF;CAEA,SAAkB,SAA0B;EAC1C,MAAM,SAAS,KAAK,OAAO,OAAO;EAClC,OAAO,gBAAgB,QAAQ,OAAO;CACxC;CAEA,SAA4B,SAAiB,OAAuB;EAClE,MAAM,OAAO,KAAK,OAAO,OAAO;EAChC,MAAM,QAAQ,KAAK,OAAO,KAAK;EAG/B,IAAI,aAAa,MAAM,OAAO,KAAK,aAAa,OAAO,OAAO,GAC5D,OAAO;EAET,IAAI,aAAa,MAAM,OAAO,GAC5B,OAAO;EAET,IAAI,aAAa,OAAO,OAAO,GAC7B,OAAO;EAET,OAAO,MAAM,SAAS,SAAS,KAAK;CACtC;AACF;AAEA,MAAa,MAAgC"}
@@ -1 +1 @@
1
- {"version":3,"file":"schedule.js","names":["_nodeSchedule","semver"],"sources":["../../../../lib/modules/versioning/node/schedule.ts"],"sourcesContent":["import _nodeSchedule from '../../../data/node-js-schedule.json' with { type: 'json' };\nimport type { Nullish } from '../../../types/index.ts';\nimport semver from '../semver/index.ts';\n\ninterface NodeJsSchedule {\n alpha?: string;\n lts?: string;\n maintenance?: string;\n end: string;\n start: string;\n codename?: string;\n}\n\nexport type NodeJsData = Record<string, NodeJsSchedule>;\nconst nodeSchedule: NodeJsData = _nodeSchedule;\nexport type NodeJsScheduleWithVersion = { version: string } & NodeJsSchedule;\n\nconst nodeCodenames = new Map<string, NodeJsScheduleWithVersion>();\nfor (const version of Object.keys(nodeSchedule)) {\n const schedule = nodeSchedule[version];\n if (schedule.codename) {\n nodeCodenames.set(schedule.codename.toUpperCase(), {\n version,\n ...schedule,\n });\n }\n}\n\nexport function findScheduleForCodename(\n codename: string,\n): Nullish<NodeJsScheduleWithVersion> {\n return nodeCodenames.get(codename?.toUpperCase());\n}\n\nexport function findScheduleForVersion(\n version: string,\n): Nullish<NodeJsSchedule> {\n const major = semver.getMajor(version);\n const schedule = nodeSchedule[`v${major!}`];\n return schedule;\n}\n"],"mappings":";;;AAcA,MAAM,eAA2BA;AAGjC,MAAM,gCAAgB,IAAI,IAAuC;AACjE,KAAK,MAAM,WAAW,OAAO,KAAK,YAAY,GAAG;CAC/C,MAAM,WAAW,aAAa;CAC9B,IAAI,SAAS,UACX,cAAc,IAAI,SAAS,SAAS,YAAY,GAAG;EACjD;EACA,GAAG;CACL,CAAC;AAEL;AAEA,SAAgB,wBACd,UACoC;CACpC,OAAO,cAAc,IAAI,UAAU,YAAY,CAAC;AAClD;AAEA,SAAgB,uBACd,SACyB;CACzB,MAAM,QAAQC,IAAO,SAAS,OAAO;CAErC,OADiB,aAAa,IAAI;AAEpC"}
1
+ {"version":3,"file":"schedule.js","names":["_nodeSchedule","semver"],"sources":["../../../../lib/modules/versioning/node/schedule.ts"],"sourcesContent":["import _nodeSchedule from '../../../data/node-js-schedule.json' with { type: 'json' };\nimport type { Nullish } from '../../../types/index.ts';\nimport semver from '../semver/index.ts';\nimport type {\n NodeJsData,\n NodeJsSchedule,\n NodeJsScheduleWithVersion,\n} from './types.ts';\n\nconst nodeSchedule: NodeJsData = _nodeSchedule;\n\nconst nodeCodenames = new Map<string, NodeJsScheduleWithVersion>();\nfor (const version of Object.keys(nodeSchedule)) {\n const schedule = nodeSchedule[version];\n if (schedule.codename) {\n nodeCodenames.set(schedule.codename.toUpperCase(), {\n version,\n ...schedule,\n });\n }\n}\n\nexport function findScheduleForCodename(\n codename: string,\n): Nullish<NodeJsScheduleWithVersion> {\n return nodeCodenames.get(codename?.toUpperCase());\n}\n\nexport function findScheduleForVersion(\n version: string,\n): Nullish<NodeJsSchedule> {\n const major = semver.getMajor(version);\n const schedule = nodeSchedule[`v${major!}`];\n return schedule;\n}\n"],"mappings":";;;AASA,MAAM,eAA2BA;AAEjC,MAAM,gCAAgB,IAAI,IAAuC;AACjE,KAAK,MAAM,WAAW,OAAO,KAAK,YAAY,GAAG;CAC/C,MAAM,WAAW,aAAa;CAC9B,IAAI,SAAS,UACX,cAAc,IAAI,SAAS,SAAS,YAAY,GAAG;EACjD;EACA,GAAG;CACL,CAAC;AAEL;AAEA,SAAgB,wBACd,UACoC;CACpC,OAAO,cAAc,IAAI,UAAU,YAAY,CAAC;AAClD;AAEA,SAAgB,uBACd,SACyB;CACzB,MAAM,QAAQC,IAAO,SAAS,OAAO;CAErC,OADiB,aAAa,IAAI;AAEpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["matchesRange"],"sources":["../../../../lib/modules/versioning/paket/index.ts"],"sourcesContent":["import type { RangeStrategy } from '../../../types/versioning.ts';\nimport { parseVersion } from '../nuget/parser.ts';\nimport type { NugetVersion } from '../nuget/types.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\nimport type { PaketConstraint, PaketRange } from './range.ts';\nimport {\n adaptToPrecision,\n bumpAtPrecision,\n ensurePrereleaseMatches,\n intervalOf,\n isLessThanLowerBound,\n matches as matchesRange,\n parseRange,\n rangeToString,\n releaseParts,\n twiddle,\n} from './range.ts';\nimport { compare, sameReleaseParts } from './version.ts';\n\nexport const id = 'paket';\nexport const displayName = 'Paket';\nexport const urls = [\n '[Paket version constraints](https://fsprojects.github.io/Paket/nuget-dependencies.html#Version-constraints)',\n '[NuGet package versioning](https://learn.microsoft.com/nuget/concepts/package-versioning)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n 'update-lockfile',\n];\n\nfunction isVersion(input: string | undefined | null): boolean {\n return !!input && parseVersion(input) !== null;\n}\n\nfunction isValid(input: string): boolean {\n return parseRange(input) !== null;\n}\n\nfunction isSingleVersionRange(range: PaketRange): boolean {\n if (range.constraints.length !== 1 || range.prereleaseTags.length > 0) {\n return false;\n }\n\n const { operator } = range.constraints[0];\n return operator === '' || operator === '=' || operator === '==';\n}\n\nfunction isSingleVersion(input: string): boolean {\n const range = parseRange(input);\n return !!range && isSingleVersionRange(range);\n}\n\nfunction isStable(input: string): boolean {\n const version = parseVersion(input);\n if (version) {\n return !version.prerelease;\n }\n\n const range = parseRange(input);\n return (\n !!range &&\n isSingleVersionRange(range) &&\n !range.constraints[0].version.prerelease\n );\n}\n\nfunction isCompatible(version: string): boolean {\n return isVersion(version);\n}\n\nfunction getMajor(version: string): number | null {\n return parseVersion(version)?.major ?? null;\n}\n\nfunction getMinor(version: string): number | null {\n return parseVersion(version)?.minor ?? null;\n}\n\nfunction getPatch(version: string): number | null {\n return parseVersion(version)?.patch ?? null;\n}\n\nfunction compareVersions(version: string, other: string): number | null {\n const x = parseVersion(version);\n const y = parseVersion(other);\n return x && y ? compare(x, y) : null;\n}\n\nfunction equals(version: string, other: string): boolean {\n return compareVersions(version, other) === 0;\n}\n\nfunction isGreaterThan(version: string, other: string): boolean {\n const cmp = compareVersions(version, other);\n return cmp !== null && cmp > 0;\n}\n\nfunction sortVersions(version: string, other: string): number {\n return compareVersions(version, other) ?? 0;\n}\n\nfunction matches(version: string, range: string): boolean {\n const v = parseVersion(version);\n const r = parseRange(range);\n return !!v && !!r && matchesRange(v, r);\n}\n\nfunction isLessThanRange(version: string, range: string): boolean {\n const v = parseVersion(version);\n const r = parseRange(range);\n return !!v && !!r && isLessThanLowerBound(v, r);\n}\n\nfunction satisfyingVersions(versions: string[], range: string): string[] {\n return versions.filter((v) => matches(v, range)).sort(sortVersions);\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return satisfyingVersions(versions, range).pop() ?? null;\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return satisfyingVersions(versions, range).shift() ?? null;\n}\n\nfunction getPinnedValue(newVersion: string): string {\n return newVersion;\n}\n\nfunction replaceConstraint(\n constraint: PaketConstraint,\n v: NugetVersion,\n): PaketConstraint {\n const { operator, version } = constraint;\n switch (operator) {\n case '':\n case '=':\n case '==':\n return { operator, version: v };\n case '>':\n case '>=':\n return constraint;\n case '<=':\n return compare(v, version) > 0 ? { operator, version: v } : constraint;\n case '<':\n return compare(v, version) >= 0 || sameReleaseParts(v, version)\n ? {\n operator,\n version: bumpAtPrecision(v, releaseParts(version).length),\n }\n : constraint;\n case '~>': {\n const cap = twiddle(version);\n return compare(v, cap) >= 0 || sameReleaseParts(v, cap)\n ? {\n operator,\n version: adaptToPrecision(v, releaseParts(version).length),\n }\n : constraint;\n }\n }\n}\n\n/**\n * Rewrite `~> band` optionally followed by a `>=`/`>` floor: the band follows\n * the new version at its old precision, and the floor sticks to the exact new\n * version unless it becomes redundant.\n */\nfunction pessimisticWithFloor(range: PaketRange, v: NugetVersion): PaketRange {\n const [pessimistic] = range.constraints;\n const band = adaptToPrecision(v, releaseParts(pessimistic.version).length);\n const constraints: PaketConstraint[] =\n compare(band, v) === 0\n ? [{ operator: '~>', version: band }]\n : [\n { operator: '~>', version: band },\n { operator: '>=', version: v },\n ];\n return { ...range, constraints };\n}\n\nfunction replaceRange(range: PaketRange, v: NugetVersion): PaketRange {\n const [first, second] = range.constraints;\n if (\n first.operator === '~>' &&\n (second?.operator === '>' || second?.operator === '>=')\n ) {\n return pessimisticWithFloor(range, v);\n }\n\n return {\n ...range,\n constraints: range.constraints.map((c) => replaceConstraint(c, v)),\n };\n}\n\nfunction bumpConstraint(\n constraint: PaketConstraint,\n v: NugetVersion,\n): PaketConstraint {\n const { operator, version } = constraint;\n switch (operator) {\n case '>=':\n return compare(v, version) > 0 ? { operator, version: v } : constraint;\n case '>':\n // the lower bound guard in `getNewValue` ensures `v` is above `version`\n return { operator: '>=', version: v };\n case '~>': {\n const adapted = adaptToPrecision(v, releaseParts(version).length);\n return compare(adapted, version) > 0\n ? { operator, version: adapted }\n : constraint;\n }\n default:\n return replaceConstraint(constraint, v);\n }\n}\n\nfunction bumpRange(range: PaketRange, v: NugetVersion): PaketRange {\n const [first, second] = range.constraints;\n if (\n first.operator === '~>' &&\n second?.operator !== '<' &&\n second?.operator !== '<='\n ) {\n return pessimisticWithFloor(range, v);\n }\n\n return {\n ...range,\n constraints: range.constraints.map((c) => bumpConstraint(c, v)),\n };\n}\n\nfunction widenRange(range: PaketRange, v: NugetVersion): PaketRange {\n const interval = intervalOf(range.constraints);\n const [first] = range.constraints;\n\n if (interval.kind !== 'range' || first.operator !== '~>') {\n return {\n ...range,\n constraints: range.constraints.map((c) => replaceConstraint(c, v)),\n };\n }\n\n const { from, fromInclusive, to, toInclusive } = interval;\n const upperViolated = toInclusive\n ? compare(v, to) > 0\n : compare(v, to) >= 0 || sameReleaseParts(v, to);\n if (!upperViolated) {\n return range;\n }\n\n // The pessimistic operator acts as both bounds, so decompose it into\n // explicit bounds to widen upwards while keeping the lower bound.\n const lower: PaketConstraint = {\n operator: fromInclusive ? '>=' : '>',\n version: from,\n };\n const upper: PaketConstraint = toInclusive\n ? { operator: '<=', version: v }\n : { operator: '<', version: bumpAtPrecision(v, releaseParts(to).length) };\n return { ...range, constraints: [lower, upper] };\n}\n\nfunction getNewValue({\n currentValue,\n rangeStrategy,\n newVersion,\n}: NewValueConfig): string | null {\n const v = parseVersion(newVersion);\n if (!v) {\n return null;\n }\n\n if (isVersion(currentValue)) {\n return newVersion;\n }\n\n const range = parseRange(currentValue);\n if (!range) {\n return null;\n }\n\n if (rangeStrategy === 'pin') {\n return `${range.strategy ?? ''}${newVersion}`;\n }\n\n if (isLessThanLowerBound(v, range)) {\n return currentValue;\n }\n\n let result: PaketRange;\n if (rangeStrategy === 'bump') {\n result = bumpRange(range, v);\n } else if (matchesRange(v, range)) {\n return currentValue;\n } else if (rangeStrategy === 'widen') {\n result = widenRange(range, v);\n } else {\n result = replaceRange(range, v);\n }\n\n const newValue = rangeToString(ensurePrereleaseMatches(result, v));\n return newValue === rangeToString(range) ? currentValue : newValue;\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n getNewValue,\n getPinnedValue,\n getSatisfyingVersion,\n minSatisfyingVersion,\n isCompatible,\n isGreaterThan,\n isLessThanRange,\n isSingleVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n sortVersions,\n};\n\nexport default api;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["matchesRange"],"sources":["../../../../lib/modules/versioning/paket/index.ts"],"sourcesContent":["import type { RangeStrategy } from '../../../types/versioning.ts';\nimport { parseVersion } from '../nuget/parser.ts';\nimport type { NugetVersion } from '../nuget/types.ts';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\nimport {\n adaptToPrecision,\n bumpAtPrecision,\n ensurePrereleaseMatches,\n intervalOf,\n isLessThanLowerBound,\n matches as matchesRange,\n parseRange,\n rangeToString,\n releaseParts,\n twiddle,\n} from './range.ts';\nimport type { PaketConstraint, PaketRange } from './types.ts';\nimport { compare, sameReleaseParts } from './version.ts';\n\nexport const id = 'paket';\nexport const displayName = 'Paket';\nexport const urls = [\n '[Paket version constraints](https://fsprojects.github.io/Paket/nuget-dependencies.html#Version-constraints)',\n '[NuGet package versioning](https://learn.microsoft.com/nuget/concepts/package-versioning)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies: RangeStrategy[] = [\n 'bump',\n 'widen',\n 'replace',\n 'update-lockfile',\n];\n\nfunction isVersion(input: string | undefined | null): boolean {\n return !!input && parseVersion(input) !== null;\n}\n\nfunction isValid(input: string): boolean {\n return parseRange(input) !== null;\n}\n\nfunction isSingleVersionRange(range: PaketRange): boolean {\n if (range.constraints.length !== 1 || range.prereleaseTags.length > 0) {\n return false;\n }\n\n const { operator } = range.constraints[0];\n return operator === '' || operator === '=' || operator === '==';\n}\n\nfunction isSingleVersion(input: string): boolean {\n const range = parseRange(input);\n return !!range && isSingleVersionRange(range);\n}\n\nfunction isStable(input: string): boolean {\n const version = parseVersion(input);\n if (version) {\n return !version.prerelease;\n }\n\n const range = parseRange(input);\n return (\n !!range &&\n isSingleVersionRange(range) &&\n !range.constraints[0].version.prerelease\n );\n}\n\nfunction isCompatible(version: string): boolean {\n return isVersion(version);\n}\n\nfunction getMajor(version: string): number | null {\n return parseVersion(version)?.major ?? null;\n}\n\nfunction getMinor(version: string): number | null {\n return parseVersion(version)?.minor ?? null;\n}\n\nfunction getPatch(version: string): number | null {\n return parseVersion(version)?.patch ?? null;\n}\n\nfunction compareVersions(version: string, other: string): number | null {\n const x = parseVersion(version);\n const y = parseVersion(other);\n return x && y ? compare(x, y) : null;\n}\n\nfunction equals(version: string, other: string): boolean {\n return compareVersions(version, other) === 0;\n}\n\nfunction isGreaterThan(version: string, other: string): boolean {\n const cmp = compareVersions(version, other);\n return cmp !== null && cmp > 0;\n}\n\nfunction sortVersions(version: string, other: string): number {\n return compareVersions(version, other) ?? 0;\n}\n\nfunction matches(version: string, range: string): boolean {\n const v = parseVersion(version);\n const r = parseRange(range);\n return !!v && !!r && matchesRange(v, r);\n}\n\nfunction isLessThanRange(version: string, range: string): boolean {\n const v = parseVersion(version);\n const r = parseRange(range);\n return !!v && !!r && isLessThanLowerBound(v, r);\n}\n\nfunction satisfyingVersions(versions: string[], range: string): string[] {\n return versions.filter((v) => matches(v, range)).sort(sortVersions);\n}\n\nfunction getSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return satisfyingVersions(versions, range).pop() ?? null;\n}\n\nfunction minSatisfyingVersion(\n versions: string[],\n range: string,\n): string | null {\n return satisfyingVersions(versions, range).shift() ?? null;\n}\n\nfunction getPinnedValue(newVersion: string): string {\n return newVersion;\n}\n\nfunction replaceConstraint(\n constraint: PaketConstraint,\n v: NugetVersion,\n): PaketConstraint {\n const { operator, version } = constraint;\n switch (operator) {\n case '':\n case '=':\n case '==':\n return { operator, version: v };\n case '>':\n case '>=':\n return constraint;\n case '<=':\n return compare(v, version) > 0 ? { operator, version: v } : constraint;\n case '<':\n return compare(v, version) >= 0 || sameReleaseParts(v, version)\n ? {\n operator,\n version: bumpAtPrecision(v, releaseParts(version).length),\n }\n : constraint;\n case '~>': {\n const cap = twiddle(version);\n return compare(v, cap) >= 0 || sameReleaseParts(v, cap)\n ? {\n operator,\n version: adaptToPrecision(v, releaseParts(version).length),\n }\n : constraint;\n }\n }\n}\n\n/**\n * Rewrite `~> band` optionally followed by a `>=`/`>` floor: the band follows\n * the new version at its old precision, and the floor sticks to the exact new\n * version unless it becomes redundant.\n */\nfunction pessimisticWithFloor(range: PaketRange, v: NugetVersion): PaketRange {\n const [pessimistic] = range.constraints;\n const band = adaptToPrecision(v, releaseParts(pessimistic.version).length);\n const constraints: PaketConstraint[] =\n compare(band, v) === 0\n ? [{ operator: '~>', version: band }]\n : [\n { operator: '~>', version: band },\n { operator: '>=', version: v },\n ];\n return { ...range, constraints };\n}\n\nfunction replaceRange(range: PaketRange, v: NugetVersion): PaketRange {\n const [first, second] = range.constraints;\n if (\n first.operator === '~>' &&\n (second?.operator === '>' || second?.operator === '>=')\n ) {\n return pessimisticWithFloor(range, v);\n }\n\n return {\n ...range,\n constraints: range.constraints.map((c) => replaceConstraint(c, v)),\n };\n}\n\nfunction bumpConstraint(\n constraint: PaketConstraint,\n v: NugetVersion,\n): PaketConstraint {\n const { operator, version } = constraint;\n switch (operator) {\n case '>=':\n return compare(v, version) > 0 ? { operator, version: v } : constraint;\n case '>':\n // the lower bound guard in `getNewValue` ensures `v` is above `version`\n return { operator: '>=', version: v };\n case '~>': {\n const adapted = adaptToPrecision(v, releaseParts(version).length);\n return compare(adapted, version) > 0\n ? { operator, version: adapted }\n : constraint;\n }\n default:\n return replaceConstraint(constraint, v);\n }\n}\n\nfunction bumpRange(range: PaketRange, v: NugetVersion): PaketRange {\n const [first, second] = range.constraints;\n if (\n first.operator === '~>' &&\n second?.operator !== '<' &&\n second?.operator !== '<='\n ) {\n return pessimisticWithFloor(range, v);\n }\n\n return {\n ...range,\n constraints: range.constraints.map((c) => bumpConstraint(c, v)),\n };\n}\n\nfunction widenRange(range: PaketRange, v: NugetVersion): PaketRange {\n const interval = intervalOf(range.constraints);\n const [first] = range.constraints;\n\n if (interval.kind !== 'range' || first.operator !== '~>') {\n return {\n ...range,\n constraints: range.constraints.map((c) => replaceConstraint(c, v)),\n };\n }\n\n const { from, fromInclusive, to, toInclusive } = interval;\n const upperViolated = toInclusive\n ? compare(v, to) > 0\n : compare(v, to) >= 0 || sameReleaseParts(v, to);\n if (!upperViolated) {\n return range;\n }\n\n // The pessimistic operator acts as both bounds, so decompose it into\n // explicit bounds to widen upwards while keeping the lower bound.\n const lower: PaketConstraint = {\n operator: fromInclusive ? '>=' : '>',\n version: from,\n };\n const upper: PaketConstraint = toInclusive\n ? { operator: '<=', version: v }\n : { operator: '<', version: bumpAtPrecision(v, releaseParts(to).length) };\n return { ...range, constraints: [lower, upper] };\n}\n\nfunction getNewValue({\n currentValue,\n rangeStrategy,\n newVersion,\n}: NewValueConfig): string | null {\n const v = parseVersion(newVersion);\n if (!v) {\n return null;\n }\n\n if (isVersion(currentValue)) {\n return newVersion;\n }\n\n const range = parseRange(currentValue);\n if (!range) {\n return null;\n }\n\n if (rangeStrategy === 'pin') {\n return `${range.strategy ?? ''}${newVersion}`;\n }\n\n if (isLessThanLowerBound(v, range)) {\n return currentValue;\n }\n\n let result: PaketRange;\n if (rangeStrategy === 'bump') {\n result = bumpRange(range, v);\n } else if (matchesRange(v, range)) {\n return currentValue;\n } else if (rangeStrategy === 'widen') {\n result = widenRange(range, v);\n } else {\n result = replaceRange(range, v);\n }\n\n const newValue = rangeToString(ensurePrereleaseMatches(result, v));\n return newValue === rangeToString(range) ? currentValue : newValue;\n}\n\nexport const api: VersioningApi = {\n equals,\n getMajor,\n getMinor,\n getPatch,\n getNewValue,\n getPinnedValue,\n getSatisfyingVersion,\n minSatisfyingVersion,\n isCompatible,\n isGreaterThan,\n isLessThanRange,\n isSingleVersion,\n isStable,\n isValid,\n isVersion,\n matches,\n sortVersions,\n};\n\nexport default api;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"range.js","names":[],"sources":["../../../../lib/modules/versioning/paket/range.ts"],"sourcesContent":["import { isNotNullOrUndefined } from '../../../util/array.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { parseVersion } from '../nuget/parser.ts';\nimport type { NugetVersion } from '../nuget/types.ts';\nimport { versionToString } from '../nuget/version.ts';\nimport { compare, sameReleaseParts } from './version.ts';\n\nexport type PaketOperator = '' | '=' | '==' | '>' | '>=' | '<' | '<=' | '~>';\n\nexport interface PaketConstraint {\n operator: PaketOperator;\n version: NugetVersion;\n}\n\nexport interface PaketRange {\n strategy: '!' | '@' | null;\n constraints: PaketConstraint[];\n prereleaseTags: string[];\n}\n\nconst constraintOperators: readonly string[] = [\n '=',\n '==',\n '>',\n '>=',\n '<',\n '<=',\n '~>',\n];\n\nconst prereleaseTagRegex = regEx(/^[a-zA-Z][a-zA-Z0-9-]*$/);\n\n/**\n * Paket only accepts these operator combinations for two-part constraints.\n */\nfunction isValidPair(first: PaketOperator, second: PaketOperator): boolean {\n if (first === '~>') {\n return (\n second === '>' || second === '>=' || second === '<' || second === '<='\n );\n }\n\n if (first === '>' || first === '>=') {\n return second === '<' || second === '<=';\n }\n\n return false;\n}\n\nexport function parseRange(input: string): PaketRange | null {\n if (!input?.trim()) {\n return null;\n }\n\n let text = input.trim();\n let strategy: PaketRange['strategy'] = null;\n if (text.startsWith('!') || text.startsWith('@')) {\n strategy = text[0] as '!' | '@';\n text = text.slice(1).trim();\n }\n\n const tokens = text.split(regEx(/\\s+/));\n const constraints: PaketConstraint[] = [];\n let idx = 0;\n\n while (\n idx < tokens.length &&\n constraints.length < 2 &&\n constraintOperators.includes(tokens[idx])\n ) {\n const operator = tokens[idx] as PaketOperator;\n const versionToken = tokens[idx + 1];\n const version = versionToken ? parseVersion(versionToken) : null;\n if (!version) {\n return null;\n }\n constraints.push({ operator, version });\n idx += 2;\n }\n\n if (constraints.length === 0) {\n const version = parseVersion(tokens[0]);\n if (!version) {\n return null;\n }\n constraints.push({ operator: '', version });\n idx = 1;\n }\n\n if (\n constraints.length === 2 &&\n !isValidPair(constraints[0].operator, constraints[1].operator)\n ) {\n return null;\n }\n\n const prereleaseTags: string[] = [];\n for (const token of tokens.slice(idx)) {\n if (!prereleaseTagRegex.test(token)) {\n return null;\n }\n if (!prereleaseTags.includes(token)) {\n prereleaseTags.push(token);\n }\n }\n\n return { strategy, constraints, prereleaseTags };\n}\n\nexport function rangeToString(range: PaketRange): string {\n const parts: string[] = [];\n for (const { operator, version } of range.constraints) {\n const versionStr = versionToString(version);\n parts.push(operator === '' ? versionStr : `${operator} ${versionStr}`);\n }\n parts.push(...range.prereleaseTags);\n return `${range.strategy ?? ''}${parts.join(' ')}`;\n}\n\nexport function releaseParts(version: NugetVersion): number[] {\n const { major, minor, patch, revision } = version;\n return [major, minor, patch, revision].filter(isNotNullOrUndefined);\n}\n\nfunction versionFromParts(parts: number[]): NugetVersion {\n const [major, minor, patch, revision] = parts;\n const result: NugetVersion = { type: 'nuget-version', major };\n if (minor !== undefined) {\n result.minor = minor;\n }\n if (patch !== undefined) {\n result.patch = patch;\n }\n if (revision !== undefined) {\n result.revision = revision;\n }\n return result;\n}\n\nexport function adaptToPrecision(\n version: NugetVersion,\n precision: number,\n): NugetVersion {\n const parts = releaseParts(version).slice(0, precision);\n while (parts.length < precision) {\n parts.push(0);\n }\n return versionFromParts(parts);\n}\n\nexport function bumpAtPrecision(\n version: NugetVersion,\n precision: number,\n): NugetVersion {\n const parts = releaseParts(adaptToPrecision(version, precision));\n parts[precision - 1] += 1;\n return versionFromParts(parts);\n}\n\n/**\n * Upper bound of the pessimistic operator: chop off the last release part and\n * increment the remaining last number, so `~> 1.2.3` allows `< 1.3` and\n * `~> 1.2` allows `< 2`.\n */\nexport function twiddle(version: NugetVersion): NugetVersion {\n const precision = Math.max(releaseParts(version).length - 1, 1);\n return bumpAtPrecision(version, precision);\n}\n\nexport type PaketInterval =\n | {\n kind:\n | 'specific'\n | 'override'\n | 'minimum'\n | 'greater-than'\n | 'maximum'\n | 'less-than';\n version: NugetVersion;\n }\n | {\n kind: 'range';\n from: NugetVersion;\n fromInclusive: boolean;\n to: NugetVersion;\n toInclusive: boolean;\n };\n\nfunction intervalOfPair(\n first: PaketConstraint,\n second: PaketConstraint,\n): PaketInterval {\n if (first.operator === '~>') {\n const cap = twiddle(first.version);\n\n if (second.operator === '>' || second.operator === '>=') {\n return {\n kind: 'range',\n from: second.version,\n fromInclusive: second.operator === '>=',\n to: cap,\n toInclusive: false,\n };\n }\n\n const to = compare(second.version, cap) < 0 ? second.version : cap;\n return {\n kind: 'range',\n from: first.version,\n fromInclusive: true,\n to,\n toInclusive: second.operator === '<=',\n };\n }\n\n return {\n kind: 'range',\n from: first.version,\n fromInclusive: first.operator === '>=',\n to: second.version,\n toInclusive: second.operator === '<=',\n };\n}\n\nconst singleOperatorKind = {\n '': 'specific',\n '=': 'specific',\n '==': 'override',\n '>=': 'minimum',\n '>': 'greater-than',\n '<=': 'maximum',\n '<': 'less-than',\n} as const;\n\nexport function intervalOf(constraints: PaketConstraint[]): PaketInterval {\n if (constraints.length === 2) {\n return intervalOfPair(constraints[0], constraints[1]);\n }\n\n const [{ operator, version }] = constraints;\n if (operator === '~>') {\n return {\n kind: 'range',\n from: version,\n fromInclusive: true,\n to: twiddle(version),\n toInclusive: false,\n };\n }\n return { kind: singleOperatorKind[operator], version };\n}\n\nconst numericSegmentRegex = regEx(/^\\d+$/);\nconst channelPrefixRegex = regEx(/^[a-zA-Z]+(?:-[a-zA-Z]+)*/);\n\nfunction channelFromSegments(segments: string[]): string {\n const [first, second] = segments;\n if (first && !numericSegmentRegex.test(first)) {\n return first;\n }\n if (second && !numericSegmentRegex.test(second)) {\n return second;\n }\n return '';\n}\n\n/**\n * The channel name of a prerelease suffix, e.g. `alpha` for `alpha001` or\n * `beta` for `beta.2`.\n */\nexport function prereleaseChannel(prerelease: string): string {\n const segments = prerelease.split('.');\n if (segments.length > 1) {\n return channelFromSegments(segments);\n }\n\n const prefix = channelPrefixRegex.exec(prerelease);\n if (prefix) {\n return prefix[0];\n }\n\n return channelFromSegments(\n prerelease.split('-').filter((segment) => segment !== ''),\n );\n}\n\ntype PrereleaseStatus = 'none' | 'all' | string[];\n\nfunction prereleaseStatusOf(\n range: PaketRange,\n interval: PaketInterval,\n): PrereleaseStatus {\n const { prereleaseTags } = range;\n if (\n prereleaseTags.length === 1 &&\n prereleaseTags[0].toLowerCase() === 'prerelease'\n ) {\n return 'all';\n }\n if (prereleaseTags.length > 0) {\n return prereleaseTags;\n }\n\n // Without explicit tags, prerelease versions used in the constraint itself\n // allow their own channels, e.g. `~> 1.2.3-alpha001` allows `alpha` versions.\n const bounds =\n interval.kind === 'range'\n ? [interval.from, interval.to]\n : [interval.version];\n const channels: string[] = [];\n for (const bound of bounds) {\n if (!bound.prerelease) {\n continue;\n }\n const channel = prereleaseChannel(bound.prerelease);\n if (!channels.includes(channel)) {\n channels.push(channel);\n }\n }\n return channels.length > 0 ? channels : 'none';\n}\n\nfunction isPrereleaseAllowed(\n version: NugetVersion,\n status: PrereleaseStatus,\n): boolean {\n if (status === 'all') {\n return true;\n }\n if (status === 'none') {\n return !version.prerelease;\n }\n if (!version.prerelease) {\n return true;\n }\n return status.includes(prereleaseChannel(version.prerelease));\n}\n\n/**\n * Paket rule: a prerelease of a stable bound version counts as being in range\n * when its channel is allowed, e.g. `1.2.3-alpha1` satisfies `= 1.2.3 alpha`.\n */\nfunction isPrereleaseOfBound(\n version: NugetVersion,\n bound: NugetVersion,\n status: PrereleaseStatus,\n): boolean {\n return (\n status !== 'none' &&\n !bound.prerelease &&\n sameReleaseParts(version, bound) &&\n isPrereleaseAllowed(version, status)\n );\n}\n\nexport function matches(version: NugetVersion, range: PaketRange): boolean {\n const interval = intervalOf(range.constraints);\n const status = prereleaseStatusOf(range, interval);\n\n switch (interval.kind) {\n case 'specific':\n return (\n compare(version, interval.version) === 0 ||\n isPrereleaseOfBound(version, interval.version, status)\n );\n case 'override':\n return compare(version, interval.version) === 0;\n case 'minimum': {\n const cmp = compare(version, interval.version);\n return (\n cmp === 0 ||\n (cmp > 0 && isPrereleaseAllowed(version, status)) ||\n isPrereleaseOfBound(version, interval.version, status)\n );\n }\n case 'greater-than':\n return (\n compare(version, interval.version) > 0 &&\n isPrereleaseAllowed(version, status)\n );\n case 'maximum': {\n const cmp = compare(version, interval.version);\n return cmp === 0 || (cmp < 0 && isPrereleaseAllowed(version, status));\n }\n case 'less-than':\n return (\n compare(version, interval.version) < 0 &&\n isPrereleaseAllowed(version, status) &&\n !isPrereleaseOfBound(version, interval.version, status)\n );\n case 'range': {\n const { from, fromInclusive, to, toInclusive } = interval;\n const lowerCmp = compare(version, from);\n const upperCmp = compare(version, to);\n const inLower = fromInclusive ? lowerCmp >= 0 : lowerCmp > 0;\n const inUpper = toInclusive\n ? upperCmp <= 0\n : upperCmp < 0 && !isPrereleaseOfBound(version, to, status);\n return (\n (inLower && inUpper && isPrereleaseAllowed(version, status)) ||\n isPrereleaseOfBound(version, from, status)\n );\n }\n }\n}\n\nexport function isLessThanLowerBound(\n version: NugetVersion,\n range: PaketRange,\n): boolean {\n const interval = intervalOf(range.constraints);\n switch (interval.kind) {\n case 'specific':\n case 'override':\n case 'minimum':\n return compare(version, interval.version) < 0;\n case 'greater-than':\n return compare(version, interval.version) <= 0;\n case 'maximum':\n case 'less-than':\n return false;\n case 'range':\n return interval.fromInclusive\n ? compare(version, interval.from) < 0\n : compare(version, interval.from) <= 0;\n }\n}\n\n/**\n * A rewritten range admits the new version numerically, but its prerelease\n * channel may still be blocked, so allow the channel with an explicit tag.\n */\nexport function ensurePrereleaseMatches(\n range: PaketRange,\n version: NugetVersion,\n): PaketRange {\n if (!version.prerelease || matches(version, range)) {\n return range;\n }\n\n const channel = prereleaseChannel(version.prerelease);\n if (prereleaseTagRegex.test(channel)) {\n return { ...range, prereleaseTags: [...range.prereleaseTags, channel] };\n }\n return { ...range, prereleaseTags: ['prerelease'] };\n}\n"],"mappings":";;;;;;AAoBA,MAAM,sBAAyC;CAC7C;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,qBAAqB,MAAM,yBAAyB;;;;AAK1D,SAAS,YAAY,OAAsB,QAAgC;CACzE,IAAI,UAAU,MACZ,OACE,WAAW,OAAO,WAAW,QAAQ,WAAW,OAAO,WAAW;CAItE,IAAI,UAAU,OAAO,UAAU,MAC7B,OAAO,WAAW,OAAO,WAAW;CAGtC,OAAO;AACT;AAEA,SAAgB,WAAW,OAAkC;CAC3D,IAAI,CAAC,OAAO,KAAK,GACf,OAAO;CAGT,IAAI,OAAO,MAAM,KAAK;CACtB,IAAI,WAAmC;CACvC,IAAI,KAAK,WAAW,GAAG,KAAK,KAAK,WAAW,GAAG,GAAG;EAChD,WAAW,KAAK;EAChB,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK;CAC5B;CAEA,MAAM,SAAS,KAAK,MAAM,MAAM,KAAK,CAAC;CACtC,MAAM,cAAiC,CAAC;CACxC,IAAI,MAAM;CAEV,OACE,MAAM,OAAO,UACb,YAAY,SAAS,KACrB,oBAAoB,SAAS,OAAO,IAAI,GACxC;EACA,MAAM,WAAW,OAAO;EACxB,MAAM,eAAe,OAAO,MAAM;EAClC,MAAM,UAAU,eAAe,aAAa,YAAY,IAAI;EAC5D,IAAI,CAAC,SACH,OAAO;EAET,YAAY,KAAK;GAAE;GAAU;EAAQ,CAAC;EACtC,OAAO;CACT;CAEA,IAAI,YAAY,WAAW,GAAG;EAC5B,MAAM,UAAU,aAAa,OAAO,EAAE;EACtC,IAAI,CAAC,SACH,OAAO;EAET,YAAY,KAAK;GAAE,UAAU;GAAI;EAAQ,CAAC;EAC1C,MAAM;CACR;CAEA,IACE,YAAY,WAAW,KACvB,CAAC,YAAY,YAAY,EAAE,CAAC,UAAU,YAAY,EAAE,CAAC,QAAQ,GAE7D,OAAO;CAGT,MAAM,iBAA2B,CAAC;CAClC,KAAK,MAAM,SAAS,OAAO,MAAM,GAAG,GAAG;EACrC,IAAI,CAAC,mBAAmB,KAAK,KAAK,GAChC,OAAO;EAET,IAAI,CAAC,eAAe,SAAS,KAAK,GAChC,eAAe,KAAK,KAAK;CAE7B;CAEA,OAAO;EAAE;EAAU;EAAa;CAAe;AACjD;AAEA,SAAgB,cAAc,OAA2B;CACvD,MAAM,QAAkB,CAAC;CACzB,KAAK,MAAM,EAAE,UAAU,aAAa,MAAM,aAAa;EACrD,MAAM,aAAa,gBAAgB,OAAO;EAC1C,MAAM,KAAK,aAAa,KAAK,aAAa,GAAG,SAAS,GAAG,YAAY;CACvE;CACA,MAAM,KAAK,GAAG,MAAM,cAAc;CAClC,OAAO,GAAG,MAAM,YAAY,KAAK,MAAM,KAAK,GAAG;AACjD;AAEA,SAAgB,aAAa,SAAiC;CAC5D,MAAM,EAAE,OAAO,OAAO,OAAO,aAAa;CAC1C,OAAO;EAAC;EAAO;EAAO;EAAO;CAAQ,CAAC,CAAC,OAAO,oBAAoB;AACpE;AAEA,SAAS,iBAAiB,OAA+B;CACvD,MAAM,CAAC,OAAO,OAAO,OAAO,YAAY;CACxC,MAAM,SAAuB;EAAE,MAAM;EAAiB;CAAM;CAC5D,IAAI,UAAU,KAAA,GACZ,OAAO,QAAQ;CAEjB,IAAI,UAAU,KAAA,GACZ,OAAO,QAAQ;CAEjB,IAAI,aAAa,KAAA,GACf,OAAO,WAAW;CAEpB,OAAO;AACT;AAEA,SAAgB,iBACd,SACA,WACc;CACd,MAAM,QAAQ,aAAa,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS;CACtD,OAAO,MAAM,SAAS,WACpB,MAAM,KAAK,CAAC;CAEd,OAAO,iBAAiB,KAAK;AAC/B;AAEA,SAAgB,gBACd,SACA,WACc;CACd,MAAM,QAAQ,aAAa,iBAAiB,SAAS,SAAS,CAAC;CAC/D,MAAM,YAAY,MAAM;CACxB,OAAO,iBAAiB,KAAK;AAC/B;;;;;;AAOA,SAAgB,QAAQ,SAAqC;CAE3D,OAAO,gBAAgB,SADL,KAAK,IAAI,aAAa,OAAO,CAAC,CAAC,SAAS,GAAG,CACrB,CAAC;AAC3C;AAqBA,SAAS,eACP,OACA,QACe;CACf,IAAI,MAAM,aAAa,MAAM;EAC3B,MAAM,MAAM,QAAQ,MAAM,OAAO;EAEjC,IAAI,OAAO,aAAa,OAAO,OAAO,aAAa,MACjD,OAAO;GACL,MAAM;GACN,MAAM,OAAO;GACb,eAAe,OAAO,aAAa;GACnC,IAAI;GACJ,aAAa;EACf;EAGF,MAAM,KAAK,QAAQ,OAAO,SAAS,GAAG,IAAI,IAAI,OAAO,UAAU;EAC/D,OAAO;GACL,MAAM;GACN,MAAM,MAAM;GACZ,eAAe;GACf;GACA,aAAa,OAAO,aAAa;EACnC;CACF;CAEA,OAAO;EACL,MAAM;EACN,MAAM,MAAM;EACZ,eAAe,MAAM,aAAa;EAClC,IAAI,OAAO;EACX,aAAa,OAAO,aAAa;CACnC;AACF;AAEA,MAAM,qBAAqB;CACzB,IAAI;CACJ,KAAK;CACL,MAAM;CACN,MAAM;CACN,KAAK;CACL,MAAM;CACN,KAAK;AACP;AAEA,SAAgB,WAAW,aAA+C;CACxE,IAAI,YAAY,WAAW,GACzB,OAAO,eAAe,YAAY,IAAI,YAAY,EAAE;CAGtD,MAAM,CAAC,EAAE,UAAU,aAAa;CAChC,IAAI,aAAa,MACf,OAAO;EACL,MAAM;EACN,MAAM;EACN,eAAe;EACf,IAAI,QAAQ,OAAO;EACnB,aAAa;CACf;CAEF,OAAO;EAAE,MAAM,mBAAmB;EAAW;CAAQ;AACvD;AAEA,MAAM,sBAAsB,MAAM,OAAO;AACzC,MAAM,qBAAqB,MAAM,2BAA2B;AAE5D,SAAS,oBAAoB,UAA4B;CACvD,MAAM,CAAC,OAAO,UAAU;CACxB,IAAI,SAAS,CAAC,oBAAoB,KAAK,KAAK,GAC1C,OAAO;CAET,IAAI,UAAU,CAAC,oBAAoB,KAAK,MAAM,GAC5C,OAAO;CAET,OAAO;AACT;;;;;AAMA,SAAgB,kBAAkB,YAA4B;CAC5D,MAAM,WAAW,WAAW,MAAM,GAAG;CACrC,IAAI,SAAS,SAAS,GACpB,OAAO,oBAAoB,QAAQ;CAGrC,MAAM,SAAS,mBAAmB,KAAK,UAAU;CACjD,IAAI,QACF,OAAO,OAAO;CAGhB,OAAO,oBACL,WAAW,MAAM,GAAG,CAAC,CAAC,QAAQ,YAAY,YAAY,EAAE,CAC1D;AACF;AAIA,SAAS,mBACP,OACA,UACkB;CAClB,MAAM,EAAE,mBAAmB;CAC3B,IACE,eAAe,WAAW,KAC1B,eAAe,EAAE,CAAC,YAAY,MAAM,cAEpC,OAAO;CAET,IAAI,eAAe,SAAS,GAC1B,OAAO;CAKT,MAAM,SACJ,SAAS,SAAS,UACd,CAAC,SAAS,MAAM,SAAS,EAAE,IAC3B,CAAC,SAAS,OAAO;CACvB,MAAM,WAAqB,CAAC;CAC5B,KAAK,MAAM,SAAS,QAAQ;EAC1B,IAAI,CAAC,MAAM,YACT;EAEF,MAAM,UAAU,kBAAkB,MAAM,UAAU;EAClD,IAAI,CAAC,SAAS,SAAS,OAAO,GAC5B,SAAS,KAAK,OAAO;CAEzB;CACA,OAAO,SAAS,SAAS,IAAI,WAAW;AAC1C;AAEA,SAAS,oBACP,SACA,QACS;CACT,IAAI,WAAW,OACb,OAAO;CAET,IAAI,WAAW,QACb,OAAO,CAAC,QAAQ;CAElB,IAAI,CAAC,QAAQ,YACX,OAAO;CAET,OAAO,OAAO,SAAS,kBAAkB,QAAQ,UAAU,CAAC;AAC9D;;;;;AAMA,SAAS,oBACP,SACA,OACA,QACS;CACT,OACE,WAAW,UACX,CAAC,MAAM,cACP,iBAAiB,SAAS,KAAK,KAC/B,oBAAoB,SAAS,MAAM;AAEvC;AAEA,SAAgB,QAAQ,SAAuB,OAA4B;CACzE,MAAM,WAAW,WAAW,MAAM,WAAW;CAC7C,MAAM,SAAS,mBAAmB,OAAO,QAAQ;CAEjD,QAAQ,SAAS,MAAjB;EACE,KAAK,YACH,OACE,QAAQ,SAAS,SAAS,OAAO,MAAM,KACvC,oBAAoB,SAAS,SAAS,SAAS,MAAM;EAEzD,KAAK,YACH,OAAO,QAAQ,SAAS,SAAS,OAAO,MAAM;EAChD,KAAK,WAAW;GACd,MAAM,MAAM,QAAQ,SAAS,SAAS,OAAO;GAC7C,OACE,QAAQ,KACP,MAAM,KAAK,oBAAoB,SAAS,MAAM,KAC/C,oBAAoB,SAAS,SAAS,SAAS,MAAM;EAEzD;EACA,KAAK,gBACH,OACE,QAAQ,SAAS,SAAS,OAAO,IAAI,KACrC,oBAAoB,SAAS,MAAM;EAEvC,KAAK,WAAW;GACd,MAAM,MAAM,QAAQ,SAAS,SAAS,OAAO;GAC7C,OAAO,QAAQ,KAAM,MAAM,KAAK,oBAAoB,SAAS,MAAM;EACrE;EACA,KAAK,aACH,OACE,QAAQ,SAAS,SAAS,OAAO,IAAI,KACrC,oBAAoB,SAAS,MAAM,KACnC,CAAC,oBAAoB,SAAS,SAAS,SAAS,MAAM;EAE1D,KAAK,SAAS;GACZ,MAAM,EAAE,MAAM,eAAe,IAAI,gBAAgB;GACjD,MAAM,WAAW,QAAQ,SAAS,IAAI;GACtC,MAAM,WAAW,QAAQ,SAAS,EAAE;GACpC,MAAM,UAAU,gBAAgB,YAAY,IAAI,WAAW;GAC3D,MAAM,UAAU,cACZ,YAAY,IACZ,WAAW,KAAK,CAAC,oBAAoB,SAAS,IAAI,MAAM;GAC5D,OACG,WAAW,WAAW,oBAAoB,SAAS,MAAM,KAC1D,oBAAoB,SAAS,MAAM,MAAM;EAE7C;CACF;AACF;AAEA,SAAgB,qBACd,SACA,OACS;CACT,MAAM,WAAW,WAAW,MAAM,WAAW;CAC7C,QAAQ,SAAS,MAAjB;EACE,KAAK;EACL,KAAK;EACL,KAAK,WACH,OAAO,QAAQ,SAAS,SAAS,OAAO,IAAI;EAC9C,KAAK,gBACH,OAAO,QAAQ,SAAS,SAAS,OAAO,KAAK;EAC/C,KAAK;EACL,KAAK,aACH,OAAO;EACT,KAAK,SACH,OAAO,SAAS,gBACZ,QAAQ,SAAS,SAAS,IAAI,IAAI,IAClC,QAAQ,SAAS,SAAS,IAAI,KAAK;CAC3C;AACF;;;;;AAMA,SAAgB,wBACd,OACA,SACY;CACZ,IAAI,CAAC,QAAQ,cAAc,QAAQ,SAAS,KAAK,GAC/C,OAAO;CAGT,MAAM,UAAU,kBAAkB,QAAQ,UAAU;CACpD,IAAI,mBAAmB,KAAK,OAAO,GACjC,OAAO;EAAE,GAAG;EAAO,gBAAgB,CAAC,GAAG,MAAM,gBAAgB,OAAO;CAAE;CAExE,OAAO;EAAE,GAAG;EAAO,gBAAgB,CAAC,YAAY;CAAE;AACpD"}
1
+ {"version":3,"file":"range.js","names":[],"sources":["../../../../lib/modules/versioning/paket/range.ts"],"sourcesContent":["import { isNotNullOrUndefined } from '../../../util/array.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { parseVersion } from '../nuget/parser.ts';\nimport type { NugetVersion } from '../nuget/types.ts';\nimport { versionToString } from '../nuget/version.ts';\nimport type {\n PaketConstraint,\n PaketInterval,\n PaketOperator,\n PaketRange,\n} from './types.ts';\nimport { compare, sameReleaseParts } from './version.ts';\n\nconst constraintOperators: readonly string[] = [\n '=',\n '==',\n '>',\n '>=',\n '<',\n '<=',\n '~>',\n];\n\nconst prereleaseTagRegex = regEx(/^[a-zA-Z][a-zA-Z0-9-]*$/);\n\n/**\n * Paket only accepts these operator combinations for two-part constraints.\n */\nfunction isValidPair(first: PaketOperator, second: PaketOperator): boolean {\n if (first === '~>') {\n return (\n second === '>' || second === '>=' || second === '<' || second === '<='\n );\n }\n\n if (first === '>' || first === '>=') {\n return second === '<' || second === '<=';\n }\n\n return false;\n}\n\nexport function parseRange(input: string): PaketRange | null {\n if (!input?.trim()) {\n return null;\n }\n\n let text = input.trim();\n let strategy: PaketRange['strategy'] = null;\n if (text.startsWith('!') || text.startsWith('@')) {\n strategy = text[0] as '!' | '@';\n text = text.slice(1).trim();\n }\n\n const tokens = text.split(regEx(/\\s+/));\n const constraints: PaketConstraint[] = [];\n let idx = 0;\n\n while (\n idx < tokens.length &&\n constraints.length < 2 &&\n constraintOperators.includes(tokens[idx])\n ) {\n const operator = tokens[idx] as PaketOperator;\n const versionToken = tokens[idx + 1];\n const version = versionToken ? parseVersion(versionToken) : null;\n if (!version) {\n return null;\n }\n constraints.push({ operator, version });\n idx += 2;\n }\n\n if (constraints.length === 0) {\n const version = parseVersion(tokens[0]);\n if (!version) {\n return null;\n }\n constraints.push({ operator: '', version });\n idx = 1;\n }\n\n if (\n constraints.length === 2 &&\n !isValidPair(constraints[0].operator, constraints[1].operator)\n ) {\n return null;\n }\n\n const prereleaseTags: string[] = [];\n for (const token of tokens.slice(idx)) {\n if (!prereleaseTagRegex.test(token)) {\n return null;\n }\n if (!prereleaseTags.includes(token)) {\n prereleaseTags.push(token);\n }\n }\n\n return { strategy, constraints, prereleaseTags };\n}\n\nexport function rangeToString(range: PaketRange): string {\n const parts: string[] = [];\n for (const { operator, version } of range.constraints) {\n const versionStr = versionToString(version);\n parts.push(operator === '' ? versionStr : `${operator} ${versionStr}`);\n }\n parts.push(...range.prereleaseTags);\n return `${range.strategy ?? ''}${parts.join(' ')}`;\n}\n\nexport function releaseParts(version: NugetVersion): number[] {\n const { major, minor, patch, revision } = version;\n return [major, minor, patch, revision].filter(isNotNullOrUndefined);\n}\n\nfunction versionFromParts(parts: number[]): NugetVersion {\n const [major, minor, patch, revision] = parts;\n const result: NugetVersion = { type: 'nuget-version', major };\n if (minor !== undefined) {\n result.minor = minor;\n }\n if (patch !== undefined) {\n result.patch = patch;\n }\n if (revision !== undefined) {\n result.revision = revision;\n }\n return result;\n}\n\nexport function adaptToPrecision(\n version: NugetVersion,\n precision: number,\n): NugetVersion {\n const parts = releaseParts(version).slice(0, precision);\n while (parts.length < precision) {\n parts.push(0);\n }\n return versionFromParts(parts);\n}\n\nexport function bumpAtPrecision(\n version: NugetVersion,\n precision: number,\n): NugetVersion {\n const parts = releaseParts(adaptToPrecision(version, precision));\n parts[precision - 1] += 1;\n return versionFromParts(parts);\n}\n\n/**\n * Upper bound of the pessimistic operator: chop off the last release part and\n * increment the remaining last number, so `~> 1.2.3` allows `< 1.3` and\n * `~> 1.2` allows `< 2`.\n */\nexport function twiddle(version: NugetVersion): NugetVersion {\n const precision = Math.max(releaseParts(version).length - 1, 1);\n return bumpAtPrecision(version, precision);\n}\n\nfunction intervalOfPair(\n first: PaketConstraint,\n second: PaketConstraint,\n): PaketInterval {\n if (first.operator === '~>') {\n const cap = twiddle(first.version);\n\n if (second.operator === '>' || second.operator === '>=') {\n return {\n kind: 'range',\n from: second.version,\n fromInclusive: second.operator === '>=',\n to: cap,\n toInclusive: false,\n };\n }\n\n const to = compare(second.version, cap) < 0 ? second.version : cap;\n return {\n kind: 'range',\n from: first.version,\n fromInclusive: true,\n to,\n toInclusive: second.operator === '<=',\n };\n }\n\n return {\n kind: 'range',\n from: first.version,\n fromInclusive: first.operator === '>=',\n to: second.version,\n toInclusive: second.operator === '<=',\n };\n}\n\nconst singleOperatorKind = {\n '': 'specific',\n '=': 'specific',\n '==': 'override',\n '>=': 'minimum',\n '>': 'greater-than',\n '<=': 'maximum',\n '<': 'less-than',\n} as const;\n\nexport function intervalOf(constraints: PaketConstraint[]): PaketInterval {\n if (constraints.length === 2) {\n return intervalOfPair(constraints[0], constraints[1]);\n }\n\n const [{ operator, version }] = constraints;\n if (operator === '~>') {\n return {\n kind: 'range',\n from: version,\n fromInclusive: true,\n to: twiddle(version),\n toInclusive: false,\n };\n }\n return { kind: singleOperatorKind[operator], version };\n}\n\nconst numericSegmentRegex = regEx(/^\\d+$/);\nconst channelPrefixRegex = regEx(/^[a-zA-Z]+(?:-[a-zA-Z]+)*/);\n\nfunction channelFromSegments(segments: string[]): string {\n const [first, second] = segments;\n if (first && !numericSegmentRegex.test(first)) {\n return first;\n }\n if (second && !numericSegmentRegex.test(second)) {\n return second;\n }\n return '';\n}\n\n/**\n * The channel name of a prerelease suffix, e.g. `alpha` for `alpha001` or\n * `beta` for `beta.2`.\n */\nexport function prereleaseChannel(prerelease: string): string {\n const segments = prerelease.split('.');\n if (segments.length > 1) {\n return channelFromSegments(segments);\n }\n\n const prefix = channelPrefixRegex.exec(prerelease);\n if (prefix) {\n return prefix[0];\n }\n\n return channelFromSegments(\n prerelease.split('-').filter((segment) => segment !== ''),\n );\n}\n\ntype PrereleaseStatus = 'none' | 'all' | string[];\n\nfunction prereleaseStatusOf(\n range: PaketRange,\n interval: PaketInterval,\n): PrereleaseStatus {\n const { prereleaseTags } = range;\n if (\n prereleaseTags.length === 1 &&\n prereleaseTags[0].toLowerCase() === 'prerelease'\n ) {\n return 'all';\n }\n if (prereleaseTags.length > 0) {\n return prereleaseTags;\n }\n\n // Without explicit tags, prerelease versions used in the constraint itself\n // allow their own channels, e.g. `~> 1.2.3-alpha001` allows `alpha` versions.\n const bounds =\n interval.kind === 'range'\n ? [interval.from, interval.to]\n : [interval.version];\n const channels: string[] = [];\n for (const bound of bounds) {\n if (!bound.prerelease) {\n continue;\n }\n const channel = prereleaseChannel(bound.prerelease);\n if (!channels.includes(channel)) {\n channels.push(channel);\n }\n }\n return channels.length > 0 ? channels : 'none';\n}\n\nfunction isPrereleaseAllowed(\n version: NugetVersion,\n status: PrereleaseStatus,\n): boolean {\n if (status === 'all') {\n return true;\n }\n if (status === 'none') {\n return !version.prerelease;\n }\n if (!version.prerelease) {\n return true;\n }\n return status.includes(prereleaseChannel(version.prerelease));\n}\n\n/**\n * Paket rule: a prerelease of a stable bound version counts as being in range\n * when its channel is allowed, e.g. `1.2.3-alpha1` satisfies `= 1.2.3 alpha`.\n */\nfunction isPrereleaseOfBound(\n version: NugetVersion,\n bound: NugetVersion,\n status: PrereleaseStatus,\n): boolean {\n return (\n status !== 'none' &&\n !bound.prerelease &&\n sameReleaseParts(version, bound) &&\n isPrereleaseAllowed(version, status)\n );\n}\n\nexport function matches(version: NugetVersion, range: PaketRange): boolean {\n const interval = intervalOf(range.constraints);\n const status = prereleaseStatusOf(range, interval);\n\n switch (interval.kind) {\n case 'specific':\n return (\n compare(version, interval.version) === 0 ||\n isPrereleaseOfBound(version, interval.version, status)\n );\n case 'override':\n return compare(version, interval.version) === 0;\n case 'minimum': {\n const cmp = compare(version, interval.version);\n return (\n cmp === 0 ||\n (cmp > 0 && isPrereleaseAllowed(version, status)) ||\n isPrereleaseOfBound(version, interval.version, status)\n );\n }\n case 'greater-than':\n return (\n compare(version, interval.version) > 0 &&\n isPrereleaseAllowed(version, status)\n );\n case 'maximum': {\n const cmp = compare(version, interval.version);\n return cmp === 0 || (cmp < 0 && isPrereleaseAllowed(version, status));\n }\n case 'less-than':\n return (\n compare(version, interval.version) < 0 &&\n isPrereleaseAllowed(version, status) &&\n !isPrereleaseOfBound(version, interval.version, status)\n );\n case 'range': {\n const { from, fromInclusive, to, toInclusive } = interval;\n const lowerCmp = compare(version, from);\n const upperCmp = compare(version, to);\n const inLower = fromInclusive ? lowerCmp >= 0 : lowerCmp > 0;\n const inUpper = toInclusive\n ? upperCmp <= 0\n : upperCmp < 0 && !isPrereleaseOfBound(version, to, status);\n return (\n (inLower && inUpper && isPrereleaseAllowed(version, status)) ||\n isPrereleaseOfBound(version, from, status)\n );\n }\n }\n}\n\nexport function isLessThanLowerBound(\n version: NugetVersion,\n range: PaketRange,\n): boolean {\n const interval = intervalOf(range.constraints);\n switch (interval.kind) {\n case 'specific':\n case 'override':\n case 'minimum':\n return compare(version, interval.version) < 0;\n case 'greater-than':\n return compare(version, interval.version) <= 0;\n case 'maximum':\n case 'less-than':\n return false;\n case 'range':\n return interval.fromInclusive\n ? compare(version, interval.from) < 0\n : compare(version, interval.from) <= 0;\n }\n}\n\n/**\n * A rewritten range admits the new version numerically, but its prerelease\n * channel may still be blocked, so allow the channel with an explicit tag.\n */\nexport function ensurePrereleaseMatches(\n range: PaketRange,\n version: NugetVersion,\n): PaketRange {\n if (!version.prerelease || matches(version, range)) {\n return range;\n }\n\n const channel = prereleaseChannel(version.prerelease);\n if (prereleaseTagRegex.test(channel)) {\n return { ...range, prereleaseTags: [...range.prereleaseTags, channel] };\n }\n return { ...range, prereleaseTags: ['prerelease'] };\n}\n"],"mappings":"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"}
@@ -1 +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(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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/perl/index.ts"],"sourcesContent":["import { regEx } from '../../../util/regex.ts';\nimport { GenericVersioningApi } from '../generic.ts';\nimport type { GenericVersion, 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":";;;AAIA,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/redhat/index.ts"],"sourcesContent":["import { isUndefined } from '@sindresorhus/is';\nimport { 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 = 'redhat';\nexport const displayName = 'Red Hat';\nexport const urls = [];\nexport const supportsRanges = false;\n\nconst pattern = regEx(\n /^v?(?<major>\\d+)(?:\\.(?<minor>\\d+))?(?:\\.(?<patch>\\d+))?(\\.GA)?(?:-(?<releaseMajor>\\d+)(?:\\.(?<releaseMinor>\\d+))?)?$/,\n);\n\nclass RedhatVersioningApi extends GenericVersioningApi {\n protected _parse(version: string): GenericVersion | null {\n const matches = pattern.exec(version)?.groups;\n if (!matches) {\n return null;\n }\n\n const { major, minor, patch, releaseMajor, releaseMinor } = matches;\n const release = [\n Number.parseInt(major, 10),\n isUndefined(minor) ? 0 : Number.parseInt(minor, 10),\n isUndefined(patch) ? 0 : Number.parseInt(patch, 10),\n isUndefined(releaseMajor) ? 0 : Number.parseInt(releaseMajor, 10),\n isUndefined(releaseMinor) ? 0 : Number.parseInt(releaseMinor, 10),\n ];\n\n return { release, prerelease: '' };\n }\n}\n\nexport const api: VersioningApi = new RedhatVersioningApi();\n\nexport default api;\n"],"mappings":";;;;AAMA,MAAa,KAAK;AAKlB,MAAM,UAAU,MACd,uHACF;AAEA,IAAM,sBAAN,cAAkC,qBAAqB;CACrD,OAAiB,SAAwC;EACvD,MAAM,UAAU,QAAQ,KAAK,OAAO,CAAC,EAAE;EACvC,IAAI,CAAC,SACH,OAAO;EAGT,MAAM,EAAE,OAAO,OAAO,OAAO,cAAc,iBAAiB;EAS5D,OAAO;GAAE,SAAA;IAPP,OAAO,SAAS,OAAO,EAAE;IACzB,YAAY,KAAK,IAAI,IAAI,OAAO,SAAS,OAAO,EAAE;IAClD,YAAY,KAAK,IAAI,IAAI,OAAO,SAAS,OAAO,EAAE;IAClD,YAAY,YAAY,IAAI,IAAI,OAAO,SAAS,cAAc,EAAE;IAChE,YAAY,YAAY,IAAI,IAAI,OAAO,SAAS,cAAc,EAAE;GAGnD;GAAG,YAAY;EAAG;CACnC;AACF;AAEA,MAAa,MAAqB,IAAI,oBAAoB"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/redhat/index.ts"],"sourcesContent":["import { isUndefined } from '@sindresorhus/is';\nimport { regEx } from '../../../util/regex.ts';\nimport { GenericVersioningApi } from '../generic.ts';\nimport type { GenericVersion, VersioningApi } from '../types.ts';\n\nexport const id = 'redhat';\nexport const displayName = 'Red Hat';\nexport const urls = [];\nexport const supportsRanges = false;\n\nconst pattern = regEx(\n /^v?(?<major>\\d+)(?:\\.(?<minor>\\d+))?(?:\\.(?<patch>\\d+))?(\\.GA)?(?:-(?<releaseMajor>\\d+)(?:\\.(?<releaseMinor>\\d+))?)?$/,\n);\n\nclass RedhatVersioningApi extends GenericVersioningApi {\n protected _parse(version: string): GenericVersion | null {\n const matches = pattern.exec(version)?.groups;\n if (!matches) {\n return null;\n }\n\n const { major, minor, patch, releaseMajor, releaseMinor } = matches;\n const release = [\n Number.parseInt(major, 10),\n isUndefined(minor) ? 0 : Number.parseInt(minor, 10),\n isUndefined(patch) ? 0 : Number.parseInt(patch, 10),\n isUndefined(releaseMajor) ? 0 : Number.parseInt(releaseMajor, 10),\n isUndefined(releaseMinor) ? 0 : Number.parseInt(releaseMinor, 10),\n ];\n\n return { release, prerelease: '' };\n }\n}\n\nexport const api: VersioningApi = new RedhatVersioningApi();\n\nexport default api;\n"],"mappings":";;;;AAKA,MAAa,KAAK;AAKlB,MAAM,UAAU,MACd,uHACF;AAEA,IAAM,sBAAN,cAAkC,qBAAqB;CACrD,OAAiB,SAAwC;EACvD,MAAM,UAAU,QAAQ,KAAK,OAAO,CAAC,EAAE;EACvC,IAAI,CAAC,SACH,OAAO;EAGT,MAAM,EAAE,OAAO,OAAO,OAAO,cAAc,iBAAiB;EAS5D,OAAO;GAAE,SAAA;IAPP,OAAO,SAAS,OAAO,EAAE;IACzB,YAAY,KAAK,IAAI,IAAI,OAAO,SAAS,OAAO,EAAE;IAClD,YAAY,KAAK,IAAI,IAAI,OAAO,SAAS,OAAO,EAAE;IAClD,YAAY,YAAY,IAAI,IAAI,OAAO,SAAS,cAAc,EAAE;IAChE,YAAY,YAAY,IAAI,IAAI,OAAO,SAAS,cAAc,EAAE;GAGnD;GAAG,YAAY;EAAG;CACnC;AACF;AAEA,MAAa,MAAqB,IAAI,oBAAoB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/regex/index.ts"],"sourcesContent":["import { isUndefined } from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../../../constants/error-messages.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport type { GenericVersion } from '../generic.ts';\nimport { GenericVersioningApi } from '../generic.ts';\nimport type { VersioningApiConstructor } from '../types.ts';\n\nexport const id = 'regex';\nexport const displayName = 'Regular Expression';\nexport const urls = [];\nexport const supportsRanges = false;\n\nexport interface RegExpVersion extends GenericVersion {\n /**\n * compatibility, if present, are treated as a compatibility layer: we will\n * never try to update to a version with a different compatibility.\n */\n compatibility: string;\n}\n\nexport class RegExpVersioningApi extends GenericVersioningApi<RegExpVersion> {\n // config is expected to be overridden by a user-specified RegExp value\n // sample values:\n //\n // * emulates the \"semver\" configuration:\n // RegExp('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(-(?<prerelease>.*))?$')\n // * emulates the \"docker\" configuration:\n // RegExp('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(-(?<compatibility>.*))?$')\n // * matches the versioning approach used by the Python images on DockerHub:\n // RegExp('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(?<prerelease>[^.-]+)?(-(?<compatibility>.*))?$');\n // * matches the versioning approach used by the Bitnami images on DockerHub:\n // RegExp('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(:?-(?<compatibility>.*-r)(?<build>\\\\d+))?$');\n protected readonly _config: RegExp;\n\n constructor(_new_config: string | undefined) {\n super();\n const new_config = _new_config ?? '^(?<major>\\\\d+)?$';\n\n // without at least one of {major, minor, patch} specified in the regex,\n // this versioner will not work properly\n if (\n !new_config.includes('<major>') &&\n !new_config.includes('<minor>') &&\n !new_config.includes('<patch>')\n ) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = new_config;\n error.validationError =\n 'regex versioning needs at least one major, minor or patch group defined';\n throw error;\n }\n\n // TODO: should we validate the user has not added extra unsupported\n // capture groups? (#9717)\n this._config = regEx(new_config);\n }\n\n // convenience method for passing a string into a Version given current config.\n protected _parse(version: string): RegExpVersion | null {\n const groups = this._config?.exec(version)?.groups;\n if (!groups) {\n return null;\n }\n\n const { major, minor, patch, build, revision, prerelease, compatibility } =\n groups;\n const release = [\n isUndefined(major) ? 0 : Number.parseInt(major, 10),\n isUndefined(minor) ? 0 : Number.parseInt(minor, 10),\n isUndefined(patch) ? 0 : Number.parseInt(patch, 10),\n ];\n\n if (build) {\n release.push(Number.parseInt(build, 10));\n if (revision) {\n release.push(Number.parseInt(revision, 10));\n }\n }\n\n return {\n release,\n prerelease,\n compatibility,\n };\n }\n\n override isCompatible(version: string, current: string): boolean {\n const parsedVersion = this._parse(version);\n const parsedCurrent = this._parse(current);\n return !!(\n parsedVersion &&\n parsedVersion.compatibility === parsedCurrent?.compatibility\n );\n }\n}\n\nexport const api: VersioningApiConstructor = RegExpVersioningApi;\n\nexport default api;\n"],"mappings":";;;;;AAOA,MAAa,KAAK;AAalB,IAAa,sBAAb,cAAyC,qBAAoC;CAY3E;CAEA,YAAY,aAAiC;EAC3C,MAAM;EACN,MAAM,aAAa,eAAe;EAIlC,IACE,CAAC,WAAW,SAAS,SAAS,KAC9B,CAAC,WAAW,SAAS,SAAS,KAC9B,CAAC,WAAW,SAAS,SAAS,GAC9B;GACA,MAAM,QAAQ,IAAI,MAAM,iBAAiB;GACzC,MAAM,mBAAmB;GACzB,MAAM,kBACJ;GACF,MAAM;EACR;EAIA,KAAK,UAAU,MAAM,UAAU;CACjC;CAGA,OAAiB,SAAuC;EACtD,MAAM,SAAS,KAAK,SAAS,KAAK,OAAO,CAAC,EAAE;EAC5C,IAAI,CAAC,QACH,OAAO;EAGT,MAAM,EAAE,OAAO,OAAO,OAAO,OAAO,UAAU,YAAY,kBACxD;EACF,MAAM,UAAU;GACd,YAAY,KAAK,IAAI,IAAI,OAAO,SAAS,OAAO,EAAE;GAClD,YAAY,KAAK,IAAI,IAAI,OAAO,SAAS,OAAO,EAAE;GAClD,YAAY,KAAK,IAAI,IAAI,OAAO,SAAS,OAAO,EAAE;EACpD;EAEA,IAAI,OAAO;GACT,QAAQ,KAAK,OAAO,SAAS,OAAO,EAAE,CAAC;GACvC,IAAI,UACF,QAAQ,KAAK,OAAO,SAAS,UAAU,EAAE,CAAC;EAE9C;EAEA,OAAO;GACL;GACA;GACA;EACF;CACF;CAEA,aAAsB,SAAiB,SAA0B;EAC/D,MAAM,gBAAgB,KAAK,OAAO,OAAO;EACzC,MAAM,gBAAgB,KAAK,OAAO,OAAO;EACzC,OAAO,CAAC,EACN,iBACA,cAAc,kBAAkB,eAAe;CAEnD;AACF;AAEA,MAAa,MAAgC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/regex/index.ts"],"sourcesContent":["import { isUndefined } from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../../../constants/error-messages.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { GenericVersioningApi } from '../generic.ts';\nimport type { VersioningApiConstructor } from '../types.ts';\nimport type { RegExpVersion } from './types.ts';\n\nexport const id = 'regex';\nexport const displayName = 'Regular Expression';\nexport const urls = [];\nexport const supportsRanges = false;\n\nexport class RegExpVersioningApi extends GenericVersioningApi<RegExpVersion> {\n // config is expected to be overridden by a user-specified RegExp value\n // sample values:\n //\n // * emulates the \"semver\" configuration:\n // RegExp('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(-(?<prerelease>.*))?$')\n // * emulates the \"docker\" configuration:\n // RegExp('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(-(?<compatibility>.*))?$')\n // * matches the versioning approach used by the Python images on DockerHub:\n // RegExp('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(?<prerelease>[^.-]+)?(-(?<compatibility>.*))?$');\n // * matches the versioning approach used by the Bitnami images on DockerHub:\n // RegExp('^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(:?-(?<compatibility>.*-r)(?<build>\\\\d+))?$');\n protected readonly _config: RegExp;\n\n constructor(_new_config: string | undefined) {\n super();\n const new_config = _new_config ?? '^(?<major>\\\\d+)?$';\n\n // without at least one of {major, minor, patch} specified in the regex,\n // this versioner will not work properly\n if (\n !new_config.includes('<major>') &&\n !new_config.includes('<minor>') &&\n !new_config.includes('<patch>')\n ) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = new_config;\n error.validationError =\n 'regex versioning needs at least one major, minor or patch group defined';\n throw error;\n }\n\n // TODO: should we validate the user has not added extra unsupported\n // capture groups? (#9717)\n this._config = regEx(new_config);\n }\n\n // convenience method for passing a string into a Version given current config.\n protected _parse(version: string): RegExpVersion | null {\n const groups = this._config?.exec(version)?.groups;\n if (!groups) {\n return null;\n }\n\n const { major, minor, patch, build, revision, prerelease, compatibility } =\n groups;\n const release = [\n isUndefined(major) ? 0 : Number.parseInt(major, 10),\n isUndefined(minor) ? 0 : Number.parseInt(minor, 10),\n isUndefined(patch) ? 0 : Number.parseInt(patch, 10),\n ];\n\n if (build) {\n release.push(Number.parseInt(build, 10));\n if (revision) {\n release.push(Number.parseInt(revision, 10));\n }\n }\n\n return {\n release,\n prerelease,\n compatibility,\n };\n }\n\n override isCompatible(version: string, current: string): boolean {\n const parsedVersion = this._parse(version);\n const parsedCurrent = this._parse(current);\n return !!(\n parsedVersion &&\n parsedVersion.compatibility === parsedCurrent?.compatibility\n );\n }\n}\n\nexport const api: VersioningApiConstructor = RegExpVersioningApi;\n\nexport default api;\n"],"mappings":";;;;;AAOA,MAAa,KAAK;AAKlB,IAAa,sBAAb,cAAyC,qBAAoC;CAY3E;CAEA,YAAY,aAAiC;EAC3C,MAAM;EACN,MAAM,aAAa,eAAe;EAIlC,IACE,CAAC,WAAW,SAAS,SAAS,KAC9B,CAAC,WAAW,SAAS,SAAS,KAC9B,CAAC,WAAW,SAAS,SAAS,GAC9B;GACA,MAAM,QAAQ,IAAI,MAAM,iBAAiB;GACzC,MAAM,mBAAmB;GACzB,MAAM,kBACJ;GACF,MAAM;EACR;EAIA,KAAK,UAAU,MAAM,UAAU;CACjC;CAGA,OAAiB,SAAuC;EACtD,MAAM,SAAS,KAAK,SAAS,KAAK,OAAO,CAAC,EAAE;EAC5C,IAAI,CAAC,QACH,OAAO;EAGT,MAAM,EAAE,OAAO,OAAO,OAAO,OAAO,UAAU,YAAY,kBACxD;EACF,MAAM,UAAU;GACd,YAAY,KAAK,IAAI,IAAI,OAAO,SAAS,OAAO,EAAE;GAClD,YAAY,KAAK,IAAI,IAAI,OAAO,SAAS,OAAO,EAAE;GAClD,YAAY,KAAK,IAAI,IAAI,OAAO,SAAS,OAAO,EAAE;EACpD;EAEA,IAAI,OAAO;GACT,QAAQ,KAAK,OAAO,SAAS,OAAO,EAAE,CAAC;GACvC,IAAI,UACF,QAAQ,KAAK,OAAO,SAAS,UAAU,EAAE,CAAC;EAE9C;EAEA,OAAO;GACL;GACA;GACA;EACF;CACF;CAEA,aAAsB,SAAiB,SAA0B;EAC/D,MAAM,gBAAgB,KAAK,OAAO,OAAO;EACzC,MAAM,gBAAgB,KAAK,OAAO,OAAO;EACzC,OAAO,CAAC,EACN,iBACA,cAAc,kBAAkB,eAAe;CAEnD;AACF;AAEA,MAAa,MAAgC"}