wok-server 0.5.0 → 0.7.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 (380) hide show
  1. package/README.en.md +61 -0
  2. package/README.md +44 -29
  3. package/dist/cache/cache.js +98 -98
  4. package/dist/cache/config.js +19 -19
  5. package/dist/cache/index.js +27 -27
  6. package/dist/cache/purge-task.js +46 -46
  7. package/dist/cache/stat.js +47 -47
  8. package/dist/config/convert.js +36 -36
  9. package/dist/config/exception.js +14 -14
  10. package/dist/config/index.js +81 -81
  11. package/dist/http-client/index.js +136 -136
  12. package/dist/i18n/ar.js +17 -17
  13. package/dist/i18n/de.js +17 -17
  14. package/dist/i18n/en-us.js +17 -17
  15. package/dist/i18n/es.js +17 -17
  16. package/dist/i18n/fr.js +17 -17
  17. package/dist/i18n/i18n.js +231 -231
  18. package/dist/i18n/index.js +52 -52
  19. package/dist/i18n/ja.js +17 -17
  20. package/dist/i18n/ko.js +17 -17
  21. package/dist/i18n/msg.js +2 -2
  22. package/dist/i18n/pt.js +17 -17
  23. package/dist/i18n/ru.js +17 -17
  24. package/dist/i18n/tag.js +18 -18
  25. package/dist/i18n/zh-HK.js +17 -17
  26. package/dist/i18n/zh-TW.js +17 -17
  27. package/dist/i18n/zh-cn.js +17 -17
  28. package/dist/index.js +14 -14
  29. package/dist/lock/index.js +114 -114
  30. package/dist/log/config.js +35 -35
  31. package/dist/log/date.js +21 -21
  32. package/dist/log/file.js +198 -198
  33. package/dist/log/index.js +135 -135
  34. package/dist/log/level.js +33 -33
  35. package/dist/log/log.js +56 -56
  36. package/dist/log/store.js +19 -19
  37. package/dist/mongodb/collection.js +2 -2
  38. package/dist/mongodb/config.js +34 -34
  39. package/dist/mongodb/doc.js +2 -2
  40. package/dist/mongodb/exception.js +14 -14
  41. package/dist/mongodb/index.js +58 -58
  42. package/dist/mongodb/manager/base.js +563 -563
  43. package/dist/mongodb/manager/index.js +63 -63
  44. package/dist/mongodb/manager/tx-strict.js +84 -84
  45. package/dist/mongodb/manager/tx.js +30 -30
  46. package/dist/mongodb/migration.js +52 -52
  47. package/dist/mvc/access-log.js +33 -33
  48. package/dist/mvc/config.js +27 -27
  49. package/dist/mvc/exchange.js +113 -113
  50. package/dist/mvc/handler/index.js +7 -6
  51. package/dist/mvc/handler/json.js +65 -65
  52. package/dist/mvc/handler/restful.js +35 -35
  53. package/dist/mvc/handler/sse.js +65 -0
  54. package/dist/mvc/handler/upload.js +31 -31
  55. package/dist/mvc/index.js +50 -50
  56. package/dist/mvc/interceptor.js +2 -2
  57. package/dist/mvc/query.js +43 -43
  58. package/dist/mvc/render/file.js +132 -132
  59. package/dist/mvc/render/html/html.js +90 -90
  60. package/dist/mvc/render/html/index.js +18 -18
  61. package/dist/mvc/render/html/style.js +2 -2
  62. package/dist/mvc/render/index.js +7 -7
  63. package/dist/mvc/render/json.js +26 -26
  64. package/dist/mvc/render/text.js +16 -16
  65. package/dist/mvc/router.js +2 -2
  66. package/dist/mvc/server.js +272 -272
  67. package/dist/mvc/static/header.js +67 -67
  68. package/dist/mvc/static/index.js +6 -6
  69. package/dist/mvc/static/mime-type.js +84 -84
  70. package/dist/mvc/static/server-cache-config.js +66 -66
  71. package/dist/mvc/static/server-cache.js +133 -133
  72. package/dist/mvc/static/static-handler.js +372 -372
  73. package/dist/mysql/config.js +51 -51
  74. package/dist/mysql/exception.js +14 -14
  75. package/dist/mysql/index.js +87 -87
  76. package/dist/mysql/manager/base.js +278 -239
  77. package/dist/mysql/manager/index.js +107 -107
  78. package/dist/mysql/manager/ops/count.js +20 -20
  79. package/dist/mysql/manager/ops/criteria.js +381 -356
  80. package/dist/mysql/manager/ops/delete.js +59 -65
  81. package/dist/mysql/manager/ops/exist.js +26 -26
  82. package/dist/mysql/manager/ops/find.js +149 -169
  83. package/dist/mysql/manager/ops/index.js +16 -14
  84. package/dist/mysql/manager/ops/insert.js +132 -106
  85. package/dist/mysql/manager/ops/modify.js +10 -10
  86. package/dist/mysql/manager/ops/order-by.js +28 -0
  87. package/dist/mysql/manager/ops/paginate.js +48 -23
  88. package/dist/mysql/manager/ops/query.js +9 -9
  89. package/dist/mysql/manager/ops/update.js +222 -216
  90. package/dist/mysql/manager/ops/upsert.js +178 -0
  91. package/dist/mysql/manager/ops/utils.js +28 -24
  92. package/dist/mysql/manager/tx-strict.js +103 -103
  93. package/dist/mysql/manager/tx.js +30 -30
  94. package/dist/mysql/manager/utils.js +56 -56
  95. package/dist/mysql/migration.js +136 -136
  96. package/dist/mysql/table-info.js +8 -8
  97. package/dist/task/daily.js +59 -59
  98. package/dist/task/fixed-delay.js +38 -38
  99. package/dist/task/fixed-rate.js +42 -42
  100. package/dist/task/index.js +9 -9
  101. package/dist/task/task.js +56 -56
  102. package/dist/validation/exception.js +36 -36
  103. package/dist/validation/index.js +40 -40
  104. package/dist/validation/validator/array.js +34 -34
  105. package/dist/validation/validator/enum.js +28 -28
  106. package/dist/validation/validator/index.js +14 -14
  107. package/dist/validation/validator/length.js +40 -40
  108. package/dist/validation/validator/max-length.js +35 -35
  109. package/dist/validation/validator/max.js +29 -29
  110. package/dist/validation/validator/min-length.js +33 -33
  111. package/dist/validation/validator/min.js +29 -29
  112. package/dist/validation/validator/not-blank.js +33 -33
  113. package/dist/validation/validator/not-null.js +21 -21
  114. package/dist/validation/validator/plain-obj.js +32 -32
  115. package/dist/validation/validator/regexp.js +34 -34
  116. package/documentation/en/cache.md +56 -0
  117. package/documentation/en/config.md +96 -0
  118. package/documentation/en/engineering.md +256 -0
  119. package/documentation/en/http-client.md +32 -0
  120. package/documentation/en/i18n.md +143 -0
  121. package/documentation/en/index.md +24 -0
  122. package/documentation/en/lock.md +51 -0
  123. package/documentation/en/log.md +109 -0
  124. package/documentation/en/mongodb.md +256 -0
  125. package/documentation/en/mvc.md +688 -0
  126. package/documentation/en/mysql.md +682 -0
  127. package/documentation/en/task.md +45 -0
  128. package/documentation/en/test.md +56 -0
  129. package/documentation/en/validate.md +130 -0
  130. package/documentation/zh-cn/mvc.md +66 -24
  131. package/documentation/zh-cn/mysql.md +146 -17
  132. package/package.json +4 -1
  133. package/skills/wok-server-api-rules/SKILL.md +350 -0
  134. package/skills/wok-server-cache/SKILL.md +216 -0
  135. package/skills/wok-server-code-navigation/SKILL.md +153 -0
  136. package/skills/wok-server-config/SKILL.md +200 -0
  137. package/skills/wok-server-getting-started/SKILL.md +123 -0
  138. package/skills/wok-server-getting-started/references/engineering.md +169 -0
  139. package/skills/wok-server-http-client/SKILL.md +164 -0
  140. package/skills/wok-server-i18n/SKILL.md +214 -0
  141. package/skills/wok-server-lock/SKILL.md +144 -0
  142. package/skills/wok-server-log/SKILL.md +218 -0
  143. package/skills/wok-server-mongodb/SKILL.md +235 -0
  144. package/skills/wok-server-mvc/SKILL.md +251 -0
  145. package/skills/wok-server-mvc/references/respond-html.md +157 -0
  146. package/skills/wok-server-mvc/references/sse.md +121 -0
  147. package/skills/wok-server-mvc/references/static-files.md +47 -0
  148. package/skills/wok-server-mvc/references/upload.md +62 -0
  149. package/skills/wok-server-mvc/references/websocket.md +30 -0
  150. package/skills/wok-server-mysql/SKILL.md +388 -0
  151. package/skills/wok-server-mysql/references/multi-datasource.md +76 -0
  152. package/skills/wok-server-mysql/references/version-control.md +22 -0
  153. package/skills/wok-server-task/SKILL.md +158 -0
  154. package/skills/wok-server-validate/SKILL.md +167 -0
  155. package/src/cache/cache.ts +118 -0
  156. package/src/cache/config.ts +53 -0
  157. package/src/cache/index.ts +27 -0
  158. package/src/cache/purge-task.ts +53 -0
  159. package/src/cache/stat.ts +47 -0
  160. package/src/config/convert.ts +27 -0
  161. package/src/config/exception.ts +8 -0
  162. package/src/config/index.ts +92 -0
  163. package/src/http-client/index.ts +202 -0
  164. package/src/i18n/ar.ts +16 -0
  165. package/src/i18n/de.ts +16 -0
  166. package/src/i18n/en-us.ts +16 -0
  167. package/src/i18n/es.ts +16 -0
  168. package/src/i18n/fr.ts +16 -0
  169. package/src/i18n/i18n.ts +230 -0
  170. package/src/i18n/index.ts +50 -0
  171. package/src/i18n/ja.ts +16 -0
  172. package/src/i18n/ko.ts +16 -0
  173. package/src/i18n/msg.ts +50 -0
  174. package/src/i18n/pt.ts +16 -0
  175. package/src/i18n/ru.ts +16 -0
  176. package/src/i18n/tag.ts +18 -0
  177. package/src/i18n/zh-HK.ts +16 -0
  178. package/src/i18n/zh-TW.ts +16 -0
  179. package/src/i18n/zh-cn.ts +16 -0
  180. package/src/index.ts +11 -0
  181. package/src/lock/index.ts +164 -0
  182. package/src/log/config.ts +71 -0
  183. package/src/log/date.ts +19 -0
  184. package/src/log/file.ts +215 -0
  185. package/src/log/index.ts +136 -0
  186. package/src/log/level.ts +29 -0
  187. package/src/log/log.ts +77 -0
  188. package/src/log/store.ts +31 -0
  189. package/src/mongodb/collection.ts +25 -0
  190. package/src/mongodb/config.ts +69 -0
  191. package/src/mongodb/doc.ts +12 -0
  192. package/src/mongodb/exception.ts +8 -0
  193. package/src/mongodb/index.ts +71 -0
  194. package/src/mongodb/manager/base.ts +674 -0
  195. package/src/mongodb/manager/index.ts +80 -0
  196. package/src/mongodb/manager/tx-strict.ts +153 -0
  197. package/src/mongodb/manager/tx.ts +34 -0
  198. package/src/mongodb/migration.ts +66 -0
  199. package/src/mvc/access-log.ts +33 -0
  200. package/src/mvc/config.ts +70 -0
  201. package/src/mvc/exchange.ts +126 -0
  202. package/src/mvc/handler/index.ts +4 -0
  203. package/src/mvc/handler/json.ts +96 -0
  204. package/src/mvc/handler/restful.ts +39 -0
  205. package/src/mvc/handler/sse.ts +90 -0
  206. package/src/mvc/handler/upload.ts +54 -0
  207. package/src/mvc/index.ts +48 -0
  208. package/src/mvc/interceptor.ts +12 -0
  209. package/src/mvc/query.ts +36 -0
  210. package/src/mvc/render/file.ts +148 -0
  211. package/src/mvc/render/html/html.ts +187 -0
  212. package/src/mvc/render/html/index.ts +16 -0
  213. package/src/mvc/render/html/style.ts +1201 -0
  214. package/src/mvc/render/index.ts +4 -0
  215. package/src/mvc/render/json.ts +24 -0
  216. package/src/mvc/render/text.ts +14 -0
  217. package/src/mvc/router.ts +13 -0
  218. package/src/mvc/server.ts +315 -0
  219. package/src/mvc/static/header.ts +86 -0
  220. package/src/mvc/static/index.ts +3 -0
  221. package/src/mvc/static/mime-type.ts +81 -0
  222. package/src/mvc/static/server-cache-config.ts +92 -0
  223. package/src/mvc/static/server-cache.ts +171 -0
  224. package/src/mvc/static/static-handler.ts +445 -0
  225. package/src/mysql/config.ts +130 -0
  226. package/src/mysql/exception.ts +8 -0
  227. package/src/mysql/index.ts +88 -0
  228. package/src/mysql/manager/base.ts +332 -0
  229. package/src/mysql/manager/index.ts +112 -0
  230. package/src/mysql/manager/ops/count.ts +30 -0
  231. package/src/mysql/manager/ops/criteria.ts +446 -0
  232. package/src/mysql/manager/ops/delete.ts +91 -0
  233. package/src/mysql/manager/ops/exist.ts +41 -0
  234. package/src/mysql/manager/ops/find.ts +209 -0
  235. package/src/mysql/manager/ops/index.ts +13 -0
  236. package/src/mysql/manager/ops/insert.ts +158 -0
  237. package/src/mysql/manager/ops/modify.ts +14 -0
  238. package/src/mysql/manager/ops/order-by.ts +58 -0
  239. package/src/mysql/manager/ops/paginate.ts +100 -0
  240. package/src/mysql/manager/ops/query.ts +13 -0
  241. package/src/mysql/manager/ops/update.ts +318 -0
  242. package/src/mysql/manager/ops/upsert.ts +224 -0
  243. package/src/mysql/manager/ops/utils.ts +24 -0
  244. package/src/mysql/manager/tx-strict.ts +138 -0
  245. package/src/mysql/manager/tx.ts +31 -0
  246. package/src/mysql/manager/utils.ts +75 -0
  247. package/src/mysql/migration.ts +149 -0
  248. package/src/mysql/table-info.ts +41 -0
  249. package/src/task/daily.ts +70 -0
  250. package/src/task/fixed-delay.ts +45 -0
  251. package/src/task/fixed-rate.ts +49 -0
  252. package/src/task/index.ts +4 -0
  253. package/src/task/task.ts +70 -0
  254. package/src/validation/exception.ts +27 -0
  255. package/src/validation/index.ts +61 -0
  256. package/src/validation/validator/array.ts +32 -0
  257. package/src/validation/validator/enum.ts +25 -0
  258. package/src/validation/validator/index.ts +11 -0
  259. package/src/validation/validator/length.ts +42 -0
  260. package/src/validation/validator/max-length.ts +33 -0
  261. package/src/validation/validator/max.ts +26 -0
  262. package/src/validation/validator/min-length.ts +31 -0
  263. package/src/validation/validator/min.ts +26 -0
  264. package/src/validation/validator/not-blank.ts +31 -0
  265. package/src/validation/validator/not-null.ts +19 -0
  266. package/src/validation/validator/plain-obj.ts +30 -0
  267. package/src/validation/validator/regexp.ts +32 -0
  268. package/types/cache/cache.d.ts +52 -52
  269. package/types/cache/config.d.ts +32 -32
  270. package/types/cache/index.d.ts +2 -2
  271. package/types/cache/purge-task.d.ts +11 -11
  272. package/types/cache/stat.d.ts +26 -26
  273. package/types/config/convert.d.ts +6 -6
  274. package/types/config/exception.d.ts +7 -7
  275. package/types/config/index.d.ts +25 -25
  276. package/types/http-client/index.d.ts +71 -71
  277. package/types/i18n/ar.d.ts +2 -2
  278. package/types/i18n/de.d.ts +2 -2
  279. package/types/i18n/en-us.d.ts +2 -2
  280. package/types/i18n/es.d.ts +2 -2
  281. package/types/i18n/fr.d.ts +2 -2
  282. package/types/i18n/i18n.d.ts +102 -102
  283. package/types/i18n/index.d.ts +9 -9
  284. package/types/i18n/ja.d.ts +2 -2
  285. package/types/i18n/ko.d.ts +2 -2
  286. package/types/i18n/msg.d.ts +50 -50
  287. package/types/i18n/pt.d.ts +2 -2
  288. package/types/i18n/ru.d.ts +2 -2
  289. package/types/i18n/tag.d.ts +11 -11
  290. package/types/i18n/zh-HK.d.ts +2 -2
  291. package/types/i18n/zh-TW.d.ts +2 -2
  292. package/types/i18n/zh-cn.d.ts +2 -2
  293. package/types/index.d.ts +11 -11
  294. package/types/lock/index.d.ts +64 -64
  295. package/types/log/config.d.ts +35 -35
  296. package/types/log/date.d.ts +2 -2
  297. package/types/log/file.d.ts +13 -13
  298. package/types/log/index.d.ts +53 -53
  299. package/types/log/level.d.ts +14 -14
  300. package/types/log/log.d.ts +40 -40
  301. package/types/log/store.d.ts +19 -19
  302. package/types/mongodb/collection.d.ts +25 -25
  303. package/types/mongodb/config.d.ts +45 -45
  304. package/types/mongodb/doc.d.ts +11 -11
  305. package/types/mongodb/exception.d.ts +7 -7
  306. package/types/mongodb/index.d.ts +29 -29
  307. package/types/mongodb/manager/base.d.ts +188 -188
  308. package/types/mongodb/manager/index.d.ts +38 -38
  309. package/types/mongodb/manager/tx-strict.d.ts +41 -41
  310. package/types/mongodb/manager/tx.d.ts +21 -21
  311. package/types/mongodb/migration.d.ts +12 -12
  312. package/types/mvc/access-log.d.ts +7 -7
  313. package/types/mvc/config.d.ts +42 -42
  314. package/types/mvc/exchange.d.ts +72 -72
  315. package/types/mvc/handler/index.d.ts +4 -3
  316. package/types/mvc/handler/json.d.ts +44 -44
  317. package/types/mvc/handler/restful.d.ts +11 -11
  318. package/types/mvc/handler/sse.d.ts +34 -0
  319. package/types/mvc/handler/upload.d.ts +36 -36
  320. package/types/mvc/index.d.ts +22 -22
  321. package/types/mvc/interceptor.d.ts +11 -11
  322. package/types/mvc/query.d.ts +13 -13
  323. package/types/mvc/render/file.d.ts +10 -10
  324. package/types/mvc/render/html/html.d.ts +98 -98
  325. package/types/mvc/render/html/index.d.ts +11 -11
  326. package/types/mvc/render/html/style.d.ts +1201 -1201
  327. package/types/mvc/render/index.d.ts +4 -4
  328. package/types/mvc/render/json.d.ts +17 -17
  329. package/types/mvc/render/text.d.ts +10 -10
  330. package/types/mvc/router.d.ts +11 -11
  331. package/types/mvc/server.d.ts +90 -90
  332. package/types/mvc/static/header.d.ts +27 -27
  333. package/types/mvc/static/index.d.ts +3 -3
  334. package/types/mvc/static/mime-type.d.ts +2 -2
  335. package/types/mvc/static/server-cache-config.d.ts +30 -30
  336. package/types/mvc/static/server-cache.d.ts +76 -76
  337. package/types/mvc/static/static-handler.d.ts +77 -77
  338. package/types/mysql/config.d.ts +90 -90
  339. package/types/mysql/exception.d.ts +7 -7
  340. package/types/mysql/index.d.ts +16 -16
  341. package/types/mysql/manager/base.d.ts +196 -165
  342. package/types/mysql/manager/index.d.ts +36 -36
  343. package/types/mysql/manager/ops/count.d.ts +13 -13
  344. package/types/mysql/manager/ops/criteria.d.ts +144 -134
  345. package/types/mysql/manager/ops/delete.d.ts +47 -46
  346. package/types/mysql/manager/ops/exist.d.ts +6 -6
  347. package/types/mysql/manager/ops/find.d.ts +87 -86
  348. package/types/mysql/manager/ops/index.d.ts +12 -10
  349. package/types/mysql/manager/ops/insert.d.ts +32 -18
  350. package/types/mysql/manager/ops/modify.d.ts +3 -3
  351. package/types/mysql/manager/ops/order-by.d.ts +38 -0
  352. package/types/mysql/manager/ops/paginate.d.ts +53 -36
  353. package/types/mysql/manager/ops/query.d.ts +3 -3
  354. package/types/mysql/manager/ops/update.d.ts +99 -76
  355. package/types/mysql/manager/ops/upsert.d.ts +36 -0
  356. package/types/mysql/manager/ops/utils.d.ts +5 -5
  357. package/types/mysql/manager/tx-strict.d.ts +36 -36
  358. package/types/mysql/manager/tx.d.ts +15 -15
  359. package/types/mysql/manager/utils.d.ts +17 -17
  360. package/types/mysql/migration.d.ts +8 -8
  361. package/types/mysql/table-info.d.ts +36 -36
  362. package/types/task/daily.d.ts +16 -16
  363. package/types/task/fixed-delay.d.ts +9 -9
  364. package/types/task/fixed-rate.d.ts +9 -9
  365. package/types/task/index.d.ts +4 -4
  366. package/types/task/task.d.ts +34 -34
  367. package/types/validation/exception.d.ts +38 -38
  368. package/types/validation/index.d.ts +32 -32
  369. package/types/validation/validator/array.d.ts +5 -5
  370. package/types/validation/validator/enum.d.ts +8 -8
  371. package/types/validation/validator/index.d.ts +11 -11
  372. package/types/validation/validator/length.d.ts +10 -10
  373. package/types/validation/validator/max-length.d.ts +8 -8
  374. package/types/validation/validator/max.d.ts +7 -7
  375. package/types/validation/validator/min-length.d.ts +6 -6
  376. package/types/validation/validator/min.d.ts +7 -7
  377. package/types/validation/validator/not-blank.d.ts +7 -7
  378. package/types/validation/validator/not-null.d.ts +6 -6
  379. package/types/validation/validator/plain-obj.d.ts +7 -7
  380. package/types/validation/validator/regexp.d.ts +8 -8
