zet-lib 1.0.0 → 1.0.1

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/lib/Util.js CHANGED
@@ -863,8 +863,7 @@ Util.virtualHelper = function (obj) {
863
863
  return str;
864
864
  };
865
865
 
866
-
867
- Util.nots = ['id', 'createdAt', 'updatedAt', 'createdBy', 'updatedBy', 'created_at', 'updated_at', 'created_by', 'updated_by', 'modified_by', 'companyId', 'company_id'];
866
+ Util.nots = ['id', 'createdAt', 'updatedAt', 'createdBy', 'updatedBy', 'companyId', 'created_at', 'updated_at','updated_by', 'created_by', 'modified_by', 'company_id', 'token', 'version', 'signin_method', 'lastLogin', 'last_login', 'forgotPassword', 'forgot_password','no', 'actionColumn'];
868
867
 
869
868
  Util.requiredFields = function (obj) {
870
869
  var nots = Util.nots;
package/lib/index.js CHANGED
@@ -22,6 +22,7 @@ module.exports = {
22
22
  zReport: require('./zReport'),
23
23
  zRoute: require('./zRoute'),
24
24
  zRole : require('./zRole'),
25
+ zPage: require('./zPage'),
25
26
  zTester: require('./zTester'),
26
27
  zCache : require('./zCache'),
27
28
  UI : require('./UI')
package/lib/io.js CHANGED
@@ -37,7 +37,6 @@ io.on('connection', function (socket) {
37
37
  socket.on('room', function(room) {
38
38
  socket.join(room);
39
39
  });
40
-
41
40
  });
42
41
 
43
42
  io.socketArray = socketArray;
package/lib/zCache.js CHANGED
@@ -11,7 +11,6 @@ const zCache = {};
11
11
  //constants
12
12
  zCache.KEYS = {
13
13
  ROUTES: "ROUTES",
14
- TABLES: "TABLES",
15
14
  MYMODELS: "MYMODELS",
16
15
  ROLES: "ROLES",
17
16
  CONFIG: "CONFIG",
@@ -57,11 +56,10 @@ const cache = async()=> {
57
56
  } else {
58
57
  await zCache.ROUTES();
59
58
  }
60
- if (myCache.has("TABLES")) {
59
+ if (myCache.has("MYMODELS")) {
61
60
  i = i + 1;
62
61
  } else {
63
- //console.log("cache TABLES not exist " + i)
64
- await zCache.TABLES();
62
+ await zCache.MYMODELS();
65
63
  }
66
64
  if (myCache.has("CONFIG")) {
67
65
  i = i + 1;
@@ -103,8 +101,8 @@ zCache.renew = async()=> {
103
101
  await zCache.ROLES();
104
102
  await zCache.MENU();
105
103
  await zCache.CONFIG();
106
- await zCache.TABLES();
107
104
  await zCache.ROUTES();
105
+ await zCache.MYMODELS();
108
106
  await zCache.MENU_SYSTEMS();
109
107
  await zCache.MODELS_RELATIONS();
110
108
  };
@@ -119,24 +117,16 @@ zCache.ROUTES = () => {
119
117
  }
120
118
  };
121
119
 
122
- zCache.TABLES = () => {
123
- let routes = zCache.get("ROUTES");
124
- let modelsDirectory = path.join(directory, 'models');
125
- let tables = [], obj = {};
126
- routes.forEach((table) => {
127
- if (fs.existsSync(modelsDirectory + "/" + table + ".js")) {
128
- tables.push(table);
129
- let MYMODEL = require("./../models/" + table);
130
- obj[table] = MYMODEL;
131
- }
132
- });
133
- myCache.set("TABLES", tables);
134
- myCache.set("MYMODELS", obj);
135
- //add to version after set
136
- zCache.updateVersions("TABLES")
137
- zCache.updateVersions("MYMODELS")
138
120
 
139
- };
121
+ zCache.MYMODELS = () => {
122
+ if(myCache.has("MYMODELS")) {
123
+ return myCache.get("MYMODELS");
124
+ } else {
125
+ const models = zRoute.MYMODELS();
126
+ myCache.set("MYMODELS", models);
127
+ return models;
128
+ }
129
+ }
140
130
 
141
131
  zCache.ROLES = async() => {
142
132
  let r = 0;
@@ -212,9 +202,6 @@ zCache.CONFIG = async() => {
212
202
  zCache.updateVersions(zCache.KEYS.CONFIG)
213
203
  };
214
204
 
215
- zCache.MYMODELS = () => {
216
- zCache.TABLES();
217
- }
218
205
 
219
206
  zCache.MENU = async() => {
220
207
  let results = async() => {
package/lib/zPage.js ADDED
@@ -0,0 +1,188 @@
1
+ /**
2
+ * For dynamic router
3
+ */
4
+ const axios = require('axios');
5
+ const fs = require('fs-extra');
6
+ const nodemailer = require('nodemailer');
7
+ const qs = require('qs');
8
+ const moment = require('moment');
9
+ const pm2 = require('pm2');
10
+ const { minify } = require('html-minifier-terser');
11
+ const connection = require('./connection');
12
+ const Util = require('./Util');
13
+ const myCache = require('./cache');
14
+
15
+ const zpage = {};
16
+
17
+ zpage.build = async (req, res) => {
18
+ let layouts = await connection.results({
19
+ table : "zlayout"
20
+ });
21
+ let layoutObj = Util.arrayToObject(layouts,"id");
22
+ let results = await connection.results({
23
+ table: "zpage",
24
+ where: {
25
+ active: 1
26
+ }
27
+ });
28
+ let server_code = zpage.coreCode();
29
+ results.forEach(function (result) {
30
+ server_code += zpage.createRoute(result, res.locals.token, layoutObj);
31
+ server_code += Util.newLine;
32
+ });
33
+ server_code += `module.exports = router;`;
34
+
35
+ fs.writeFileSync(dirRoot + "/routes/zindex.js", server_code, 'utf-8');
36
+ if (process.env.NODE_ENV === "production") {
37
+ setTimeout(function () {
38
+ pm2.connect(function (err) {
39
+ if (err) {
40
+ console.log(err.toString());
41
+ }
42
+ pm2.restart(process.env.PM2_NAME, (err, proc) => {
43
+ //io.to(room).emit("message","Restart done")
44
+ });
45
+ });
46
+ }, 3000)
47
+ }
48
+ };
49
+
50
+ zpage.coreCode = () => {
51
+ return `const router = require('express').Router();
52
+ const csrf = require('csurf');
53
+ const csrfProtection = csrf({cookie: true});
54
+ const fs = require('fs-extra');
55
+ const qs = require('qs');
56
+ const axios = require('axios');
57
+ const nodemailer = require('nodemailer');
58
+ const {zRoute, zRole, connection, Util, io, zCache, debug, moduleLib, zFunction } = require('zet-lib');
59
+
60
+ `;
61
+ };
62
+
63
+ zpage.createRoute = (obj, token, layoutObj) => {
64
+ const MYMODELS = myCache.get('MYMODELS');
65
+ const MYMODEL = MYMODELS.zpage;
66
+ let DIR = dirRoot + "/views/zindex";
67
+ let METHOD = MYMODEL.widgets.method.fields;
68
+ let layout = "new-blank.ejs";
69
+ if (obj.layouts == 2) {
70
+ layout = "one.ejs"
71
+ } else if (obj.layouts == 3) {
72
+ layout = "two.ejs";
73
+ } else if(obj.layouts == 4) {
74
+ layout = layoutObj[obj.layout_id].name+".ejs" || "blank.ejs";
75
+ }
76
+
77
+ let renderDataforGet = "";
78
+ let routerforGet = "";
79
+ if (obj.method == 1) {
80
+ renderDataforGet = `renderData.csrfToken = req.csrfToken()`;
81
+ routerforGet = "csrfProtection, "
82
+ }
83
+ let commonData = {
84
+ company_id: obj.company_id,
85
+ updated_by: obj.updated_by,
86
+ created_by: obj.created_by
87
+ };
88
+ let ioto = `io.to("${token}").emit("error", e.toString())`;
89
+
90
+ let render = "";
91
+ let renderData = "";
92
+ if (obj.head) {
93
+ fs.writeFileSync(`${DIR}/page${obj.id}-head.ejs`, obj.head, 'utf-8');
94
+ renderData += `renderData.renderHead = "zindex/page${obj.id}-head.ejs"; `
95
+ } else {
96
+ fs.unlink(`${DIR}/page${obj.id}-head.ejs`, function (err) {
97
+ if (err) return console.log(err);
98
+ console.log('file deleted successfully');
99
+ });
100
+ }
101
+
102
+ let isrenderPage = false;
103
+ if (obj.client_code) {
104
+ fs.writeFileSync(`${DIR}/page${obj.id}.ejs`, obj.client_code, 'utf-8');
105
+ renderData += `renderData.renderBody = "zindex/page${obj.id}.ejs"; `
106
+ isrenderPage = true;
107
+ } else {
108
+ fs.unlink(`${DIR}/page${obj.id}.ejs`, function (err) {
109
+ if (err) return console.log(err);
110
+ console.log('file deleted successfully');
111
+ });
112
+ }
113
+ //optional
114
+ if(!isrenderPage && obj.method == 1) {
115
+ fs.writeFileSync(`${DIR}/page${obj.id}.ejs`, obj.client_code, 'utf-8');
116
+ renderData += `renderData.renderBody = "zindex/page${obj.id}.ejs"; `
117
+ }
118
+ //end optional
119
+ if (obj.scripts) {
120
+ fs.writeFileSync(`${DIR}/page${obj.id}-script.ejs`, obj.scripts, 'utf-8');
121
+ renderData += `renderData.renderEnd = "zindex/page${obj.id}-script.ejs"; `
122
+ } else {
123
+ fs.unlink(`${DIR}/page${obj.id}-script.ejs`, function (err) {
124
+ if (err) return console.log(err);
125
+ console.log('file deleted successfully');
126
+ });
127
+ }
128
+ if (renderData) {
129
+ render += `${Util.tab}res.render("layouts/${layout}", renderData);`;
130
+ }
131
+ let scripts = `router.${METHOD[obj.method]}('${obj.page}', ${routerforGet} async(req,res) => {
132
+ try {
133
+ let renderData = {}
134
+ let commonData = ${JSON.stringify(commonData)};
135
+ commonData.updated_at = Util.now();
136
+ commonData.created_at = Util.now();
137
+ ${renderDataforGet}
138
+ let layout = "${layout}";
139
+ ${obj.server_code}
140
+ ${renderData}
141
+ ${render}
142
+ } catch (e) {
143
+ console.log(e);
144
+ ${ioto}
145
+ res.json(e.toString());
146
+ }
147
+ }); ${Util.newLine}
148
+ `;
149
+
150
+ return scripts;
151
+ };
152
+
153
+
154
+ zpage.buildLayout = async (obj) => {
155
+ let name = Util.toName(obj.name);
156
+ if (obj.active) {
157
+ let html = await minify(obj.code,{
158
+ removeComments:true,
159
+ minifyJS:true,
160
+ minifyCSS:true,
161
+ collapseWhitespace: true
162
+ });
163
+ fs.writeFileSync(dirRoot + "/views/layouts/" + name + ".ejs", html, 'utf-8');
164
+ if (process.env.NODE_ENV === "production") {
165
+ setTimeout(function () {
166
+ pm2.connect(function (err) {
167
+ if (err) {
168
+ console.log(err.toString());
169
+ }
170
+ pm2.restart(process.env.PM2_NAME, (err, proc) => {
171
+ //io.to(room).emit("message","Restart done")
172
+ });
173
+ });
174
+ }, 3000)
175
+ }
176
+ }
177
+ };
178
+
179
+ zpage.layoutDelete = async (obj) => {
180
+ let name = Util.toName(obj.name);
181
+ let path = dirRoot + "/views/layouts/customs/" + name + ".ejs"
182
+ fs.unlink(path, function (err) {
183
+ if (err) return console.log(err);
184
+ console.log('file deleted successfully');
185
+ });
186
+ };
187
+
188
+ module.exports = zpage;
package/lib/zRoute.js CHANGED
@@ -7,10 +7,12 @@ const qs = require('qs');
7
7
  //for generate PDF
8
8
  const puppeteer = require('puppeteer');
9
9
  const ejs = require('ejs');
10
+ const uglifyJS = require("uglify-js");
11
+ const Excel = require('exceljs');
12
+ const fs = require('fs-extra');
10
13
  const Util = require('./Util');
11
14
  const connection = require('./connection');
12
15
  const gridTable = 'zgrid';
13
- const fs = require('fs-extra');
14
16
  const io = require('./io');
15
17
  const myCache = require('./cache');
16
18
  const moment = require('moment');
@@ -78,6 +80,7 @@ zRoute.postData = (obj) => {
78
80
  };
79
81
 
80
82
  zRoute.post = (req, res, MYMODEL, routeName, body) => {
83
+ const MYMODELS = myCache.get('MYMODELS');
81
84
  routeName = routeName || MYMODEL.routeName;
82
85
  body = body || req.body;
83
86
  let post = qs.parse(body);
@@ -89,7 +92,7 @@ zRoute.post = (req, res, MYMODEL, routeName, body) => {
89
92
  let checkboxes = [];
90
93
  let multies = [];
91
94
  fs.ensureDir(path_tmp, err => {
92
- console.log('ensureDir',err); // => null
95
+ //console.log('ensureDir',err); // => null
93
96
  });
94
97
  if (!isEmptyFiles) {
95
98
  files = qs.parse(req.files);
@@ -100,12 +103,12 @@ zRoute.post = (req, res, MYMODEL, routeName, body) => {
100
103
  hasFile = true;
101
104
  //add folder again
102
105
  fs.ensureDir(path_tmp + key, err => {
103
- console.log('ensureDir',err); // => null
106
+ //console.log('ensureDir',err); // => null
104
107
  });
105
108
  } else {
106
109
  fileRoute[key].mv(path_tmp + filename, function (err) {
107
110
  if (err) {
108
- console.log('fileempty move',err); // => null
111
+ //console.log('fileempty move',err); // => null
109
112
  return res.status(500).send(err);
110
113
  }
111
114
  });
@@ -163,7 +166,7 @@ zRoute.post = (req, res, MYMODEL, routeName, body) => {
163
166
  break;
164
167
 
165
168
  case "table" :
166
- const MODEL_TABLE = require('./../models/' + widgets[key].table);
169
+ const MODEL_TABLE = MYMODELS[widgets[key].table];
167
170
  const postTableData = post[routeName][key];
168
171
  const widgetTables = MODEL_TABLE.widgets;
169
172
  const dataTable = []
@@ -283,6 +286,7 @@ zRoute.ajax = async (req, res) => {
283
286
  let table = body.table;
284
287
  let type = body.type;
285
288
  let results;
289
+ const MYMODELS = myCache.get('MYMODELS');
286
290
  let obj = {
287
291
  table: table
288
292
  };
@@ -304,7 +308,7 @@ zRoute.ajax = async (req, res) => {
304
308
  if (!params.hasOwnProperty(table)) {
305
309
  io.to(res.locals.token).emit("error", "You have no access to this page");
306
310
  }
307
- let MYMODEL = require(`./../models/${table}`);
311
+ let MYMODEL = MYMODELS[table];
308
312
  if (type == "select") {
309
313
  if (params[table].includes("index")) {
310
314
  results = await connection.results(obj)
@@ -392,7 +396,8 @@ zRoute.selectData = (MYMODEL) => {
392
396
 
393
397
  zRoute.relations = async (req, res, table) => {
394
398
  try {
395
- const MYMODEL = require("./../models/" + table);
399
+ const MYMODELS = myCache.get('MYMODELS');
400
+ const MYMODEL = MYMODELS[table];
396
401
  let relations = {}
397
402
  relations["zattributes"] = {}
398
403
  relations["zvirtuals"] = {}
@@ -408,7 +413,6 @@ zRoute.relations = async (req, res, table) => {
408
413
  const widget = MYMODEL.widgets[key];
409
414
  const widgetName = MYMODEL.widgets[key].name;
410
415
  let emptyArray = Util.arrayUnShift(['id', 'zname']);
411
-
412
416
  if (widgetName == "dropdown_multi") {
413
417
  let obj = {
414
418
  select: widget.fields.join(",") + " as zname ",
@@ -429,8 +433,8 @@ zRoute.relations = async (req, res, table) => {
429
433
  relations[key] = [Util.arrayUnShift(['id', 'zname']), ...results];
430
434
  relations[keyObject] = Util.arrayWithObject(relations[key], 'id', 'zname');
431
435
  } else if (widgetName == "table") {
432
- let MODEL_TABLE = require(`./../models/${widget.table}`);
433
- let nots = [...CONFIG.generator.notRenderField, ...['no', 'actionColumn']];
436
+ let MODEL_TABLE = MYMODELS[widget.table];
437
+ let nots = Util.nots;
434
438
  let obj = {}
435
439
  let visibles = MODEL_TABLE.grids.visibles;
436
440
  let invisibles = MODEL_TABLE.grids.invisibles;
@@ -451,11 +455,10 @@ zRoute.relations = async (req, res, table) => {
451
455
  relations[`properties_${key}`] = properties;
452
456
  relations[keyRow] = await zRoute.relations(req, res, widget.table);
453
457
  relations[key + "Table"] = widget.table;
454
- //let MODEL_TABLE = require("./../models/" + MYMODEL.widgets[key].table);
455
458
  relations[key + "TABLE"] = await zRoute.relations(req, res, MODEL_TABLE.table);
456
459
 
457
460
  } else if (widgetName == "multi_line_editor") {
458
- let MODEL_TABLE = require(`./../models/${widget.table}`);
461
+ let MODEL_TABLE = MYMODELS[widget.table];
459
462
  relations[keyFields] = MYMODEL.widgets[key].fields;
460
463
  relations[key] = await zRoute.relations(req, res, widget.table);
461
464
 
@@ -1056,6 +1059,7 @@ zRoute.excelQuery = async (req, res, MYMODEL) => {
1056
1059
  let fields = [];
1057
1060
  let body = {};
1058
1061
  let select = "";
1062
+ let arr = [];
1059
1063
  let allfields = Object.keys(MYMODEL.widgets);
1060
1064
  if (results.length) {
1061
1065
  let result = results[0];
@@ -1064,8 +1068,8 @@ zRoute.excelQuery = async (req, res, MYMODEL) => {
1064
1068
  select = Util.selectMysql(fields);
1065
1069
  if (zall) {
1066
1070
  let difference = allfields.filter(x => !fields.includes(x));
1067
- let arr = [...fields, ...difference];
1068
- select = arr.join(",");
1071
+ arr = [...fields, ...difference];
1072
+ select =`"${arr.join('","')}"`;
1069
1073
  }
1070
1074
  let whereArray = [];
1071
1075
  let columns = body.columns;
@@ -1106,7 +1110,7 @@ zRoute.excelQuery = async (req, res, MYMODEL) => {
1106
1110
  });
1107
1111
  }
1108
1112
  if (zall) {
1109
- fields = select.split(",");
1113
+ fields = arr;
1110
1114
  }
1111
1115
 
1112
1116
  const ztype = reqQuery.ztype == 1 ? true : false;
@@ -1121,7 +1125,6 @@ zRoute.excelQuery = async (req, res, MYMODEL) => {
1121
1125
  zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
1122
1126
  //if any other custom value then callback needed
1123
1127
  callback = callback || function () {};
1124
- const Excel = require('exceljs');
1125
1128
  const workbook = new Excel.Workbook();
1126
1129
  let worksheet = workbook.addWorksheet(res.locals.routeName, {pageSetup: {paperSize: 9, orientation: 'landscape'}})
1127
1130
  worksheet.properties.defaultColWidth = 13;
@@ -1186,6 +1189,7 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
1186
1189
  }
1187
1190
  }
1188
1191
 
1192
+ const widgets = MYMODEL.widgets;
1189
1193
  rows.forEach(function (result) {
1190
1194
  fields.forEach((field, i) => {
1191
1195
  let t;
@@ -1195,11 +1199,11 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
1195
1199
  t = !callback(result, field) ? Util.timeSql(result[field]) : callback(result, field);
1196
1200
  } else if (field == 'updated_at' || field == 'updated_at') {
1197
1201
  t = !callback(result, field) ? Util.timeSql(result[field]) : callback(result, field);
1198
- } else if (Util.in_array(field, CONFIG.generator.createdupdated_by)) {
1202
+ } else if (Util.in_array(field, ['created_by','updated_by'])) {
1199
1203
  if (isRaws) {
1200
1204
  t = !callback(result, field) ? result[field] : callback(result, field);
1201
1205
  } else {
1202
- t = !callback(result, field) ? usersObj[result[field]] : callback(result, field);
1206
+ t = !callback(result, field) ? usersObj[result[field]].fullname : callback(result, field);
1203
1207
  }
1204
1208
  } else {
1205
1209
  // callback will call if you have
@@ -1222,31 +1226,31 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
1222
1226
  t = !callback(result, field) ? MYMODEL.dropdowns[field].fields[result[field]] : callback(result, field);
1223
1227
  } else if (Util.in_array(field, passwords)) {
1224
1228
  t = 'xxxxxx';
1225
- } else if (MYMODEL.widgets[field].name == "select") {
1229
+ } else if ( widgets.hasOwnProperty(field) && widgets[field].name == "select") {
1226
1230
  if (isRaws) {
1227
1231
  t = !callback(result, field) ? result[field] : callback(result, field);
1228
1232
  } else {
1229
1233
  t = !callback(result, field) ? Object.hasOwn(tableObj[field], result[field]) ? tableObj[field][result[field]] : result[field] : callback(result, field);
1230
1234
  }
1231
- } else if (MYMODEL.widgets[field].name == "datetime") {
1235
+ } else if (widgets.hasOwnProperty(field) && widgets[field].name == "datetime") {
1232
1236
  if (isRaws) {
1233
1237
  t = !callback(result, field) ? Util.timeSql(result[field]) : callback(result, field);
1234
1238
  } else {
1235
1239
  t = !callback(result, field) ? Util.timeSql(result[field]) : callback(result, field);
1236
1240
  }
1237
- } else if (MYMODEL.widgets[field].name == "datepicker") {
1241
+ } else if (widgets.hasOwnProperty(field) && widgets[field].name == "datepicker") {
1238
1242
  if (isRaws) {
1239
1243
  t = !callback(result, field) ? Util.dateFormat(result[field]) : callback(result, field);
1240
1244
  } else {
1241
1245
  t = !callback(result, field) ? Util.dateFormat(result[field]) : callback(result, field);
1242
1246
  }
1243
- } else if (MYMODEL.widgets[field].name == "switch") {
1247
+ } else if (widgets.hasOwnProperty(field) && widgets[field].name == "switch") {
1244
1248
  if (isRaws) {
1245
1249
  t = !callback(result, field) ? result[field] : callback(result, field);
1246
1250
  } else {
1247
1251
  t = !callback(result, field) ? tableObj[field][result[field]] || "" : callback(result, field);
1248
1252
  }
1249
- } else if (MYMODEL.widgets[field].name == "relation") {
1253
+ } else if (widgets.hasOwnProperty(field) && widgets[field].name == "relation") {
1250
1254
  if (isRaws) {
1251
1255
  t = !callback(result, field) ? result[field] : callback(result, field);
1252
1256
  } else {
@@ -1320,7 +1324,7 @@ zRoute.pdf = async (req, res, MYMODEL, fields, rows, callback) => {
1320
1324
  t = !callback(result, field) ? Util.timeSql(result[field]) : callback(result, field);
1321
1325
  } else if (field == 'updated_at' || field == 'updated_at') {
1322
1326
  t = !callback(result, field) ? Util.timeSql(result[field]) : callback(result, field);
1323
- } else if (Util.in_array(field, CONFIG.generator.createdupdated_by)) {
1327
+ } else if (Util.in_array(field, ['created_by','updated_by'])) {
1324
1328
  t = !callback(result, field) ? usersObj[result[field]] : callback(result, field);
1325
1329
  } else {
1326
1330
  // callback will call if you have
@@ -1415,14 +1419,14 @@ zRoute.generatePDF = async (file, layout = "pdf_bootstrap", options = {}) => {
1415
1419
  '--no-sandbox',
1416
1420
  '--disable-setuid-sandbox',
1417
1421
  ];
1418
- let env = CONFIG.environment;
1422
+ let env = process.env.NODE_ENV;
1419
1423
  let puppeterOptions = {
1420
1424
  args: args
1421
1425
  };
1422
- if (env == "production") {
1426
+ if (env === "production") {
1423
1427
  puppeterOptions.executablePath = '/usr/bin/google-chrome-stable';
1424
- puppeterOptions.defaultViewport = {width: 1920, height: 1080};
1425
1428
  }
1429
+ puppeterOptions.defaultViewport = {width: 1920, height: 1080};
1426
1430
  const browser = await puppeteer.launch(puppeterOptions);
1427
1431
  const page = await browser.newPage();
1428
1432
  let mylayout = `${dirRoot}/views/layouts/${layout}.ejs`
@@ -1973,6 +1977,7 @@ zRoute.viewFormPlainText = (req, res, MYMODEL, relations, data = {}) => {
1973
1977
  };
1974
1978
 
1975
1979
  zRoute.viewFormsSync = async (req, res, MYMODEL, data = {}) => {
1980
+ const MYMODELS = myCache.get('MYMODELS');
1976
1981
  const relations = await zRoute.relations(req, res, MYMODEL.table);
1977
1982
  let forms = zRoute.viewForm(req, res, MYMODEL, relations, data);
1978
1983
  //zRoute.moduleLib(req, res, MYMODEL, relations, forms);
@@ -1980,7 +1985,7 @@ zRoute.viewFormsSync = async (req, res, MYMODEL, data = {}) => {
1980
1985
  for (let key in forms.obj) {
1981
1986
  if(forms.obj[key].type == 'table') {
1982
1987
  let obj = forms.obj[key];
1983
- let MODEL = require(`./../models/${MYMODEL.widgets[obj.id].table}`);
1988
+ let MODEL = MYMODELS[MYMODEL.widgets[obj.id].table];
1984
1989
  const relationsTable = await zRoute.relations(req,res,MODEL.table);
1985
1990
  let tableForms = zRoute.viewForm(req,res,MODEL,relationsTable, obj.value || []);
1986
1991
  let properties = obj.properties;
@@ -2130,6 +2135,7 @@ zRoute.viewTable = async (req, res, MYMODEL, results, isPreview, hasKeys = "") =
2130
2135
  let editors = [];
2131
2136
  let lexicals = {};
2132
2137
  let row = {};
2138
+ const MYMODELS = myCache.get('MYMODELS');
2133
2139
  for (let key in results) {
2134
2140
  if (Util.in_array(key, widgetsArray)) {
2135
2141
  let widgetName = widgets[key].name;
@@ -2237,22 +2243,16 @@ zRoute.viewTable = async (req, res, MYMODEL, results, isPreview, hasKeys = "") =
2237
2243
  break;
2238
2244
  case "lexical" :
2239
2245
  hasLexical = true;
2240
- /*
2241
- lexicals[key] = results[key];
2242
- data[key] = `<div id="lexical${key}"></div><div id="text${key}" style="display:none"></div><div id="container${key}"></div>`;
2243
- */
2244
2246
  break;
2245
2247
  case "json" :
2246
2248
  data[key] = results[key] ? JSON.stringify(results[key], undefined, 2) : "";
2247
2249
  break;
2248
2250
  case "table" :
2249
2251
  let tableClass = isPreview ? "" : "table-striped table-hover";
2250
- //let html = '';
2251
-
2252
2252
  html = `<table class="table ${tableClass}">`;
2253
2253
  html += `<tr>`;
2254
- let MODEL_TABLE = require("./../models/" + MYMODEL.widgets[key].table);
2255
- var nots = [...CONFIG.generator.notRenderField, ...['no', 'actionColumn']];
2254
+ let MODEL_TABLE = MYMODELS[MYMODEL.widgets[key].table];
2255
+ var nots = Util.nots;
2256
2256
  var visibles = MODEL_TABLE.grids.visibles || [];
2257
2257
  var invisibles = MODEL_TABLE.grids.invisibles || [];
2258
2258
  var obj = {}
@@ -2356,7 +2356,6 @@ zRoute.moduleLib = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
2356
2356
  Util.deleteAllFiles(path_head);
2357
2357
  Util.deleteAllFiles(path_end);
2358
2358
  //minify js
2359
- const uglifyJS = require("uglify-js");
2360
2359
  Util.writeFile(`${path_script}/${time}.js`, uglifyJS.minify(jsObj.script));
2361
2360
  Util.writeFile(`${path_head}/head.txt`, jsObj.head);
2362
2361
  Util.writeFile(`${path_end}/end.txt`, jsObj.end);
@@ -2392,6 +2391,7 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
2392
2391
  //scriptForm += zForms.scriptGroup;
2393
2392
  }
2394
2393
  let obj = {};
2394
+ const MYMODELS = myCache.get('MYMODELS');
2395
2395
  let widgets = MYMODEL.widgets,
2396
2396
  widgetsArray = Object.keys(widgets) || [];
2397
2397
  let hasDatePicker = false;
@@ -2621,7 +2621,7 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
2621
2621
  break;
2622
2622
 
2623
2623
  case "table" :
2624
- let MODEL_TABLE = require("./../models/" + MYMODEL.widgets[keys].table);
2624
+ let MODEL_TABLE = MYMODELS[MYMODEL.widgets[keys].table];
2625
2625
  //let MODEL_TABLE_RELATIONS = await zRoute.relations(req, res, MODEL_TABLE.table);
2626
2626
  //relations[key + "TABLE"]
2627
2627
  let MODEL_TABLE_RELATIONS = relations[keys + "TABLE"];
@@ -2795,7 +2795,8 @@ $("#body-${keys}>tr").each(function (index, tr) {
2795
2795
  MySQL CRUD with context
2796
2796
  */
2797
2797
  zRoute.insertSQL = async (req, res, table, data) => {
2798
- let MYMODEL = require("./../models/" + table);
2798
+ const MYMODELS = myCache.get('MYMODELS');
2799
+ let MYMODEL = MYMODELS[table];
2799
2800
  let fields = MYMODEL.keys;
2800
2801
  if (fields.includes("company_id")) data.company_id = res.locals.companyId || 1;
2801
2802
  if (fields.includes("updated_at")) data.updated_at = Util.now();
@@ -2808,7 +2809,8 @@ zRoute.insertSQL = async (req, res, table, data) => {
2808
2809
  };
2809
2810
 
2810
2811
  zRoute.updateSQL = async (req, res, table, data, whereData) => {
2811
- let MYMODEL = require("./../models/" + table);
2812
+ const MYMODELS = myCache.get('MYMODELS');
2813
+ let MYMODEL = MYMODELS[table];
2812
2814
  let fields = MYMODEL.keys;
2813
2815
  if (fields.includes('updated_at')) {
2814
2816
  data.updated_at = Util.now();
@@ -2823,7 +2825,7 @@ zRoute.updateSQL = async (req, res, table, data, whereData) => {
2823
2825
  for (let key in MYMODEL.widgets) {
2824
2826
  if (MYMODEL.widgets[key].name == "table") {
2825
2827
  tableFields[key] = [];
2826
- const MYMODEL_TABLE = require("./../models/" + MYMODEL.widgets[key].table);
2828
+ const MYMODEL_TABLE = MYMODELS[MYMODEL.widgets[key].table];
2827
2829
  for (let q in MYMODEL_TABLE.widgets) {
2828
2830
  if (MYMODEL_TABLE.widgets[q].name == "file" || MYMODEL_TABLE.widgets[q].name == "image") {
2829
2831
  hasImages = true;
@@ -2891,7 +2893,7 @@ zRoute.deleteSQL = async (table, id, company_id) => {
2891
2893
 
2892
2894
  //for import
2893
2895
  zRoute.import = async (req, res, MYMODEL) => {
2894
- const userId = res.locals[CONFIG.generator.userId];
2896
+ const userId = res.locals.userId;
2895
2897
  const room = res.locals.token;
2896
2898
  let progress = 0;
2897
2899
  let datas = [];
@@ -2945,7 +2947,6 @@ zRoute.import = async (req, res, MYMODEL) => {
2945
2947
  hd += `</tr>`;
2946
2948
  //convert to table header
2947
2949
  io.to(room).emit('import', hd);
2948
-
2949
2950
  let isInsert = true;
2950
2951
  hd += `<tr>`
2951
2952
  for (let i = 3; i < result.length; i++) {
@@ -3042,7 +3043,8 @@ zRoute.buildFileModel = (json, index = 0) => {
3042
3043
 
3043
3044
  zRoute.approversFooter = async (results, noActivity) => {
3044
3045
  noActivity = noActivity || false;
3045
- let MYMODEL = require("./../models/zapprovals_details");
3046
+ const MYMODELS = myCache.get('MYMODELS');
3047
+ let MYMODEL = MYMODELS.zapprovals_details;
3046
3048
  let users = Util.arrayToObject(await connection.results({table: "zuser"}), "id");
3047
3049
  let html = '';
3048
3050
  let id = 0;
@@ -3056,7 +3058,7 @@ zRoute.approversFooter = async (results, noActivity) => {
3056
3058
  }
3057
3059
  if (result.type == 1) {
3058
3060
  let html = "";
3059
- let sign = users[result.user_id].verify_signed && result.status == 3 ? `<img src="${CONFIG.app.url}/uploads/zuser/${users[result.user_id].verify_signed}" width="200">` : MYMODEL.widgets.status.fields[result.status];
3061
+ let sign = users[result.user_id].verify_signed && result.status == 3 ? `<img src="${process.env.APP_URL}/uploads/zuser/${users[result.user_id].verify_signed}" width="200">` : MYMODEL.widgets.status.fields[result.status];
3060
3062
  //var sign = "";
3061
3063
  html += `<span class="status-approver">${sign}</span>`;
3062
3064
  html += `<p class="footer-title"> <span style="text-decoration: underline;">${users[result.user_id].fullname}</span><span class="small-time"> ${users[result.user_id].position} <br> ${Util.dateFormat(result.updated_at, "DD MMM YYYY HH:mm")}</span></p>
@@ -3112,7 +3114,6 @@ zRoute.approversFooter = async (results, noActivity) => {
3112
3114
 
3113
3115
 
3114
3116
  /*
3115
- Caches include WPA
3116
3117
  cache models in so it's no need call database repeatly
3117
3118
  */
3118
3119
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zet-lib",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "zet is a library that part of zet generator.",
5
5
  "engines": {
6
6
  "node": ">=18"
@@ -34,6 +34,7 @@
34
34
  "ejs": "^3.1.9",
35
35
  "exceljs": "^4.3.0",
36
36
  "fs-extra": "^11.1.1",
37
+ "html-minifier-terser": "^7.2.0",
37
38
  "js-sha256": "^0.9.0",
38
39
  "moment": "^2.29.4",
39
40
  "node-cache": "^5.1.2",
@@ -44,6 +45,7 @@
44
45
  "qs": "^6.11.2",
45
46
  "randomstring": "^1.3.0",
46
47
  "socket.io": "^4.7.2",
48
+ "uglify-js": "^3.17.4",
47
49
  "uuid": "^9.0.0",
48
50
  "xlsx": "^0.18.5"
49
51
  }