boilerplate.js
Version:
Development Tools
109 lines (87 loc) • 3.73 kB
JavaScript
function init(clear) {
console.log('');
clear && console.log('\x1Bc');
var question = [{
type: 'list',
name: 'start',
message: 'What Type Of Component?\n',
choices: [
{ value:'back', name: 'Home'.grey },
new inquirer.Separator(),
{ value:'page', name: 'Page Specific Component' },
{ value:'global', name: 'Global Component' },
{ value:'external', name: 'External Component' },
],
}];
inquirer.prompt(question).then(answers => {
if (answers.start === 'back') return require('./app').start();
switch (answers.start) {
case 'page': pageComponent(); break;
case 'global': globalComponent(); break;
case 'external': globalComponent('--external'); break;
default: break;
}
});
}
function globalComponent(external, page) {
external = external || '';
page = page || '';
var dir = [];
try {
fs.ensureDirSync(config.js.dir + '/external');
dir = list(config.js.dir + (external ? '/external' : '/components'), 'dir');
if (page) {
var tempPath = path.resolve(config.js.dir + '/page/' + toCamelCase(page));
dir = list(tempPath, 'dir');
}
} catch (error) {
dir = ['No Components Found'];
}
var skip = false;
var alt;
inquirer.registerPrompt('suggest', $REQUIRE('inquirer-prompt-suggest'));
console.log(dir.join(' | ').grey);
console.log('');
var question = [{
type: 'suggest',
name: 'name',
message: 'Enter Component Name ' + 'Leave Blank To Create Single File Component\n'.grey,
suggestions: dir,
}];
inquirer.prompt(question).then(answers => {
answers.name = toCamelCase(answers.name, true);
var command = `gulp --js ${external ? '' : page}~${answers.name}`;
if (!answers.name.trim()) { skip = true; alt = 'Create Single File Component?' };
dir.map(x => x === answers.name ? skip = true : null);
skip || console.log(`Alias: "${command}~init ${external}"`.grey);
skip || console.log( ((child.execSync(command + `~init ${external}`)).toString()).green );
ask.confirm(alt || 'Create Sub Component?', yes => globalSubComponent(command, alt, external, page), no => exit());
});
}
function globalSubComponent(command, singleFile, external, page) {
var message = 'Enter Sub-Component Name';
if (singleFile) message = 'Enter Single File Component Name';
ask.input(message, response => {
if (singleFile) {
console.log(`Alias: "gulp --js ${external ? '' : page}~${response} ${external}"`.grey)
console.log( ((child.execSync(`gulp --js ${external ? '' : page}~${response} ${external}`)).toString()).green );
} else {
console.log(`Alias: "${command}~${response} ${external}"`.grey);
console.log( ((child.execSync(command + `~${response} ${external}`)).toString()).green );
}
ask.confirm('Add Another Component?', yes => init(true), no => exit());
});
}
function pageComponent() {
console.log('');
var question = [{
type: 'input',
name: 'url',
message: 'Enter Page URL ' + 'Example: "http://example.com/about/careers" or "/about/careers"\n'.grey,
}];
inquirer.prompt(question).then(answers => {
console.log(`Alias: "gulp --js ${answers.url}"`.grey);
globalComponent(null, answers.url);
});
}
module.exports = { init };