1 | import {Arguments} from 'yargs';
|
2 | import * as ExtLB from '..'
|
3 | import * as Inquirer from 'inquirer'
|
4 | import {Answers} from "inquirer";
|
5 | import * as path from 'path';
|
6 | import * as _ from 'lodash';
|
7 | import * as Joi from 'joi';
|
8 |
|
9 | class Module {
|
10 | options: {
|
11 | name: string;
|
12 | camelName: string;
|
13 | snakeName: string;
|
14 | capitalName: string;
|
15 | server: boolean;
|
16 | client: boolean;
|
17 | };
|
18 | constructor() {
|
19 | this.options = {
|
20 | name: null,
|
21 | camelName: null,
|
22 | snakeName: null,
|
23 | capitalName: null,
|
24 | server: null,
|
25 | client: null,
|
26 | };
|
27 | }
|
28 | getName() {
|
29 | let me = this;
|
30 | let curDir = _.last(process.cwd().split(path.sep));
|
31 | return Inquirer.prompt([{
|
32 | type: 'input',
|
33 | name: 'name',
|
34 | message: 'Module Name',
|
35 | default: me.options.name || curDir.toLowerCase(),
|
36 | validate: (name: string) => {
|
37 | if (_.isNull(Joi.validate(name, Joi.string().lowercase().required(), {convert: false}).error)) {
|
38 | return true;
|
39 | } else {
|
40 | return 'Module Name must be lowercase';
|
41 | }
|
42 | }
|
43 | }]).then((answers: Answers) => {
|
44 | me.options.name = answers.name;
|
45 | me.options.camelName = _.camelCase(answers.name);
|
46 | me.options.snakeName = _.snakeCase(answers.name);
|
47 | me.options.capitalName = me.options.camelName.charAt(0).toUpperCase() + me.options.camelName.substr(1);
|
48 | });
|
49 | }
|
50 | getServer() {
|
51 | let me = this;
|
52 | return Inquirer.prompt([{
|
53 | type: 'confirm',
|
54 | name: 'server',
|
55 | message: 'Enable server side support?',
|
56 | default: true
|
57 | }]).then((answers: Answers) => {
|
58 | me.options.server = answers.server;
|
59 | });
|
60 | }
|
61 | getClient() {
|
62 | let me = this;
|
63 | return Inquirer.prompt([{
|
64 | type: 'confirm',
|
65 | name: 'client',
|
66 | message: 'Enable client side support?',
|
67 | default: true,
|
68 | choices: ExtLB.default.default.versions,
|
69 | }]).then((answers: Answers) => {
|
70 | me.options.client = answers.client;
|
71 | });
|
72 | }
|
73 | }
|
74 |
|
75 | exports.command = 'module';
|
76 | exports.describe = 'Create a new ExtLoop Module';
|
77 | exports.builder = {};
|
78 | exports.handler = (argv: Arguments) => {
|
79 | const app = new Module();
|
80 | app.getName().then(() => {
|
81 | return app.getServer();
|
82 | }).then(() => {
|
83 | return app.getClient();
|
84 | }).then(() => {
|
85 | ExtLB.default.default.createModule(app.options);
|
86 | }).catch((err) => {
|
87 | console.error(err);
|
88 | });
|
89 | };
|