mas-server 1.0.3 → 2.0.0

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 (153) hide show
  1. package/.temp/a.ts +4 -0
  2. package/.temp/as.ts +1 -0
  3. package/.temp/b.ts +3 -0
  4. package/{src/index.js → .temp/i.js} +3 -3
  5. package/.temp/test.ts +2 -0
  6. package/.temp/validType copy.ts +149 -0
  7. package/.temp/validType.ts +96 -0
  8. package/.temp/validTypeOptimize.ts +98 -0
  9. package/.vscode/settings.json +0 -109
  10. package/dist/index.js +136 -0
  11. package/dist/masmysql/checkSqlkey.js +67 -0
  12. package/dist/masmysql/createSqlForm.js +44 -0
  13. package/dist/masmysql/esaysql.js +53 -0
  14. package/dist/masmysql/index.js +111 -0
  15. package/dist/masmysql/masSql.js +741 -0
  16. package/dist/masmysql/state.js +5 -0
  17. package/dist/masmysql/type.js +2 -0
  18. package/dist/masmysql/utils.js +12 -0
  19. package/dist/state.js +4 -0
  20. package/dist/typings/index.js +2 -0
  21. package/dist/utils/apiDoc.js +18 -0
  22. package/dist/utils/getLog.js +18 -0
  23. package/dist/utils/getRouteByApiSrc.js +54 -0
  24. package/dist/utils/masUtils.js +12 -0
  25. package/dist/utils/meaToken.js +57 -0
  26. package/dist/utils/quickSend.js +32 -0
  27. package/dist/utils/readApi.js +50 -0
  28. package/dist/utils/validRouteData.js +37 -0
  29. package/dist/utils/validToken.js +24 -0
  30. package/dist/utils/validType.js +101 -0
  31. package/package.json +34 -15
  32. package/src/apiDoc/assets/empty-907982e4.js +1 -0
  33. package/src/apiDoc/assets/index-b56e6bc6.js +1414 -0
  34. package/src/apiDoc/assets/index-bb16d834.css +6 -0
  35. package/src/{public/doc/img/jsoneditor-icons.256e3abc.svg → apiDoc/assets/jsoneditor-icons-45c98bf0.svg} +213 -357
  36. package/src/apiDoc/favicon.ico +0 -0
  37. package/src/apiDoc/index.html +15 -0
  38. package/src/index.ts +132 -0
  39. package/src/masmysql/checkSqlkey.ts +55 -0
  40. package/src/masmysql/createSqlForm.ts +37 -0
  41. package/src/masmysql/esaysql.ts +44 -0
  42. package/src/masmysql/index.ts +68 -0
  43. package/src/masmysql/masSql.ts +736 -0
  44. package/src/masmysql/state.ts +5 -0
  45. package/src/masmysql/type.ts +34 -0
  46. package/src/masmysql/utils.ts +8 -0
  47. package/src/state.ts +1 -0
  48. package/src/typings/index.ts +114 -0
  49. package/src/utils/apiDoc.ts +18 -0
  50. package/src/utils/getLog.ts +20 -0
  51. package/src/utils/getRouteByApiSrc.ts +55 -0
  52. package/src/utils/mas-encrypt.min.js +1 -0
  53. package/src/utils/masUtils.ts +8 -0
  54. package/src/utils/meaToken.ts +56 -0
  55. package/src/utils/quickSend.ts +19 -0
  56. package/src/utils/readApi.ts +30 -0
  57. package/src/utils/validRouteData.ts +46 -0
  58. package/src/utils/validToken.ts +22 -0
  59. package/src/utils/validType.ts +98 -0
  60. package/test/apiTemplate/api.temp.ts +6 -0
  61. package/test/apiTemplate/curd/del.ts +9 -0
  62. package/test/apiTemplate/curd/get.ts +9 -0
  63. package/test/apiTemplate/curd/set.ts +9 -0
  64. package/test/config/api.config.ts +3 -0
  65. package/test/config/api.key.ts +14 -0
  66. package/test/config/config.ts +30 -0
  67. package/test/config/createSqlFormData.ts +14 -0
  68. package/test/logs/.keep +0 -0
  69. package/test/main.ts +25 -0
  70. package/test/scripts/beforeCreated.ts +67 -0
  71. package/test/scripts/createApiFile.ts +27 -0
  72. package/test/scripts/createApis.ts +109 -0
  73. package/test/scripts/createSqlForm.ts +5 -0
  74. package/test/scripts/getSqlFormType.ts +34 -0
  75. package/test/scripts/run.ts +4 -0
  76. package/test/scripts/updateRouter.ts +46 -0
  77. package/test/src/api/curd/student/del.ts +9 -0
  78. package/test/src/api/curd/student/get.ts +9 -0
  79. package/test/src/api/curd/student/set.ts +9 -0
  80. package/test/src/api/index.ts +4 -0
  81. package/test/src/api/per.ts +6 -0
  82. package/test/src/api/person/del.ts +4 -0
  83. package/test/src/api/person/get.ts +4 -0
  84. package/test/src/api/person/set.ts +4 -0
  85. package/test/src/api/test.ts +7 -0
  86. package/test/src/api/validtest/boolArr.ts +4 -0
  87. package/test/src/debug.ts +56 -0
  88. package/test/src/masState.ts +4 -0
  89. package/test/src/sql/selectStudent.ts +7 -0
  90. package/test/src/sqlform.json +1 -0
  91. package/test/test.ts +13 -0
  92. package/test/typings/.keep +0 -0
  93. package/test/typings/studentSF.ts +6 -0
  94. package/test/typings/test11SF.ts +1 -0
  95. package/test/typings/test22SF.ts +1 -0
  96. package/test/typings/testformSF.ts +1 -0
  97. package/test//345/276/205/345/274/200/345/217/221.md +12 -0
  98. package/tsconfig.json +23 -0
  99. package/tsconfigschema.json +1263 -0
  100. package/src/config/api.res.json +0 -1
  101. package/src/config/api.tree.json +0 -1
  102. package/src/config/apiModules/del.module +0 -6
  103. package/src/config/apiModules/get.module +0 -6
  104. package/src/config/apiModules/set.module +0 -6
  105. package/src/config/config.schema.js +0 -41
  106. package/src/public/doc/css/app.722f60c4.css +0 -1
  107. package/src/public/doc/css/chunk-287b9965.80548a4b.css +0 -1
  108. package/src/public/doc/css/chunk-vendors.a16c4353.css +0 -1
  109. package/src/public/doc/favicon.ico +0 -0
  110. package/src/public/doc/fonts/element-icons.535877f5.woff +0 -0
  111. package/src/public/doc/fonts/element-icons.732389de.ttf +0 -0
  112. package/src/public/doc/index.html +0 -1
  113. package/src/public/doc/js/app.9ce10690.js +0 -2
  114. package/src/public/doc/js/app.9ce10690.js.map +0 -1
  115. package/src/public/doc/js/chunk-287b9965.77cfd27f.js +0 -32
  116. package/src/public/doc/js/chunk-287b9965.77cfd27f.js.map +0 -1
  117. package/src/public/doc/js/chunk-vendors.7c84e9a7.js +0 -35
  118. package/src/public/doc/js/chunk-vendors.7c84e9a7.js.map +0 -1
  119. package/src/public/index.html +0 -15
  120. package/src/state.js +0 -6
  121. package/src/utils/DataVerified.js +0 -35
  122. package/src/utils/beforeCreate.js +0 -19
  123. package/src/utils/createApi.js +0 -34
  124. package/src/utils/createApiFile.js +0 -40
  125. package/src/utils/createSqlForm.js +0 -7
  126. package/src/utils/encrypt.js +0 -1
  127. package/src/utils/getDir.js +0 -60
  128. package/src/utils/logs.js +0 -16
  129. package/src/utils/masDoc.js +0 -37
  130. package/src/utils/masRoute.js +0 -29
  131. package/src/utils/quickSend.js +0 -18
  132. package/src/utils/token.js +0 -57
  133. package/test/.utils/api.js +0 -4
  134. package/test/.utils/apis.js +0 -5
  135. package/test/.utils/beforeIndex.js +0 -4
  136. package/test/.utils/createForm.js +0 -4
  137. package/test/config/api.config.json +0 -7
  138. package/test/config/api.config.k.json +0 -1
  139. package/test/config/config.js +0 -22
  140. package/test/config/sqlform.config.js +0 -23
  141. package/test/index.js +0 -12
  142. package/test/public/1.txt +0 -1
  143. package/test/serverLogs/2022-10-29.log +0 -6
  144. package/test/serverLogs/2022-10-30.log +0 -58
  145. package/test/src/$form.js +0 -1
  146. package/test/src/api/index.js +0 -3
  147. package/test/src/api/test.js +0 -9
  148. package/test/src/api/vip/del.js +0 -6
  149. package/test/src/api/vip/get.js +0 -6
  150. package/test/src/api/vip/set.js +0 -6
  151. package/test/src/api/vip666.js +0 -4
  152. package/test/src/debug.js +0 -2
  153. /package/{old → .temp/logs/.keep} +0 -0
