UNPKG

3.24 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3const chalk = require('chalk');
4const clear = require('clear');
5const commander = require('commander');
6const figlet = require('figlet');
7const yeoman = require('yeoman-environment');
8const { argv, cwd } = require('process');
9const { parse } = require('path');
10
11const packageJson = require('../package.json');
12const audit = require('./audit');
13
14const program = commander;
15const yeomanEnv = yeoman.createEnv();
16
17const generators = {
18 all: 'Regenerate entire application',
19 app: 'Create a new Feathers application in the current folder',
20 authentication: 'Set up authentication for the current application',
21 connection: 'Initialize a new database connection',
22 codelist: 'List custom code in generated modules',
23 hook: 'Create a new hook',
24 middleware: 'Create an Express middleware',
25 options: 'Set options for generating the project',
26 secret: 'Generate a new authentication secret',
27 service: 'Generate a new service',
28 graphql: 'Generate GraphQL service',
29 fakes: 'Generate fake data',
30 test: 'Generate a test for a hook, a service, or auth.'
31 // plugin: 'Create a new Feathers plugin', // use feathersjs/cli
32};
33
34Object.keys(generators).forEach(name => {
35 const generator = `@feathers-plus/generator-feathers-plus/generators/${name}`;
36 yeomanEnv.register(require.resolve(generator), `${name}`);
37});
38
39const blanks16 = ' ';
40const genDesc = Object.keys(generators).sort()
41 .map(name => ` ${name}:${blanks16.substr(0, 16 - name.length)}${generators[name]}`).join('\n');
42
43clear();
44console.log(
45 chalk.yellow(figlet.textSync('Feathers+', { horizontalLayout: 'full' }))
46);
47console.log('');
48console.log('With contributions from: j2L4e, NickBolles, lukeburpee, Matt & Marshall');
49console.log('');
50console.log('New features recently added:');
51console.log([
52 '- ',
53 chalk.yellow.bold('generate app'),
54 ': new prompts for test environments and seeding data.'
55].join(''));
56console.log([
57 '- ',
58 chalk.yellow.bold('generate fakes'),
59 ': generate fake data for your services. Very powerful.'
60].join(''));
61console.log([
62 '- ',
63 chalk.yellow.bold('generate hook'),
64 ': generate a hook for one or more services.'
65].join(''));
66console.log([
67 '- ',
68 chalk.yellow.bold('generate test'),
69 ': generate a test for a hook, service or authentication.'
70].join(''));
71
72console.log('');
73console.log([
74 'Migrating app in dir ',
75 chalk.yellow.bold(parse(cwd()).base),
76 ' to latest cli+ version:',
77].join(''));
78console.log([
79 '- ',
80 'Run ',
81 chalk.red.bold('npm update'),
82 '.',
83].join(''));
84console.log('');
85
86// todo Check node version is 10+
87
88const args = argv;
89args[2] = args[2] || '-h';
90
91program
92 .version(packageJson.version)
93 .description('The command line interface for managing Feathers applications.');
94
95program
96 .command('audit')
97 .alias('a')
98 .description('Audit the current project.')
99 .action(() => {
100 audit();
101 });
102
103program
104 .command('generate <what>')
105 .alias('g')
106 .description(`(Re)generate code. <what> options:\n${genDesc}`)
107 .action(what => {
108 if (Object.keys(generators).indexOf(what) === -1) {
109 program.help();
110 } else {
111 yeomanEnv.run(what, {});
112 }
113 });
114
115program
116 .command('*')
117 .action(() => program.help());
118
119program.parse(args);