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
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,198 +1,198 @@
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;
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;