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.
Files changed (53) hide show
  1. package/README.md +45 -16
  2. package/package.json +15 -9
  3. package/packages/cli/beech +2 -2
  4. package/packages/cli/bin/beech-service.js +305 -0
  5. package/packages/cli/bin/beech.js +133 -66
  6. package/packages/cli/core/auth/Credentials.js +34 -1
  7. package/packages/cli/core/auth/Passport.js +215 -88
  8. package/packages/cli/core/configure/{app.config.js → app.config-basic.js} +4 -4
  9. package/packages/cli/core/configure/app.config-sequelize.js +89 -0
  10. package/packages/cli/core/configure/global.config-basic.js +9 -0
  11. package/packages/cli/core/configure/global.config-sequelize.js +9 -0
  12. package/packages/cli/core/configure/passport.config.js +4 -4
  13. package/packages/cli/core/databases/{mysql.connection.js → mysql.js} +12 -11
  14. package/packages/cli/core/databases/sequelize.js +149 -0
  15. package/packages/cli/core/generator/_basic-helpers +23 -0
  16. package/packages/cli/core/generator/_basic-models +25 -0
  17. package/packages/cli/core/generator/{endpoints → _endpoints} +5 -5
  18. package/packages/cli/core/generator/_helpers +10 -0
  19. package/packages/cli/core/generator/_models +23 -0
  20. package/packages/cli/core/generator/{package → _package} +2 -2
  21. package/packages/cli/core/generator/_service +8 -0
  22. package/packages/cli/core/generator/index.js +91 -24
  23. package/packages/cli/core/index.js +11 -4
  24. package/packages/cli/core/services/http.express.js +17 -15
  25. package/packages/lib/beech.js +90 -26
  26. package/packages/package.json +20 -0
  27. package/packages/public/icon/beech_128.png +0 -0
  28. package/packages/src-/Add-on.js +9 -0
  29. package/packages/src-/endpoints/hello-endpoints.js +118 -0
  30. package/packages/src-/endpoints/test2-endpoints.js +75 -0
  31. package/packages/src-/endpoints/testSequalize-endpoints.js +23 -0
  32. package/packages/src-/helpers/my/Test.js +11 -0
  33. package/packages/src-/helpers/my/Test2.js +11 -0
  34. package/packages/src-/helpers/my/Test3.js +11 -0
  35. package/packages/src-/helpers/my/Test4.js +11 -0
  36. package/packages/src-/models/Jubu.js +29 -0
  37. package/packages/src-/models/Jubu2.js +20 -0
  38. package/packages/src-/models/Map_master.js +22 -0
  39. package/packages/{cli/core/generator/models → src-/models/Test.js} +1 -1
  40. package/packages/src-/models/Test2.js +29 -0
  41. package/packages/src-/models/User2Sequelize.js +23 -0
  42. package/packages/src-/models/Users-sqlite.js +21 -0
  43. package/packages/src-/models/Users.js +53 -0
  44. package/packages/src-/models/Uuuuuxxx.js +23 -0
  45. package/packages/src-/models/xxx/Uuuuuxxx.js +23 -0
  46. package/packages/cli/core/configure/global.config.js +0 -7
  47. /package/packages/cli/core/configure/{gitignore → _gitignore} +0 -0
  48. /package/packages/cli/core/configure/{sequelizerc → _sequelizerc} +0 -0
  49. /package/packages/cli/core/generator/{add-on → _add-on} +0 -0
  50. /package/packages/cli/core/generator/{create → _create} +0 -0
  51. /package/packages/cli/core/generator/{help → _help} +0 -0
  52. /package/packages/cli/core/generator/{spec → _spec} +0 -0
  53. /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("Beech 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
- this.makeFolder(this.argument)
44
- .then(this.copy.bind(this, tmpPackageFile, pastePackageFile))
45
- .then(this.contentReplace.bind(this, pastePackageFile, { 'application': this.argument }))
46
- .then(this.copy.bind(this, tmpConfigFile, pasteConfigFile))
47
- .then(this.copy.bind(this, tmpJestFile, pasteJestFile))
48
- .then(this.copy.bind(this, tmpJsConfigFile, pasteJsConfigFile))
49
- .then(this.copy.bind(this, tmpDotSequelizercFile, pasteDotSequelizercFile))
50
- .then(this.copy.bind(this, tmpGloablConfigFile, pasteGloablConfigFile))
51
- .then(this.copy.bind(this, tmpGitignoreFile, pasteGitignoreFile))
52
- .then(this.generateKeyConfigFile.bind(this, this.argument))
53
- .then(this.installPackage.bind(this, this.argument))
54
- .then(logUpdate("\n Processing  The `" + this.argument + "` application is creating...\n"))
55
- .catch((err) => {
56
- throw err;
57
- })
50
+ inquirer.prompt([ {
51
+ type: "list",
52
+ name: "sql",
53
+ message: "Please pick a SQL structure base:",
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: "Check the features needed for your project:",
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 Processing  The Application `" + this.argument + "` is creating...\n"))
79
+ .catch((err) => {
80
+ throw err;
81
+ });
82
+ });
83
+ });
58
84
  } else {
59
85
  resolve("\n Warning  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
- let lineStdout = "";
77
- let processYarn = this.cmd.get('cd ' + argument + ' && yarn install', (err, data) => {
78
- if (err) {
79
- this.cmd.get('cd ' + argument + ' && npm install', (err, data) => {
80
- if (err) { throw err }
81
- resolve(data);
82
- this.successfully();
83
- });
84
- } else {
85
- resolve(data);
86
- this.successfully();
87
- }
88
- });
89
- // yarn install line shoutout
90
- processYarn.stdout.on('data', (yarnData) => {
91
- lineStdout += yarnData;
92
- if (lineStdout[lineStdout.length - 1] == '\n') {
93
- logUpdate('\n' + lineStdout);
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 Faltal  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
- logUpdate('\n Passed  The project has been successfully created.\n\n $ cd ' + this.argument + '\n $ npm start or yarn start');
172
+ clear();
173
+ console.log("Beech CLI v" + require(__dirname + "/../../../package.json").version);
174
+ console.log('\n Passed  The project has been successfully created.\n\n $ cd ' + this.argument + '\n $ npm start or yarn start');
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
- let mkdirp = require('mkdirp');
145
- mkdirp(path, (err) => {
146
- if (err) {
147
- reject(err);
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 ( var i = 0; i < length; i++ ) {
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 Passed  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/create", "utf8", (err, data) => {
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