1 | "use strict";
|
2 | exports.__esModule = true;
|
3 | var __1 = require("..");
|
4 | var Inquirer = require("inquirer");
|
5 | var path = require("path");
|
6 | var _ = require("lodash");
|
7 | var Joi = require("joi");
|
8 | var pluralize = require("pluralize");
|
9 | var shelljs = require("shelljs");
|
10 | var 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 | }());
|
193 | exports.command = 'model';
|
194 | exports.describe = 'Create a new ExtLoop Model';
|
195 | exports.builder = {};
|
196 | exports.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 |
|
\ | No newline at end of file |