wok-server 0.4.13 → 0.6.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 (376) 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 -29
  31. package/dist/log/date.js +21 -21
  32. package/dist/log/file.js +198 -72
  33. package/dist/log/index.js +135 -105
  34. package/dist/log/level.js +33 -33
  35. package/dist/log/log.js +56 -0
  36. package/dist/log/store.js +19 -16
  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 +239 -231
  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 +356 -356
  80. package/dist/mysql/manager/ops/delete.js +65 -65
  81. package/dist/mysql/manager/ops/exist.js +26 -26
  82. package/dist/mysql/manager/ops/find.js +169 -130
  83. package/dist/mysql/manager/ops/index.js +14 -14
  84. package/dist/mysql/manager/ops/insert.js +106 -106
  85. package/dist/mysql/manager/ops/modify.js +10 -10
  86. package/dist/mysql/manager/ops/paginate.js +23 -23
  87. package/dist/mysql/manager/ops/query.js +9 -9
  88. package/dist/mysql/manager/ops/update.js +216 -216
  89. package/dist/mysql/manager/ops/utils.js +24 -24
  90. package/dist/mysql/manager/tx-strict.js +103 -100
  91. package/dist/mysql/manager/tx.js +30 -30
  92. package/dist/mysql/manager/utils.js +56 -56
  93. package/dist/mysql/migration.js +136 -136
  94. package/dist/mysql/table-info.js +8 -8
  95. package/dist/task/daily.js +59 -59
  96. package/dist/task/fixed-delay.js +38 -38
  97. package/dist/task/fixed-rate.js +42 -42
  98. package/dist/task/index.js +9 -9
  99. package/dist/task/task.js +56 -56
  100. package/dist/validation/exception.js +36 -36
  101. package/dist/validation/index.js +40 -40
  102. package/dist/validation/validator/array.js +34 -34
  103. package/dist/validation/validator/enum.js +28 -28
  104. package/dist/validation/validator/index.js +14 -14
  105. package/dist/validation/validator/length.js +40 -40
  106. package/dist/validation/validator/max-length.js +35 -35
  107. package/dist/validation/validator/max.js +29 -29
  108. package/dist/validation/validator/min-length.js +33 -33
  109. package/dist/validation/validator/min.js +29 -29
  110. package/dist/validation/validator/not-blank.js +33 -33
  111. package/dist/validation/validator/not-null.js +21 -21
  112. package/dist/validation/validator/plain-obj.js +32 -32
  113. package/dist/validation/validator/regexp.js +34 -34
  114. package/documentation/en/cache.md +56 -0
  115. package/documentation/en/config.md +96 -0
  116. package/documentation/en/engineering.md +256 -0
  117. package/documentation/en/http-client.md +32 -0
  118. package/documentation/en/i18n.md +143 -0
  119. package/documentation/en/index.md +24 -0
  120. package/documentation/en/lock.md +51 -0
  121. package/documentation/en/log.md +109 -0
  122. package/documentation/en/mongodb.md +256 -0
  123. package/documentation/en/mvc.md +688 -0
  124. package/documentation/en/mysql.md +552 -0
  125. package/documentation/en/task.md +45 -0
  126. package/documentation/en/test.md +56 -0
  127. package/documentation/en/validate.md +130 -0
  128. package/documentation/zh-cn/engineering.md +1 -1
  129. package/documentation/zh-cn/log.md +81 -8
  130. package/documentation/zh-cn/mvc.md +66 -24
  131. package/documentation/zh-cn/mysql.md +24 -23
  132. package/documentation/zh-cn/validate.md +2 -2
  133. package/package.json +3 -1
  134. package/skills/wok-server-api-rules/SKILL.md +350 -0
  135. package/skills/wok-server-cache/SKILL.md +216 -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 +315 -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 +285 -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 +412 -0
  232. package/src/mysql/manager/ops/delete.ts +96 -0
  233. package/src/mysql/manager/ops/exist.ts +41 -0
  234. package/src/mysql/manager/ops/find.ts +226 -0
  235. package/src/mysql/manager/ops/index.ts +11 -0
  236. package/src/mysql/manager/ops/insert.ts +120 -0
  237. package/src/mysql/manager/ops/modify.ts +14 -0
  238. package/src/mysql/manager/ops/paginate.ts +60 -0
  239. package/src/mysql/manager/ops/query.ts +13 -0
  240. package/src/mysql/manager/ops/update.ts +294 -0
  241. package/src/mysql/manager/ops/utils.ts +20 -0
  242. package/src/mysql/manager/tx-strict.ts +138 -0
  243. package/src/mysql/manager/tx.ts +31 -0
  244. package/src/mysql/manager/utils.ts +75 -0
  245. package/src/mysql/migration.ts +149 -0
  246. package/src/mysql/table-info.ts +41 -0
  247. package/src/task/daily.ts +70 -0
  248. package/src/task/fixed-delay.ts +45 -0
  249. package/src/task/fixed-rate.ts +49 -0
  250. package/src/task/index.ts +4 -0
  251. package/src/task/task.ts +70 -0
  252. package/src/validation/exception.ts +27 -0
  253. package/src/validation/index.ts +61 -0
  254. package/src/validation/validator/array.ts +32 -0
  255. package/src/validation/validator/enum.ts +25 -0
  256. package/src/validation/validator/index.ts +11 -0
  257. package/src/validation/validator/length.ts +42 -0
  258. package/src/validation/validator/max-length.ts +33 -0
  259. package/src/validation/validator/max.ts +26 -0
  260. package/src/validation/validator/min-length.ts +31 -0
  261. package/src/validation/validator/min.ts +26 -0
  262. package/src/validation/validator/not-blank.ts +31 -0
  263. package/src/validation/validator/not-null.ts +19 -0
  264. package/src/validation/validator/plain-obj.ts +30 -0
  265. package/src/validation/validator/regexp.ts +32 -0
  266. package/types/cache/cache.d.ts +52 -52
  267. package/types/cache/config.d.ts +32 -32
  268. package/types/cache/index.d.ts +2 -2
  269. package/types/cache/purge-task.d.ts +11 -11
  270. package/types/cache/stat.d.ts +26 -26
  271. package/types/config/convert.d.ts +6 -6
  272. package/types/config/exception.d.ts +7 -7
  273. package/types/config/index.d.ts +25 -25
  274. package/types/http-client/index.d.ts +71 -71
  275. package/types/i18n/ar.d.ts +2 -2
  276. package/types/i18n/de.d.ts +2 -2
  277. package/types/i18n/en-us.d.ts +2 -2
  278. package/types/i18n/es.d.ts +2 -2
  279. package/types/i18n/fr.d.ts +2 -2
  280. package/types/i18n/i18n.d.ts +102 -102
  281. package/types/i18n/index.d.ts +9 -9
  282. package/types/i18n/ja.d.ts +2 -2
  283. package/types/i18n/ko.d.ts +2 -2
  284. package/types/i18n/msg.d.ts +50 -50
  285. package/types/i18n/pt.d.ts +2 -2
  286. package/types/i18n/ru.d.ts +2 -2
  287. package/types/i18n/tag.d.ts +11 -11
  288. package/types/i18n/zh-HK.d.ts +2 -2
  289. package/types/i18n/zh-TW.d.ts +2 -2
  290. package/types/i18n/zh-cn.d.ts +2 -2
  291. package/types/index.d.ts +11 -11
  292. package/types/lock/index.d.ts +64 -64
  293. package/types/log/config.d.ts +35 -27
  294. package/types/log/date.d.ts +2 -2
  295. package/types/log/file.d.ts +13 -5
  296. package/types/log/index.d.ts +53 -34
  297. package/types/log/level.d.ts +14 -14
  298. package/types/log/log.d.ts +40 -0
  299. package/types/log/store.d.ts +19 -12
  300. package/types/mongodb/collection.d.ts +25 -25
  301. package/types/mongodb/config.d.ts +45 -45
  302. package/types/mongodb/doc.d.ts +11 -11
  303. package/types/mongodb/exception.d.ts +7 -7
  304. package/types/mongodb/index.d.ts +29 -29
  305. package/types/mongodb/manager/base.d.ts +188 -188
  306. package/types/mongodb/manager/index.d.ts +38 -38
  307. package/types/mongodb/manager/tx-strict.d.ts +41 -41
  308. package/types/mongodb/manager/tx.d.ts +21 -21
  309. package/types/mongodb/migration.d.ts +12 -12
  310. package/types/mvc/access-log.d.ts +7 -7
  311. package/types/mvc/config.d.ts +42 -42
  312. package/types/mvc/exchange.d.ts +72 -72
  313. package/types/mvc/handler/index.d.ts +4 -3
  314. package/types/mvc/handler/json.d.ts +44 -44
  315. package/types/mvc/handler/restful.d.ts +11 -11
  316. package/types/mvc/handler/sse.d.ts +34 -0
  317. package/types/mvc/handler/upload.d.ts +36 -36
  318. package/types/mvc/index.d.ts +22 -22
  319. package/types/mvc/interceptor.d.ts +11 -11
  320. package/types/mvc/query.d.ts +13 -13
  321. package/types/mvc/render/file.d.ts +10 -10
  322. package/types/mvc/render/html/html.d.ts +98 -98
  323. package/types/mvc/render/html/index.d.ts +11 -11
  324. package/types/mvc/render/html/style.d.ts +1201 -1201
  325. package/types/mvc/render/index.d.ts +4 -4
  326. package/types/mvc/render/json.d.ts +17 -17
  327. package/types/mvc/render/text.d.ts +10 -10
  328. package/types/mvc/router.d.ts +11 -11
  329. package/types/mvc/server.d.ts +90 -90
  330. package/types/mvc/static/header.d.ts +27 -27
  331. package/types/mvc/static/index.d.ts +3 -3
  332. package/types/mvc/static/mime-type.d.ts +2 -2
  333. package/types/mvc/static/server-cache-config.d.ts +30 -30
  334. package/types/mvc/static/server-cache.d.ts +76 -76
  335. package/types/mvc/static/static-handler.d.ts +77 -77
  336. package/types/mysql/config.d.ts +90 -90
  337. package/types/mysql/exception.d.ts +7 -7
  338. package/types/mysql/index.d.ts +16 -16
  339. package/types/mysql/manager/base.d.ts +165 -159
  340. package/types/mysql/manager/index.d.ts +36 -36
  341. package/types/mysql/manager/ops/count.d.ts +13 -13
  342. package/types/mysql/manager/ops/criteria.d.ts +134 -134
  343. package/types/mysql/manager/ops/delete.d.ts +46 -46
  344. package/types/mysql/manager/ops/exist.d.ts +6 -6
  345. package/types/mysql/manager/ops/find.d.ts +86 -70
  346. package/types/mysql/manager/ops/index.d.ts +10 -10
  347. package/types/mysql/manager/ops/insert.d.ts +18 -18
  348. package/types/mysql/manager/ops/modify.d.ts +3 -3
  349. package/types/mysql/manager/ops/paginate.d.ts +36 -36
  350. package/types/mysql/manager/ops/query.d.ts +3 -3
  351. package/types/mysql/manager/ops/update.d.ts +76 -76
  352. package/types/mysql/manager/ops/utils.d.ts +5 -5
  353. package/types/mysql/manager/tx-strict.d.ts +36 -35
  354. package/types/mysql/manager/tx.d.ts +15 -15
  355. package/types/mysql/manager/utils.d.ts +17 -17
  356. package/types/mysql/migration.d.ts +8 -8
  357. package/types/mysql/table-info.d.ts +36 -36
  358. package/types/task/daily.d.ts +16 -16
  359. package/types/task/fixed-delay.d.ts +9 -9
  360. package/types/task/fixed-rate.d.ts +9 -9
  361. package/types/task/index.d.ts +4 -4
  362. package/types/task/task.d.ts +34 -34
  363. package/types/validation/exception.d.ts +38 -38
  364. package/types/validation/index.d.ts +32 -32
  365. package/types/validation/validator/array.d.ts +5 -5
  366. package/types/validation/validator/enum.d.ts +8 -8
  367. package/types/validation/validator/index.d.ts +11 -11
  368. package/types/validation/validator/length.d.ts +10 -10
  369. package/types/validation/validator/max-length.d.ts +8 -8
  370. package/types/validation/validator/max.d.ts +7 -7
  371. package/types/validation/validator/min-length.d.ts +6 -6
  372. package/types/validation/validator/min.d.ts +7 -7
  373. package/types/validation/validator/not-blank.d.ts +7 -7
  374. package/types/validation/validator/not-null.d.ts +6 -6
  375. package/types/validation/validator/plain-obj.d.ts +7 -7
  376. package/types/validation/validator/regexp.d.ts +8 -8
