UNPKG

2.34 kBPlain TextView Raw
1import {Arguments} from 'yargs';
2import * as ExtLB from '..'
3import * as Inquirer from 'inquirer'
4import {Answers} from "inquirer";
5import * as path from 'path';
6import * as _ from 'lodash';
7import * as Joi from 'joi';
8
9class Perspective {
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: 'Perspective 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 'Perspective 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 }]).then((answers: Answers) => {
69 me.options.client = answers.client;
70 });
71 }
72}
73
74exports.command = 'perspective';
75exports.describe = 'Create a new ExtLoop Perspective';
76exports.builder = {};
77exports.handler = (argv: Arguments) => {
78 const app = new Perspective();
79 app.getName().then(() => {
80 return app.getServer();
81 }).then(() => {
82 return app.getClient();
83 }).then(() => {
84 ExtLB.default.default.createPerspective(app.options);
85 }).catch((err) => {
86 console.error(err);
87 });
88};