wok-server 0.5.0 → 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 (372) 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 +239 -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 +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 -169
  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 -103
  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/mvc.md +66 -24
  129. package/package.json +3 -1
  130. package/skills/wok-server-api-rules/SKILL.md +350 -0
  131. package/skills/wok-server-cache/SKILL.md +216 -0
  132. package/skills/wok-server-config/SKILL.md +200 -0
  133. package/skills/wok-server-getting-started/SKILL.md +123 -0
  134. package/skills/wok-server-getting-started/references/engineering.md +169 -0
  135. package/skills/wok-server-http-client/SKILL.md +164 -0
  136. package/skills/wok-server-i18n/SKILL.md +214 -0
  137. package/skills/wok-server-lock/SKILL.md +144 -0
  138. package/skills/wok-server-log/SKILL.md +218 -0
  139. package/skills/wok-server-mongodb/SKILL.md +235 -0
  140. package/skills/wok-server-mvc/SKILL.md +251 -0
  141. package/skills/wok-server-mvc/references/respond-html.md +157 -0
  142. package/skills/wok-server-mvc/references/sse.md +121 -0
  143. package/skills/wok-server-mvc/references/static-files.md +47 -0
  144. package/skills/wok-server-mvc/references/upload.md +62 -0
  145. package/skills/wok-server-mvc/references/websocket.md +30 -0
  146. package/skills/wok-server-mysql/SKILL.md +315 -0
  147. package/skills/wok-server-mysql/references/multi-datasource.md +76 -0
  148. package/skills/wok-server-mysql/references/version-control.md +22 -0
  149. package/skills/wok-server-task/SKILL.md +158 -0
  150. package/skills/wok-server-validate/SKILL.md +167 -0
  151. package/src/cache/cache.ts +118 -0
  152. package/src/cache/config.ts +53 -0
  153. package/src/cache/index.ts +27 -0
  154. package/src/cache/purge-task.ts +53 -0
  155. package/src/cache/stat.ts +47 -0
  156. package/src/config/convert.ts +27 -0
  157. package/src/config/exception.ts +8 -0
  158. package/src/config/index.ts +92 -0
  159. package/src/http-client/index.ts +202 -0
  160. package/src/i18n/ar.ts +16 -0
  161. package/src/i18n/de.ts +16 -0
  162. package/src/i18n/en-us.ts +16 -0
  163. package/src/i18n/es.ts +16 -0
  164. package/src/i18n/fr.ts +16 -0
  165. package/src/i18n/i18n.ts +230 -0
  166. package/src/i18n/index.ts +50 -0
  167. package/src/i18n/ja.ts +16 -0
  168. package/src/i18n/ko.ts +16 -0
  169. package/src/i18n/msg.ts +50 -0
  170. package/src/i18n/pt.ts +16 -0
  171. package/src/i18n/ru.ts +16 -0
  172. package/src/i18n/tag.ts +18 -0
  173. package/src/i18n/zh-HK.ts +16 -0
  174. package/src/i18n/zh-TW.ts +16 -0
  175. package/src/i18n/zh-cn.ts +16 -0
  176. package/src/index.ts +11 -0
  177. package/src/lock/index.ts +164 -0
  178. package/src/log/config.ts +71 -0
  179. package/src/log/date.ts +19 -0
  180. package/src/log/file.ts +215 -0
  181. package/src/log/index.ts +136 -0
  182. package/src/log/level.ts +29 -0
  183. package/src/log/log.ts +77 -0
  184. package/src/log/store.ts +31 -0
  185. package/src/mongodb/collection.ts +25 -0
  186. package/src/mongodb/config.ts +69 -0
  187. package/src/mongodb/doc.ts +12 -0
  188. package/src/mongodb/exception.ts +8 -0
  189. package/src/mongodb/index.ts +71 -0
  190. package/src/mongodb/manager/base.ts +674 -0
  191. package/src/mongodb/manager/index.ts +80 -0
  192. package/src/mongodb/manager/tx-strict.ts +153 -0
  193. package/src/mongodb/manager/tx.ts +34 -0
  194. package/src/mongodb/migration.ts +66 -0
  195. package/src/mvc/access-log.ts +33 -0
  196. package/src/mvc/config.ts +70 -0
  197. package/src/mvc/exchange.ts +126 -0
  198. package/src/mvc/handler/index.ts +4 -0
  199. package/src/mvc/handler/json.ts +96 -0
  200. package/src/mvc/handler/restful.ts +39 -0
  201. package/src/mvc/handler/sse.ts +90 -0
  202. package/src/mvc/handler/upload.ts +54 -0
  203. package/src/mvc/index.ts +48 -0
  204. package/src/mvc/interceptor.ts +12 -0
  205. package/src/mvc/query.ts +36 -0
  206. package/src/mvc/render/file.ts +148 -0
  207. package/src/mvc/render/html/html.ts +187 -0
  208. package/src/mvc/render/html/index.ts +16 -0
  209. package/src/mvc/render/html/style.ts +1201 -0
  210. package/src/mvc/render/index.ts +4 -0
  211. package/src/mvc/render/json.ts +24 -0
  212. package/src/mvc/render/text.ts +14 -0
  213. package/src/mvc/router.ts +13 -0
  214. package/src/mvc/server.ts +315 -0
  215. package/src/mvc/static/header.ts +86 -0
  216. package/src/mvc/static/index.ts +3 -0
  217. package/src/mvc/static/mime-type.ts +81 -0
  218. package/src/mvc/static/server-cache-config.ts +92 -0
  219. package/src/mvc/static/server-cache.ts +171 -0
  220. package/src/mvc/static/static-handler.ts +445 -0
  221. package/src/mysql/config.ts +130 -0
  222. package/src/mysql/exception.ts +8 -0
  223. package/src/mysql/index.ts +88 -0
  224. package/src/mysql/manager/base.ts +285 -0
  225. package/src/mysql/manager/index.ts +112 -0
  226. package/src/mysql/manager/ops/count.ts +30 -0
  227. package/src/mysql/manager/ops/criteria.ts +412 -0
  228. package/src/mysql/manager/ops/delete.ts +96 -0
  229. package/src/mysql/manager/ops/exist.ts +41 -0
  230. package/src/mysql/manager/ops/find.ts +226 -0
  231. package/src/mysql/manager/ops/index.ts +11 -0
  232. package/src/mysql/manager/ops/insert.ts +120 -0
  233. package/src/mysql/manager/ops/modify.ts +14 -0
  234. package/src/mysql/manager/ops/paginate.ts +60 -0
  235. package/src/mysql/manager/ops/query.ts +13 -0
  236. package/src/mysql/manager/ops/update.ts +294 -0
  237. package/src/mysql/manager/ops/utils.ts +20 -0
  238. package/src/mysql/manager/tx-strict.ts +138 -0
  239. package/src/mysql/manager/tx.ts +31 -0
  240. package/src/mysql/manager/utils.ts +75 -0
  241. package/src/mysql/migration.ts +149 -0
  242. package/src/mysql/table-info.ts +41 -0
  243. package/src/task/daily.ts +70 -0
  244. package/src/task/fixed-delay.ts +45 -0
  245. package/src/task/fixed-rate.ts +49 -0
  246. package/src/task/index.ts +4 -0
  247. package/src/task/task.ts +70 -0
  248. package/src/validation/exception.ts +27 -0
  249. package/src/validation/index.ts +61 -0
  250. package/src/validation/validator/array.ts +32 -0
  251. package/src/validation/validator/enum.ts +25 -0
  252. package/src/validation/validator/index.ts +11 -0
  253. package/src/validation/validator/length.ts +42 -0
  254. package/src/validation/validator/max-length.ts +33 -0
  255. package/src/validation/validator/max.ts +26 -0
  256. package/src/validation/validator/min-length.ts +31 -0
  257. package/src/validation/validator/min.ts +26 -0
  258. package/src/validation/validator/not-blank.ts +31 -0
  259. package/src/validation/validator/not-null.ts +19 -0
  260. package/src/validation/validator/plain-obj.ts +30 -0
  261. package/src/validation/validator/regexp.ts +32 -0
  262. package/types/cache/cache.d.ts +52 -52
  263. package/types/cache/config.d.ts +32 -32
  264. package/types/cache/index.d.ts +2 -2
  265. package/types/cache/purge-task.d.ts +11 -11
  266. package/types/cache/stat.d.ts +26 -26
  267. package/types/config/convert.d.ts +6 -6
  268. package/types/config/exception.d.ts +7 -7
  269. package/types/config/index.d.ts +25 -25
  270. package/types/http-client/index.d.ts +71 -71
  271. package/types/i18n/ar.d.ts +2 -2
  272. package/types/i18n/de.d.ts +2 -2
  273. package/types/i18n/en-us.d.ts +2 -2
  274. package/types/i18n/es.d.ts +2 -2
  275. package/types/i18n/fr.d.ts +2 -2
  276. package/types/i18n/i18n.d.ts +102 -102
  277. package/types/i18n/index.d.ts +9 -9
  278. package/types/i18n/ja.d.ts +2 -2
  279. package/types/i18n/ko.d.ts +2 -2
  280. package/types/i18n/msg.d.ts +50 -50
  281. package/types/i18n/pt.d.ts +2 -2
  282. package/types/i18n/ru.d.ts +2 -2
  283. package/types/i18n/tag.d.ts +11 -11
  284. package/types/i18n/zh-HK.d.ts +2 -2
  285. package/types/i18n/zh-TW.d.ts +2 -2
  286. package/types/i18n/zh-cn.d.ts +2 -2
  287. package/types/index.d.ts +11 -11
  288. package/types/lock/index.d.ts +64 -64
  289. package/types/log/config.d.ts +35 -35
  290. package/types/log/date.d.ts +2 -2
  291. package/types/log/file.d.ts +13 -13
  292. package/types/log/index.d.ts +53 -53
  293. package/types/log/level.d.ts +14 -14
  294. package/types/log/log.d.ts +40 -40
  295. package/types/log/store.d.ts +19 -19
  296. package/types/mongodb/collection.d.ts +25 -25
  297. package/types/mongodb/config.d.ts +45 -45
  298. package/types/mongodb/doc.d.ts +11 -11
  299. package/types/mongodb/exception.d.ts +7 -7
  300. package/types/mongodb/index.d.ts +29 -29
  301. package/types/mongodb/manager/base.d.ts +188 -188
  302. package/types/mongodb/manager/index.d.ts +38 -38
  303. package/types/mongodb/manager/tx-strict.d.ts +41 -41
  304. package/types/mongodb/manager/tx.d.ts +21 -21
  305. package/types/mongodb/migration.d.ts +12 -12
  306. package/types/mvc/access-log.d.ts +7 -7
  307. package/types/mvc/config.d.ts +42 -42
  308. package/types/mvc/exchange.d.ts +72 -72
  309. package/types/mvc/handler/index.d.ts +4 -3
  310. package/types/mvc/handler/json.d.ts +44 -44
  311. package/types/mvc/handler/restful.d.ts +11 -11
  312. package/types/mvc/handler/sse.d.ts +34 -0
  313. package/types/mvc/handler/upload.d.ts +36 -36
  314. package/types/mvc/index.d.ts +22 -22
  315. package/types/mvc/interceptor.d.ts +11 -11
  316. package/types/mvc/query.d.ts +13 -13
  317. package/types/mvc/render/file.d.ts +10 -10
  318. package/types/mvc/render/html/html.d.ts +98 -98
  319. package/types/mvc/render/html/index.d.ts +11 -11
  320. package/types/mvc/render/html/style.d.ts +1201 -1201
  321. package/types/mvc/render/index.d.ts +4 -4
  322. package/types/mvc/render/json.d.ts +17 -17
  323. package/types/mvc/render/text.d.ts +10 -10
  324. package/types/mvc/router.d.ts +11 -11
  325. package/types/mvc/server.d.ts +90 -90
  326. package/types/mvc/static/header.d.ts +27 -27
  327. package/types/mvc/static/index.d.ts +3 -3
  328. package/types/mvc/static/mime-type.d.ts +2 -2
  329. package/types/mvc/static/server-cache-config.d.ts +30 -30
  330. package/types/mvc/static/server-cache.d.ts +76 -76
  331. package/types/mvc/static/static-handler.d.ts +77 -77
  332. package/types/mysql/config.d.ts +90 -90
  333. package/types/mysql/exception.d.ts +7 -7
  334. package/types/mysql/index.d.ts +16 -16
  335. package/types/mysql/manager/base.d.ts +165 -165
  336. package/types/mysql/manager/index.d.ts +36 -36
  337. package/types/mysql/manager/ops/count.d.ts +13 -13
  338. package/types/mysql/manager/ops/criteria.d.ts +134 -134
  339. package/types/mysql/manager/ops/delete.d.ts +46 -46
  340. package/types/mysql/manager/ops/exist.d.ts +6 -6
  341. package/types/mysql/manager/ops/find.d.ts +86 -86
  342. package/types/mysql/manager/ops/index.d.ts +10 -10
  343. package/types/mysql/manager/ops/insert.d.ts +18 -18
  344. package/types/mysql/manager/ops/modify.d.ts +3 -3
  345. package/types/mysql/manager/ops/paginate.d.ts +36 -36
  346. package/types/mysql/manager/ops/query.d.ts +3 -3
  347. package/types/mysql/manager/ops/update.d.ts +76 -76
  348. package/types/mysql/manager/ops/utils.d.ts +5 -5
  349. package/types/mysql/manager/tx-strict.d.ts +36 -36
  350. package/types/mysql/manager/tx.d.ts +15 -15
  351. package/types/mysql/manager/utils.d.ts +17 -17
  352. package/types/mysql/migration.d.ts +8 -8
  353. package/types/mysql/table-info.d.ts +36 -36
  354. package/types/task/daily.d.ts +16 -16
  355. package/types/task/fixed-delay.d.ts +9 -9
  356. package/types/task/fixed-rate.d.ts +9 -9
  357. package/types/task/index.d.ts +4 -4
  358. package/types/task/task.d.ts +34 -34
  359. package/types/validation/exception.d.ts +38 -38
  360. package/types/validation/index.d.ts +32 -32
  361. package/types/validation/validator/array.d.ts +5 -5
  362. package/types/validation/validator/enum.d.ts +8 -8
  363. package/types/validation/validator/index.d.ts +11 -11
  364. package/types/validation/validator/length.d.ts +10 -10
  365. package/types/validation/validator/max-length.d.ts +8 -8
  366. package/types/validation/validator/max.d.ts +7 -7
  367. package/types/validation/validator/min-length.d.ts +6 -6
  368. package/types/validation/validator/min.d.ts +7 -7
  369. package/types/validation/validator/not-blank.d.ts +7 -7
  370. package/types/validation/validator/not-null.d.ts +6 -6
  371. package/types/validation/validator/plain-obj.d.ts +7 -7
  372. package/types/validation/validator/regexp.d.ts +8 -8
