UNPKG

8.17 kBJavaScriptView Raw
1"use strict";
2exports.__esModule = true;
3var __1 = require("..");
4var Inquirer = require("inquirer");
5var path = require("path");
6var _ = require("lodash");
7var Joi = require("joi");
8var pluralize = require("pluralize");
9var shelljs = require("shelljs");
10var Model = (function () {
11 function Model() {
12 this.options = {
13 name: null,
14 camelName: null,
15 snakeName: null,
16 capitalName: null,
17 dataSource: null,
18 baseClass: null,
19 public: null,
20 pluralName: null,
21 type: null
22 };
23 }
24 Model.prototype.getName = function () {
25 var me = this;
26 var curDir = _.last(process.cwd().split(path.sep));
27 return Inquirer.prompt([{
28 type: 'input',
29 name: 'name',
30 message: 'Model Name:',
31 "default": me.options.name || curDir.toLowerCase(),
32 validate: function (name) {
33 if (_.isNull(Joi.validate(name, Joi.string().required(), { convert: false }).error)) {
34 return true;
35 }
36 else {
37 return 'Model Name is required!';
38 }
39 }
40 }]).then(function (answers) {
41 me.options.name = answers.name;
42 me.options.camelName = _.camelCase(answers.name);
43 me.options.snakeName = _.snakeCase(answers.name);
44 me.options.capitalName = me.options.camelName.charAt(0).toUpperCase() + me.options.camelName.substr(1);
45 return me.options.name;
46 });
47 };
48 Model.prototype.getDataSource = function () {
49 var me = this;
50 return Inquirer.prompt([{
51 type: 'list',
52 name: 'dataSource',
53 message: "Select the data-source to attach " + me.options.name + " to?",
54 choices: [
55 {
56 name: 'Persisted DataBase (db)',
57 value: 'db'
58 }, {
59 name: 'Memory DataBase (memoryDb)',
60 value: 'memoryDb'
61 }, {
62 name: 'Other',
63 value: 'other'
64 }
65 ],
66 "default": 'db'
67 }]).then(function (answers) {
68 if (answers.dataSource === 'other') {
69 return Inquirer.prompt([{
70 type: 'input',
71 name: 'dataSource',
72 message: "Enter data-source to attach " + me.options.name + " to:",
73 validate: function (name) {
74 if (_.isNull(Joi.validate(name, Joi.string().required(), { convert: false }).error)) {
75 return true;
76 }
77 else {
78 return 'Data Source name is required!';
79 }
80 }
81 }]).then(function (answers) {
82 me.options.dataSource = answers.dataSource;
83 return answers.dataSource;
84 });
85 }
86 else {
87 me.options.dataSource = answers.dataSource;
88 return answers.dataSource;
89 }
90 });
91 };
92 Model.prototype.getBaseClass = function () {
93 var me = this;
94 var choices = __1["default"]["default"].models;
95 var localModels = null;
96 if (shelljs.test('-e', "" + process.cwd() + path.sep + "config" + path.sep + "server" + path.sep + "model-config.json")) {
97 localModels = require("" + process.cwd() + path.sep + "config" + path.sep + "server" + path.sep + "model-config.json");
98 }
99 else if (shelljs.test('-e', "" + process.cwd() + path.sep + "server" + path.sep + "model-config.json")) {
100 localModels = require("" + process.cwd() + path.sep + "server" + path.sep + "model-config.json");
101 }
102 if (!_.isNull(localModels)) {
103 _.each(_.keys(localModels), function (localModel) {
104 if (_.findIndex(choices, { name: localModel }) === -1) {
105 choices.push({
106 name: localModel,
107 value: localModel
108 });
109 }
110 });
111 }
112 return Inquirer.prompt([{
113 type: 'list',
114 name: 'baseClass',
115 message: 'Select model\'s base class:',
116 choices: __1["default"]["default"].models,
117 "default": 'PersistedModel'
118 }]).then(function (answers) {
119 if (answers.baseClass === 'custom') {
120 return Inquirer.prompt([{
121 type: 'input',
122 name: 'baseClass',
123 message: 'Select model\'s base class:',
124 validate: function (name) {
125 if (_.isNull(Joi.validate(name, Joi.string().required(), { convert: false }).error)) {
126 return true;
127 }
128 else {
129 return 'Base Class name is required!';
130 }
131 }
132 }]).then(function (answers) {
133 me.options.baseClass = answers.baseClass;
134 return answers.baseClass;
135 });
136 }
137 else {
138 me.options.baseClass = answers.baseClass;
139 return answers.baseClass;
140 }
141 });
142 };
143 Model.prototype.getPublic = function () {
144 var me = this;
145 return Inquirer.prompt([{
146 type: 'confirm',
147 name: 'public',
148 message: "Expose " + me.options.name + " via the REST API?",
149 "default": true
150 }]).then(function (answers) {
151 me.options.public = answers.public;
152 return answers.public;
153 });
154 };
155 Model.prototype.getPlural = function () {
156 var me = this;
157 return Inquirer.prompt([{
158 type: 'input',
159 name: 'plural',
160 message: 'Custom plural form (used to build REST URL):',
161 "default": pluralize.plural(me.options.name),
162 validate: function (name) {
163 if (_.isNull(Joi.validate(name, Joi.string().required(), { convert: false }).error)) {
164 return true;
165 }
166 else {
167 return 'Plural form is required!';
168 }
169 }
170 }]).then(function (answers) {
171 me.options.pluralName = answers.plural;
172 return answers.plural;
173 });
174 };
175 Model.prototype.getType = function () {
176 var me = this;
177 return Inquirer.prompt([{
178 type: 'list',
179 name: 'type',
180 message: 'Common model or server only?',
181 choices: [
182 { name: 'common', value: 'common' },
183 { name: 'server', value: 'server' },
184 ],
185 "default": 'common'
186 }]).then(function (answers) {
187 me.options.type = answers.type;
188 return answers.type;
189 });
190 };
191 return Model;
192}());
193exports.command = 'model';
194exports.describe = 'Create a new ExtLoop Model';
195exports.builder = {};
196exports.handler = function (argv) {
197 var app = new Model();
198 app.getName().then(function () {
199 return app.getDataSource();
200 }).then(function () {
201 return app.getBaseClass();
202 }).then(function () {
203 return app.getPublic();
204 }).then(function () {
205 return app.getPlural();
206 }).then(function () {
207 return app.getType();
208 }).then(function () {
209 __1["default"]["default"].createModel(app.options);
210 })["catch"](function (err) {
211 console.error(err);
212 });
213};
214//# sourceMappingURL=model.js.map
\No newline at end of file