@modea/modea-increment-version
Version:
Increments version and build numbers in specified files
90 lines (72 loc) • 2.56 kB
JavaScript
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,
};