UNPKG

@modea/modea-increment-version

Version:

Increments version and build numbers in specified files

90 lines (72 loc) 2.56 kB
const CHANGE_TYPE = { VERSION: 'version', BUILD: 'build' }; const fs = require('fs'); function readFile(fileName) { return fs.readFileSync(fileName, 'utf8'); } function findPlacesToChange(file) { let returnValue = { fileString: '', changes: [] } let fileString = readFile(file.path); const fileChanges = getFileChanges(file.changes, fileString); returnValue.fileString = fileString; for (const changes of fileChanges) { returnValue.changes.push(changes); } return returnValue } function getFileChanges(changes, fileString) { const placesToChange = []; for (const change of changes) { if (change.type === CHANGE_TYPE.VERSION || change.type === CHANGE_TYPE.BUILD) { placesToChange.push(getPlaceToChange(change.startIdentifier, change.endIdentifier, fileString)); placesToChange[placesToChange.length - 1].type = change.type; } else { console.error('\x1b[31m', `build type '${change.type}' is not supported. Please use 'version' or 'build'.`); } } return placesToChange; } function getPlaceToChange(startIdentifier, endIdentifier, string) { const startIndex = string.indexOf(startIdentifier) + startIdentifier.length; const value = findValue(endIdentifier, string, startIndex); const endIndex = startIndex + value.length; return { value, startIndex, endIndex }; } function findValue(stringToFind, parentString, index) { const searchString = parentString.substring(index, parentString.length); const foundIndex = searchString.indexOf(stringToFind); const foundInstance = searchString.substring(0, foundIndex); return stripEverythingButNumbersAndPeriods(foundInstance) } function stripEverythingButNumbersAndPeriods(rawString) { return rawString.replace(/[^0-9.]/g, ''); } function writeChanges(fileName, fileString, changesToMake) { // first sort by biggest start index first changesToMake.sort((a,b) => { return b.startIndex - a.startIndex }); for (const change of changesToMake) { fileString = replaceInString(fileString, change.startIndex, change.endIndex, change.value) } writeFile(fileName, fileString); } function replaceInString(string, startIndex, endIndex, replacement) { const firstPart = string.slice(0, startIndex); const lastPart = string.slice(endIndex, string.length); return firstPart + replacement + lastPart; } function writeFile(fileName, string) { fs.writeFile(fileName, string, 'utf8', function (err) { if (err) return console.log(err); }); } module.exports = { findPlacesToChange, writeChanges, };