1 | #!/usr/bin/env node
|
2 |
|
3 | const chalk = require('chalk');
|
4 | const clear = require('clear');
|
5 | const commander = require('commander');
|
6 | const figlet = require('figlet');
|
7 | const yeoman = require('yeoman-environment');
|
8 | const { argv, cwd } = require('process');
|
9 | const { parse } = require('path');
|
10 |
|
11 | const packageJson = require('../package.json');
|
12 | const audit = require('./audit');
|
13 |
|
14 | const program = commander;
|
15 | const yeomanEnv = yeoman.createEnv();
|
16 |
|
17 | const 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 |
|
32 | };
|
33 |
|
34 | Object.keys(generators).forEach(name => {
|
35 | const generator = `@feathers-plus/generator-feathers-plus/generators/${name}`;
|
36 | yeomanEnv.register(require.resolve(generator), `${name}`);
|
37 | });
|
38 |
|
39 | const blanks16 = ' ';
|
40 | const genDesc = Object.keys(generators).sort()
|
41 | .map(name => ` ${name}:${blanks16.substr(0, 16 - name.length)}${generators[name]}`).join('\n');
|
42 |
|
43 | clear();
|
44 | console.log(
|
45 | chalk.yellow(figlet.textSync('Feathers+', { horizontalLayout: 'full' }))
|
46 | );
|
47 | console.log('');
|
48 | console.log('With contributions from: j2L4e, NickBolles, lukeburpee, Matt & Marshall');
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 |
|
72 |
|
73 |
|
74 | console.log('');
|
75 | console.log([
|
76 | 'Migrating app in dir ',
|
77 | chalk.yellow.bold(parse(cwd()).base),
|
78 | ' to latest cli+ version:',
|
79 | ].join(''));
|
80 | console.log([
|
81 | '- ',
|
82 | 'Update ',
|
83 | chalk.red.bold('@feathers-plus/test-utils'),
|
84 | ' in node_modules to v0.3.6 if using TypeScript.',
|
85 | ].join(''));
|
86 | console.log('');
|
87 |
|
88 |
|
89 |
|
90 | const args = argv;
|
91 | args[2] = args[2] || '-h';
|
92 |
|
93 | program
|
94 | .version(packageJson.version)
|
95 | .description('The command line interface for managing Feathers applications.');
|
96 |
|
97 | program
|
98 | .command('audit')
|
99 | .alias('a')
|
100 | .description('Audit the current project.')
|
101 | .action(() => {
|
102 | audit();
|
103 | });
|
104 |
|
105 | program
|
106 | .command('generate <what>')
|
107 | .alias('g')
|
108 | .description(`(Re)generate code. <what> options:\n${genDesc}`)
|
109 | .action(what => {
|
110 | if (Object.keys(generators).indexOf(what) === -1) {
|
111 | program.help();
|
112 | } else {
|
113 | yeomanEnv.run(what, {});
|
114 | }
|
115 | });
|
116 |
|
117 | program
|
118 | .command('*')
|
119 | .action(() => program.help());
|
120 |
|
121 | program.parse(args);
|