@@ -1,113 +1,113 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ServerExchange = void 0;
4
- const query_1 = require("./query");
5
- const render_1 = require("./render");
6
- const text_1 = require("./render/text");
7
- /**
8
- * 服务的数据交换对象.
9
- */
10
- class ServerExchange {
11
- request;
12
- response;
13
- #bufferPromise;
14
- constructor(request, response) {
15
- this.request = request;
16
- this.response = response;
17
- }
18
- bodyBuffer() {
19
- if (this.#bufferPromise) {
20
- return this.#bufferPromise;
21
- }
22
- this.#bufferPromise = new Promise((resolve, reject) => {
23
- if (this.request.readableEnded) {
24
- throw new Error('Request has ended!');
25
- }
26
- let body = [];
27
- this.request
28
- .resume()
29
- .on('error', reject)
30
- .on('data', chunk => body.push(chunk))
31
- .on('end', () => resolve(Buffer.concat(body)));
32
- });
33
- return this.#bufferPromise;
34
- }
35
- async bodyText() {
36
- const buffer = await this.bodyBuffer();
37
- return buffer.toString('utf-8');
38
- }
39
- async bodyJson() {
40
- const buffer = await this.bodyBuffer();
41
- const bodyText = buffer.toString('utf-8');
42
- if (!bodyText || !bodyText.trim()) {
43
- return {};
44
- }
45
- return JSON.parse(bodyText);
46
- }
47
- /**
48
- * 响应纯文本
49
- * @param text 文本内容
50
- * @param status 状态码,可选,默认 200
51
- */
52
- respondText(text, status) {
53
- (0, text_1.renderText)(this.response, text, status);
54
- }
55
- /**
56
- * 响应 json
57
- * @param json 任意可被 json 序列化的对象
58
- * @param status 状态码,可选,默认 200
59
- */
60
- respondJson(json, status) {
61
- (0, render_1.renderJson)(this.response, json, status);
62
- }
63
- /**
64
- * 响应错误信息提示,提供一个统一的格式封装,json 格式
65
- * @param message 消息
66
- * @param status 状态码,默认 400 ,表示业务错误
67
- * @returns
68
- */
69
- respondErrMsg(message, status) {
70
- (0, render_1.renderError)(this.response, message, status);
71
- }
72
- /**
73
- * 响应文件
74
- * @param filePath 文件路径,绝对路径
75
- * @param download 是否下载模式
76
- * @returns
77
- */
78
- respondFile(filePath, download) {
79
- return (0, render_1.renderFile)(this.request, this.response, filePath, download);
80
- }
81
- /**
82
- * 响应 html
83
- * @param html html 内容,一个特定结构的对象或者是字符串
84
- * @param status 状态码,可选,默认 200
85
- */
86
- respondHtml(html, status) {
87
- (0, render_1.renderHtml)(this.response, html, status);
88
- }
89
- /**
90
- * 响应
91
- * @param opts
92
- */
93
- respond(opts) {
94
- this.response.statusCode = opts.statusCode;
95
- if (opts.headers) {
96
- for (const key in opts.headers) {
97
- this.response.setHeader(key, opts.headers[key]);
98
- }
99
- }
100
- if (opts.body) {
101
- this.response.write(opts.body);
102
- }
103
- this.response.end();
104
- }
105
- /**
106
- * 解析 queryString
107
- * @returns
108
- */
109
- parseQueryString() {
110
- return new query_1.QueryString(this.request.url || '');
111
- }
112
- }
113
- exports.ServerExchange = ServerExchange;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ServerExchange = void 0;
4
+ const query_1 = require("./query");
5
+ const render_1 = require("./render");
6
+ const text_1 = require("./render/text");
7
+ /**
8
+ * 服务的数据交换对象.
9
+ */
10
+ class ServerExchange {
11
+ request;
12
+ response;
13
+ #bufferPromise;
14
+ constructor(request, response) {
15
+ this.request = request;
16
+ this.response = response;
17
+ }
18
+ bodyBuffer() {
19
+ if (this.#bufferPromise) {
20
+ return this.#bufferPromise;
21
+ }
22
+ this.#bufferPromise = new Promise((resolve, reject) => {
23
+ if (this.request.readableEnded) {
24
+ throw new Error('Request has ended!');
25
+ }
26
+ let body = [];
27
+ this.request
28
+ .resume()
29
+ .on('error', reject)
30
+ .on('data', chunk => body.push(chunk))
31
+ .on('end', () => resolve(Buffer.concat(body)));
32
+ });
33
+ return this.#bufferPromise;
34
+ }
35
+ async bodyText() {
36
+ const buffer = await this.bodyBuffer();
37
+ return buffer.toString('utf-8');
38
+ }
39
+ async bodyJson() {
40
+ const buffer = await this.bodyBuffer();
41
+ const bodyText = buffer.toString('utf-8');
42
+ if (!bodyText || !bodyText.trim()) {
43
+ return {};
44
+ }
45
+ return JSON.parse(bodyText);
46
+ }
47
+ /**
48
+ * 响应纯文本
49
+ * @param text 文本内容
50
+ * @param status 状态码,可选,默认 200
51
+ */
52
+ respondText(text, status) {
53
+ (0, text_1.renderText)(this.response, text, status);
54
+ }
55
+ /**
56
+ * 响应 json
57
+ * @param json 任意可被 json 序列化的对象
58
+ * @param status 状态码,可选,默认 200
59
+ */
60
+ respondJson(json, status) {
61
+ (0, render_1.renderJson)(this.response, json, status);
62
+ }
63
+ /**
64
+ * 响应错误信息提示,提供一个统一的格式封装,json 格式
65
+ * @param message 消息
66
+ * @param status 状态码,默认 400 ,表示业务错误
67
+ * @returns
68
+ */
69
+ respondErrMsg(message, status) {
70
+ (0, render_1.renderError)(this.response, message, status);
71
+ }
72
+ /**
73
+ * 响应文件
74
+ * @param filePath 文件路径,绝对路径
75
+ * @param download 是否下载模式
76
+ * @returns
77
+ */
78
+ respondFile(filePath, download) {
79
+ return (0, render_1.renderFile)(this.request, this.response, filePath, download);
80
+ }
81
+ /**
82
+ * 响应 html
83
+ * @param html html 内容,一个特定结构的对象或者是字符串
84
+ * @param status 状态码,可选,默认 200
85
+ */
86
+ respondHtml(html, status) {
87
+ (0, render_1.renderHtml)(this.response, html, status);
88
+ }
89
+ /**
90
+ * 响应
91
+ * @param opts
92
+ */
93
+ respond(opts) {
94
+ this.response.statusCode = opts.statusCode;
95
+ if (opts.headers) {
96
+ for (const key in opts.headers) {
97
+ this.response.setHeader(key, opts.headers[key]);
98
+ }
99
+ }
100
+ if (opts.body) {
101
+ this.response.write(opts.body);
102
+ }
103
+ this.response.end();
104
+ }
105
+ /**
106
+ * 解析 queryString
107
+ * @returns
108
+ */
109
+ parseQueryString() {
110
+ return new query_1.QueryString(this.request.url || '');
111
+ }
112
+ }
113
+ exports.ServerExchange = ServerExchange;
@@ -1,6 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./json"), exports);
5
- tslib_1.__exportStar(require("./upload"), exports);
6
- tslib_1.__exportStar(require("./restful"), exports);
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./json"), exports);
5
+ tslib_1.__exportStar(require("./upload"), exports);
6
+ tslib_1.__exportStar(require("./restful"), exports);
7
+ tslib_1.__exportStar(require("./sse"), exports);
@@ -1,65 +1,65 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createJsonHandler = void 0;
4
- const cache_1 = require("../../cache");
5
- const i18n_1 = require("../../i18n");
6
- const validation_1 = require("../../validation");
7
- /**
8
- * 创建 json 处理器..
9
- * @param <REQ> 表示请求的 json 数据格式类型
10
- * @param <RES> 表示响应的类型,可选,如果不需要响应 json 数据,则方法可以不返回任何值
11
- * @param opts
12
- * @returns
13
- */
14
- function createJsonHandler(opts) {
15
- return async function (exchange) {
16
- if (!exchange.request.method || exchange.request.method.toUpperCase() !== 'POST') {
17
- exchange.respondErrMsg('Method Not Allowed', 405);
18
- return;
19
- }
20
- const body = await exchange.bodyJson();
21
- if (opts.validation) {
22
- // 切换语言
23
- (0, i18n_1.getI18n)().switchByRequest(exchange.request.headers);
24
- if (typeof opts.validation === 'function') {
25
- (0, validation_1.validate)(body, opts.validation());
26
- }
27
- else {
28
- (0, validation_1.validate)(body, opts.validation);
29
- }
30
- }
31
- // 缓存处理
32
- if (opts.cache) {
33
- const cacheInfo = await opts.cache(body, exchange);
34
- const buffer = (0, cache_1.getCache)().get(cacheInfo.key);
35
- if (buffer && buffer instanceof Buffer) {
36
- renderJsonBuffer(exchange, buffer);
37
- }
38
- else {
39
- const res = await opts.handle(body, { request: exchange.request });
40
- if (!res) {
41
- // 无结果不缓存
42
- exchange.respond({ statusCode: 200 });
43
- return;
44
- }
45
- const buffer = Buffer.from(JSON.stringify(res), 'utf-8');
46
- (0, cache_1.getCache)().put(cacheInfo.key, buffer, cacheInfo.expiresInSeconds);
47
- renderJsonBuffer(exchange, buffer);
48
- }
49
- return;
50
- }
51
- const res = await opts.handle(body, { request: exchange.request });
52
- if (!res) {
53
- exchange.respond({ statusCode: 200 });
54
- return;
55
- }
56
- exchange.respondJson(res);
57
- };
58
- }
59
- exports.createJsonHandler = createJsonHandler;
60
- function renderJsonBuffer(exchange, buffer) {
61
- const { response } = exchange;
62
- response.setHeader('content-type', 'application/json; charset=UTF-8');
63
- response.statusCode = 200;
64
- response.end(buffer);
65
- }
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createJsonHandler = void 0;
4
+ const cache_1 = require("../../cache");
5
+ const i18n_1 = require("../../i18n");
6
+ const validation_1 = require("../../validation");
7
+ /**
8
+ * 创建 json 处理器..
9
+ * @param <REQ> 表示请求的 json 数据格式类型
10
+ * @param <RES> 表示响应的类型,可选,如果不需要响应 json 数据,则方法可以不返回任何值
11
+ * @param opts
12
+ * @returns
13
+ */
14
+ function createJsonHandler(opts) {
15
+ return async function (exchange) {
16
+ if (!exchange.request.method || exchange.request.method.toUpperCase() !== 'POST') {
17
+ exchange.respondErrMsg('Method Not Allowed', 405);
18
+ return;
19
+ }
20
+ const body = await exchange.bodyJson();
21
+ if (opts.validation) {
22
+ // 切换语言
23
+ (0, i18n_1.getI18n)().switchByRequest(exchange.request.headers);
24
+ if (typeof opts.validation === 'function') {
25
+ (0, validation_1.validate)(body, opts.validation());
26
+ }
27
+ else {
28
+ (0, validation_1.validate)(body, opts.validation);
29
+ }
30
+ }
31
+ // 缓存处理
32
+ if (opts.cache) {
33
+ const cacheInfo = await opts.cache(body, exchange);
34
+ const buffer = (0, cache_1.getCache)().get(cacheInfo.key);
35
+ if (buffer && buffer instanceof Buffer) {
36
+ renderJsonBuffer(exchange, buffer);
37
+ }
38
+ else {
39
+ const res = await opts.handle(body, { request: exchange.request });
40
+ if (!res) {
41
+ // 无结果不缓存
42
+ exchange.respond({ statusCode: 200 });
43
+ return;
44
+ }
45
+ const buffer = Buffer.from(JSON.stringify(res), 'utf-8');
46
+ (0, cache_1.getCache)().put(cacheInfo.key, buffer, cacheInfo.expiresInSeconds);
47
+ renderJsonBuffer(exchange, buffer);
48
+ }
49
+ return;
50
+ }
51
+ const res = await opts.handle(body, { request: exchange.request });
52
+ if (!res) {
53
+ exchange.respond({ statusCode: 200 });
54
+ return;
55
+ }
56
+ exchange.respondJson(res);
57
+ };
58
+ }
59
+ exports.createJsonHandler = createJsonHandler;
60
+ function renderJsonBuffer(exchange, buffer) {
61
+ const { response } = exchange;
62
+ response.setHeader('content-type', 'application/json; charset=UTF-8');
63
+ response.statusCode = 200;
64
+ response.end(buffer);
65
+ }
@@ -1,35 +1,35 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.restful = void 0;
4
- /**
5
- * 构建 restful 风格路由
6
- */
7
- function restful(opts) {
8
- return async (exchange) => {
9
- const method = (exchange.request.method || '').toLowerCase();
10
- let handler;
11
- switch (method) {
12
- case 'get':
13
- handler = opts.get;
14
- break;
15
- case 'post':
16
- handler = opts.post;
17
- break;
18
- case 'put':
19
- handler = opts.put;
20
- break;
21
- case 'patch':
22
- handler = opts.patch;
23
- break;
24
- case 'delete':
25
- handler = opts.delete;
26
- break;
27
- }
28
- if (!handler) {
29
- exchange.respondErrMsg(`${method} ${exchange.request.url} not found`, 404);
30
- return;
31
- }
32
- await handler(exchange);
33
- };
34
- }
35
- exports.restful = restful;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.restful = void 0;
4
+ /**
5
+ * 构建 restful 风格路由
6
+ */
7
+ function restful(opts) {
8
+ return async (exchange) => {
9
+ const method = (exchange.request.method || '').toLowerCase();
10
+ let handler;
11
+ switch (method) {
12
+ case 'get':
13
+ handler = opts.get;
14
+ break;
15
+ case 'post':
16
+ handler = opts.post;
17
+ break;
18
+ case 'put':
19
+ handler = opts.put;
20
+ break;
21
+ case 'patch':
22
+ handler = opts.patch;
23
+ break;
24
+ case 'delete':
25
+ handler = opts.delete;
26
+ break;
27
+ }
28
+ if (!handler) {
29
+ exchange.respondErrMsg(`${method} ${exchange.request.url} not found`, 404);
30
+ return;
31
+ }
32
+ await handler(exchange);
33
+ };
34
+ }
35
+ exports.restful = restful;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSseHandler = void 0;
4
+ /**
5
+ * 创建 SSE (Server-Sent Events) 处理器.
6
+ * 用于服务端向客户端单向推送实时数据。
7
+ *
8
+ * @param opts
9
+ * @returns
10
+ */
11
+ function createSseHandler(opts) {
12
+ return async function (exchange) {
13
+ const { request, response } = exchange;
14
+ response.statusCode = 200;
15
+ response.setHeader('Content-Type', 'text/event-stream');
16
+ response.setHeader('Cache-Control', 'no-cache');
17
+ response.setHeader('Connection', 'keep-alive');
18
+ response.setHeader('X-Accel-Buffering', 'no');
19
+ response.flushHeaders();
20
+ let isEnded = false;
21
+ const ctx = {
22
+ request,
23
+ response,
24
+ send(data, event, id) {
25
+ if (isEnded)
26
+ return;
27
+ if (id !== undefined) {
28
+ response.write(`id: ${id}\n`);
29
+ }
30
+ if (event) {
31
+ response.write(`event: ${event}\n`);
32
+ }
33
+ if (Array.isArray(data)) {
34
+ for (const item of data) {
35
+ response.write(`data: ${JSON.stringify(item)}\n`);
36
+ }
37
+ }
38
+ else {
39
+ response.write(`data: ${JSON.stringify(data)}\n`);
40
+ }
41
+ response.write('\n');
42
+ },
43
+ close() {
44
+ if (isEnded)
45
+ return;
46
+ isEnded = true;
47
+ response.end();
48
+ }
49
+ };
50
+ function safeEnd() {
51
+ if (isEnded)
52
+ return;
53
+ isEnded = true;
54
+ response.end();
55
+ }
56
+ request.on('close', safeEnd);
57
+ try {
58
+ await opts.handle(ctx);
59
+ }
60
+ finally {
61
+ safeEnd();
62
+ }
63
+ };
64
+ }
65
+ exports.createSseHandler = createSseHandler;
@@ -1,31 +1,31 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createUploadHandler = void 0;
4
- /**
5
- * 创建上传处理器. 上传要求一次只能传输一个文件,并且请求正文就是文件二进制内容。
6
- * 必须是 post 请求,额外的参数只能通过 queryString 或 header 来传递。
7
- * 和 postman 中的 binary 模式是一致的,这样上传文件性能会好一些,但是局限性也很大。
8
- *
9
- * @param opts
10
- * @param <RES> 响应json数据类型
11
- * @returns
12
- */
13
- function createUploadHandler(opts) {
14
- return async function (exchange) {
15
- if (!exchange.request.method || exchange.request.method.toUpperCase() !== 'POST') {
16
- exchange.respondErrMsg('Method Not Allowed', 405);
17
- return;
18
- }
19
- const body = await exchange.bodyBuffer();
20
- const res = await opts.handle(body, {
21
- request: exchange.request,
22
- query: exchange.parseQueryString()
23
- });
24
- if (!res) {
25
- exchange.respond({ statusCode: 200 });
26
- return;
27
- }
28
- exchange.respondJson(res);
29
- };
30
- }
31
- exports.createUploadHandler = createUploadHandler;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createUploadHandler = void 0;
4
+ /**
5
+ * 创建上传处理器. 上传要求一次只能传输一个文件,并且请求正文就是文件二进制内容。
6
+ * 必须是 post 请求,额外的参数只能通过 queryString 或 header 来传递。
7
+ * 和 postman 中的 binary 模式是一致的,这样上传文件性能会好一些,但是局限性也很大。
8
+ *
9
+ * @param opts
10
+ * @param <RES> 响应json数据类型
11
+ * @returns
12
+ */
13
+ function createUploadHandler(opts) {
14
+ return async function (exchange) {
15
+ if (!exchange.request.method || exchange.request.method.toUpperCase() !== 'POST') {
16
+ exchange.respondErrMsg('Method Not Allowed', 405);
17
+ return;
18
+ }
19
+ const body = await exchange.bodyBuffer();
20
+ const res = await opts.handle(body, {
21
+ request: exchange.request,
22
+ query: exchange.parseQueryString()
23
+ });
24
+ if (!res) {
25
+ exchange.respond({ statusCode: 200 });
26
+ return;
27
+ }
28
+ exchange.respondJson(res);
29
+ };
30
+ }
31
+ exports.createUploadHandler = createUploadHandler;
package/dist/mvc/index.js CHANGED
@@ -1,50 +1,50 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.stopWebServer = exports.startWebServer = exports.removeServerStaticCache = void 0;
4
- const tslib_1 = require("tslib");
5
- const server_1 = require("./server");
6
- /**
7
- * 服务实例.
8
- */
9
- let SERVER;
10
- /**
11
- * 删除服务器静态缓存
12
- * @param path 路径,必须以斜杠开头,如:/assets/index.js
13
- */
14
- async function removeServerStaticCache(path) {
15
- if (SERVER) {
16
- SERVER.removeServerStaticCache(path);
17
- }
18
- }
19
- exports.removeServerStaticCache = removeServerStaticCache;
20
- /**
21
- * 启动 web服务
22
- * @param opts
23
- */
24
- async function startWebServer(opts) {
25
- if (SERVER) {
26
- throw new Error('The server has already been started!');
27
- }
28
- SERVER = new server_1.WokServer(opts);
29
- await SERVER.start();
30
- }
31
- exports.startWebServer = startWebServer;
32
- /**
33
- * 停止 web 服务
34
- * @returns
35
- */
36
- async function stopWebServer() {
37
- if (!SERVER) {
38
- return;
39
- }
40
- SERVER.stop();
41
- SERVER = undefined;
42
- }
43
- exports.stopWebServer = stopWebServer;
44
- process.on('beforeExit', stopWebServer);
45
- tslib_1.__exportStar(require("./exchange"), exports);
46
- tslib_1.__exportStar(require("./handler"), exports);
47
- tslib_1.__exportStar(require("./interceptor"), exports);
48
- tslib_1.__exportStar(require("./render"), exports);
49
- tslib_1.__exportStar(require("./router"), exports);
50
- tslib_1.__exportStar(require("./static"), exports);
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stopWebServer = exports.startWebServer = exports.removeServerStaticCache = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const server_1 = require("./server");
6
+ /**
7
+ * 服务实例.
8
+ */
9
+ let SERVER;
10
+ /**
11
+ * 删除服务器静态缓存
12
+ * @param path 路径,必须以斜杠开头,如:/assets/index.js
13
+ */
14
+ async function removeServerStaticCache(path) {
15
+ if (SERVER) {
16
+ SERVER.removeServerStaticCache(path);
17
+ }
18
+ }
19
+ exports.removeServerStaticCache = removeServerStaticCache;
20
+ /**
21
+ * 启动 web服务
22
+ * @param opts
23
+ */
24
+ async function startWebServer(opts) {
25
+ if (SERVER) {
26
+ throw new Error('The server has already been started!');
27
+ }
28
+ SERVER = new server_1.WokServer(opts);
29
+ await SERVER.start();
30
+ }
31
+ exports.startWebServer = startWebServer;
32
+ /**
33
+ * 停止 web 服务
34
+ * @returns
35
+ */
36
+ async function stopWebServer() {
37
+ if (!SERVER) {
38
+ return;
39
+ }
40
+ SERVER.stop();
41
+ SERVER = undefined;
42
+ }
43
+ exports.stopWebServer = stopWebServer;
44
+ process.on('beforeExit', stopWebServer);
45
+ tslib_1.__exportStar(require("./exchange"), exports);
46
+ tslib_1.__exportStar(require("./handler"), exports);
47
+ tslib_1.__exportStar(require("./interceptor"), exports);
48
+ tslib_1.__exportStar(require("./render"), exports);
49
+ tslib_1.__exportStar(require("./router"), exports);
50
+ tslib_1.__exportStar(require("./static"), exports);