@@ -0,0 +1,136 @@
1
+ import { config } from './config'
2
+ import { fileStore } from './file'
3
+ import { LogLevel } from './level'
4
+ import { formatLogJson, formatLogText, Log } from './log'
5
+ import { getLogStore, setLogStore } from './store'
6
+
7
+ /**
8
+ * 文件存储
9
+ */
10
+ if (config.file) {
11
+ setLogStore(fileStore)
12
+ }
13
+
14
+ class Logger {
15
+ constructor(private prefix?: string) {}
16
+
17
+ /**
18
+ * 输出日志
19
+ * @param level
20
+ * @param message
21
+ * @param error
22
+ */
23
+ private log(level: LogLevel, message: string, error?: any) {
24
+ if (level < config.level) {
25
+ return
26
+ }
27
+ const log: Log = {
28
+ level,
29
+ content: message,
30
+ time: new Date(),
31
+ prefix: this.prefix,
32
+ error
33
+ }
34
+ // 控制台输出日志
35
+ if (config.console) {
36
+ // const msg = config.format === 'text' ? formatLogText(log, true) : formatLogJson(log, true)
37
+ // 控制台强制使用 text 格式,json 格式只在文件中输出
38
+ const msg = formatLogText(log, true)
39
+ switch (level) {
40
+ case LogLevel.DEBUG:
41
+ console.debug(msg)
42
+ break
43
+ case LogLevel.INFO:
44
+ console.info(msg)
45
+ break
46
+ case LogLevel.WARN:
47
+ console.warn(msg)
48
+ break
49
+ case LogLevel.ERROR:
50
+ console.error(msg)
51
+ break
52
+ }
53
+ if (error) {
54
+ console.error(error)
55
+ }
56
+ }
57
+ // 自定义存储中输出日志
58
+ const store = getLogStore()
59
+ if (store) {
60
+ store(log, config)
61
+ }
62
+ }
63
+ /**
64
+ * debug 日志
65
+ */
66
+ debug(message: string) {
67
+ this.log(LogLevel.DEBUG, message)
68
+ }
69
+
70
+ isDebugEnabled() {
71
+ return LogLevel.DEBUG >= config.level
72
+ }
73
+ /**
74
+ * info 日志
75
+ * @param message
76
+ */
77
+ info(message: string) {
78
+ this.log(LogLevel.INFO, message)
79
+ }
80
+
81
+ isInfoEnabled() {
82
+ return LogLevel.INFO >= config.level
83
+ }
84
+ /**
85
+ * 警告日志
86
+ * @param message
87
+ * @param error
88
+ */
89
+ warn(message: string, error?: any) {
90
+ this.log(LogLevel.WARN, message, error)
91
+ }
92
+ /**
93
+ * 等同于 warn
94
+ * @param message
95
+ * @param error
96
+ */
97
+ warning(message: string, error?: any) {
98
+ this.log(LogLevel.WARN, message, error)
99
+ }
100
+
101
+ isWarnEnabled() {
102
+ return LogLevel.WARN >= config.level
103
+ }
104
+ /**
105
+ * 错误日志
106
+ * @param message
107
+ * @param error
108
+ */
109
+ error(message: string, error?: any) {
110
+ this.log(LogLevel.ERROR, message, error)
111
+ }
112
+
113
+ isErrorEnabled() {
114
+ return LogLevel.ERROR >= config.level
115
+ }
116
+ }
117
+
118
+ const defaultLogger = new Logger()
119
+
120
+ /**
121
+ * 获取日志对象.
122
+ *
123
+ * @param prefix 日志前缀,如果有值,每条日志前都会加上前缀信息
124
+ * @returns
125
+ */
126
+ export function getLogger(prefix?: string) {
127
+ if (prefix) {
128
+ return new Logger(prefix)
129
+ }
130
+ return defaultLogger
131
+ }
132
+
133
+ export * from './config'
134
+ export * from './level'
135
+ export * from './log'
136
+ export { setLogStore } from './store'
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 日志级别.
3
+ */
4
+ export enum LogLevel {
5
+ DEBUG = 1,
6
+ INFO = 2,
7
+ WARN = 3,
8
+ ERROR = 4
9
+ }
10
+
11
+ /**
12
+ * 解析日志级别
13
+ * @param level
14
+ */
15
+ export function parseLogLevel(level: string): LogLevel {
16
+ const iLevel = level.toUpperCase()
17
+ switch (iLevel) {
18
+ case 'DEBUG':
19
+ return LogLevel.DEBUG
20
+ case 'INFO':
21
+ return LogLevel.INFO
22
+ case 'WARN':
23
+ return LogLevel.WARN
24
+ case 'ERROR':
25
+ return LogLevel.ERROR
26
+ default:
27
+ throw new Error(`Unknown log level :${level}`)
28
+ }
29
+ }
package/src/log/log.ts ADDED
@@ -0,0 +1,77 @@
1
+ import { EOL } from 'os'
2
+ import { formatDateTime } from './date'
3
+ import { LogLevel } from './level'
4
+
5
+ /**
6
+ * 单条日志的信息
7
+ */
8
+ export interface Log {
9
+ /**
10
+ * 日志的时间
11
+ */
12
+ time: Date
13
+ /**
14
+ * 日志的等级
15
+ */
16
+ level: LogLevel
17
+ /**
18
+ * 日志的内容
19
+ */
20
+ content: string
21
+ /**
22
+ * 异常信息
23
+ */
24
+ error?: any
25
+ /**
26
+ * 前缀信息
27
+ */
28
+ prefix?: string
29
+ }
30
+
31
+ /**
32
+ * 将日志格式化为简单的文本
33
+ * @param log
34
+ * @param ignoreError 忽略异常信息
35
+ * @returns
36
+ */
37
+ export function formatLogText(log: Log, ignoreError = false) {
38
+ let str = `[${formatDateTime(log.time)}][${LogLevel[log.level]}]${
39
+ log.prefix ? `[${log.prefix}]` : ''
40
+ }${log.content}`
41
+ if (log.error && !ignoreError) {
42
+ if (log.error.stack) {
43
+ str += EOL + log.error.stack
44
+ } else if (log.error.message) {
45
+ str += EOL + log.error.message
46
+ } else {
47
+ str += EOL + log.error
48
+ }
49
+ }
50
+ return str
51
+ }
52
+
53
+ /**
54
+ * 将日志格式化为 json
55
+ * @param log
56
+ * @param ignoreError 忽略异常信息
57
+ * @returns
58
+ */
59
+ export function formatLogJson(log: Log, ignoreError = false) {
60
+ let error: string | undefined
61
+ if (log.error && !ignoreError) {
62
+ error = ''
63
+ if (log.error.stack) {
64
+ error += log.error.stack
65
+ } else if (log.error.message) {
66
+ error += log.error.message
67
+ } else {
68
+ error += log.error
69
+ }
70
+ }
71
+ const json: any = { ...log }
72
+ delete json.error
73
+ if (error) {
74
+ json.error = error
75
+ }
76
+ return JSON.stringify(json)
77
+ }
@@ -0,0 +1,31 @@
1
+ import { LogConfig } from './config'
2
+ import { Log } from './log'
3
+
4
+ /**
5
+ * 日志存储函数
6
+ */
7
+ export interface LogStore {
8
+ /**
9
+ * 日志存储函数
10
+ * @param log 日志
11
+ * @param config 日志配置
12
+ */
13
+ (log: Log, config: LogConfig): void
14
+ }
15
+
16
+ /**
17
+ * 日志存储函数
18
+ */
19
+ let STORE: LogStore | undefined
20
+
21
+ /**
22
+ * 设置日志存储.
23
+ * @param store
24
+ */
25
+ export function setLogStore(store: LogStore) {
26
+ STORE = store
27
+ }
28
+
29
+ export function getLogStore(): LogStore | undefined {
30
+ return STORE
31
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * mogodb 集合信息
3
+ *
4
+ * <T> 数据类型,不能包含有 _id 字段,主键字段名称固定,不可以设置
5
+ */
6
+ export interface MongoCollection<T> {
7
+ /**
8
+ * 集合名称.
9
+ */
10
+ collectionName: string
11
+ /**
12
+ * 创建时间字段信息,设置后在创建时会自动更新该字段
13
+ */
14
+ createdDate?: {
15
+ field: keyof T
16
+ type: 'number' | 'date'
17
+ }
18
+ /**
19
+ * 更新时间字段信息,设置后在更新记录时会自动维护该字段
20
+ */
21
+ updatedDate?: {
22
+ field: keyof T
23
+ type: 'number' | 'date'
24
+ }
25
+ }
@@ -0,0 +1,69 @@
1
+ import { ValidationOpts, max, min, notBlank, notNull } from '../validation'
2
+
3
+ /**
4
+ * MongoDB 配置.
5
+ */
6
+ export interface MongoDBConfig {
7
+ /**
8
+ * 连接地址.
9
+ * 示例:mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority
10
+ */
11
+ uri: string
12
+ /** The maximum number of connections in the connection pool. */
13
+ maxPoolSize: number
14
+ /** The minimum number of connections in the connection pool. */
15
+ minPoolSize: number
16
+ /** The maximum number of connections that may be in the process of being established concurrently by the connection pool. */
17
+ maxConnecting: number
18
+ /** The maximum number of milliseconds that a connection can remain idle in the pool before being removed and closed. */
19
+ maxIdleTimeMS: number
20
+ /** The maximum time in milliseconds that a thread can wait for a connection to become available. */
21
+ waitQueueTimeoutMS: number
22
+ /**
23
+ * 开启慢查询警告,默认开启
24
+ */
25
+ slowQueryWarn: boolean
26
+ /**
27
+ * 慢查询毫秒数,默认 200
28
+ */
29
+ slowQueryMs: number
30
+ /**
31
+ *事务超时时间,单位毫秒,默认 5000,设置为0的值表示不限制
32
+ */
33
+ transactionTimeout: number
34
+ /**
35
+ * 事务严格模式
36
+ */
37
+ transactionStrict: boolean
38
+ }
39
+
40
+ /**
41
+ * 默认配置.
42
+ */
43
+ export const defaultConfig: MongoDBConfig = {
44
+ uri: 'mongodb://test:123456@localhost/test',
45
+ maxPoolSize: 10,
46
+ minPoolSize: 1,
47
+ maxConnecting: 10,
48
+ maxIdleTimeMS: 60000,
49
+ waitQueueTimeoutMS: 60000,
50
+ slowQueryWarn: true,
51
+ slowQueryMs: 200,
52
+ transactionTimeout: 5000,
53
+ transactionStrict: true
54
+ }
55
+ /**
56
+ * 配置校验
57
+ */
58
+ export const configValidation: ValidationOpts<MongoDBConfig> = {
59
+ uri: [notBlank()],
60
+ maxPoolSize: [notNull(), min(1), max(1000)],
61
+ minPoolSize: [notNull(), min(1), max(1000)],
62
+ maxConnecting: [notNull(), min(1), max(1000)],
63
+ maxIdleTimeMS: [notNull(), min(1)],
64
+ waitQueueTimeoutMS: [notNull(), min(1)],
65
+ slowQueryWarn: [notNull()],
66
+ slowQueryMs: [notNull(), min(1), max(3600000)],
67
+ transactionTimeout: [notNull(), min(0), max(3600000)],
68
+ transactionStrict: [notNull()]
69
+ }
@@ -0,0 +1,12 @@
1
+ import { ObjectId } from 'mongodb'
2
+
3
+
4
+
5
+ /**
6
+ * 文档 id
7
+ */
8
+ export type MongoDocId = string | ObjectId
9
+ /**
10
+ * 带 id 的文档。<T> 是自定义的集合类型,不包含主键字段。
11
+ */
12
+ export type MongoDocWithId<T> = T & { _id: MongoDocId }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MongoDB 异常.
3
+ */
4
+ export class MongoDBException extends Error {
5
+ constructor(readonly message: string) {
6
+ super(message)
7
+ }
8
+ }
@@ -0,0 +1,71 @@
1
+ import { MongoClient } from 'mongodb'
2
+ import { registerConfig } from '../config'
3
+ import { MongoDBConfig, configValidation, defaultConfig } from './config'
4
+ import { MongoDBManager } from './manager'
5
+ import { MongoMigrationVersion, migrate } from './migration'
6
+
7
+ const managerMap = new Map<string, MongoDBManager>()
8
+
9
+ const DEFAULT_NAME = 'MONGO'
10
+
11
+ /**
12
+ * 启用 MongoDB
13
+ * @param opts 选项
14
+ */
15
+ export async function enableMongoDB(opts?: {
16
+ /**
17
+ * 配置名称,同时也是环境变量配置的前缀,英文开头,由英文数字和下划线成.
18
+ */
19
+ name?: string
20
+ /**
21
+ * 迁移
22
+ */
23
+ migration?: { versionList: MongoMigrationVersion[] }
24
+ }) {
25
+ const finalOpts = opts || {}
26
+ // 校验名称
27
+ if (finalOpts.name) {
28
+ if (!/^[a-zA-Z][a-zA-Z0-9_]{0,31}$/.test(finalOpts.name)) {
29
+ throw new Error(
30
+ `The mongodb configuration name must start with an english letter, digit or an underscore (_), and cannot exceed 32 characters:${finalOpts.name}`
31
+ )
32
+ }
33
+ }
34
+ const finalName = finalOpts.name || DEFAULT_NAME
35
+ // 配置信息
36
+ const mongoConfig = registerConfig<MongoDBConfig>(defaultConfig, finalName, configValidation)
37
+ const client = new MongoClient(mongoConfig.uri, {
38
+ maxPoolSize: mongoConfig.maxPoolSize,
39
+ minPoolSize: mongoConfig.minPoolSize,
40
+ maxConnecting: mongoConfig.maxConnecting,
41
+ maxIdleTimeMS: mongoConfig.maxIdleTimeMS,
42
+ waitQueueTimeoutMS: mongoConfig.waitQueueTimeoutMS
43
+ })
44
+ const db = client.db()
45
+ // 版本控制
46
+ if (finalOpts.migration) {
47
+ await migrate(db, finalOpts.migration.versionList)
48
+ }
49
+ process.addListener('beforeExit', () => client.close())
50
+ managerMap.set(finalName, new MongoDBManager(mongoConfig, db, client))
51
+ }
52
+ /**
53
+ * 获取管理器实例
54
+ * @param name
55
+ * @returns
56
+ */
57
+ export function getMongoDBManager(name?: string) {
58
+ const manager = managerMap.get(name || DEFAULT_NAME)
59
+ if (!manager) {
60
+ throw new Error(
61
+ `找不到想要的 mongodb 配置 ${name ? ': ' + name : ''},请先调用 enableMongoDB 启用`
62
+ )
63
+ }
64
+ return manager
65
+ }
66
+
67
+ export { MongoDBConfig } from './config'
68
+ export * from './exception'
69
+ export { MongoMigrationVersion } from './migration'
70
+ export * from './collection'
71
+ export * from './doc'