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
package/dist/log/date.js CHANGED
@@ -1,21 +1,21 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatDateTime = exports.currentDateTimeStr = void 0;
4
- function currentDateTimeStr() {
5
- return formatDateTime(new Date());
6
- }
7
- exports.currentDateTimeStr = currentDateTimeStr;
8
- function formatDateTime(date) {
9
- return (date.toLocaleString('zh-CN', {
10
- timeZone: 'Asia/Shanghai',
11
- year: 'numeric',
12
- month: '2-digit',
13
- day: '2-digit',
14
- hour: '2-digit',
15
- minute: '2-digit',
16
- second: '2-digit',
17
- hour12: false,
18
- hourCycle: 'h23'
19
- }) + `.${date.getMilliseconds()}`);
20
- }
21
- exports.formatDateTime = formatDateTime;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatDateTime = exports.currentDateTimeStr = void 0;
4
+ function currentDateTimeStr() {
5
+ return formatDateTime(new Date());
6
+ }
7
+ exports.currentDateTimeStr = currentDateTimeStr;
8
+ function formatDateTime(date) {
9
+ return (date.toLocaleString('zh-CN', {
10
+ timeZone: 'Asia/Shanghai',
11
+ year: 'numeric',
12
+ month: '2-digit',
13
+ day: '2-digit',
14
+ hour: '2-digit',
15
+ minute: '2-digit',
16
+ second: '2-digit',
17
+ hour12: false,
18
+ hourCycle: 'h23'
19
+ }) + `.${date.getMilliseconds()}`);
20
+ }
21
+ exports.formatDateTime = formatDateTime;
package/dist/log/file.js CHANGED
@@ -1,72 +1,198 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fileStore = void 0;
4
- const fs_1 = require("fs");
5
- const promises_1 = require("fs/promises");
6
- const os_1 = require("os");
7
- const path_1 = require("path");
8
- const task_1 = require("../task");
9
- const config_1 = require("./config");
10
- let QUEUE = [];
11
- /**
12
- * 文件存储.
13
- * @param log
14
- */
15
- function fileStore(log) {
16
- QUEUE.push(log);
17
- setTimeout(() => write().catch(e => console.error('Writing log file failed', e)), 0);
18
- }
19
- exports.fileStore = fileStore;
20
- function buildFilePath() {
21
- const date = new Date();
22
- let fileName = `${date.getFullYear()}-`;
23
- const month = date.getMonth() + 1;
24
- fileName += month.toFixed(0).padStart(2, '0');
25
- fileName += '-';
26
- const day = date.getDate();
27
- fileName += day.toFixed(0).padStart(2, '0');
28
- fileName += '.log';
29
- return (0, path_1.resolve)(config_1.config.fileDir, fileName);
30
- }
31
- async function write() {
32
- if (!QUEUE.length) {
33
- return;
34
- }
35
- const path = buildFilePath();
36
- const dir = (0, path_1.dirname)(path);
37
- if (!(0, fs_1.existsSync)(dir)) {
38
- await (0, promises_1.mkdir)(dir, { recursive: true });
39
- }
40
- const lines = QUEUE.join(os_1.EOL);
41
- QUEUE = [];
42
- await (0, promises_1.appendFile)(path, lines);
43
- }
44
- if (config_1.config.file) {
45
- /**
46
- * 清理任务.
47
- */
48
- (0, task_1.scheduleDailyTask)(3, 0, {
49
- name: 'Log files clear',
50
- async run() {
51
- const files = await (0, promises_1.readdir)(config_1.config.fileDir);
52
- const now = new Date().getTime();
53
- for (const file of files) {
54
- const dotIdx = file.indexOf('.');
55
- if (dotIdx === -1) {
56
- console.warn(`Unable to process the log file: ${file}`);
57
- return;
58
- }
59
- const dateStr = file.substring(0, dotIdx);
60
- const timestamp = Date.parse(dateStr);
61
- if (isNaN(timestamp)) {
62
- console.warn(`Unable to process the log file: ${file}`);
63
- return;
64
- }
65
- if (timestamp + config_1.config.fileMaxDays * 24 * 3600 * 1000 < now) {
66
- console.warn(`Remove log file: ${file}`);
67
- await (0, promises_1.rm)((0, path_1.resolve)(config_1.config.fileDir, file));
68
- }
69
- }
70
- }
71
- });
72
- }
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.flushLogsToFile = exports.fileStore = void 0;
4
+ const fs_1 = require("fs");
5
+ const promises_1 = require("fs/promises");
6
+ const os_1 = require("os");
7
+ const path_1 = require("path");
8
+ const config_1 = require("./config");
9
+ const log_1 = require("./log");
10
+ // 日志队列
11
+ let LOG_QUEUE = [];
12
+ // 最大缓冲数量
13
+ const MAX_QUEUE_SIZE = 1024;
14
+ // 写入定时器
15
+ let WRITE_TIMER = null;
16
+ // 延迟写入时间(毫秒)
17
+ const WRITE_DELAY = 100;
18
+ // 是否已经安排了清理任务
19
+ let CLEANUP_SCHEDULED = false;
20
+ // 清理任务定时器
21
+ let CLEANUP_TIMER = null;
22
+ /**
23
+ * 文件存储.
24
+ * @param log 日志对象
25
+ * @param logConfig 日志配置
26
+ */
27
+ function fileStore(log, logConfig) {
28
+ // 将日志添加到队列
29
+ LOG_QUEUE.push(log);
30
+ // 如果队列超过最大缓冲数量,立即写入
31
+ if (LOG_QUEUE.length >= MAX_QUEUE_SIZE) {
32
+ writeLogs(logConfig).catch(e => console.error('Writing log file failed', e));
33
+ // 在写入前检查是否需要安排清理任务
34
+ if (!CLEANUP_SCHEDULED) {
35
+ scheduleCleanupTask(logConfig);
36
+ }
37
+ return;
38
+ }
39
+ // 安排延迟写入
40
+ if (!WRITE_TIMER) {
41
+ WRITE_TIMER = setTimeout(() => {
42
+ WRITE_TIMER = null;
43
+ writeLogs(logConfig).catch(e => console.error('Writing log file failed', e));
44
+ }, WRITE_DELAY);
45
+ }
46
+ // 如果启用了文件存储并且还没有安排清理任务,则安排清理任务
47
+ if (!CLEANUP_SCHEDULED) {
48
+ scheduleCleanupTask(logConfig);
49
+ }
50
+ }
51
+ exports.fileStore = fileStore;
52
+ /**
53
+ * 根据日期构建日志文件路径
54
+ * @param logConfig 日志配置
55
+ * @param dateKey 数字键 (格式:年*10000 + 月*100 + 日)
56
+ * @returns 日志文件路径
57
+ */
58
+ function buildFilePathByDate(logConfig, dateKey) {
59
+ const fileName = `${dateKey}.log`;
60
+ // 确保目录是绝对路径
61
+ let fileDir = logConfig.fileDir;
62
+ if (!(0, path_1.isAbsolute)(fileDir)) {
63
+ fileDir = (0, path_1.resolve)(process.cwd(), fileDir);
64
+ }
65
+ return (0, path_1.resolve)(fileDir, fileName);
66
+ }
67
+ /**
68
+ * 根据日期对象计算数字键
69
+ * @param date 日期对象
70
+ * @returns 数字键 (格式:年*10000 + 月*100 + 日)
71
+ */
72
+ function calculateDateKey(date) {
73
+ const year = date.getFullYear();
74
+ const month = date.getMonth() + 1; // 转换为1-12
75
+ const day = date.getDate();
76
+ return year * 10000 + month * 100 + day;
77
+ }
78
+ /**
79
+ * 写入日志到文件
80
+ * @param logConfig 日志配置
81
+ */
82
+ async function writeLogs(logConfig) {
83
+ if (!LOG_QUEUE.length || !logConfig.file) {
84
+ return;
85
+ }
86
+ // 复制队列并清空原始队列
87
+ const logsToWrite = [...LOG_QUEUE];
88
+ LOG_QUEUE = [];
89
+ // 按日期对日志进行分组 - 使用数字键提升性能
90
+ const logsByDate = new Map();
91
+ logsToWrite.forEach(log => {
92
+ const logDate = new Date(log.time);
93
+ // 直接使用日期对象计算数字键
94
+ const dateKey = calculateDateKey(logDate);
95
+ const dateLogs = logsByDate.get(dateKey);
96
+ if (dateLogs) {
97
+ dateLogs.push(log);
98
+ }
99
+ else {
100
+ logsByDate.set(dateKey, [log]);
101
+ }
102
+ });
103
+ // 为每个日期组写入对应的日志文件
104
+ for (const [dateKey, dateLogs] of logsByDate.entries()) {
105
+ // 直接使用数字键构建文件路径
106
+ const filePath = buildFilePathByDate(logConfig, dateKey);
107
+ const dir = (0, path_1.dirname)(filePath);
108
+ // 确保目录存在
109
+ if (!(0, fs_1.existsSync)(dir)) {
110
+ await (0, promises_1.mkdir)(dir, { recursive: true });
111
+ }
112
+ // 格式化并写入该日期的所有日志
113
+ const lines = dateLogs
114
+ .map(log => (logConfig.format === 'json' ? (0, log_1.formatLogJson)(log) : (0, log_1.formatLogText)(log)))
115
+ .join(os_1.EOL);
116
+ try {
117
+ await (0, promises_1.appendFile)(filePath, lines);
118
+ }
119
+ catch (error) {
120
+ console.error(`Failed to write logs for date ${dateKey}:`, error);
121
+ // 继续处理下一个日期的日志,不中断整个写入过程
122
+ }
123
+ }
124
+ }
125
+ /**
126
+ * 执行日志清理任务
127
+ * @param logConfig 日志配置
128
+ */
129
+ async function performCleanupTask(logConfig) {
130
+ try {
131
+ let dir = logConfig.fileDir;
132
+ if (!(0, path_1.isAbsolute)(dir)) {
133
+ dir = (0, path_1.resolve)(process.cwd(), dir);
134
+ }
135
+ // 确保目录存在
136
+ if (!(0, fs_1.existsSync)(dir)) {
137
+ return;
138
+ }
139
+ const files = await (0, promises_1.readdir)(dir);
140
+ const now = new Date().getTime();
141
+ const maxAge = logConfig.fileMaxDays * 24 * 3600 * 1000;
142
+ for (const file of files) {
143
+ try {
144
+ // 获取文件的完整路径
145
+ const filePath = (0, path_1.resolve)(dir, file);
146
+ // 获取文件的最后修改时间
147
+ const fileStats = (0, fs_1.statSync)(filePath);
148
+ const lastModifiedTime = fileStats.mtime.getTime();
149
+ // 检查文件是否过期(最后修改时间早于最大保留天数)
150
+ if (lastModifiedTime + maxAge < now) {
151
+ console.warn(`Remove log file: ${file}`);
152
+ await (0, promises_1.rm)(filePath);
153
+ }
154
+ }
155
+ catch (error) {
156
+ console.error(`Failed to process log file ${file}:`, error);
157
+ // 继续处理下一个文件,不中断清理过程
158
+ continue;
159
+ }
160
+ }
161
+ }
162
+ catch (error) {
163
+ console.error('Error during log cleanup:', error);
164
+ }
165
+ finally {
166
+ // 清理完成后,重置清理任务安排状态
167
+ CLEANUP_SCHEDULED = false;
168
+ }
169
+ }
170
+ /**
171
+ * 安排日志清理任务
172
+ * @param logConfig 日志配置
173
+ */
174
+ function scheduleCleanupTask(logConfig) {
175
+ CLEANUP_SCHEDULED = true;
176
+ // 清除现有的清理定时器
177
+ if (CLEANUP_TIMER) {
178
+ clearTimeout(CLEANUP_TIMER);
179
+ }
180
+ // 设置清理任务在一天后执行
181
+ const delay = 24 * 60 * 60 * 1000;
182
+ CLEANUP_TIMER = setTimeout(() => {
183
+ CLEANUP_TIMER = null;
184
+ performCleanupTask(logConfig).catch(e => console.error('Cleanup task failed', e));
185
+ }, delay);
186
+ }
187
+ /**
188
+ * 确保所有日志都被写入文件
189
+ * 可以在应用程序关闭时调用
190
+ */
191
+ async function flushLogsToFile() {
192
+ if (WRITE_TIMER) {
193
+ clearTimeout(WRITE_TIMER);
194
+ WRITE_TIMER = null;
195
+ }
196
+ await writeLogs(config_1.config);
197
+ }
198
+ exports.flushLogsToFile = flushLogsToFile;
package/dist/log/index.js CHANGED
@@ -1,105 +1,135 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setLogStore = exports.getLogger = void 0;
4
- const tslib_1 = require("tslib");
5
- const os_1 = require("os");
6
- const config_1 = require("./config");
7
- const date_1 = require("./date");
8
- const file_1 = require("./file");
9
- const level_1 = require("./level");
10
- const store_1 = require("./store");
11
- /**
12
- * 文件存储
13
- */
14
- if (config_1.config.file) {
15
- (0, store_1.setLogStore)(file_1.fileStore);
16
- }
17
- /**
18
- * 输出日志
19
- * @param level
20
- * @param message
21
- * @param error
22
- */
23
- function log(level, message, error) {
24
- if (level < config_1.config.level) {
25
- return;
26
- }
27
- const date = new Date();
28
- // 控制台输出日志
29
- let msg = `[${(0, date_1.formatDateTime)(date)}][${level_1.LogLevel[level]}]${message}`;
30
- console.log(msg);
31
- if (error) {
32
- console.log(error);
33
- }
34
- // 存储中输出日志
35
- const store = (0, store_1.getLogStore)();
36
- if (store) {
37
- if (error) {
38
- if (error.stack) {
39
- msg += os_1.EOL + error.stack;
40
- }
41
- else if (error.message) {
42
- msg += os_1.EOL + error.message;
43
- }
44
- else {
45
- msg += os_1.EOL + error;
46
- }
47
- }
48
- store(msg);
49
- }
50
- }
51
- const logger = Object.freeze({
52
- /**
53
- * debug 日志
54
- */
55
- debug(message) {
56
- log(level_1.LogLevel.DEBUG, message);
57
- },
58
- isDebugEnabled() {
59
- return level_1.LogLevel.DEBUG >= config_1.config.level;
60
- },
61
- /**
62
- * info 日志
63
- * @param message
64
- */
65
- info(message) {
66
- log(level_1.LogLevel.INFO, message);
67
- },
68
- isInfoEnabled() {
69
- return level_1.LogLevel.INFO >= config_1.config.level;
70
- },
71
- /**
72
- * 警告日志
73
- * @param message
74
- * @param error
75
- */
76
- warn(message, error) {
77
- log(level_1.LogLevel.WARN, message, error);
78
- },
79
- isWarnEnabled() {
80
- return level_1.LogLevel.WARN >= config_1.config.level;
81
- },
82
- /**
83
- * 错误日志
84
- * @param message
85
- * @param error
86
- */
87
- error(message, error) {
88
- log(level_1.LogLevel.ERROR, message, error);
89
- },
90
- isErrorEnabled() {
91
- return level_1.LogLevel.ERROR >= config_1.config.level;
92
- }
93
- });
94
- /**
95
- * 获取日志对象.
96
- * @returns
97
- */
98
- function getLogger() {
99
- return logger;
100
- }
101
- exports.getLogger = getLogger;
102
- tslib_1.__exportStar(require("./config"), exports);
103
- tslib_1.__exportStar(require("./level"), exports);
104
- var store_2 = require("./store");
105
- Object.defineProperty(exports, "setLogStore", { enumerable: true, get: function () { return store_2.setLogStore; } });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setLogStore = exports.getLogger = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const config_1 = require("./config");
6
+ const file_1 = require("./file");
7
+ const level_1 = require("./level");
8
+ const log_1 = require("./log");
9
+ const store_1 = require("./store");
10
+ /**
11
+ * 文件存储
12
+ */
13
+ if (config_1.config.file) {
14
+ (0, store_1.setLogStore)(file_1.fileStore);
15
+ }
16
+ class Logger {
17
+ prefix;
18
+ constructor(prefix) {
19
+ this.prefix = prefix;
20
+ }
21
+ /**
22
+ * 输出日志
23
+ * @param level
24
+ * @param message
25
+ * @param error
26
+ */
27
+ log(level, message, error) {
28
+ if (level < config_1.config.level) {
29
+ return;
30
+ }
31
+ const log = {
32
+ level,
33
+ content: message,
34
+ time: new Date(),
35
+ prefix: this.prefix,
36
+ error
37
+ };
38
+ // 控制台输出日志
39
+ if (config_1.config.console) {
40
+ // const msg = config.format === 'text' ? formatLogText(log, true) : formatLogJson(log, true)
41
+ // 控制台强制使用 text 格式,json 格式只在文件中输出
42
+ const msg = (0, log_1.formatLogText)(log, true);
43
+ switch (level) {
44
+ case level_1.LogLevel.DEBUG:
45
+ console.debug(msg);
46
+ break;
47
+ case level_1.LogLevel.INFO:
48
+ console.info(msg);
49
+ break;
50
+ case level_1.LogLevel.WARN:
51
+ console.warn(msg);
52
+ break;
53
+ case level_1.LogLevel.ERROR:
54
+ console.error(msg);
55
+ break;
56
+ }
57
+ if (error) {
58
+ console.error(error);
59
+ }
60
+ }
61
+ // 自定义存储中输出日志
62
+ const store = (0, store_1.getLogStore)();
63
+ if (store) {
64
+ store(log, config_1.config);
65
+ }
66
+ }
67
+ /**
68
+ * debug 日志
69
+ */
70
+ debug(message) {
71
+ this.log(level_1.LogLevel.DEBUG, message);
72
+ }
73
+ isDebugEnabled() {
74
+ return level_1.LogLevel.DEBUG >= config_1.config.level;
75
+ }
76
+ /**
77
+ * info 日志
78
+ * @param message
79
+ */
80
+ info(message) {
81
+ this.log(level_1.LogLevel.INFO, message);
82
+ }
83
+ isInfoEnabled() {
84
+ return level_1.LogLevel.INFO >= config_1.config.level;
85
+ }
86
+ /**
87
+ * 警告日志
88
+ * @param message
89
+ * @param error
90
+ */
91
+ warn(message, error) {
92
+ this.log(level_1.LogLevel.WARN, message, error);
93
+ }
94
+ /**
95
+ * 等同于 warn
96
+ * @param message
97
+ * @param error
98
+ */
99
+ warning(message, error) {
100
+ this.log(level_1.LogLevel.WARN, message, error);
101
+ }
102
+ isWarnEnabled() {
103
+ return level_1.LogLevel.WARN >= config_1.config.level;
104
+ }
105
+ /**
106
+ * 错误日志
107
+ * @param message
108
+ * @param error
109
+ */
110
+ error(message, error) {
111
+ this.log(level_1.LogLevel.ERROR, message, error);
112
+ }
113
+ isErrorEnabled() {
114
+ return level_1.LogLevel.ERROR >= config_1.config.level;
115
+ }
116
+ }
117
+ const defaultLogger = new Logger();
118
+ /**
119
+ * 获取日志对象.
120
+ *
121
+ * @param prefix 日志前缀,如果有值,每条日志前都会加上前缀信息
122
+ * @returns
123
+ */
124
+ function getLogger(prefix) {
125
+ if (prefix) {
126
+ return new Logger(prefix);
127
+ }
128
+ return defaultLogger;
129
+ }
130
+ exports.getLogger = getLogger;
131
+ tslib_1.__exportStar(require("./config"), exports);
132
+ tslib_1.__exportStar(require("./level"), exports);
133
+ tslib_1.__exportStar(require("./log"), exports);
134
+ var store_2 = require("./store");
135
+ Object.defineProperty(exports, "setLogStore", { enumerable: true, get: function () { return store_2.setLogStore; } });
package/dist/log/level.js CHANGED
@@ -1,33 +1,33 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseLogLevel = exports.LogLevel = void 0;
4
- /**
5
- * 日志级别.
6
- */
7
- var LogLevel;
8
- (function (LogLevel) {
9
- LogLevel[LogLevel["DEBUG"] = 1] = "DEBUG";
10
- LogLevel[LogLevel["INFO"] = 2] = "INFO";
11
- LogLevel[LogLevel["WARN"] = 3] = "WARN";
12
- LogLevel[LogLevel["ERROR"] = 4] = "ERROR";
13
- })(LogLevel = exports.LogLevel || (exports.LogLevel = {}));
14
- /**
15
- * 解析日志级别
16
- * @param level
17
- */
18
- function parseLogLevel(level) {
19
- const iLevel = level.toUpperCase();
20
- switch (iLevel) {
21
- case 'DEBUG':
22
- return LogLevel.DEBUG;
23
- case 'INFO':
24
- return LogLevel.INFO;
25
- case 'WARN':
26
- return LogLevel.WARN;
27
- case 'ERROR':
28
- return LogLevel.ERROR;
29
- default:
30
- throw new Error(`Unknown log level :${level}`);
31
- }
32
- }
33
- exports.parseLogLevel = parseLogLevel;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseLogLevel = exports.LogLevel = void 0;
4
+ /**
5
+ * 日志级别.
6
+ */
7
+ var LogLevel;
8
+ (function (LogLevel) {
9
+ LogLevel[LogLevel["DEBUG"] = 1] = "DEBUG";
10
+ LogLevel[LogLevel["INFO"] = 2] = "INFO";
11
+ LogLevel[LogLevel["WARN"] = 3] = "WARN";
12
+ LogLevel[LogLevel["ERROR"] = 4] = "ERROR";
13
+ })(LogLevel = exports.LogLevel || (exports.LogLevel = {}));
14
+ /**
15
+ * 解析日志级别
16
+ * @param level
17
+ */
18
+ function parseLogLevel(level) {
19
+ const iLevel = level.toUpperCase();
20
+ switch (iLevel) {
21
+ case 'DEBUG':
22
+ return LogLevel.DEBUG;
23
+ case 'INFO':
24
+ return LogLevel.INFO;
25
+ case 'WARN':
26
+ return LogLevel.WARN;
27
+ case 'ERROR':
28
+ return LogLevel.ERROR;
29
+ default:
30
+ throw new Error(`Unknown log level :${level}`);
31
+ }
32
+ }
33
+ exports.parseLogLevel = parseLogLevel;