@@ -0,0 +1,741 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const esaysql_1 = require("./esaysql");
16
+ const state_1 = __importDefault(require("./state"));
17
+ const utils_1 = require("./utils");
18
+ const ansi_colors_1 = __importDefault(require("ansi-colors"));
19
+ class massql {
20
+ constructor() {
21
+ /** 调试模式,0为关闭,1的时候打印sql语句,2的时候打印结果 */
22
+ this.debugMode = 0;
23
+ this.mysql = null;
24
+ // ================
25
+ this.form = null;
26
+ this.formArr = {};
27
+ this.formArrObj = {};
28
+ this.lock = 0;
29
+ this.methods = null;
30
+ // 查询变量
31
+ this.selectOne = 0;
32
+ this.page = {
33
+ isPaging: false,
34
+ pageNum: 1,
35
+ pageSize: 20,
36
+ total: 0,
37
+ };
38
+ this.selectWhere = {};
39
+ this.whereStr = "";
40
+ this.keyStr = "*";
41
+ this.jdGetTime = 0;
42
+ this.isSort = 0;
43
+ this.sortObj = null;
44
+ this.sortArr = null;
45
+ this.isDistinct = 0;
46
+ this.distinctKey = "";
47
+ this.countName = null;
48
+ this.isGetdelete = 0;
49
+ this.joinSqlStr = "";
50
+ // 自定义语句
51
+ this.defineSql = null;
52
+ // 更新
53
+ this.updateOBj = null;
54
+ this.batchUpdateObj = null;
55
+ // 插入
56
+ this.insertObject = null;
57
+ this.insertArray = null;
58
+ if (!state_1.default.sqlForm) {
59
+ throw Error("请先初始化数据库!");
60
+ }
61
+ this.formArr = state_1.default.sqlForm;
62
+ const formArr = JSON.parse(JSON.stringify(this.formArr));
63
+ for (const k in formArr) {
64
+ const obj = {};
65
+ for (const item of formArr[k])
66
+ obj[item] = item;
67
+ formArr[k] = obj;
68
+ }
69
+ this.formArrObj = formArr;
70
+ this.mysql = state_1.default.connection;
71
+ }
72
+ // 条件转义
73
+ escape(str) {
74
+ return state_1.default.connection.escape(str);
75
+ }
76
+ // 条件转义
77
+ static escape(str) {
78
+ return state_1.default.connection.escape(str);
79
+ }
80
+ //表名转义
81
+ escapeId(str) {
82
+ return state_1.default.connection.escapeId(str);
83
+ }
84
+ //表名转义
85
+ static escapeId(str) {
86
+ return state_1.default.connection.escapeId(str);
87
+ }
88
+ /** 版本查看 */
89
+ version() {
90
+ (0, esaysql_1.sqlQuery)("SELECT VERSION() AS SQL版本").then((sqlres) => {
91
+ console.info(ansi_colors_1.default.green(sqlres[0]));
92
+ });
93
+ return this;
94
+ }
95
+ /** 字段 */
96
+ key(key) {
97
+ this.keyStr = key
98
+ .map((item) => {
99
+ const t = (0, utils_1.getType)(item);
100
+ if (t === "array") {
101
+ return `${this.escapeId(item[0])} AS ${this.escapeId(item[1])}`;
102
+ }
103
+ else if (t === "string") {
104
+ return `${this.escapeId(item)}`;
105
+ }
106
+ else {
107
+ console.info(new Error("非法的key"));
108
+ this.lock = 1;
109
+ }
110
+ })
111
+ .join(",");
112
+ return this;
113
+ }
114
+ /** 使用表 */
115
+ use(form) {
116
+ if ((0, utils_1.getType)(form) == "array") {
117
+ form = form[form.length - 1].replace("@!", "");
118
+ }
119
+ if (!form || !this.formArr[form]) {
120
+ throw Error("表名不正确!");
121
+ }
122
+ this.form = form;
123
+ return this;
124
+ }
125
+ /** where条件 */
126
+ where(key, value) {
127
+ if ((0, utils_1.getType)(key) == "string" && !value) {
128
+ console.info(Error("请传入value!"));
129
+ this.lock = 1;
130
+ return this;
131
+ }
132
+ if ((0, utils_1.getType)(key) == "string") {
133
+ this.whereStr += ` AND \`${key}\` = ${this.escape(value)}`;
134
+ }
135
+ else {
136
+ for (const k in key) {
137
+ this.whereStr += ` AND (\`${k}\` = ${this.escape(key[k])})`;
138
+ }
139
+ }
140
+ return this;
141
+ }
142
+ /** 大于等于条件 */
143
+ gte(key, value) {
144
+ if ((0, utils_1.getType)(key) == "string" && !value) {
145
+ console.info(Error("请传入value!"));
146
+ this.lock = 1;
147
+ return this;
148
+ }
149
+ if ((0, utils_1.getType)(key) == "string") {
150
+ this.whereStr += ` AND \`${key}\` >= ${this.escape(value)}`;
151
+ }
152
+ else {
153
+ for (const k in key) {
154
+ this.whereStr += ` AND (\`${k}\` >= ${this.escape(key[k])})`;
155
+ }
156
+ }
157
+ return this;
158
+ }
159
+ /** 大于条件 */
160
+ gt(key, value) {
161
+ if ((0, utils_1.getType)(key) == "string" && !value) {
162
+ console.info(Error("请传入value!"));
163
+ this.lock = 1;
164
+ return this;
165
+ }
166
+ if ((0, utils_1.getType)(key) == "string") {
167
+ this.whereStr += ` AND \`${key}\` > ${this.escape(value)}`;
168
+ }
169
+ else {
170
+ for (const k in key) {
171
+ this.whereStr += ` AND (\`${k}\` > ${this.escape(key[k])})`;
172
+ }
173
+ }
174
+ return this;
175
+ }
176
+ /** 小于条件 */
177
+ lt(key, value) {
178
+ if ((0, utils_1.getType)(key) == "string" && !value) {
179
+ console.info(Error("请传入value!"));
180
+ this.lock = 1;
181
+ return this;
182
+ }
183
+ if ((0, utils_1.getType)(key) == "string") {
184
+ this.whereStr += ` AND \`${key}\` < ${this.escape(value)}`;
185
+ }
186
+ else {
187
+ for (const k in key) {
188
+ this.whereStr += ` AND (\`${k}\` < ${this.escape(key[k])})`;
189
+ }
190
+ }
191
+ return this;
192
+ }
193
+ /** 小于等于条件 */
194
+ lte(key, value) {
195
+ if ((0, utils_1.getType)(key) == "string" && !value) {
196
+ console.info(Error("请传入value!"));
197
+ this.lock = 1;
198
+ return this;
199
+ }
200
+ if ((0, utils_1.getType)(key) == "string") {
201
+ this.whereStr += ` AND \`${key}\` <= ${this.escape(value)}`;
202
+ }
203
+ else {
204
+ for (const k in key) {
205
+ this.whereStr += ` AND (\`${k}\` <= ${this.escape(key[k])})`;
206
+ }
207
+ }
208
+ return this;
209
+ }
210
+ /** where条件,用or连接 */
211
+ whereOR(key, value) {
212
+ if ((0, utils_1.getType)(key) == "string" && !value) {
213
+ console.info(Error("请传入value!"));
214
+ this.lock = 1;
215
+ return this;
216
+ }
217
+ if ((0, utils_1.getType)(key) == "string") {
218
+ this.whereStr += ` OR \`${key}\`= ${this.escape(value)}`;
219
+ }
220
+ else {
221
+ for (const k in key) {
222
+ this.whereStr += ` OR (\`${k}\` = ${this.escape(key[k])})`;
223
+ }
224
+ }
225
+ return this;
226
+ }
227
+ /** like条件 */
228
+ like(key, value) {
229
+ if ((0, utils_1.getType)(key) == "string" && !value) {
230
+ console.info(Error("请传入value!"));
231
+ this.lock = 1;
232
+ return this;
233
+ }
234
+ if ((0, utils_1.getType)(key) == "string") {
235
+ this.whereStr += ` AND \`${key}\` LIKE ${this.escape("%" + value + "%")}`;
236
+ }
237
+ else {
238
+ for (const k in key) {
239
+ this.whereStr += ` AND (\`${k}\` LIKE ${this.escape("%" + key[k] + "%")})`;
240
+ }
241
+ }
242
+ return this;
243
+ }
244
+ /** like条件 */
245
+ likeOR(key, value) {
246
+ if ((0, utils_1.getType)(key) == "string" && !value) {
247
+ console.info(Error("请传入value!"));
248
+ this.lock = 1;
249
+ return this;
250
+ }
251
+ if ((0, utils_1.getType)(key) == "string") {
252
+ this.whereStr += ` OR \`${key}\` LIKE ${this.escape("%" + value + "%")}`;
253
+ }
254
+ else {
255
+ for (const k in key) {
256
+ this.whereStr += ` OR (\`${k}\` LIKE ${this.escape("%" + key[k] + "%")})`;
257
+ }
258
+ }
259
+ return this;
260
+ }
261
+ /** in条件 */
262
+ in(key, value) {
263
+ if ((0, utils_1.getType)(value) != "array") {
264
+ console.info(Error("请传入value或value格式错误! " + value));
265
+ this.lock = 1;
266
+ return this;
267
+ }
268
+ this.whereStr += ` AND (\`${key}\` in (${value
269
+ .map((item) => this.escape(item))
270
+ .join(",")}))`;
271
+ return this;
272
+ }
273
+ /** in条件 */
274
+ inOR(key, value) {
275
+ if ((0, utils_1.getType)(value) != "array") {
276
+ console.info(Error("请传入value或value格式错误! " + value));
277
+ this.lock = 1;
278
+ return this;
279
+ }
280
+ this.whereStr += ` OR (\`${key}\` in (${value
281
+ .map((item) => this.escape(item))
282
+ .join(",")}))`;
283
+ return this;
284
+ }
285
+ /** 只查一个 */
286
+ one() {
287
+ this.selectOne = 1;
288
+ return this;
289
+ }
290
+ /** 分页,在select时传入pageNum和pageSize */
291
+ paging() {
292
+ this.page.isPaging = true;
293
+ return this;
294
+ }
295
+ /** 获得时间 */
296
+ getTime() {
297
+ this.jdGetTime = 1;
298
+ return this;
299
+ }
300
+ /** 排序方法,mode中 DESC:降序,最新(大)的放前面 | ASC:升序,最早(小)的前面 */
301
+ sort(obj, mode = "DESC") {
302
+ const objT = (0, utils_1.getType)(obj);
303
+ if (objT == "string") {
304
+ this.isSort = 1;
305
+ this.sortObj = { key: obj, mode: mode };
306
+ }
307
+ else if (objT == "array") {
308
+ this.isSort = 1;
309
+ this.sortArr = obj;
310
+ }
311
+ else {
312
+ console.info(Error("排序参数错误!"));
313
+ this.lock = 1;
314
+ }
315
+ return this;
316
+ }
317
+ /** 统计数量 */
318
+ count(name) {
319
+ this.methods = "count";
320
+ if ((0, utils_1.getType)(name) != "string") {
321
+ console.info(Error("统计参数错误!"));
322
+ this.lock = 1;
323
+ return this;
324
+ }
325
+ this.countName = name;
326
+ return this;
327
+ }
328
+ /** 去重 */
329
+ distinct(key) {
330
+ this.methods = "distinct";
331
+ this.isDistinct = 1;
332
+ const keyT = (0, utils_1.getType)(key);
333
+ if (keyT == "string") {
334
+ this.distinctKey = key;
335
+ }
336
+ else {
337
+ console.info(Error("去重参数错误!"));
338
+ this.lock = 1;
339
+ }
340
+ return this;
341
+ }
342
+ /** 连表 */
343
+ leftJoin(joinFormName, joinFormKey, key) {
344
+ this.joinSqlStr += `LEFT JOIN ${this.escapeId(joinFormName)} ON ${this.escapeId(joinFormName)}.${this.escapeId(joinFormKey)} = ${this.escapeId(this.form)}.${this.escapeId(key)}\n`;
345
+ return this;
346
+ }
347
+ /** 内连表 */
348
+ innerJoin(joinFormName, joinFormKey, key) {
349
+ this.joinSqlStr += `INNER JOIN ${this.escapeId(joinFormName)} ON ${this.escapeId(joinFormName)}.${this.escapeId(joinFormKey)} = ${this.escapeId(this.form)}.${this.escapeId(key)}\n`;
350
+ return this;
351
+ }
352
+ /** 右连表 */
353
+ rightJoin(joinFormName, joinFormKey, key) {
354
+ this.joinSqlStr += `RIGHT JOIN ${this.escapeId(joinFormName)} ON ${this.escapeId(joinFormName)}.${this.escapeId(joinFormKey)} = ${this.escapeId(this.form)}.${this.escapeId(key)}\n`;
355
+ return this;
356
+ }
357
+ /**
358
+ *
359
+ * @param data 为string和number时,通过id查询,为数组时通过id批量查询,为json时,通过and关联查询
360
+ * @param likeSearch dataObj为json时是否进行模糊查询,默认开启
361
+ * @param filter dataObj为json时是否对其进行过滤,默认开启
362
+ */
363
+ select(dataObj, likeSearch = 1, filter = 1) {
364
+ this.methods = "select";
365
+ if (!dataObj) {
366
+ return this;
367
+ }
368
+ let data = dataObj;
369
+ const dataT = (0, utils_1.getType)(data);
370
+ if (dataT == "array") {
371
+ // 为id数组情况,把id的string都转为number
372
+ data = data
373
+ .map((item) => parseInt(item))
374
+ .filter((item) => !Number.isNaN(item));
375
+ this.whereStr += ` AND (\`id\` in (${data.join(",")}))`;
376
+ }
377
+ else if (dataT == "string" || dataT == "number") {
378
+ // 为id的情况,把id的string转为number
379
+ this.whereStr += ` AND (\`id\`= ${parseInt(data)})`;
380
+ }
381
+ else if (dataT == "object") {
382
+ // 为object的情况,默认为模糊搜索,且id不能模糊搜索
383
+ this.selectWhere = dataObj;
384
+ data = JSON.parse(JSON.stringify(data));
385
+ let symbol = "=";
386
+ let pct = "";
387
+ likeSearch && (symbol = "LIKE");
388
+ likeSearch && (pct = "%");
389
+ //是否进行字段过滤
390
+ if (filter) {
391
+ if (!this.form)
392
+ throw Error("请把use放置在select前!");
393
+ for (const k in data) {
394
+ if (!this.formArrObj[this.form][k])
395
+ continue;
396
+ if (k == "id")
397
+ data[k] = parseInt(data[k]);
398
+ this.whereStr += ` AND (\`${k}\` ${k == "id" ? "=" : symbol} ${this.escape(pct + data[k] + pct)})`;
399
+ }
400
+ }
401
+ else {
402
+ for (const k in data) {
403
+ //不进行字段过滤,分页参数也不能要
404
+ if (k == "pageSize" || k == "pageNum")
405
+ continue;
406
+ if (k == "id")
407
+ data[k] = parseInt(data[k]);
408
+ this.whereStr += ` AND (\`${k}\` ${k == "id" ? "=" : symbol} ${this.escape(pct + data[k] + pct)})`;
409
+ }
410
+ }
411
+ }
412
+ return this;
413
+ }
414
+ getDelete() {
415
+ this.isGetdelete = 1;
416
+ return this;
417
+ }
418
+ /** 自定义语句 */
419
+ define(sqlStr) {
420
+ this.defineSql = sqlStr;
421
+ return this;
422
+ }
423
+ /** 更新 */
424
+ update(obj, id) {
425
+ if (!obj) {
426
+ console.info(Error(`没有传入更新数据 ${obj}`));
427
+ this.lock = 1;
428
+ }
429
+ else {
430
+ this.updateOBj = obj;
431
+ }
432
+ this.methods = "update";
433
+ const idT = (0, utils_1.getType)(id);
434
+ if (idT == "string") {
435
+ id = parseInt(id);
436
+ this.where("id", id);
437
+ }
438
+ else if (idT == "array") {
439
+ this.in("id", id);
440
+ }
441
+ else if (idT == "number") {
442
+ this.where("id", id);
443
+ }
444
+ else {
445
+ this.lock = 1;
446
+ console.log(Error(`更新id错误: id为 ${id}`));
447
+ }
448
+ return this;
449
+ }
450
+ /** 批量更新 */
451
+ batchUpdate(obj) {
452
+ this.methods = "batchUpdate";
453
+ if ((0, utils_1.getType)(obj) == "array") {
454
+ if (obj.length == 0) {
455
+ console.info(Error(`更新数据不能为空 ${obj}`));
456
+ this.lock = 1;
457
+ }
458
+ }
459
+ else {
460
+ console.info(Error(`更新数据格式错误 ${obj}`));
461
+ this.lock = 1;
462
+ }
463
+ this.batchUpdateObj = obj;
464
+ }
465
+ /** set方法,有id则更新,无id则插入 */
466
+ set(obj) {
467
+ const objT = (0, utils_1.getType)(obj);
468
+ if (!obj) {
469
+ console.info(Error(`没有传入数据 ${obj}`));
470
+ this.lock = 1;
471
+ }
472
+ else if (objT == "array") {
473
+ if (obj[0].id) {
474
+ // this.update()
475
+ this.batchUpdate(obj);
476
+ }
477
+ else {
478
+ this.insert(obj);
479
+ }
480
+ }
481
+ else if (objT == "object") {
482
+ const id = obj.id;
483
+ if (id) {
484
+ this.update(obj, id);
485
+ }
486
+ else {
487
+ this.insert(obj);
488
+ }
489
+ }
490
+ else {
491
+ console.info(Error(`数据格式错误 ${obj}`));
492
+ this.lock = 1;
493
+ }
494
+ return this;
495
+ }
496
+ /** 插入 */
497
+ insert(obj) {
498
+ this.methods = "insert";
499
+ const objT = (0, utils_1.getType)(obj);
500
+ if (objT == "array") {
501
+ this.insertArray = obj;
502
+ }
503
+ else if (objT == "object") {
504
+ this.insertObject = obj;
505
+ }
506
+ else {
507
+ this.lock = 1;
508
+ console.info(Error(`插入数据错误 ${obj}`));
509
+ }
510
+ return this;
511
+ }
512
+ /** 删除 */
513
+ delete(id) {
514
+ this.methods = "delete";
515
+ const idT = (0, utils_1.getType)(id);
516
+ if (idT == "string") {
517
+ id = parseInt(id);
518
+ this.where("id", id);
519
+ }
520
+ else if (idT == "array") {
521
+ this.in("id", id);
522
+ }
523
+ else if (idT == "number") {
524
+ this.where("id", id);
525
+ }
526
+ else {
527
+ this.lock = 1;
528
+ console.log(Error(`更新id错误: id为 ${id}`));
529
+ }
530
+ return this;
531
+ }
532
+ buildBatchUpdateSQL(tableName, updateRecords) {
533
+ // 获取要更新的字段和对应的值
534
+ const fields = Object.keys(updateRecords[0]).filter((field) => field !== "id");
535
+ // 构建 SQL 语句
536
+ const sql = `UPDATE ${tableName} SET ${fields
537
+ .map((field) => `${this.escapeId(field)} = CASE id ${updateRecords
538
+ .map((record) => {
539
+ var _a;
540
+ return `WHEN ${(_a = record.id) !== null && _a !== void 0 ? _a : "-1"} THEN ${record[field]
541
+ ? this.escape(record[field])
542
+ : this.escapeId(field)}`;
543
+ })
544
+ .join(" ")} END`)
545
+ .join(", ")} WHERE id IN (${updateRecords
546
+ .map((record) => { var _a; return parseInt((_a = record.id) !== null && _a !== void 0 ? _a : "-1"); })
547
+ .join(",")})`;
548
+ return sql;
549
+ }
550
+ _init() {
551
+ // ================
552
+ this.form = null;
553
+ this.lock = 0;
554
+ this.methods = null;
555
+ // 查询变量
556
+ this.selectOne = 0;
557
+ this.page = {
558
+ isPaging: false,
559
+ pageNum: 1,
560
+ pageSize: 20,
561
+ total: 0,
562
+ };
563
+ this.selectWhere = {};
564
+ this.whereStr = "";
565
+ this.keyStr = "*";
566
+ this.jdGetTime = 0;
567
+ this.isSort = 0;
568
+ this.sortObj = null;
569
+ this.sortArr = null;
570
+ this.isDistinct = 0;
571
+ this.distinctKey = "";
572
+ this.isGetdelete = 0;
573
+ this.countName = null;
574
+ this.joinSqlStr = "";
575
+ // 自定义语句
576
+ this.defineSql = null;
577
+ // 更新
578
+ this.updateOBj = null;
579
+ this.batchUpdateObj = null;
580
+ // 插入
581
+ this.insertObject = null;
582
+ this.insertArray = null;
583
+ }
584
+ batchUpdateGetSql() {
585
+ return this.buildBatchUpdateSQL(this.form, this.batchUpdateObj);
586
+ }
587
+ selectGetSql() {
588
+ let limit = "";
589
+ let sort = "";
590
+ // 是否获取时间
591
+ if (this.jdGetTime && this.whereStr != "*") {
592
+ this.keyStr += ",`update_time`,`create_time`";
593
+ }
594
+ // 是否分页
595
+ if (this.page.isPaging) {
596
+ this.selectWhere.pageNum &&
597
+ (this.page.pageNum = parseInt(this.selectWhere.pageNum));
598
+ this.selectWhere.pageSize &&
599
+ (this.page.pageSize = parseInt(this.selectWhere.pageSize));
600
+ const start = (this.page.pageNum - 1) * this.page.pageSize;
601
+ limit = `LIMIT ${start},${this.page.pageSize}`;
602
+ }
603
+ // 是否排序
604
+ if (this.isSort == 1) {
605
+ if (this.sortObj) {
606
+ sort = `ORDER BY ${this.sortObj.key} ${this.sortObj.mode}`;
607
+ }
608
+ else if (this.sortArr) {
609
+ sort = `ORDER BY ${this.sortArr
610
+ .map((item) => `${this.escapeId(item.key)} ${item.mode}`)
611
+ .join(",")}`;
612
+ }
613
+ }
614
+ const WHERE = this.whereStr == "" ? "" : ` AND (${this.whereStr.slice(5)})`;
615
+ return `SELECT ${this.keyStr} from ${this.escapeId(this.form)} ${this.joinSqlStr} WHERE ${this.isGetdelete == 0
616
+ ? `${this.escapeId(this.form)}.is_delete = 0`
617
+ : "1=1"} ${WHERE} ${limit} ${sort}`;
618
+ }
619
+ updateGetSql() {
620
+ const WHERE = this.whereStr == "" ? "" : ` AND (${this.whereStr.slice(5)})`;
621
+ let updateStr = "";
622
+ for (let k in this.updateOBj) {
623
+ if (!this.formArrObj[this.form][k] || k == "id")
624
+ continue;
625
+ updateStr += `${this.escapeId(k)} = ${this.escape(this.updateOBj[k])},`;
626
+ }
627
+ return `UPDATE ${this.escapeId(this.form)} SET ${updateStr.slice(0, updateStr.length - 1)} WHERE is_delete = 0 ${WHERE};`;
628
+ }
629
+ insertGetSql() {
630
+ // 只插入一个,进行字段效验
631
+ if (this.insertObject) {
632
+ const KeyStr = [];
633
+ const ValueStr = [];
634
+ for (let k in this.insertObject) {
635
+ if (!this.formArrObj[this.form][k])
636
+ continue;
637
+ KeyStr.push(this.escapeId(k));
638
+ ValueStr.push(this.escape(this.insertObject[k]));
639
+ }
640
+ return `INSERT INTO ${this.form} (${KeyStr.join(",")}) VALUES (${ValueStr.join(",")});`;
641
+ }
642
+ else if (this.insertArray) {
643
+ // 批量插入,不进行字段效验
644
+ const KeyStr = [];
645
+ const valueArr = [];
646
+ if (this.insertArray[0]) {
647
+ for (let k in this.insertArray[0]) {
648
+ KeyStr.push(this.escapeId(k));
649
+ }
650
+ }
651
+ for (let item in this.insertArray) {
652
+ const ValueStr = [];
653
+ for (let k in this.insertArray[item]) {
654
+ ValueStr.push(this.escape(this.insertArray[item][k]));
655
+ }
656
+ valueArr.push(ValueStr);
657
+ }
658
+ return `INSERT INTO ${this.form} (${KeyStr.join(",")}) VALUES ${valueArr
659
+ .map((vs) => `(${vs.join(",")})`)
660
+ .join(",")};`;
661
+ }
662
+ }
663
+ deleteGetSql() {
664
+ const WHERE = this.whereStr == "" ? "" : `(${this.whereStr.slice(5)})`;
665
+ return `UPDATE ${this.escapeId(this.form)} SET is_delete = 1 where ${WHERE};`;
666
+ }
667
+ distinctGetSql() {
668
+ const WHERE = this.whereStr == "" ? "" : ` AND (${this.whereStr.slice(5)})`;
669
+ return `SELECT DISTINCT ${this.escapeId(this.distinctKey)} FROM ${this.form} WHERE ${this.isGetdelete == 0 ? `is_delete = 0` : "1=1"} ${WHERE}`;
670
+ }
671
+ countGetSql() {
672
+ const WHERE = this.whereStr == "" ? "" : ` AND (${this.whereStr.slice(5)})`;
673
+ return `SELECT COUNT(*) AS ${this.escapeId(this.countName)} FROM ${this.escapeId(this.form)} WHERE ${this.isGetdelete == 0 ? `is_delete = 0` : "1=1"} ${WHERE};`;
674
+ }
675
+ /**
676
+ * 执行
677
+ * @param mode 0执行,-2返回sql语句,-1打印sql语句
678
+ */
679
+ go(mode = 0) {
680
+ return __awaiter(this, void 0, void 0, function* () {
681
+ if (this.lock == 1)
682
+ return null;
683
+ let sqlStr = "";
684
+ if (this.defineSql) {
685
+ sqlStr = this.defineSql;
686
+ }
687
+ else {
688
+ if (!this.methods) {
689
+ throw Error("请选择方法");
690
+ }
691
+ if (!this.form) {
692
+ throw Error("请选择表");
693
+ }
694
+ sqlStr = this[`${this.methods}GetSql`]();
695
+ }
696
+ if (this.debugMode) {
697
+ console.info(ansi_colors_1.default.greenBright("SQL: " + sqlStr));
698
+ }
699
+ if (mode == -1) {
700
+ this._init();
701
+ console.info(sqlStr);
702
+ }
703
+ else if (mode == -2) {
704
+ this._init();
705
+ return sqlStr;
706
+ }
707
+ else {
708
+ return yield this.runSql(sqlStr);
709
+ }
710
+ });
711
+ }
712
+ runSql(sqlStr) {
713
+ var _a;
714
+ return __awaiter(this, void 0, void 0, function* () {
715
+ let sqlRes = (_a = (yield (0, esaysql_1.sqlQuery)(sqlStr))) !== null && _a !== void 0 ? _a : null;
716
+ if (this.page.isPaging) {
717
+ const total = yield (0, esaysql_1.sqlQuery)(`SELECT COUNT(*) as \`total\` FROM ${this.form}`);
718
+ sqlRes = {
719
+ list: sqlRes,
720
+ pageNum: this.page.pageNum,
721
+ pageSize: this.page.pageSize,
722
+ total: total[0]["total"],
723
+ };
724
+ }
725
+ if (this.isDistinct == 1 && sqlRes) {
726
+ sqlRes = {
727
+ [this.distinctKey]: sqlRes.map((item) => item[this.distinctKey]),
728
+ };
729
+ }
730
+ if (this.selectOne == 1) {
731
+ if (this.page.isPaging)
732
+ throw Error("分页和单个查询不能同时使用!");
733
+ sqlRes = sqlRes[0];
734
+ }
735
+ this.debugMode === 2 && console.info(sqlRes, " SQL RESULT");
736
+ this._init();
737
+ return sqlRes;
738
+ });
739
+ }
740
+ }
741
+ exports.default = massql;