beech-api 3.4.12 → 3.5.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -16
- package/package.json +15 -9
- package/packages/cli/beech +2 -2
- package/packages/cli/bin/beech-service.js +305 -0
- package/packages/cli/bin/beech.js +133 -66
- package/packages/cli/core/auth/Credentials.js +34 -1
- package/packages/cli/core/auth/Passport.js +215 -88
- package/packages/cli/core/configure/{app.config.js → app.config-basic.js} +4 -4
- package/packages/cli/core/configure/app.config-sequelize.js +89 -0
- package/packages/cli/core/configure/global.config-basic.js +9 -0
- package/packages/cli/core/configure/global.config-sequelize.js +9 -0
- package/packages/cli/core/configure/passport.config.js +4 -4
- package/packages/cli/core/databases/{mysql.connection.js → mysql.js} +12 -11
- package/packages/cli/core/databases/sequelize.js +149 -0
- package/packages/cli/core/generator/_basic-helpers +23 -0
- package/packages/cli/core/generator/_basic-models +25 -0
- package/packages/cli/core/generator/{endpoints → _endpoints} +5 -5
- package/packages/cli/core/generator/_helpers +10 -0
- package/packages/cli/core/generator/_models +23 -0
- package/packages/cli/core/generator/{package → _package} +2 -2
- package/packages/cli/core/generator/_service +8 -0
- package/packages/cli/core/generator/index.js +91 -24
- package/packages/cli/core/index.js +11 -4
- package/packages/cli/core/services/http.express.js +17 -15
- package/packages/lib/beech.js +90 -26
- package/packages/package.json +20 -0
- package/packages/public/icon/beech_128.png +0 -0
- package/packages/src-/Add-on.js +9 -0
- package/packages/src-/endpoints/hello-endpoints.js +118 -0
- package/packages/src-/endpoints/test2-endpoints.js +75 -0
- package/packages/src-/endpoints/testSequalize-endpoints.js +23 -0
- package/packages/src-/helpers/my/Test.js +11 -0
- package/packages/src-/helpers/my/Test2.js +11 -0
- package/packages/src-/helpers/my/Test3.js +11 -0
- package/packages/src-/helpers/my/Test4.js +11 -0
- package/packages/src-/models/Jubu.js +29 -0
- package/packages/src-/models/Jubu2.js +20 -0
- package/packages/src-/models/Map_master.js +22 -0
- package/packages/{cli/core/generator/models → src-/models/Test.js} +1 -1
- package/packages/src-/models/Test2.js +29 -0
- package/packages/src-/models/User2Sequelize.js +23 -0
- package/packages/src-/models/Users-sqlite.js +21 -0
- package/packages/src-/models/Users.js +53 -0
- package/packages/src-/models/Uuuuuxxx.js +23 -0
- package/packages/src-/models/xxx/Uuuuuxxx.js +23 -0
- package/packages/cli/core/configure/global.config.js +0 -7
- /package/packages/cli/core/configure/{gitignore → _gitignore} +0 -0
- /package/packages/cli/core/configure/{sequelizerc → _sequelizerc} +0 -0
- /package/packages/cli/core/generator/{add-on → _add-on} +0 -0
- /package/packages/cli/core/generator/{create → _create} +0 -0
- /package/packages/cli/core/generator/{help → _help} +0 -0
- /package/packages/cli/core/generator/{spec → _spec} +0 -0
- /package/packages/{cli/core/generator/helpers → src-/helpers/Test2.js} +0 -0
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
const logUpdate = require("log-update");
|
|
3
|
+
const clear = require("cli-clear");
|
|
4
|
+
const inquirer = require('inquirer');
|
|
3
5
|
|
|
4
6
|
class Beech {
|
|
5
7
|
constructor() {
|
|
@@ -24,37 +26,61 @@ class Beech {
|
|
|
24
26
|
.then(help => resolve(help))
|
|
25
27
|
.catch(err => reject(err));
|
|
26
28
|
} else if (this.option == "create") {
|
|
29
|
+
// declare temp file and paste file
|
|
30
|
+
let tmpPackageFile = __dirname + '/../core/generator/_package';
|
|
31
|
+
let pastePackageFile = this.argument + '/package.json';
|
|
32
|
+
let tmpConfigFile = __dirname + '/../core/configure/app.config-basic.js';
|
|
33
|
+
let pasteConfigFile = this.argument + '/app.config.js';
|
|
34
|
+
let tmpJestFile = __dirname + '/../core/configure/jest.config.js';
|
|
35
|
+
let pasteJestFile = this.argument + '/jest.config.js';
|
|
36
|
+
let tmpJsConfigFile = __dirname + '/../core/configure/jsconfig.json';
|
|
37
|
+
let pasteJsConfigFile = this.argument + '/jsconfig.json';
|
|
38
|
+
let tmpDotSequelizercFile = __dirname + '/../core/configure/_sequelizerc';
|
|
39
|
+
let pasteDotSequelizercFile = this.argument + '/.sequelizerc';
|
|
40
|
+
let tmpGloablConfigFile = __dirname + '/../core/configure/global.config-basic.js';
|
|
41
|
+
let pasteGloablConfigFile = this.argument + '/global.config.js';
|
|
42
|
+
let tmpGitignoreFile = __dirname + '/../core/configure/_gitignore';
|
|
43
|
+
let pasteGitignoreFile = this.argument + '/.gitignore';
|
|
44
|
+
// start log clear screen
|
|
45
|
+
clear();
|
|
46
|
+
logUpdate("[94mBeech CLI v" + require(__dirname + "/../../../package.json").version);
|
|
47
|
+
// check argument project name
|
|
27
48
|
if (this.argument) {
|
|
28
|
-
let tmpPackageFile = __dirname + '/../core/generator/package';
|
|
29
|
-
let pastePackageFile = this.argument + '/package.json';
|
|
30
|
-
let tmpConfigFile = __dirname + '/../core/configure/app.config.js';
|
|
31
|
-
let pasteConfigFile = this.argument + '/app.config.js';
|
|
32
|
-
let tmpJestFile = __dirname + '/../core/configure/jest.config.js';
|
|
33
|
-
let pasteJestFile = this.argument + '/jest.config.js';
|
|
34
|
-
let tmpJsConfigFile = __dirname + '/../core/configure/jsconfig.json';
|
|
35
|
-
let pasteJsConfigFile = this.argument + '/jsconfig.json';
|
|
36
|
-
let tmpDotSequelizercFile = __dirname + '/../core/configure/sequelizerc';
|
|
37
|
-
let pasteDotSequelizercFile = this.argument + '/.sequelizerc';
|
|
38
|
-
let tmpGloablConfigFile = __dirname + '/../core/configure/global.config.js';
|
|
39
|
-
let pasteGloablConfigFile = this.argument + '/global.config.js';
|
|
40
|
-
let tmpGitignoreFile = __dirname + '/../core/configure/gitignore';
|
|
41
|
-
let pasteGitignoreFile = this.argument + '/.gitignore';
|
|
42
49
|
if (!this.fs.existsSync(this.argument)) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
50
|
+
inquirer.prompt([ {
|
|
51
|
+
type: "list",
|
|
52
|
+
name: "sql",
|
|
53
|
+
message: "[93mPlease pick a SQL structure base:[0m",
|
|
54
|
+
choices: [ "Basic (mysql only)", "Sequelize (mysql, sqlite, mariadb, postgres, mssql)" ],
|
|
55
|
+
} ]).then(async resSql => {
|
|
56
|
+
if (resSql.sql.split(' ')[ 0 ] != "Basic") {
|
|
57
|
+
tmpGloablConfigFile = await __dirname + '/../core/configure/global.config-sequelize.js';
|
|
58
|
+
tmpConfigFile = await __dirname + '/../core/configure/app.config-sequelize.js';
|
|
59
|
+
}
|
|
60
|
+
inquirer.prompt([ {
|
|
61
|
+
type: "checkbox",
|
|
62
|
+
name: "freature",
|
|
63
|
+
message: "[93mCheck the features needed for your project:[0m",
|
|
64
|
+
choices: [ "Add-Ons", "Basic Helper", "Passport / JWT / Official Strategy Google, Facebook" ],
|
|
65
|
+
} ]).then(resFreat => {
|
|
66
|
+
// init project
|
|
67
|
+
this.makeFolder(this.argument)
|
|
68
|
+
.then(this.copy.bind(this, tmpPackageFile, pastePackageFile))
|
|
69
|
+
.then(this.contentReplace.bind(this, pastePackageFile, { 'application': this.argument }))
|
|
70
|
+
.then(this.copy.bind(this, tmpConfigFile, pasteConfigFile))
|
|
71
|
+
.then(this.copy.bind(this, tmpJestFile, pasteJestFile))
|
|
72
|
+
.then(this.copy.bind(this, tmpJsConfigFile, pasteJsConfigFile))
|
|
73
|
+
.then(this.copy.bind(this, tmpDotSequelizercFile, pasteDotSequelizercFile))
|
|
74
|
+
.then(this.copy.bind(this, tmpGloablConfigFile, pasteGloablConfigFile))
|
|
75
|
+
.then(this.copy.bind(this, tmpGitignoreFile, pasteGitignoreFile))
|
|
76
|
+
.then(this.generateKeyConfigFile.bind(this, this.argument))
|
|
77
|
+
.then(this.installPackage.bind(this, this.argument, resFreat.freature))
|
|
78
|
+
.then(console.log("\n[104m [37mProcessing[0m [0m The Application `" + this.argument + "` is creating...\n"))
|
|
79
|
+
.catch((err) => {
|
|
80
|
+
throw err;
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
});
|
|
58
84
|
} else {
|
|
59
85
|
resolve("\n[103m[90m Warning [0m[0m The project `" + this.argument + "` it's duplicated.");
|
|
60
86
|
}
|
|
@@ -70,29 +96,72 @@ class Beech {
|
|
|
70
96
|
});
|
|
71
97
|
}
|
|
72
98
|
|
|
73
|
-
installPackage(argument) {
|
|
99
|
+
installPackage(argument, freatureArr) {
|
|
74
100
|
return new Promise((resolve, reject) => {
|
|
75
101
|
try {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
102
|
+
// install freature
|
|
103
|
+
this.installFreature(argument, freatureArr)
|
|
104
|
+
.then(res => {
|
|
105
|
+
if (res) {
|
|
106
|
+
let lineStdout = "";
|
|
107
|
+
let processYarn = this.cmd.get('cd ' + argument + ' && yarn install', (err, data) => {
|
|
108
|
+
if (err) {
|
|
109
|
+
this.cmd.get('cd ' + argument + ' && npm install', (err, data) => {
|
|
110
|
+
if (err) { throw err }
|
|
111
|
+
resolve(data);
|
|
112
|
+
this.successfully();
|
|
113
|
+
});
|
|
114
|
+
} else {
|
|
115
|
+
resolve(data);
|
|
116
|
+
this.successfully();
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
// yarn install line shoutout
|
|
120
|
+
processYarn.stdout.on('data', (yarnData) => {
|
|
121
|
+
lineStdout += yarnData;
|
|
122
|
+
if (lineStdout[ lineStdout.length - 1 ] == '\n') {
|
|
123
|
+
logUpdate('\n' + lineStdout);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
} else {
|
|
127
|
+
logUpdate("\n[101m Faltal [0m Can't install freature. Try again...");
|
|
128
|
+
}
|
|
129
|
+
})
|
|
130
|
+
.catch(err => reject(err));
|
|
131
|
+
} catch (error) {
|
|
132
|
+
reject(error);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
installFreature(argument, freatureArr) {
|
|
138
|
+
return new Promise((resolve, reject) => {
|
|
139
|
+
try {
|
|
140
|
+
let helperPath = argument + '/src/helpers/';
|
|
141
|
+
let tmpBasicHelperFile = __dirname + '/../core/generator/_basic-helpers';
|
|
142
|
+
let pasteBasicHelperFile = helperPath + '/Basic.js';
|
|
143
|
+
let freatureLength = freatureArr.length;
|
|
144
|
+
if (freatureLength) {
|
|
145
|
+
freatureArr.map((f, key) => {
|
|
146
|
+
if (f.split(' ')[ 0 ] == "Add-Ons") {
|
|
147
|
+
(process.env.NODE_ENV == "development") ? this.cmd.get('cd ' + argument + ' && node cli/bin/beech.js add-on init') : this.cmd.get('cd ' + argument + ' && beech add-on init');
|
|
148
|
+
console.log("[" + (key + 1) + "/" + freatureLength + "] Installing Add-Ons");
|
|
149
|
+
}
|
|
150
|
+
if (f.split(' ')[ 0 ] == "Basic") {
|
|
151
|
+
this.makeFolder(helperPath).then(this.copy.bind(this, tmpBasicHelperFile, pasteBasicHelperFile))
|
|
152
|
+
console.log("[" + (key + 1) + "/" + freatureLength + "] Installing Basic helper");
|
|
153
|
+
}
|
|
154
|
+
if (f.split(' ')[ 0 ] == "Passport") {
|
|
155
|
+
(process.env.NODE_ENV == "development") ? this.cmd.get('cd ' + argument + ' && node cli/bin/beech.js passport init') : this.cmd.get('cd ' + argument + ' && beech passport init');
|
|
156
|
+
console.log("[" + (key + 1) + "/" + freatureLength + "] Installing Passport JWT, Official strategy Google, Facebook");
|
|
157
|
+
}
|
|
158
|
+
if (freatureArr.length == (key + 1)) {
|
|
159
|
+
resolve(true);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
} else {
|
|
163
|
+
resolve(true);
|
|
164
|
+
}
|
|
96
165
|
} catch (error) {
|
|
97
166
|
reject(error);
|
|
98
167
|
}
|
|
@@ -100,7 +169,9 @@ class Beech {
|
|
|
100
169
|
}
|
|
101
170
|
|
|
102
171
|
successfully() {
|
|
103
|
-
|
|
172
|
+
clear();
|
|
173
|
+
console.log("[94mBeech CLI v" + require(__dirname + "/../../../package.json").version);
|
|
174
|
+
console.log('\n[102m[90m Passed [0m[0m The project has been successfully created.\n\n [37m$[0m [36mcd ' + this.argument + '[0m\n [37m$[0m [36mnpm start[0m or [36myarn start[0m');
|
|
104
175
|
}
|
|
105
176
|
|
|
106
177
|
async contentReplace(pathFile, textCondition) {
|
|
@@ -141,14 +212,10 @@ class Beech {
|
|
|
141
212
|
*/
|
|
142
213
|
return new Promise((resolve, reject) => {
|
|
143
214
|
try {
|
|
144
|
-
|
|
145
|
-
mkdirp(path
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
} else {
|
|
149
|
-
resolve(path);
|
|
150
|
-
}
|
|
151
|
-
})
|
|
215
|
+
const mkdirp = require("mkdirp");
|
|
216
|
+
mkdirp(path)
|
|
217
|
+
.then(p => resolve(p))
|
|
218
|
+
.catch(err => reject(err));
|
|
152
219
|
} catch (error) {
|
|
153
220
|
reject(error);
|
|
154
221
|
}
|
|
@@ -183,7 +250,7 @@ class Beech {
|
|
|
183
250
|
let result = '';
|
|
184
251
|
let characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
185
252
|
let charactersLength = characters.length;
|
|
186
|
-
for (
|
|
253
|
+
for (var i = 0; i < length; i++) {
|
|
187
254
|
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
188
255
|
}
|
|
189
256
|
resolve(md5(result + secret));
|
|
@@ -217,7 +284,7 @@ class Beech {
|
|
|
217
284
|
} else {
|
|
218
285
|
resolve("\n[102m[90m Passed [0m[0m App secret it's new generated.");
|
|
219
286
|
}
|
|
220
|
-
});
|
|
287
|
+
});
|
|
221
288
|
});
|
|
222
289
|
}
|
|
223
290
|
});
|
|
@@ -230,7 +297,7 @@ class Beech {
|
|
|
230
297
|
help() {
|
|
231
298
|
return new Promise((resolve, reject) => {
|
|
232
299
|
try {
|
|
233
|
-
this.fs.readFile(__dirname + "/../core/generator/
|
|
300
|
+
this.fs.readFile(__dirname + "/../core/generator/_create", "utf8", (err, data) => {
|
|
234
301
|
if (err) {
|
|
235
302
|
reject(err);
|
|
236
303
|
} else {
|
|
@@ -249,10 +316,10 @@ class Beech {
|
|
|
249
316
|
this.fs = require("fs");
|
|
250
317
|
this.cmd = require('node-cmd');
|
|
251
318
|
this.argv = argv;
|
|
252
|
-
this.option = argv[2];
|
|
253
|
-
this.argument = argv[3];
|
|
254
|
-
this.special = argv[4];
|
|
255
|
-
this.extra = argv[5];
|
|
319
|
+
this.option = argv[ 2 ];
|
|
320
|
+
this.argument = argv[ 3 ];
|
|
321
|
+
this.special = argv[ 4 ];
|
|
322
|
+
this.extra = argv[ 5 ];
|
|
256
323
|
resolve(this);
|
|
257
324
|
} catch (error) {
|
|
258
325
|
reject(error);
|
|
@@ -4,15 +4,48 @@ module.exports = {
|
|
|
4
4
|
return passport.authenticate("jwt", {
|
|
5
5
|
session: false
|
|
6
6
|
}, (err, user, info) => {
|
|
7
|
+
// error check
|
|
7
8
|
if (err) {
|
|
8
9
|
console.log(err, info);
|
|
9
10
|
return next(err);
|
|
10
11
|
}
|
|
12
|
+
// anything token check
|
|
11
13
|
if (!user) {
|
|
14
|
+
if (info.name == 'TokenExpiredError') {
|
|
15
|
+
return res.status(401).json({
|
|
16
|
+
code: 401,
|
|
17
|
+
status: 'error',
|
|
18
|
+
error: 'TOKEN_EXPIRED',
|
|
19
|
+
message: info
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
if (info.name == 'Error') {
|
|
23
|
+
return res.status(401).json({
|
|
24
|
+
code: 401,
|
|
25
|
+
status: 'error',
|
|
26
|
+
error: 'NO_AUTH_TOKEN',
|
|
27
|
+
message: {
|
|
28
|
+
name: 'NoTokenError',
|
|
29
|
+
message: 'No auth token'
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
if (info.name == 'SyntaxError') {
|
|
34
|
+
return res.status(401).json({
|
|
35
|
+
code: 401,
|
|
36
|
+
status: 'error',
|
|
37
|
+
error: 'PAYLOAD_SYNTAX_ERROR',
|
|
38
|
+
message: {
|
|
39
|
+
name: 'SyntaxError',
|
|
40
|
+
message: 'Unexpected token < in JSON at position 0'
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
12
44
|
return res.status(401).json({
|
|
13
45
|
code: 401,
|
|
14
46
|
status: 'error',
|
|
15
|
-
error: 'UNAUTHORIZED_USER'
|
|
47
|
+
error: 'UNAUTHORIZED_USER',
|
|
48
|
+
message: info
|
|
16
49
|
});
|
|
17
50
|
}
|
|
18
51
|
// Forward user information to the next middleware
|