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
@@ -1,2 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/dist/mvc/query.js CHANGED
@@ -1,43 +1,43 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QueryString = void 0;
4
- const querystring_1 = require("querystring");
5
- class QueryString {
6
- qs;
7
- constructor(url) {
8
- const idx = url.indexOf('?');
9
- this.qs = idx !== -1 ? (0, querystring_1.parse)(url.substring(idx + 1)) : {};
10
- }
11
- /**
12
- * 获取单个字符串值
13
- * @param name
14
- */
15
- getStr(name) {
16
- const res = this.qs[name];
17
- if (!res) {
18
- return undefined;
19
- }
20
- else if (typeof res === 'string') {
21
- return res;
22
- }
23
- else {
24
- return res[0];
25
- }
26
- }
27
- /**
28
- * 获取参数的所有值
29
- */
30
- getStrVals(name) {
31
- const res = this.qs[name];
32
- if (!res) {
33
- return undefined;
34
- }
35
- else if (typeof res === 'string') {
36
- return [res];
37
- }
38
- else {
39
- return res;
40
- }
41
- }
42
- }
43
- exports.QueryString = QueryString;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QueryString = void 0;
4
+ const querystring_1 = require("querystring");
5
+ class QueryString {
6
+ qs;
7
+ constructor(url) {
8
+ const idx = url.indexOf('?');
9
+ this.qs = idx !== -1 ? (0, querystring_1.parse)(url.substring(idx + 1)) : {};
10
+ }
11
+ /**
12
+ * 获取单个字符串值
13
+ * @param name
14
+ */
15
+ getStr(name) {
16
+ const res = this.qs[name];
17
+ if (!res) {
18
+ return undefined;
19
+ }
20
+ else if (typeof res === 'string') {
21
+ return res;
22
+ }
23
+ else {
24
+ return res[0];
25
+ }
26
+ }
27
+ /**
28
+ * 获取参数的所有值
29
+ */
30
+ getStrVals(name) {
31
+ const res = this.qs[name];
32
+ if (!res) {
33
+ return undefined;
34
+ }
35
+ else if (typeof res === 'string') {
36
+ return [res];
37
+ }
38
+ else {
39
+ return res;
40
+ }
41
+ }
42
+ }
43
+ exports.QueryString = QueryString;
@@ -1,132 +1,132 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.renderFile = void 0;
4
- const fs_1 = require("fs");
5
- const promises_1 = require("fs/promises");
6
- const path_1 = require("path");
7
- const zlib_1 = require("zlib");
8
- const static_1 = require("../static");
9
- const json_1 = require("./json");
10
- /**
11
- * 响应一个文件.
12
- * @param request 请求信息
13
- * @param response 响应信息
14
- * @param filePath 文件路径,如果文件不存在,则会响应 404
15
- * @param download 是否下载
16
- */
17
- async function renderFile(request, response, filePath, download = false) {
18
- if (!(0, fs_1.existsSync)(filePath)) {
19
- (0, json_1.renderError)(response, 'Cannot find file.', 404);
20
- return;
21
- }
22
- const fileName = (0, path_1.basename)(filePath);
23
- let isDownload = false;
24
- let contentType;
25
- if (download) {
26
- isDownload = true;
27
- }
28
- else {
29
- contentType = (0, static_1.decideContentType)(fileName);
30
- if (!contentType) {
31
- isDownload = true;
32
- }
33
- }
34
- if (isDownload) {
35
- response.setHeader('Content-Type', 'application/octet-stream');
36
- response.setHeader('Content-Disposition', `attachment; filename="${encodeURIComponent(fileName)}"`);
37
- }
38
- else if (contentType) {
39
- response.setHeader('Content-Type', contentType);
40
- }
41
- const statRes = await (0, promises_1.stat)(filePath);
42
- // 支持 If-Modified-Since
43
- // 由于只是简单的文件映射,没有 etag,不能支持 If-None-Match
44
- // 缓存校验只能支持时间的比对,修改时间是文件系统本来就有的
45
- if (request.headers['if-modified-since']) {
46
- const modifiedSince = new Date(request.headers['if-modified-since']);
47
- // 判定日期是否有效
48
- if (modifiedSince instanceof Date && !isNaN(modifiedSince.getTime())) {
49
- // 比较更改日期,只精确到秒, UTC 格式只精确到秒,但是 mtime 是包含毫秒的
50
- const { mtime } = statRes;
51
- mtime.setMilliseconds(0);
52
- if (modifiedSince >= mtime) {
53
- response.statusCode = 304;
54
- response.setHeader('Last-Modified', statRes.mtime.toUTCString());
55
- response.end();
56
- return;
57
- }
58
- }
59
- }
60
- // 支持 Range
61
- // https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Range
62
- const rangeHeader = request.headers['range'];
63
- if (!rangeHeader) {
64
- response.setHeader('Last-Modified', statRes.mtime.toUTCString());
65
- return streamFile(filePath, request, response);
66
- }
67
- // 解析,range 示例:bytes=200-1000, 2000-6576, 19000-
68
- // 多段的情况,暂时不做支持,非常麻烦,段数多还可能会有效率问题
69
- // 如果不是字节范围不是以字节为单位,暂时也不做支持
70
- const ranges = rangeHeader.split(',');
71
- let range = ranges.length ? ranges[0] : undefined;
72
- if (!range) {
73
- return streamFile(filePath, request, response);
74
- }
75
- range = range.trim();
76
- if (!range.startsWith('bytes=')) {
77
- return streamFile(filePath, request, response);
78
- }
79
- range = range.substring(6);
80
- const strs = range.split('-');
81
- let start = strs[0] ? parseInt(strs[0], 10) : NaN;
82
- let end = strs[1] ? parseInt(strs[1], 10) : NaN;
83
- // 解析文件
84
- if (isNaN(start) || start < 0) {
85
- // 范围不合法,返回 416
86
- (0, json_1.renderError)(response, `Range not satisfiable,start is ${start}`, 416);
87
- return;
88
- }
89
- if (isNaN(end)) {
90
- end = statRes.size - 1;
91
- }
92
- else if (end > statRes.size - 1) {
93
- // 范围不合法,返回 416
94
- (0, json_1.renderError)(response, `Range not satisfiable,end must not be greater than ${statRes.size - 1}`, 416);
95
- return;
96
- }
97
- // 注:Range 和 Content-Range 还有 createReadStream 中的字节范围,都是前后全包含的
98
- // Content-Range: bytes 42-1233/1234
99
- response.setHeader('Content-Range', `bytes ${start}-${end}/${statRes.size}`);
100
- return streamFile(filePath, request, response, { start, end });
101
- }
102
- exports.renderFile = renderFile;
103
- function streamFile(filePath, request, response, opts) {
104
- return new Promise((res, rej) => {
105
- if (opts && typeof opts.start === 'number') {
106
- // 部分返回 206
107
- response.statusCode = 206;
108
- }
109
- else {
110
- // 全部返回 200
111
- response.statusCode = 200;
112
- }
113
- // 支持 gzip
114
- const acceptEncoding = request.headers['accept-encoding'];
115
- if (acceptEncoding) {
116
- // Accept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1
117
- const acceptEncodings = acceptEncoding
118
- .trim()
119
- .split(',')
120
- .map(item => item.trim())
121
- .map(item => item.split(';')[0]);
122
- if (acceptEncodings.includes('gzip') || acceptEncodings.includes('*')) {
123
- response.setHeader('Content-Encoding', 'gzip');
124
- (0, fs_1.createReadStream)(filePath, opts).pipe((0, zlib_1.createGzip)()).pipe(response);
125
- response.once('finish', res).once('error', rej);
126
- return;
127
- }
128
- }
129
- (0, fs_1.createReadStream)(filePath, opts).pipe(response);
130
- response.once('finish', res).once('error', rej);
131
- });
132
- }
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderFile = void 0;
4
+ const fs_1 = require("fs");
5
+ const promises_1 = require("fs/promises");
6
+ const path_1 = require("path");
7
+ const zlib_1 = require("zlib");
8
+ const static_1 = require("../static");
9
+ const json_1 = require("./json");
10
+ /**
11
+ * 响应一个文件.
12
+ * @param request 请求信息
13
+ * @param response 响应信息
14
+ * @param filePath 文件路径,如果文件不存在,则会响应 404
15
+ * @param download 是否下载
16
+ */
17
+ async function renderFile(request, response, filePath, download = false) {
18
+ if (!(0, fs_1.existsSync)(filePath)) {
19
+ (0, json_1.renderError)(response, 'Cannot find file.', 404);
20
+ return;
21
+ }
22
+ const fileName = (0, path_1.basename)(filePath);
23
+ let isDownload = false;
24
+ let contentType;
25
+ if (download) {
26
+ isDownload = true;
27
+ }
28
+ else {
29
+ contentType = (0, static_1.decideContentType)(fileName);
30
+ if (!contentType) {
31
+ isDownload = true;
32
+ }
33
+ }
34
+ if (isDownload) {
35
+ response.setHeader('Content-Type', 'application/octet-stream');
36
+ response.setHeader('Content-Disposition', `attachment; filename="${encodeURIComponent(fileName)}"`);
37
+ }
38
+ else if (contentType) {
39
+ response.setHeader('Content-Type', contentType);
40
+ }
41
+ const statRes = await (0, promises_1.stat)(filePath);
42
+ // 支持 If-Modified-Since
43
+ // 由于只是简单的文件映射,没有 etag,不能支持 If-None-Match
44
+ // 缓存校验只能支持时间的比对,修改时间是文件系统本来就有的
45
+ if (request.headers['if-modified-since']) {
46
+ const modifiedSince = new Date(request.headers['if-modified-since']);
47
+ // 判定日期是否有效
48
+ if (modifiedSince instanceof Date && !isNaN(modifiedSince.getTime())) {
49
+ // 比较更改日期,只精确到秒, UTC 格式只精确到秒,但是 mtime 是包含毫秒的
50
+ const { mtime } = statRes;
51
+ mtime.setMilliseconds(0);
52
+ if (modifiedSince >= mtime) {
53
+ response.statusCode = 304;
54
+ response.setHeader('Last-Modified', statRes.mtime.toUTCString());
55
+ response.end();
56
+ return;
57
+ }
58
+ }
59
+ }
60
+ // 支持 Range
61
+ // https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Range
62
+ const rangeHeader = request.headers['range'];
63
+ if (!rangeHeader) {
64
+ response.setHeader('Last-Modified', statRes.mtime.toUTCString());
65
+ return streamFile(filePath, request, response);
66
+ }
67
+ // 解析,range 示例:bytes=200-1000, 2000-6576, 19000-
68
+ // 多段的情况,暂时不做支持,非常麻烦,段数多还可能会有效率问题
69
+ // 如果不是字节范围不是以字节为单位,暂时也不做支持
70
+ const ranges = rangeHeader.split(',');
71
+ let range = ranges.length ? ranges[0] : undefined;
72
+ if (!range) {
73
+ return streamFile(filePath, request, response);
74
+ }
75
+ range = range.trim();
76
+ if (!range.startsWith('bytes=')) {
77
+ return streamFile(filePath, request, response);
78
+ }
79
+ range = range.substring(6);
80
+ const strs = range.split('-');
81
+ let start = strs[0] ? parseInt(strs[0], 10) : NaN;
82
+ let end = strs[1] ? parseInt(strs[1], 10) : NaN;
83
+ // 解析文件
84
+ if (isNaN(start) || start < 0) {
85
+ // 范围不合法,返回 416
86
+ (0, json_1.renderError)(response, `Range not satisfiable,start is ${start}`, 416);
87
+ return;
88
+ }
89
+ if (isNaN(end)) {
90
+ end = statRes.size - 1;
91
+ }
92
+ else if (end > statRes.size - 1) {
93
+ // 范围不合法,返回 416
94
+ (0, json_1.renderError)(response, `Range not satisfiable,end must not be greater than ${statRes.size - 1}`, 416);
95
+ return;
96
+ }
97
+ // 注:Range 和 Content-Range 还有 createReadStream 中的字节范围,都是前后全包含的
98
+ // Content-Range: bytes 42-1233/1234
99
+ response.setHeader('Content-Range', `bytes ${start}-${end}/${statRes.size}`);
100
+ return streamFile(filePath, request, response, { start, end });
101
+ }
102
+ exports.renderFile = renderFile;
103
+ function streamFile(filePath, request, response, opts) {
104
+ return new Promise((res, rej) => {
105
+ if (opts && typeof opts.start === 'number') {
106
+ // 部分返回 206
107
+ response.statusCode = 206;
108
+ }
109
+ else {
110
+ // 全部返回 200
111
+ response.statusCode = 200;
112
+ }
113
+ // 支持 gzip
114
+ const acceptEncoding = request.headers['accept-encoding'];
115
+ if (acceptEncoding) {
116
+ // Accept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1
117
+ const acceptEncodings = acceptEncoding
118
+ .trim()
119
+ .split(',')
120
+ .map(item => item.trim())
121
+ .map(item => item.split(';')[0]);
122
+ if (acceptEncodings.includes('gzip') || acceptEncodings.includes('*')) {
123
+ response.setHeader('Content-Encoding', 'gzip');
124
+ (0, fs_1.createReadStream)(filePath, opts).pipe((0, zlib_1.createGzip)()).pipe(response);
125
+ response.once('finish', res).once('error', rej);
126
+ return;
127
+ }
128
+ }
129
+ (0, fs_1.createReadStream)(filePath, opts).pipe(response);
130
+ response.once('finish', res).once('error', rej);
131
+ });
132
+ }
@@ -1,90 +1,90 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateHtmlCode = void 0;
4
- function encodeAttrs(attrs) {
5
- return Object.entries(attrs)
6
- .map(entry => {
7
- const [name, value] = entry;
8
- return { name, value };
9
- })
10
- .filter(attr => attr.value !== undefined)
11
- .map(attr => {
12
- const { name } = attr;
13
- const value = attr.value;
14
- if (name === 'style') {
15
- if (typeof value === 'string') {
16
- return value;
17
- }
18
- const style = value;
19
- return Object.entries(style)
20
- .map(entry => `${entry[0]}:${entry[1]}`)
21
- .join(';');
22
- }
23
- if (typeof value === 'boolean' && value) {
24
- return `${name}`;
25
- }
26
- if (typeof value === 'string') {
27
- return `${name}="${value.replace(/"/g, '&quot;')}"`;
28
- }
29
- return `${name}="${value}"`;
30
- })
31
- .join(' ');
32
- }
33
- /**
34
- * 将标签编码
35
- */
36
- function encodeTag(tag) {
37
- if (tag.selfClosing) {
38
- if (tag.attrs) {
39
- return `<${tag.tag} ${encodeAttrs(tag.attrs)}/>`;
40
- }
41
- return `<${tag.tag}/>`;
42
- }
43
- let html = '';
44
- html += `<${tag.tag}`;
45
- if (tag.attrs) {
46
- html += ` ${encodeAttrs(tag.attrs)}>`;
47
- }
48
- else {
49
- html += '>';
50
- }
51
- if (tag.children) {
52
- if (Array.isArray(tag.children)) {
53
- html += tag.children
54
- .map(subTag => (typeof subTag === 'string' ? subTag : encodeTag(subTag)))
55
- .join('');
56
- }
57
- else {
58
- const children = [];
59
- tag.children((...child) => {
60
- children.push(...child);
61
- });
62
- html += children
63
- .map(subTag => (typeof subTag === 'string' ? subTag : encodeTag(subTag)))
64
- .join('');
65
- }
66
- }
67
- html += `</${tag.tag}>`;
68
- return html;
69
- }
70
- /**
71
- * 生成 html 代码
72
- * @param html
73
- */
74
- function generateHtmlCode(html) {
75
- return encodeTag({
76
- tag: 'html',
77
- attrs: { lang: html.lang },
78
- children: [
79
- { tag: 'head', children: html.head },
80
- {
81
- tag: 'body',
82
- attrs: Array.isArray(html.body) || typeof html.body === 'function' ? undefined : html.body.attrs,
83
- children: Array.isArray(html.body) || typeof html.body === 'function'
84
- ? html.body
85
- : html.body.children
86
- }
87
- ]
88
- });
89
- }
90
- exports.generateHtmlCode = generateHtmlCode;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateHtmlCode = void 0;
4
+ function encodeAttrs(attrs) {
5
+ return Object.entries(attrs)
6
+ .map(entry => {
7
+ const [name, value] = entry;
8
+ return { name, value };
9
+ })
10
+ .filter(attr => attr.value !== undefined)
11
+ .map(attr => {
12
+ const { name } = attr;
13
+ const value = attr.value;
14
+ if (name === 'style') {
15
+ if (typeof value === 'string') {
16
+ return value;
17
+ }
18
+ const style = value;
19
+ return Object.entries(style)
20
+ .map(entry => `${entry[0]}:${entry[1]}`)
21
+ .join(';');
22
+ }
23
+ if (typeof value === 'boolean' && value) {
24
+ return `${name}`;
25
+ }
26
+ if (typeof value === 'string') {
27
+ return `${name}="${value.replace(/"/g, '&quot;')}"`;
28
+ }
29
+ return `${name}="${value}"`;
30
+ })
31
+ .join(' ');
32
+ }
33
+ /**
34
+ * 将标签编码
35
+ */
36
+ function encodeTag(tag) {
37
+ if (tag.selfClosing) {
38
+ if (tag.attrs) {
39
+ return `<${tag.tag} ${encodeAttrs(tag.attrs)}/>`;
40
+ }
41
+ return `<${tag.tag}/>`;
42
+ }
43
+ let html = '';
44
+ html += `<${tag.tag}`;
45
+ if (tag.attrs) {
46
+ html += ` ${encodeAttrs(tag.attrs)}>`;
47
+ }
48
+ else {
49
+ html += '>';
50
+ }
51
+ if (tag.children) {
52
+ if (Array.isArray(tag.children)) {
53
+ html += tag.children
54
+ .map(subTag => (typeof subTag === 'string' ? subTag : encodeTag(subTag)))
55
+ .join('');
56
+ }
57
+ else {
58
+ const children = [];
59
+ tag.children((...child) => {
60
+ children.push(...child);
61
+ });
62
+ html += children
63
+ .map(subTag => (typeof subTag === 'string' ? subTag : encodeTag(subTag)))
64
+ .join('');
65
+ }
66
+ }
67
+ html += `</${tag.tag}>`;
68
+ return html;
69
+ }
70
+ /**
71
+ * 生成 html 代码
72
+ * @param html
73
+ */
74
+ function generateHtmlCode(html) {
75
+ return encodeTag({
76
+ tag: 'html',
77
+ attrs: { lang: html.lang },
78
+ children: [
79
+ { tag: 'head', children: html.head },
80
+ {
81
+ tag: 'body',
82
+ attrs: Array.isArray(html.body) || typeof html.body === 'function' ? undefined : html.body.attrs,
83
+ children: Array.isArray(html.body) || typeof html.body === 'function'
84
+ ? html.body
85
+ : html.body.children
86
+ }
87
+ ]
88
+ });
89
+ }
90
+ exports.generateHtmlCode = generateHtmlCode;
@@ -1,18 +1,18 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.renderHtml = void 0;
4
- const tslib_1 = require("tslib");
5
- const html_1 = require("./html");
6
- /**
7
- * 渲染 html
8
- * @param response
9
- * @param html
10
- * @param status
11
- */
12
- function renderHtml(response, html, status = 200) {
13
- response.statusCode = status;
14
- response.setHeader('content-type', 'text/html; charset=utf-8');
15
- response.end(typeof html === 'string' ? html : (0, html_1.generateHtmlCode)(html));
16
- }
17
- exports.renderHtml = renderHtml;
18
- tslib_1.__exportStar(require("./html"), exports);
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderHtml = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const html_1 = require("./html");
6
+ /**
7
+ * 渲染 html
8
+ * @param response
9
+ * @param html
10
+ * @param status
11
+ */
12
+ function renderHtml(response, html, status = 200) {
13
+ response.statusCode = status;
14
+ response.setHeader('content-type', 'text/html; charset=utf-8');
15
+ response.end(typeof html === 'string' ? html : (0, html_1.generateHtmlCode)(html));
16
+ }
17
+ exports.renderHtml = renderHtml;
18
+ tslib_1.__exportStar(require("./html"), exports);
@@ -1,2 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,7 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./text"), exports);
5
- tslib_1.__exportStar(require("./json"), exports);
6
- tslib_1.__exportStar(require("./file"), exports);
7
- tslib_1.__exportStar(require("./html"), exports);
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./text"), exports);
5
+ tslib_1.__exportStar(require("./json"), exports);
6
+ tslib_1.__exportStar(require("./file"), exports);
7
+ tslib_1.__exportStar(require("./html"), exports);
@@ -1,26 +1,26 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.renderError = exports.renderJson = void 0;
4
- /**
5
- * 渲染 json 格式数据.
6
- * @param response 响应信息
7
- * @param json json对象
8
- * @param status 状态码,默认 200
9
- * @returns
10
- */
11
- function renderJson(response, json, status = 200) {
12
- response.setHeader('content-type', 'application/json; charset=UTF-8');
13
- response.statusCode = status;
14
- response.end(JSON.stringify(json));
15
- }
16
- exports.renderJson = renderJson;
17
- /**
18
- * 渲染错误信息,json 格式
19
- * @param response
20
- * @param message
21
- * @param status
22
- */
23
- function renderError(response, message, status = 400) {
24
- renderJson(response, { message }, status);
25
- }
26
- exports.renderError = renderError;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderError = exports.renderJson = void 0;
4
+ /**
5
+ * 渲染 json 格式数据.
6
+ * @param response 响应信息
7
+ * @param json json对象
8
+ * @param status 状态码,默认 200
9
+ * @returns
10
+ */
11
+ function renderJson(response, json, status = 200) {
12
+ response.setHeader('content-type', 'application/json; charset=UTF-8');
13
+ response.statusCode = status;
14
+ response.end(JSON.stringify(json));
15
+ }
16
+ exports.renderJson = renderJson;
17
+ /**
18
+ * 渲染错误信息,json 格式
19
+ * @param response
20
+ * @param message
21
+ * @param status
22
+ */
23
+ function renderError(response, message, status = 400) {
24
+ renderJson(response, { message }, status);
25
+ }
26
+ exports.renderError = renderError;