UNPKG

1.86 kBJavaScriptView Raw
1const merge = require('deepmerge');
2const yargs = require('yargs');
3const { Neutrino } = require('../src');
4
5module.exports = ({
6 cli,
7 middleware,
8 args,
9 NODE_ENV,
10 apiCommand = args._[0],
11 commandName = args._[0],
12 commandHandler,
13 errorsHandler,
14 successHandler
15}) => {
16 const options = merge({
17 args,
18 command: apiCommand,
19 debug: args.debug,
20 quiet: args.quiet,
21 env: { NODE_ENV }
22 }, args.options);
23 const api = Neutrino(options);
24
25 middleware.forEach(middleware => api.use(middleware));
26
27 if (!apiCommand || args.help) {
28 Object
29 .keys(api.commands)
30 .forEach(command => {
31 switch (command) {
32 case 'start':
33 case 'test':
34 case 'build': {
35 return;
36 }
37 default: {
38 cli.command(command, api.commandDescriptions[command]);
39 }
40 }
41 });
42
43 yargs.showHelp();
44 process.exit(1);
45 }
46
47 api.register(commandName, commandHandler);
48
49 api
50 .run(commandName)
51 .fork(
52 (errs) => {
53 const errors = Array.isArray(errs) ? errs : [errs];
54
55 if (errorsHandler) {
56 errorsHandler(errors);
57 }
58
59 if (!args.quiet) {
60 errors.forEach((err) => {
61 if (!err) {
62 return;
63 }
64
65 if (err.message && err.message.includes('No entry points found')) {
66 console.error([
67 'No entry points were found.',
68 'Ensure that all intended middleware or presets are being used',
69 'and at least one entry point is defined.',
70 'You can inspect the final configuration with --inspect.'
71 ].join(' '));
72 } else {
73 console.error(err);
74 }
75 });
76 }
77
78 process.exit(1);
79 },
80 successHandler
81 );
82
83 return api;
84};