awesome-react-cli
Version:
This is a boiler plate cli which will work with CRA awesome-react-template
111 lines (97 loc) • 3.26 kB
JavaScript
const fs = require('fs');
const readline = require('readline');
const path = require('path');
const chalk = require('chalk');
const log = console.log;
export function getCurrentDirectory() {
return process.cwd();
}
export function getSeparator() {
return path.sep;
}
export function checkIfExistingProject() {
return fs.existsSync(getCurrentDirectory() + path.sep + 'package.json');
}
export function doesExists(filePath) {
return fs.existsSync(filePath);
}
export async function readFileLineByLine(filePath) {
const fileStreamRead = fs.createReadStream(filePath);
const rl = readline.createInterface({
input: fileStreamRead,
crlfDelay: Infinity
});
// Note: we use the crlfDelay option to recognize all instances of CR LF
// ('\r\n') in input.txt as a single line break.
const fileLines = [];
for await (const line of rl) {
fileLines.push(line);
}
fileStreamRead.close();
return fileLines;
}
export function writeFileLineByLine(filePath, lines) {
const fileStreamWrite = fs.createWriteStream(filePath,);
lines.map(l => {
fileStreamWrite.write(l + '\n');
});
fileStreamWrite.end();
}
export function getLineNumbers(lines, moduleName) {
let updateRequired = true;
let lastImportLineNumber = -1;
let lastSpredLineNumber = -1;
let lastEndOfArrayLineNumber = -1;
lines.map((l, index) => {
if (l.indexOf(`${moduleName}`) > -1) {
updateRequired = false;
}
if (l.indexOf('import') > -1) {
lastImportLineNumber = index;
}
if (l.indexOf('...') > -1) {
lastSpredLineNumber = index;
}
if (l.indexOf(']') > -1) {
lastEndOfArrayLineNumber = index;
}
}
);
return {
updateRequired,
lastImportLineNumber,
lastSpredLineNumber,
lastEndOfArrayLineNumber,
}
}
export function updateLineArray(lines, importStatement, spreadStatement, lineInformation) {
let disableArrayModification = false;
if (lineInformation.updateRequired) {
lineInformation.lastImportLineNumber++;
if (lineInformation.lastSpredLineNumber > -1) {
lineInformation.lastSpredLineNumber++;
disableArrayModification = true;
}
if (lineInformation.lastEndOfArrayLineNumber > -1) {
lineInformation.lastEndOfArrayLineNumber++;
}
lines = insertAt(lines, lineInformation.lastImportLineNumber, importStatement);
if (lineInformation.lastSpredLineNumber > -1) {
lineInformation.lastSpredLineNumber++;
lines = insertAt(lines, lineInformation.lastSpredLineNumber, spreadStatement);
}
if (!disableArrayModification && lineInformation.lastEndOfArrayLineNumber > -1) {
// update the line
let lineToBeUpdated = lines[lineInformation.lastEndOfArrayLineNumber];
const splittedText = lineToBeUpdated.split(']');
splittedText[0] = splittedText[0] + spreadStatement;
lines[lineInformation.lastEndOfArrayLineNumber] = splittedText.join("]");
// lines = insertAt(lines, lineInformation.lastSpredLineNumber, spreadStatement);
}
}
return lines;
}
export function insertAt(array, index, ...elements) {
array.splice(index, 0, ...elements);
return array;
}