boilerplate.js
Version:
Development Tools
159 lines (132 loc) • 5.88 kB
JavaScript
function init(change) {
console.log('\x1Bc');
console.log('');
var questions = [{
type: 'list',
name: 'value',
message: 'Config Paths\n',
choices: [
new inquirer.Separator(),
{ value:'back', name: 'Home'.grey },
{ value:'autoupdate', name: 'Auto Update '.grey + (config.autoUpdate ? 'ON'.green : 'OFF'.red) },
new inquirer.Separator(),
{ value:'js', name: '1) JavaScript' },
{ value:'css', name: '2) SASS' },
{ value:'server', name: '3) Server ' },
{ value:'images', name: '4) Images' },
{ value:'sprites', name: '5) Sprites' },
{ value:'webfonts', name: '6) Webfonts' },
],
}];
if (change) {
questions[0].choices = change;
} else {
questions[0].choices.forEach(obj => {
if (obj.value === 'server') {
var sync = fs.readFileSync(global.browserSyncPATH).toString();
if (sync.length > 0) {
obj.name = obj.name.green + ' ' + sync;
} else {
obj.name = obj.name.red
}
return;
}
if (obj.value) {
var found = config[obj.value] ? true : false;
obj.name = obj.name[found ? 'green' : 'red'];
if (found && typeof config[obj.value] === 'string') obj.name = obj.name + ' ' + config[obj.value];
}
});
}
inquirer.prompt(questions).then(answers => {
if (answers.value === 'back') return require('./app').start();
if (answers.value.indexOf('js') >= 0) {
if (answers.value === 'js') return nested(null, null, 'js');
return nested(true, answers.value, 'js');
}
if (answers.value.indexOf('css') >= 0) {
if (answers.value === 'css') return nested(null, null, 'css');
return nested(true, answers.value, 'css');
}
if (answers.value === 'autoupdate') {
config.autoUpdate = !config.autoUpdate;
config.update();
init();
return;
}
if (answers.value === 'server') {
console.log('server');
var file = path.resolve('./config.browsersync.txt');
fs.ensureFileSync(file);
var data = fs.readFileSync(file).toString();
console.log(data);
ask.input('Enter New Path', response => {
fs.writeFileSync(file, response);
init();
}, data || 'localhost:8080');
return;
}
config.check(answers.value, (result) => {
result && change();
result || init();
});
function change(value) {
ask.input('Enter New Path', response => {
config[answers.value] = response;
config.update();
init();
}, config[answers.value]);
}
function nested(done, value, type) {
if (done) {
var suggestion;
switch (value) {
case `${type}.input` : suggestion = `./Boilerplate/src/${type === 'css' ? 'sass' : type}/app.${type === 'css' ? 'scss' : type}`; break;
case `${type}.output`: suggestion = `./public/${type}/`; break;
case `${type}.public`: var public = true; suggestion = `/${type}/`; break;
default: break;
}
try {
var alt = config[value[0]][value[1]];
} catch (error) {
var alt = '';
}
value = value.split('.');
ask.input('Enter New Path', response => {
config[value[0]] || (config[value[0]] = {});
config[value[0]][value[1]] = response;
if (public) {
var content = fs.readFileSync(global.jsInit).toString();
if (type === 'js') content = content.replace(/window\.PublicPathJS\s*?=\s*?['"](.*)['"];/gmi, `window.PublicPathJS = '${response}';`);
if (type === 'css') content = content.replace(/window\.PublicPathCSS\s*?=\s*?['"](.*)['"];/gmi, `window.PublicPathCSS = '${response}';`);
fs.writeFileSync(global.jsInit, content);
console.log(`Updated: ${global.jsInit}`.grey);
}
config.update();
init();
}, alt || suggestion)
} else {
var change = [
{ value:'back', name: '..'.grey },
{ value:`${type}.input`, name: 'Input' },
{ value:`${type}.output`, name: 'Output' },
{ value:`${type}.public`, name: 'Public' },
];
change.forEach(obj => {
if (obj.value === 'back') return;
var value = obj.value.split('.');
var found
try {
found = config[value[0]][value[1]] ? true : false;
if (found) obj.name = obj.name + ' ' + config[value[0]][value[1]];
} catch (error) {
found = false;
}
obj.name = obj.name[found ? 'green' : 'red'];
});
init(change);
}
}
});
}
module.exports = { init };