yos
Version:
lists your installed yeoman generators and subgenerators
51 lines (40 loc) • 1.64 kB
JavaScript
;
const args = process.argv.slice(2);
if (args.length && args[0] === '-h' || args[0] === '--help') {
console.log('\n Usage: yos [options] [generator-name ...]\n');
console.log(' Options:\n\n -h, --help show usage help\n');
process.exit(1);
}
const env = require('yeoman-environment').createEnv();
env.lookup(() => {
const generatorList = createGeneratorList(env, args);
console.log(`Available Generators:\n${generatorList}`);
});
function createGeneratorList(env, apps) {
const generators = Object.keys(env.getGeneratorsMeta()).reduce((namesByGenerator, generator) => {
const parts = generator.split(':');
const generatorName = parts.shift();
// Filter to specified generators, when specified
if (!apps.length || apps.indexOf(generatorName) > -1) {
// If first time we found this generator, prepare to save all its sub-generators
if (!namesByGenerator[generatorName]) {
namesByGenerator[generatorName] = [];
}
// If sub-generator (!== app), save it
if (parts[0] !== 'app') {
namesByGenerator[generatorName].push(parts.join(':'));
}
}
return namesByGenerator;
}, {});
if (!Object.keys(generators).length) {
return '\n Couldn\'t find any generators, did you install any? Troubleshoot issues by running\n\n $ yo doctor';
}
return Object.keys(generators).map(generator => {
const subGenerators = generators[generator].map(subGenerator => {
return ` ${subGenerator}`;
}).join('\n');
return `\n ${generator}\n${subGenerators}`;
}).join('\n').replace(/\n\n\n/g, '\n\n');
}