@@ -1,356 +1,381 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildQuery = exports.MysqlCriteria = void 0;
4
- const exception_1 = require("../../exception");
5
- /**
6
- * 生成条件查询中键的sql片段,包含 sql 内容和要传递的值
7
- */
8
- function generateMysqlCriteriaKeySqlSeg(key) {
9
- if (Array.isArray(key)) {
10
- if (key[0] === 'json_extract') {
11
- return { sqlSeg: `JSON_EXTRACT(??, ${JSON.stringify(key[2])})`, value: key[1] };
12
- }
13
- if (key[0] === 'json_length') {
14
- return { sqlSeg: `JSON_LENGTH(??)`, value: key[1] };
15
- }
16
- throw new exception_1.MysqlException(`Unsupported MysqlCriteriaKey type: ${key[0]}`);
17
- }
18
- return { sqlSeg: '??', value: key };
19
- }
20
- /**
21
- * mysql 查询条件( query criterion ),默认查询条件都是并且关系(and), 部分方法会有例外,在使用的时候请注意方法说明。
22
- *
23
- * @param <T> 表类型
24
- */
25
- class MysqlCriteria {
26
- /**
27
- * 条件列表.
28
- */
29
- criteria = [];
30
- /**
31
- * 相等.
32
- * @param column
33
- * @param value
34
- */
35
- eq(column, value) {
36
- this.criteria.push({ type: 'eq', key: column, value });
37
- return this;
38
- }
39
- /**
40
- * 不等于,注意不相等不能走索引,谨慎使用
41
- * @param column
42
- * @param value
43
- */
44
- neq(column, value) {
45
- this.criteria.push({ type: 'neq', key: column, value });
46
- return this;
47
- }
48
- /**
49
- * like
50
- * @param column
51
- * @param value
52
- * @returns
53
- */
54
- like(column, value) {
55
- this.criteria.push({ type: 'like', key: column, value });
56
- return this;
57
- }
58
- /**
59
- * not like
60
- * @param column
61
- * @param value
62
- * @returns
63
- */
64
- notLike(column, value) {
65
- this.criteria.push({ type: 'notLike', key: column, value });
66
- return this;
67
- }
68
- /**
69
- * BETWEEN x and y
70
- */
71
- between(column, min, max) {
72
- this.criteria.push({ type: 'between', key: column, value: [min, max] });
73
- return this;
74
- }
75
- /**
76
- * 大于
77
- * @param column
78
- * @param value
79
- */
80
- gt(column, value) {
81
- this.criteria.push({ type: 'gt', key: column, value });
82
- return this;
83
- }
84
- /**
85
- * 大于等于
86
- * @param column
87
- * @param value
88
- */
89
- gte(column, value) {
90
- this.criteria.push({ type: 'gte', key: column, value });
91
- return this;
92
- }
93
- /**
94
- * 小于
95
- * @param column
96
- * @param value
97
- */
98
- lt(column, value) {
99
- this.criteria.push({ type: 'lt', key: column, value });
100
- return this;
101
- }
102
- /**
103
- * 小于等于
104
- * @param column
105
- * @param value
106
- */
107
- lte(column, value) {
108
- this.criteria.push({ type: 'lte', key: column, value });
109
- return this;
110
- }
111
- /**
112
- * in 条件
113
- * @param column
114
- * @param values
115
- */
116
- in(column, values) {
117
- this.criteria.push({ type: 'in', key: column, value: values });
118
- return this;
119
- }
120
- /**
121
- * not in 条件
122
- * @param column
123
- * @param values
124
- */
125
- notIn(column, values) {
126
- this.criteria.push({ type: 'notIn', key: column, value: values });
127
- return this;
128
- }
129
- /**
130
- * 嵌入其它的查询条件,与现有的查询条件是或者关系.
131
- * @param criteria
132
- */
133
- or(orCriteria) {
134
- const criteria = new MysqlCriteria();
135
- orCriteria(criteria);
136
- this.criteria.push({ type: 'or', criteria });
137
- return this;
138
- }
139
- /**
140
- * 嵌入其它的查询条件,与现有的查询条件是并且关系.
141
- * @param criteria
142
- */
143
- and(andCriteria) {
144
- const criteria = new MysqlCriteria();
145
- andCriteria(criteria);
146
- this.criteria.push({ type: 'and', criteria });
147
- return this;
148
- }
149
- /**
150
- * 字段为空
151
- * @param field
152
- * @returns
153
- */
154
- isNull(field) {
155
- this.criteria.push({ type: 'isNull', key: field });
156
- return this;
157
- }
158
- /**
159
- * 字段非空
160
- * @param field
161
- * @returns
162
- */
163
- isNotNull(field) {
164
- this.criteria.push({ type: 'isNotNull', key: field });
165
- return this;
166
- }
167
- /**
168
- * 判定是否空,未设置条件.
169
- * @returns
170
- */
171
- isEmpty() {
172
- return !this.criteria.length;
173
- }
174
- /**
175
- * 检查条件信息是否有效,在出错时能给予较详细的提示,以方便排查.
176
- */
177
- check() {
178
- for (const criterion of this.criteria) {
179
- if (criterion.type === 'or' || criterion.type === 'and') {
180
- if (!criterion.criteria) {
181
- throw new exception_1.MysqlException(`${criterion.type} clause cannot be empty`);
182
- }
183
- criterion.criteria.check();
184
- continue;
185
- }
186
- if (!criterion.key) {
187
- throw new exception_1.MysqlException('The column name of the query criteria cannot be blank.');
188
- }
189
- if (criterion.type === 'isNull' || criterion.type === 'isNotNull') {
190
- continue;
191
- }
192
- if (criterion.type === 'in' || criterion.type === 'notIn') {
193
- if (!Array.isArray(criterion.value)) {
194
- throw new exception_1.MysqlException(`Invalid ${criterion.type} condition,the condition value is not a array type,column name:${criterion.key.toString()}`);
195
- }
196
- if (!criterion.value.length) {
197
- throw new exception_1.MysqlException(`Invalid ${criterion.type} condition,the condition value cannot be an empty array,column name:${criterion.key.toString()}`);
198
- }
199
- continue;
200
- }
201
- if (criterion.type === 'between') {
202
- if (!Array.isArray(criterion.value)) {
203
- throw new exception_1.MysqlException(`Invalid between condition,the condition value is not an array type,column name:${criterion.key.toString()}, value:${criterion.value}`);
204
- }
205
- if (criterion.value.length !== 2) {
206
- throw new exception_1.MysqlException(`Invalid between condition,the condition value must be an array of length 2,column: ${criterion.key.toString()},value:${criterion.value.length}`);
207
- }
208
- continue;
209
- }
210
- if (typeof criterion.value !== 'number' &&
211
- typeof criterion.value !== 'string' &&
212
- typeof criterion.value !== 'boolean' &&
213
- !(criterion.value instanceof Date)) {
214
- throw new exception_1.MysqlException('The value of the query criteria is invalid,only number,string,boolean and Date are supported,' +
215
- `column name : ${criterion.key.toString()},value : ${criterion.value} .`);
216
- }
217
- }
218
- }
219
- /**
220
- * 生成查询数据
221
- */
222
- generateQuery() {
223
- this.check();
224
- const sqlFragments = [];
225
- const values = [];
226
- for (const criterion of this.criteria) {
227
- // 普通的查询
228
- if (criterion.key && criterion.value !== undefined) {
229
- // between 特殊处理
230
- if (criterion.type === 'between') {
231
- sqlFragments.push('and ?? between ? and ? ');
232
- values.push(criterion.key, criterion.value[0], criterion.value[1]);
233
- continue;
234
- }
235
- // 符号
236
- let sign = '';
237
- if (criterion.type === 'eq') {
238
- sign = '=';
239
- }
240
- else if (criterion.type === 'neq') {
241
- sign = '!=';
242
- }
243
- else if (criterion.type === 'gt') {
244
- sign = '>';
245
- }
246
- else if (criterion.type === 'gte') {
247
- sign = '>=';
248
- }
249
- else if (criterion.type === 'lt') {
250
- sign = '<';
251
- }
252
- else if (criterion.type === 'lte') {
253
- sign = '<=';
254
- }
255
- else if (criterion.type === 'in') {
256
- sign = 'in';
257
- }
258
- else if (criterion.type === 'notIn') {
259
- sign = 'not in';
260
- }
261
- else if (criterion.type === 'like') {
262
- sign = 'like';
263
- }
264
- else if (criterion.type === 'notLike') {
265
- sign = 'not like';
266
- }
267
- if (sign) {
268
- const keySeg = generateMysqlCriteriaKeySqlSeg(criterion.key);
269
- if (criterion.type === 'in' || criterion.type === 'notIn') {
270
- sqlFragments.push(`and ${keySeg.sqlSeg} ${sign} (?) `);
271
- }
272
- else {
273
- sqlFragments.push(`and ${keySeg.sqlSeg} ${sign} ? `);
274
- }
275
- values.push(keySeg.value, criterion.value);
276
- }
277
- continue;
278
- }
279
- else if (criterion.key) {
280
- const keySeg = generateMysqlCriteriaKeySqlSeg(criterion.key);
281
- if (criterion.type === 'isNull') {
282
- sqlFragments.push(`and ${keySeg.sqlSeg} is null `);
283
- values.push(keySeg.value);
284
- continue;
285
- }
286
- if (criterion.type === 'isNotNull') {
287
- sqlFragments.push(`and ${keySeg.sqlSeg} is not null `);
288
- values.push(keySeg.value);
289
- continue;
290
- }
291
- }
292
- // 特殊查询 or and
293
- else if (criterion.criteria) {
294
- const query = criterion.criteria.generateQuery();
295
- if (criterion.type === 'or') {
296
- sqlFragments.push(`or (${query.sql}) `);
297
- values.push(...query.values);
298
- continue;
299
- }
300
- if (criterion.type === 'and') {
301
- sqlFragments.push(`and (${query.sql}) `);
302
- values.push(...query.values);
303
- continue;
304
- }
305
- }
306
- }
307
- if (!sqlFragments.length) {
308
- throw new exception_1.MysqlException('No valid query criteria have been set.');
309
- }
310
- let sql = sqlFragments.join('');
311
- // 去除掉第一个条件的连接关键字,可能是 and or
312
- if (sql.startsWith('and')) {
313
- sql = sql.substring(3);
314
- }
315
- else if (sql.startsWith('or')) {
316
- sql = sql.substring(2);
317
- }
318
- return { sql, values };
319
- }
320
- }
321
- exports.MysqlCriteria = MysqlCriteria;
322
- function convertToCriteria(example) {
323
- const criteria = new MysqlCriteria();
324
- Object.entries(example).forEach(entry => {
325
- const [key, value] = entry;
326
- criteria.eq(key, value);
327
- });
328
- return criteria;
329
- }
330
- /**
331
- * 将混合的查询条件转换成查询语句,如果最终构建的条件是空的,返回 undefined
332
- * @param criteria
333
- * @returns
334
- */
335
- function buildQuery(criteria) {
336
- if (criteria instanceof Function) {
337
- const c = new MysqlCriteria();
338
- criteria(c);
339
- if (!c.isEmpty()) {
340
- return c.generateQuery();
341
- }
342
- }
343
- else if (criteria instanceof MysqlCriteria) {
344
- if (!criteria.isEmpty()) {
345
- return criteria.generateQuery();
346
- }
347
- }
348
- else {
349
- const c = convertToCriteria(criteria);
350
- if (!c.isEmpty()) {
351
- return c.generateQuery();
352
- }
353
- }
354
- return undefined;
355
- }
356
- exports.buildQuery = buildQuery;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildQuery = exports.MysqlCriteria = void 0;
4
+ const exception_1 = require("../../exception");
5
+ /**
6
+ * 生成条件查询中键的sql片段,包含 sql 内容和要传递的值
7
+ */
8
+ function generateMysqlCriteriaKeySqlSeg(key) {
9
+ if (Array.isArray(key)) {
10
+ if (key[0] === 'json_extract') {
11
+ return { sqlSeg: `JSON_EXTRACT(??, ${JSON.stringify(key[2])})`, value: key[1] };
12
+ }
13
+ if (key[0] === 'json_length') {
14
+ return { sqlSeg: `JSON_LENGTH(??)`, value: key[1] };
15
+ }
16
+ throw new exception_1.MysqlException(`Unsupported MysqlCriteriaKey type: ${key[0]}`);
17
+ }
18
+ return { sqlSeg: '??', value: key };
19
+ }
20
+ /**
21
+ * mysql 查询条件( query criterion ),默认查询条件都是并且关系(and), 部分方法会有例外,在使用的时候请注意方法说明。
22
+ *
23
+ * @param <T> 表类型
24
+ */
25
+ class MysqlCriteria {
26
+ /**
27
+ * 条件列表.
28
+ */
29
+ criteria = [];
30
+ /**
31
+ * 相等.
32
+ * @param column
33
+ * @param value
34
+ */
35
+ eq(column, value) {
36
+ this.criteria.push({ type: 'eq', key: column, value });
37
+ return this;
38
+ }
39
+ /**
40
+ * 不等于,注意不相等不能走索引,谨慎使用
41
+ * @param column
42
+ * @param value
43
+ */
44
+ neq(column, value) {
45
+ this.criteria.push({ type: 'neq', key: column, value });
46
+ return this;
47
+ }
48
+ /**
49
+ * like
50
+ * @param column
51
+ * @param value
52
+ * @returns
53
+ */
54
+ like(column, value) {
55
+ this.criteria.push({ type: 'like', key: column, value });
56
+ return this;
57
+ }
58
+ /**
59
+ * not like
60
+ * @param column
61
+ * @param value
62
+ * @returns
63
+ */
64
+ notLike(column, value) {
65
+ this.criteria.push({ type: 'notLike', key: column, value });
66
+ return this;
67
+ }
68
+ /**
69
+ * BETWEEN x and y
70
+ */
71
+ between(column, min, max) {
72
+ this.criteria.push({ type: 'between', key: column, value: [min, max] });
73
+ return this;
74
+ }
75
+ /**
76
+ * 大于
77
+ * @param column
78
+ * @param value
79
+ */
80
+ gt(column, value) {
81
+ this.criteria.push({ type: 'gt', key: column, value });
82
+ return this;
83
+ }
84
+ /**
85
+ * 大于等于
86
+ * @param column
87
+ * @param value
88
+ */
89
+ gte(column, value) {
90
+ this.criteria.push({ type: 'gte', key: column, value });
91
+ return this;
92
+ }
93
+ /**
94
+ * 小于
95
+ * @param column
96
+ * @param value
97
+ */
98
+ lt(column, value) {
99
+ this.criteria.push({ type: 'lt', key: column, value });
100
+ return this;
101
+ }
102
+ /**
103
+ * 小于等于
104
+ * @param column
105
+ * @param value
106
+ */
107
+ lte(column, value) {
108
+ this.criteria.push({ type: 'lte', key: column, value });
109
+ return this;
110
+ }
111
+ /**
112
+ * in 条件
113
+ * @param column
114
+ * @param values
115
+ */
116
+ in(column, values) {
117
+ this.criteria.push({ type: 'in', key: column, value: values });
118
+ return this;
119
+ }
120
+ /**
121
+ * not in 条件
122
+ * @param column
123
+ * @param values
124
+ */
125
+ notIn(column, values) {
126
+ this.criteria.push({ type: 'notIn', key: column, value: values });
127
+ return this;
128
+ }
129
+ /**
130
+ * 嵌入其它的查询条件,与现有的查询条件是或者关系.
131
+ * @param criteria
132
+ */
133
+ or(orCriteria) {
134
+ const criteria = new MysqlCriteria();
135
+ orCriteria(criteria);
136
+ this.criteria.push({ type: 'or', criteria });
137
+ return this;
138
+ }
139
+ /**
140
+ * 嵌入其它的查询条件,与现有的查询条件是并且关系.
141
+ * @param criteria
142
+ */
143
+ and(andCriteria) {
144
+ const criteria = new MysqlCriteria();
145
+ andCriteria(criteria);
146
+ this.criteria.push({ type: 'and', criteria });
147
+ return this;
148
+ }
149
+ /**
150
+ * 字段为空
151
+ * @param field
152
+ * @returns
153
+ */
154
+ isNull(field) {
155
+ this.criteria.push({ type: 'isNull', key: field });
156
+ return this;
157
+ }
158
+ /**
159
+ * 字段非空
160
+ * @param field
161
+ * @returns
162
+ */
163
+ isNotNull(field) {
164
+ this.criteria.push({ type: 'isNotNull', key: field });
165
+ return this;
166
+ }
167
+ /**
168
+ * 自定义表达式查询
169
+ * 如 .expr('?? * ? > ?', ['balance', 2, 50])
170
+ * 如 .expr('MATCH(??, ??) AGAINST(? IN BOOLEAN MODE)', ['title', 'content', keyword])
171
+ * 如 .expr('VECTOR_DISTANCE(??, STRING_TO_VECTOR(?)) < ?', ['content_vec', embedding, threshold])
172
+ * @param sql SQL 片段,使用 ?? 引用列名,? 引用参数值
173
+ * @param values 参数值数组,按 SQL 中占位符顺序传入
174
+ * @returns
175
+ */
176
+ expr(sql, values) {
177
+ this.criteria.push({ type: 'expr', exprSql: sql, exprValues: values || [] });
178
+ return this;
179
+ }
180
+ /**
181
+ * 判定是否空,未设置条件.
182
+ * @returns
183
+ */
184
+ isEmpty() {
185
+ return !this.criteria.length;
186
+ }
187
+ /**
188
+ * 检查条件信息是否有效,在出错时能给予较详细的提示,以方便排查.
189
+ */
190
+ check() {
191
+ for (const criterion of this.criteria) {
192
+ if (criterion.type === 'expr') {
193
+ if (!criterion.exprSql) {
194
+ throw new exception_1.MysqlException('expr clause exprSql cannot be empty');
195
+ }
196
+ continue;
197
+ }
198
+ if (criterion.type === 'or' || criterion.type === 'and') {
199
+ if (!criterion.criteria) {
200
+ throw new exception_1.MysqlException(`${criterion.type} clause cannot be empty`);
201
+ }
202
+ criterion.criteria.check();
203
+ continue;
204
+ }
205
+ if (!criterion.key) {
206
+ throw new exception_1.MysqlException('The column name of the query criteria cannot be blank.');
207
+ }
208
+ if (criterion.type === 'isNull' || criterion.type === 'isNotNull') {
209
+ continue;
210
+ }
211
+ if (criterion.type === 'in' || criterion.type === 'notIn') {
212
+ if (!Array.isArray(criterion.value)) {
213
+ throw new exception_1.MysqlException(`Invalid ${criterion.type} condition,the condition value is not a array type,column name:${criterion.key.toString()}`);
214
+ }
215
+ if (!criterion.value.length) {
216
+ throw new exception_1.MysqlException(`Invalid ${criterion.type} condition,the condition value cannot be an empty array,column name:${criterion.key.toString()}`);
217
+ }
218
+ continue;
219
+ }
220
+ if (criterion.type === 'between') {
221
+ if (!Array.isArray(criterion.value)) {
222
+ throw new exception_1.MysqlException(`Invalid between condition,the condition value is not an array type,column name:${criterion.key.toString()}, value:${criterion.value}`);
223
+ }
224
+ if (criterion.value.length !== 2) {
225
+ throw new exception_1.MysqlException(`Invalid between condition,the condition value must be an array of length 2,column: ${criterion.key.toString()},value:${criterion.value.length}`);
226
+ }
227
+ continue;
228
+ }
229
+ if (typeof criterion.value !== 'number' &&
230
+ typeof criterion.value !== 'string' &&
231
+ typeof criterion.value !== 'boolean' &&
232
+ !(criterion.value instanceof Date)) {
233
+ throw new exception_1.MysqlException('The value of the query criteria is invalid,only number,string,boolean and Date are supported,' +
234
+ `column name : ${criterion.key.toString()},value : ${criterion.value} .`);
235
+ }
236
+ }
237
+ }
238
+ /**
239
+ * 生成查询数据
240
+ */
241
+ generateQuery() {
242
+ this.check();
243
+ const sqlFragments = [];
244
+ const values = [];
245
+ for (const criterion of this.criteria) {
246
+ // 普通的查询
247
+ if (criterion.key && criterion.value !== undefined) {
248
+ // between 特殊处理
249
+ if (criterion.type === 'between') {
250
+ sqlFragments.push('and ?? between ? and ? ');
251
+ values.push(criterion.key, criterion.value[0], criterion.value[1]);
252
+ continue;
253
+ }
254
+ // 符号
255
+ let sign = '';
256
+ if (criterion.type === 'eq') {
257
+ sign = '=';
258
+ }
259
+ else if (criterion.type === 'neq') {
260
+ sign = '!=';
261
+ }
262
+ else if (criterion.type === 'gt') {
263
+ sign = '>';
264
+ }
265
+ else if (criterion.type === 'gte') {
266
+ sign = '>=';
267
+ }
268
+ else if (criterion.type === 'lt') {
269
+ sign = '<';
270
+ }
271
+ else if (criterion.type === 'lte') {
272
+ sign = '<=';
273
+ }
274
+ else if (criterion.type === 'in') {
275
+ sign = 'in';
276
+ }
277
+ else if (criterion.type === 'notIn') {
278
+ sign = 'not in';
279
+ }
280
+ else if (criterion.type === 'like') {
281
+ sign = 'like';
282
+ }
283
+ else if (criterion.type === 'notLike') {
284
+ sign = 'not like';
285
+ }
286
+ if (sign) {
287
+ const keySeg = generateMysqlCriteriaKeySqlSeg(criterion.key);
288
+ if (criterion.type === 'in' || criterion.type === 'notIn') {
289
+ sqlFragments.push(`and ${keySeg.sqlSeg} ${sign} (?) `);
290
+ }
291
+ else {
292
+ sqlFragments.push(`and ${keySeg.sqlSeg} ${sign} ? `);
293
+ }
294
+ values.push(keySeg.value, criterion.value);
295
+ }
296
+ continue;
297
+ }
298
+ else if (criterion.key) {
299
+ const keySeg = generateMysqlCriteriaKeySqlSeg(criterion.key);
300
+ if (criterion.type === 'isNull') {
301
+ sqlFragments.push(`and ${keySeg.sqlSeg} is null `);
302
+ values.push(keySeg.value);
303
+ continue;
304
+ }
305
+ if (criterion.type === 'isNotNull') {
306
+ sqlFragments.push(`and ${keySeg.sqlSeg} is not null `);
307
+ values.push(keySeg.value);
308
+ continue;
309
+ }
310
+ }
311
+ // 特殊查询 or and
312
+ else if (criterion.criteria) {
313
+ const query = criterion.criteria.generateQuery();
314
+ if (criterion.type === 'or') {
315
+ sqlFragments.push(`or (${query.sql}) `);
316
+ values.push(...query.values);
317
+ continue;
318
+ }
319
+ if (criterion.type === 'and') {
320
+ sqlFragments.push(`and (${query.sql}) `);
321
+ values.push(...query.values);
322
+ continue;
323
+ }
324
+ }
325
+ // 自定义表达式
326
+ else if (criterion.type === 'expr' && criterion.exprSql) {
327
+ sqlFragments.push(`and ${criterion.exprSql} `);
328
+ values.push(...(criterion.exprValues || []));
329
+ continue;
330
+ }
331
+ }
332
+ if (!sqlFragments.length) {
333
+ throw new exception_1.MysqlException('No valid query criteria have been set.');
334
+ }
335
+ let sql = sqlFragments.join('');
336
+ // 去除掉第一个条件的连接关键字,可能是 and or
337
+ if (sql.startsWith('and')) {
338
+ sql = sql.substring(3);
339
+ }
340
+ else if (sql.startsWith('or')) {
341
+ sql = sql.substring(2);
342
+ }
343
+ return { sql, values };
344
+ }
345
+ }
346
+ exports.MysqlCriteria = MysqlCriteria;
347
+ function convertToCriteria(example) {
348
+ const criteria = new MysqlCriteria();
349
+ Object.entries(example).forEach(entry => {
350
+ const [key, value] = entry;
351
+ criteria.eq(key, value);
352
+ });
353
+ return criteria;
354
+ }
355
+ /**
356
+ * 将混合的查询条件转换成查询语句,如果最终构建的条件是空的,返回 undefined
357
+ * @param criteria
358
+ * @returns
359
+ */
360
+ function buildQuery(criteria) {
361
+ if (criteria instanceof Function) {
362
+ const c = new MysqlCriteria();
363
+ criteria(c);
364
+ if (!c.isEmpty()) {
365
+ return c.generateQuery();
366
+ }
367
+ }
368
+ else if (criteria instanceof MysqlCriteria) {
369
+ if (!criteria.isEmpty()) {
370
+ return criteria.generateQuery();
371
+ }
372
+ }
373
+ else {
374
+ const c = convertToCriteria(criteria);
375
+ if (!c.isEmpty()) {
376
+ return c.generateQuery();
377
+ }
378
+ }
379
+ return undefined;
380
+ }
381
+ exports.buildQuery = buildQuery;