beech-api 3.9.0-beta.9-rc → 3.9.80

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 (59) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +1717 -1649
  3. package/index.js +2 -2
  4. package/package.json +92 -84
  5. package/packages/cli/beech +9 -10
  6. package/packages/cli/bin/beech-app.js +390 -390
  7. package/packages/cli/bin/beech-service.js +263 -170
  8. package/packages/cli/core/auth/Credentials.js +174 -174
  9. package/packages/cli/core/auth/Passport.js +664 -664
  10. package/packages/cli/core/auth/_Request.js +12 -12
  11. package/packages/cli/core/configure/_gitignore +16 -15
  12. package/packages/cli/core/configure/_sequelizerc +9 -9
  13. package/packages/cli/core/configure/app.config-basic.js +55 -55
  14. package/packages/cli/core/configure/app.config-sequelize.js +88 -88
  15. package/packages/cli/core/configure/beech.config.js +9 -9
  16. package/packages/cli/core/configure/global.config-basic.js +8 -8
  17. package/packages/cli/core/configure/global.config-sequelize.js +8 -8
  18. package/packages/cli/core/configure/jest.config.js +6 -6
  19. package/packages/cli/core/configure/jsconfig.json +8 -7
  20. package/packages/cli/core/configure/passport.config.js +97 -97
  21. package/packages/cli/core/databases/mysql.js +94 -95
  22. package/packages/cli/core/databases/sequelize.js +187 -188
  23. package/packages/cli/core/databases/test.js +250 -255
  24. package/packages/cli/core/file-walk/file-walk.js +35 -35
  25. package/packages/cli/core/generator/_endpoints +15 -15
  26. package/packages/cli/core/generator/_endpoints_basic +42 -42
  27. package/packages/cli/core/generator/_help +29 -19
  28. package/packages/cli/core/generator/_help_create +10 -10
  29. package/packages/cli/core/generator/_help_service +10 -10
  30. package/packages/cli/core/generator/_helpers +9 -9
  31. package/packages/cli/core/generator/_helpers_basic +166 -22
  32. package/packages/cli/core/generator/_models +6 -6
  33. package/packages/cli/core/generator/_models_basic +13 -13
  34. package/packages/cli/core/generator/_package +23 -19
  35. package/packages/cli/core/generator/_scheduler +32 -32
  36. package/packages/cli/core/generator/_spec +29 -29
  37. package/packages/cli/core/generator/index.js +1229 -992
  38. package/packages/cli/core/helpers/2fa.js +106 -106
  39. package/packages/cli/core/helpers/math.js +115 -115
  40. package/packages/cli/core/helpers/poolEntity.js +103 -103
  41. package/packages/cli/core/index.js +264 -266
  42. package/packages/cli/core/middleware/express/duplicateRequest.js +16 -16
  43. package/packages/cli/core/middleware/express/jwtCheckAllow.js +85 -85
  44. package/packages/cli/core/middleware/express/rateLimit.js +29 -29
  45. package/packages/cli/core/middleware/express/slowDown.js +2 -2
  46. package/packages/cli/core/middleware/index.js +6 -6
  47. package/packages/cli/core/middleware/origin/guard/advance.js +75 -75
  48. package/packages/cli/core/middleware/origin/whitelist/cors.js +94 -94
  49. package/packages/cli/core/services/http.express.js +481 -481
  50. package/packages/cli/core/test/check-node.js +21 -21
  51. package/packages/cli/core/test/utils.js +7 -7
  52. package/packages/cli/entry +10 -0
  53. package/packages/lib/index.js +6 -6
  54. package/packages/lib/src/endpoint.js +947 -885
  55. package/packages/lib/src/guard.js +60 -60
  56. package/packages/lib/src/salt.js +3 -3
  57. package/packages/lib/src/schema.js +96 -96
  58. package/packages/lib/src/specificExpress.js +7 -7
  59. package/packages/lib/src/user.js +271 -271
