UNPKG

3.31 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');
49/*
50console.log('');
51console.log('New features recently added:');
52console.log([
53 '- ',
54 chalk.yellow.bold('generate app'),
55 ': new prompts for test environments and seeding data.'
56].join(''));
57console.log([
58 '- ',
59 chalk.yellow.bold('generate fakes'),
60 ': generate fake data for your services. Very powerful.'
61].join(''));
62console.log([
63 '- ',
64 chalk.yellow.bold('generate hook'),
65 ': generate a hook for one or more services.'
66].join(''));
67console.log([
68 '- ',
69 chalk.yellow.bold('generate test'),
70 ': generate a test for a hook, service or authentication.'
71].join(''));
72*/
73
74console.log('');
75console.log([
76 'Migrating app in dir ',
77 chalk.yellow.bold(parse(cwd()).base),
78 ' to latest cli+ version:',
79].join(''));
80console.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(''));
86console.log('');
87
88// todo Check node version is 10+
89
90const args = argv;
91args[2] = args[2] || '-h';
92
93program
94 .version(packageJson.version)
95 .description('The command line interface for managing Feathers applications.');
96
97program
98 .command('audit')
99 .alias('a')
100 .description('Audit the current project.')
101 .action(() => {
102 audit();
103 });
104
105program
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
117program
118 .command('*')
119 .action(() => program.help());
120
121program.parse(args);