UNPKG

renovate

Version:

Automated dependency updates. Flexible so you don't need to be.

140 lines 5.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.endBlockRegex = exports.excludeBlockStartRegex = void 0; exports.parseLine = parseLine; const tslib_1 = require("tslib"); const semver_1 = tslib_1.__importDefault(require("semver")); const regex_1 = require("../../../util/regex"); const go_1 = require("../../datasource/go"); const golang_version_1 = require("../../datasource/golang-version"); const semver_2 = require("../../versioning/semver"); function trimQuotes(str) { return str.replace((0, regex_1.regEx)(/^"(.*)"$/), '$1'); } const requireRegex = (0, regex_1.regEx)(/^(?<keyword>require)?\s+(?<module>[^\s]+\/?[^\s]+)\s+(?<version>[^\s]+)(?:\s*\/\/\s*(?<comment>[^\s]+)\s*)?$/); const replaceRegex = (0, regex_1.regEx)(/^(?<keyword>replace)?\s+(?<module>[^\s]+\/[^\s]+)\s*=>\s*(?<replacement>[^\s]+)(?:\s+(?<version>[^\s]+))?(?:\s*\/\/\s*(?<comment>[^\s]+)\s*)?$/); exports.excludeBlockStartRegex = (0, regex_1.regEx)(/^(?<keyword>exclude)\s+\(\s*$/); exports.endBlockRegex = (0, regex_1.regEx)(/^\s+\)\s*$/); const toolRegex = (0, regex_1.regEx)(/^(?<keyword>tool)?\s+(?<module>[^\s]+\/?[^\s]+)\s*$/); const goVersionRegex = (0, regex_1.regEx)(/^\s*go\s+(?<version>[^\s]+)\s*$/); const toolchainVersionRegex = (0, regex_1.regEx)(/^\s*toolchain\s+go(?<version>[^\s]+)\s*$/); const pseudoVersionRegex = (0, regex_1.regEx)(go_1.GoDatasource.pversionRegexp); function extractDigest(input) { const match = pseudoVersionRegex.exec(input); return match?.groups?.digest; } function parseLine(input) { const goVersionMatches = goVersionRegex.exec(input)?.groups; if (goVersionMatches) { const { version: currentValue } = goVersionMatches; const dep = { datasource: golang_version_1.GolangVersionDatasource.id, versioning: 'go-mod-directive', depType: 'golang', depName: 'go', currentValue, }; if (!semver_1.default.validRange(currentValue)) { dep.skipReason = 'invalid-version'; } return dep; } const toolchainMatches = toolchainVersionRegex.exec(input)?.groups; if (toolchainMatches) { const { version: currentValue } = toolchainMatches; const dep = { datasource: golang_version_1.GolangVersionDatasource.id, depType: 'toolchain', depName: 'go', currentValue, }; if (!semver_1.default.valid(currentValue)) { dep.skipReason = 'invalid-version'; } return dep; } const requireMatches = requireRegex.exec(input)?.groups; if (requireMatches) { const { keyword, module, version: currentValue, comment } = requireMatches; const depName = trimQuotes(module); const dep = { datasource: go_1.GoDatasource.id, depType: 'require', depName, currentValue, }; if ((0, semver_2.isVersion)(currentValue)) { const digest = extractDigest(currentValue); if (digest) { dep.currentDigest = digest; dep.digestOneAndOnly = true; dep.versioning = 'loose'; } } else { dep.skipReason = 'invalid-version'; } if (comment === 'indirect') { dep.depType = 'indirect'; dep.enabled = false; } if (!keyword) { dep.managerData = { multiLine: true }; } return dep; } const replaceMatches = replaceRegex.exec(input)?.groups; if (replaceMatches) { const { keyword, replacement, version: currentValue, comment, } = replaceMatches; const depName = trimQuotes(replacement); const dep = { datasource: go_1.GoDatasource.id, depType: 'replace', depName, currentValue, }; if ((0, semver_2.isVersion)(currentValue)) { const digest = extractDigest(currentValue); if (digest) { dep.currentDigest = digest; dep.digestOneAndOnly = true; dep.versioning = 'loose'; } } else if (currentValue) { dep.skipReason = 'invalid-version'; } else { dep.skipReason = 'unspecified-version'; delete dep.currentValue; } if (comment === 'indirect') { dep.depType = 'indirect'; dep.enabled = false; } if (!keyword) { dep.managerData = { multiLine: true }; } if (depName.startsWith('/') || depName.startsWith('.')) { dep.skipReason = 'local-dependency'; } return dep; } const toolMatches = toolRegex.exec(input)?.groups; if (toolMatches) { const { keyword, module } = toolMatches; const depName = trimQuotes(module); const dep = { datasource: go_1.GoDatasource.id, depType: 'tool', depName, skipReason: 'unversioned-reference', }; if (!keyword) { dep.managerData = { multiLine: true }; } return dep; } return null; } //# sourceMappingURL=line-parser.js.map