@@ -1,96 +1,95 @@
1
- const mysql = require("mysql");
2
- const { DeHashIt, M, X } = require(__dirname + "/../helpers/math");
3
- global.sql = {};
4
-
5
- exports.connect = () => {
6
- return new Promise((resolve, reject) => {
7
- try {
8
- mysqlInProcess(_config_.database_config, true, (err, result) => {
9
- if (!err) {
10
- resolve(result);
11
- } else {
12
- reject(err);
13
- }
14
- });
15
- } catch (error) {
16
- reject(error);
17
- }
18
- })
19
- }
20
-
21
- mysqlInProcess = (database_config, headDbShow, cb) => {
22
- try {
23
- let val = database_config.shift();
24
- // checking turn on db connect
25
- if (val.is_connect) {
26
- const promise = new Promise((resolve) => {
27
- // check hash ?
28
- if(val.username && val.password) {
29
- if(val.username.length < 55 || val.password < 55) {
30
- return cb("Error: Incorrect Hash access for connect to database.\n", null);
31
- }
32
- let accessDb = [];
33
- [val.username, val.password].map((e, k) => {
34
- DeHashIt(e.toString(), null, (17).toString().slice(0,-1).length, (err, d) => {
35
- if(!err) {
36
- accessDb.push(d.split("sh,")[1].split(M(X).toString().slice(0,2)+M(X).toString())[0].slice(0,-1));
37
- }
38
- });
39
- if(k+1==2) {
40
- resolve(accessDb);
41
- }
42
- });
43
- } else {
44
- resolve([null, null]);
45
- }
46
- });
47
- Promise.all([promise]).then(final => {
48
- // db connection config
49
- let connection = mysql.createConnection({
50
- host: val.host,
51
- user: final[0][0],
52
- password: final[0][1],
53
- database: val.database,
54
- charset: val.charset,
55
- port: val.port
56
- });
57
- // db connecting
58
- connection.connect(err => {
59
- if (!err) {
60
- // show only one text db connnections
61
- if (headDbShow) {
62
- console.log(' Passed  Database is connected at:');
63
- headDbShow = false;
64
- }
65
- // declare to global mysql variable
66
- sql[ val.name ] = connection;
67
- console.log('- ' + val.name + ' -> ' + connection.config.database + ':' + connection.config.port + '');
68
- // checking recursive database connection
69
- if (database_config.length > 0) {
70
- mysqlInProcess(database_config, headDbShow, e => {
71
- cb(e, true);
72
- });
73
- } else {
74
- // perfectly recursive
75
- cb(err, true);
76
- }
77
- } else {
78
- console.log(' Failed  Database `' + val.name + '` is connect failed.');
79
- cb(err, null);
80
- }
81
- });
82
- });
83
- } else {
84
- if (database_config.length > 0) {
85
- mysqlInProcess(database_config, headDbShow, e => {
86
- cb(e, true);
87
- });
88
- } else {
89
- // perfectly recursive
90
- cb(null, true);
91
- }
92
- }
93
- } catch (error) {
94
- cb(error, null);
95
- }
1
+ const mysql = require("mysql");
2
+ const { DeHashIt, M, X } = require(__dirname + "/../helpers/math");
3
+ global.sql = {};
4
+
5
+ exports.connect = () => {
6
+ return new Promise((resolve, reject) => {
7
+ try {
8
+ mysqlInProcess(_config_.database_config, true, (err, result) => {
9
+ if (!err) {
10
+ resolve(result);
11
+ } else {
12
+ reject(err);
13
+ }
14
+ });
15
+ } catch (error) {
16
+ reject(error);
17
+ }
18
+ })
19
+ }
20
+
21
+ mysqlInProcess = (database_config, headDbShow, cb) => {
22
+ try {
23
+ let val = database_config.shift();
24
+ // checking turn on db connect
25
+ if (val.is_connect) {
26
+ const promise = new Promise((resolve) => {
27
+ // check hash ?
28
+ if(val.username && val.password) {
29
+ if(val.username.length < 55 || val.password < 55) {
30
+ return cb("Error: Incorrect Hash access for connect to database.\n", null);
31
+ }
32
+ let accessDb = [];
33
+ [val.username, val.password].forEach((e, k) => {
34
+ DeHashIt(e.toString(), null, (17).toString().slice(0, -1).length, (err, d) => {
35
+ if (err) return reject(err);
36
+ accessDb[k] = d.split("sh,")[1].split(M(X).toString().slice(0, 2) + M(X).toString())[0].slice(0, -1);
37
+ if (accessDb[0] !== undefined && accessDb[1] !== undefined) {
38
+ resolve(accessDb);
39
+ }
40
+ });
41
+ });
42
+ } else {
43
+ resolve([null, null]);
44
+ }
45
+ });
46
+ Promise.all([promise]).then(final => {
47
+ // db connection config
48
+ let connection = mysql.createConnection({
49
+ host: val.host,
50
+ user: final[0][0],
51
+ password: final[0][1],
52
+ database: val.database,
53
+ charset: val.charset,
54
+ port: val.port
55
+ });
56
+ // db connecting
57
+ connection.connect(err => {
58
+ if (!err) {
59
+ // show only one text db connnections
60
+ if (headDbShow) {
61
+ console.log(' Passed  Database is connected at:');
62
+ headDbShow = false;
63
+ }
64
+ // declare to global mysql variable
65
+ sql[ val.name ] = connection;
66
+ console.log('- ' + val.name + ' -> ' + connection.config.database + ':' + connection.config.port + '');
67
+ // checking recursive database connection
68
+ if (database_config.length > 0) {
69
+ mysqlInProcess(database_config, headDbShow, e => {
70
+ cb(e, true);
71
+ });
72
+ } else {
73
+ // perfectly recursive
74
+ cb(err, true);
75
+ }
76
+ } else {
77
+ console.log(' Failed  Database `' + val.name + '` is connect failed.');
78
+ cb(err, null);
79
+ }
80
+ });
81
+ });
82
+ } else {
83
+ if (database_config.length > 0) {
84
+ mysqlInProcess(database_config, headDbShow, e => {
85
+ cb(e, true);
86
+ });
87
+ } else {
88
+ // perfectly recursive
89
+ cb(null, true);
90
+ }
91
+ }
92
+ } catch (error) {
93
+ cb(error, null);
94
+ }
96
95
  }
@@ -1,189 +1,188 @@
1
- const Sequelize = require('sequelize');
2
- const { DeHashIt, M, X } = require(__dirname + "/../helpers/math");
3
- global.sql = {};
4
-
5
- exports.connect = () => {
6
- return new Promise((resolve, reject) => {
7
- try {
8
- connectInProcess(_config_.database_config, true, (err, result) => {
9
- if (!err) {
10
- resolve(result);
11
- } else {
12
- reject(err);
13
- }
14
- });
15
- } catch (error) {
16
- reject(error);
17
- }
18
- })
19
- }
20
-
21
- connectInProcess = async (database_config, headDbShow, cb) => {
22
- try {
23
- let val = database_config.shift();
24
- // checking turn on db connect
25
- if (val.is_connect) {
26
- const promise = new Promise((resolve) => {
27
- // check hash ?
28
- if(val.username && val.password) {
29
- if(val.username.length < 55 || val.password < 55) {
30
- return cb("Error: Incorrect Hash access for connect to database.\n", null);
31
- }
32
- let accessDb = [];
33
- [val.username, val.password].map((e, k) => {
34
- DeHashIt(e.toString(), null, (17).toString().slice(0,-1).length, (err, d) => {
35
- if(!err) {
36
- accessDb.push(d.split("sh,")[1].split(M(X).toString().slice(0,2)+M(X).toString())[0].slice(0,-1));
37
- }
38
- });
39
- if(k+1==2) {
40
- resolve(accessDb);
41
- }
42
- });
43
- } else {
44
- resolve([null, null]);
45
- }
46
- });
47
- Promise.all([promise]).then(async (final) => {
48
- const sq = await new Sequelize({
49
- // one of 'mysql' | 'sqlite' | 'mariadb' | 'postgres' | 'mssql'
50
- dialect: val.dialect || "mysql",
51
-
52
- // for postgres, you can also specify an absolute path to a directory
53
- // containing a UNIX socket to connect over
54
- // host: '/sockets/psql_sockets'.
55
- host: (val.host == "localhost" || val.host == "http://localhost") ? "127.0.0.1" : val.host,
56
- username: final[0][0],
57
- password: final[0][1],
58
- database: val.database,
59
- port: val.port,
60
-
61
- // set connection timezone
62
- timezone: val.timezone || "+00:00",
63
-
64
- // the storage engine for sqlite
65
- // - default ':memory:'
66
- storage: val.storage || ":memory:",
67
-
68
- // custom protocol; default: 'tcp'
69
- // postgres only, useful for Heroku
70
- protocol: val.protocol || null,
71
- // disable logging or provide a custom logging function; default: console.log
72
- logging: val.logging || false,
73
-
74
- // you can also pass any dialect options to the underlying dialect library
75
- // - default is empty
76
- // - currently supported: 'mysql', 'postgres', 'mssql'
77
- dialectOptions: {
78
- socketPath: ((val.dialectOptions) ? ((val.dialectOptions.socketPath) ? val.dialectOptions.socketPath : "") : ""), //Applications/MAMP/tmp/mysql/mysql.sock
79
- supportBigNumbers: ((val.dialectOptions) ? ((val.dialectOptions.supportBigNumbers) ? val.dialectOptions.supportBigNumbers : false) : false),
80
- bigNumberStrings: ((val.dialectOptions) ? ((val.dialectOptions.bigNumberStrings) ? val.dialectOptions.bigNumberStrings : false) : false),
81
- options: ((val.dialectOptions) ? ((val.dialectOptions.options) ? ({ encrypt: false, ...val.dialectOptions.options }) : { encrypt: false }) : { encrypt: false }),
82
- },
83
-
84
- // disable inserting undefined values as NULL
85
- // - default: false
86
- omitNull: val.omitNull || false,
87
-
88
- // a flag for using a native library or not.
89
- // in the case of 'pg' -- set this to true will allow SSL support
90
- // - default: false
91
- native: val.native || false,
92
-
93
- // Specify options, which are used when sequelize.define is called.
94
- // The following example:
95
- // define: { timestamps: false }
96
- // is basically the same as:
97
- // Model.init(attributes, { timestamps: false });
98
- // sequelize.define(name, attributes, { timestamps: false });
99
- // so defining the timestamps for each model will be not necessary
100
- define: {
101
- underscored: ((val.define) ? ((val.define.underscored) ? val.define.underscored : false) : false),
102
- freezeTableName: ((val.define) ? ((val.define.freezeTableName === false) ? val.define.freezeTableName : true) : true),
103
- charset: ((val.define) ? ((val.define.charset) ? val.define.charset : "utf8") : "utf8"),
104
- dialectOptions: {
105
- collate: ((val.define) ? ((val.define.dialectOptions) ? ((val.define.dialectOptions.collate) ? val.define.dialectOptions.collate : "utf8_general_ci") : "utf8_general_ci") : "utf8_general_ci"),
106
- },
107
- timestamps: ((val.define) ? ((val.define.timestamps) ? val.define.timestamps : false) : false),
108
- },
109
-
110
- // similar for sync: you can define this to always force sync for models
111
- sync: {
112
- force: ((val.sync) ? ((val.sync.force) ? val.sync.force : false) : false),
113
- },
114
-
115
- // pool configuration used to pool database connections
116
- pool: {
117
- max: ((val.pool) ? ((val.pool.max) ? val.pool.max : 5) : 5),
118
- idle: ((val.pool) ? ((val.pool.idle) ? val.pool.idle : 30000) : 30000),
119
- acquire: ((val.pool) ? ((val.pool.acquire) ? val.pool.acquire : 60000) : 60000),
120
- },
121
-
122
- // isolation level of each transaction
123
- // defaults to dialect default
124
- isolationLevel: val.isolationLevel || "Transaction.ISOLATION_LEVELS.REPEATABLE_READ",
125
-
126
- // JSON response
127
- query: {
128
- raw: ((val.query) ? ((val.query.raw) ? val.query.raw : false) : false),
129
- nest: ((val.query) ? ((val.query.nest) ? val.query.nest : true) : true),
130
- }
131
- });
132
-
133
- // Hook to set `SET NAMES xxx` (ONLY MySQL)
134
- await sq.addHook('afterConnect', async (connection) => {
135
- if(val.dialect == "mysql") {
136
- let charset = ["SET NAMES", ((val.define) ? ((val.define.charset) ? val.define.charset : "utf8") : "utf8")].join(" ");
137
- connection.query(charset);
138
- }
139
- });
140
-
141
- // show only one text db connnections
142
- if (headDbShow) {
143
- console.log(' Passed  Database is connected at:');
144
- headDbShow = false;
145
- }
146
-
147
- // checking shout by dialect sql
148
- if (val.dialect == "sqlite") {
149
- // shout for sqlite
150
- console.log('- [' + val.dialect + '] ' + val.name + ' -> ' + sq.options.storage + '');
151
- } else {
152
- // shuout
153
- console.log('- [' + val.dialect + '] ' + val.name + ' -> ' + sq.config.database + ':' + sq.config.port + '');
154
- }
155
-
156
- // connection
157
- await sq.authenticate()
158
- .then(() => {
159
- // create database pool
160
- sql[ val.name ] = sq;
161
- // checking recursive database connection
162
- if (database_config.length > 0) {
163
- connectInProcess(database_config, headDbShow, e => {
164
- cb(e, true);
165
- });
166
- } else {
167
- // perfectly recursive
168
- cb(null, true);
169
- }
170
- })
171
- .catch(err => {
172
- console.log("Unable to connect to the database:", err);
173
- cb(err, null);
174
- });
175
- });
176
- } else {
177
- if (database_config.length > 0) {
178
- connectInProcess(database_config, headDbShow, e => {
179
- cb(e, true);
180
- });
181
- } else {
182
- // perfectly recursive
183
- cb(null, true);
184
- }
185
- }
186
- } catch (error) {
187
- cb(error, null);
188
- }
1
+ const Sequelize = require('sequelize');
2
+ const { DeHashIt, M, X } = require(__dirname + "/../helpers/math");
3
+ global.sql = {};
4
+
5
+ exports.connect = () => {
6
+ return new Promise((resolve, reject) => {
7
+ try {
8
+ connectInProcess(_config_.database_config, true, (err, result) => {
9
+ if (!err) {
10
+ resolve(result);
11
+ } else {
12
+ reject(err);
13
+ }
14
+ });
15
+ } catch (error) {
16
+ reject(error);
17
+ }
18
+ })
19
+ }
20
+
21
+ connectInProcess = async (database_config, headDbShow, cb) => {
22
+ try {
23
+ let val = database_config.shift();
24
+ // checking turn on db connect
25
+ if (val.is_connect) {
26
+ const promise = new Promise((resolve) => {
27
+ // check hash ?
28
+ if(val.username && val.password) {
29
+ if(val.username.length < 55 || val.password < 55) {
30
+ return cb("Error: Incorrect Hash access for connect to database.\n", null);
31
+ }
32
+ let accessDb = [];
33
+ [val.username, val.password].forEach((e, k) => {
34
+ DeHashIt(e.toString(), null, (17).toString().slice(0, -1).length, (err, d) => {
35
+ if (err) return reject(err);
36
+ accessDb[k] = d.split("sh,")[1].split(M(X).toString().slice(0, 2) + M(X).toString())[0].slice(0, -1);
37
+ if (accessDb[0] !== undefined && accessDb[1] !== undefined) {
38
+ resolve(accessDb);
39
+ }
40
+ });
41
+ });
42
+ } else {
43
+ resolve([null, null]);
44
+ }
45
+ });
46
+ Promise.all([promise]).then(async (final) => {
47
+ const sq = await new Sequelize({
48
+ // one of 'mysql' | 'sqlite' | 'mariadb' | 'postgres' | 'mssql'
49
+ dialect: val.dialect || "mysql",
50
+
51
+ // for postgres, you can also specify an absolute path to a directory
52
+ // containing a UNIX socket to connect over
53
+ // host: '/sockets/psql_sockets'.
54
+ host: (val.host == "localhost" || val.host == "http://localhost") ? "127.0.0.1" : val.host,
55
+ username: final[0][0],
56
+ password: final[0][1],
57
+ database: val.database,
58
+ port: val.port,
59
+
60
+ // set connection timezone
61
+ timezone: val.timezone || "+00:00",
62
+
63
+ // the storage engine for sqlite
64
+ // - default ':memory:'
65
+ storage: val.storage || ":memory:",
66
+
67
+ // custom protocol; default: 'tcp'
68
+ // postgres only, useful for Heroku
69
+ protocol: val.protocol || null,
70
+ // disable logging or provide a custom logging function; default: console.log
71
+ logging: val.logging || false,
72
+
73
+ // you can also pass any dialect options to the underlying dialect library
74
+ // - default is empty
75
+ // - currently supported: 'mysql', 'postgres', 'mssql'
76
+ dialectOptions: {
77
+ socketPath: ((val.dialectOptions) ? ((val.dialectOptions.socketPath) ? val.dialectOptions.socketPath : "") : ""), //Applications/MAMP/tmp/mysql/mysql.sock
78
+ supportBigNumbers: ((val.dialectOptions) ? ((val.dialectOptions.supportBigNumbers) ? val.dialectOptions.supportBigNumbers : false) : false),
79
+ bigNumberStrings: ((val.dialectOptions) ? ((val.dialectOptions.bigNumberStrings) ? val.dialectOptions.bigNumberStrings : false) : false),
80
+ options: ((val.dialectOptions) ? ((val.dialectOptions.options) ? ({ encrypt: false, ...val.dialectOptions.options }) : { encrypt: false }) : { encrypt: false }),
81
+ },
82
+
83
+ // disable inserting undefined values as NULL
84
+ // - default: false
85
+ omitNull: val.omitNull || false,
86
+
87
+ // a flag for using a native library or not.
88
+ // in the case of 'pg' -- set this to true will allow SSL support
89
+ // - default: false
90
+ native: val.native || false,
91
+
92
+ // Specify options, which are used when sequelize.define is called.
93
+ // The following example:
94
+ // define: { timestamps: false }
95
+ // is basically the same as:
96
+ // Model.init(attributes, { timestamps: false });
97
+ // sequelize.define(name, attributes, { timestamps: false });
98
+ // so defining the timestamps for each model will be not necessary
99
+ define: {
100
+ underscored: ((val.define) ? ((val.define.underscored) ? val.define.underscored : false) : false),
101
+ freezeTableName: ((val.define) ? ((val.define.freezeTableName === false) ? val.define.freezeTableName : true) : true),
102
+ charset: ((val.define) ? ((val.define.charset) ? val.define.charset : "utf8") : "utf8"),
103
+ dialectOptions: {
104
+ collate: ((val.define) ? ((val.define.dialectOptions) ? ((val.define.dialectOptions.collate) ? val.define.dialectOptions.collate : "utf8_general_ci") : "utf8_general_ci") : "utf8_general_ci"),
105
+ },
106
+ timestamps: ((val.define) ? ((val.define.timestamps) ? val.define.timestamps : false) : false),
107
+ },
108
+
109
+ // similar for sync: you can define this to always force sync for models
110
+ sync: {
111
+ force: ((val.sync) ? ((val.sync.force) ? val.sync.force : false) : false),
112
+ },
113
+
114
+ // pool configuration used to pool database connections
115
+ pool: {
116
+ max: ((val.pool) ? ((val.pool.max) ? val.pool.max : 5) : 5),
117
+ idle: ((val.pool) ? ((val.pool.idle) ? val.pool.idle : 30000) : 30000),
118
+ acquire: ((val.pool) ? ((val.pool.acquire) ? val.pool.acquire : 60000) : 60000),
119
+ },
120
+
121
+ // isolation level of each transaction
122
+ // defaults to dialect default
123
+ isolationLevel: val.isolationLevel || "Transaction.ISOLATION_LEVELS.REPEATABLE_READ",
124
+
125
+ // JSON response
126
+ query: {
127
+ raw: ((val.query) ? ((val.query.raw) ? val.query.raw : false) : false),
128
+ nest: ((val.query) ? ((val.query.nest) ? val.query.nest : true) : true),
129
+ }
130
+ });
131
+
132
+ // Hook to set `SET NAMES xxx` (ONLY MySQL)
133
+ await sq.addHook('afterConnect', async (connection) => {
134
+ if(val.dialect == "mysql") {
135
+ let charset = ["SET NAMES", ((val.define) ? ((val.define.charset) ? val.define.charset : "utf8") : "utf8")].join(" ");
136
+ connection.query(charset);
137
+ }
138
+ });
139
+
140
+ // show only one text db connnections
141
+ if (headDbShow) {
142
+ console.log(' Passed  Database is connected at:');
143
+ headDbShow = false;
144
+ }
145
+
146
+ // checking shout by dialect sql
147
+ if (val.dialect == "sqlite") {
148
+ // shout for sqlite
149
+ console.log('[/] [' + val.dialect + '] ' + val.name + ' -> ' + sq.options.storage + '');
150
+ } else {
151
+ // shuout for other sql
152
+ console.log('[/] [' + val.dialect + '] ' + val.name + ' -> ' + sq.config.database + ':' + sq.config.port + '');
153
+ }
154
+
155
+ // connection
156
+ await sq.authenticate()
157
+ .then(() => {
158
+ // create database pool
159
+ sql[ val.name ] = sq;
160
+ // checking recursive database connection
161
+ if (database_config.length > 0) {
162
+ connectInProcess(database_config, headDbShow, e => {
163
+ cb(e, true);
164
+ });
165
+ } else {
166
+ // perfectly recursive
167
+ cb(null, true);
168
+ }
169
+ })
170
+ .catch(err => {
171
+ console.log("Unable to connect to the database:", err);
172
+ cb(err, null);
173
+ });
174
+ });
175
+ } else {
176
+ if (database_config.length > 0) {
177
+ connectInProcess(database_config, headDbShow, e => {
178
+ cb(e, true);
179
+ });
180
+ } else {
181
+ // perfectly recursive
182
+ cb(null, true);
183
+ }
184
+ }
185
+ } catch (error) {
186
+ cb(error, null);
187
+ }
189
188
  }