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,67 +1,67 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseHeaders = void 0;
4
- /**
5
- * 解析 range 消息头,如果解析失败,返回 null
6
- */
7
- function parseRange(rangeHeader) {
8
- // 解析,range 示例:bytes=200-1000, 2000-6576, 19000-
9
- // 多段的情况,暂时不做支持,非常麻烦,段数多还可能会有效率问题
10
- // 如果不是字节范围不是以字节为单位,暂时也不做支持
11
- const ranges = rangeHeader.split(',');
12
- if (!ranges.length) {
13
- return null;
14
- }
15
- let range = ranges[0].trim();
16
- if (!range.startsWith('bytes=')) {
17
- return null;
18
- }
19
- range = range.substring(6);
20
- const strs = range.split('-');
21
- let start = strs[0] ? parseInt(strs[0], 10) : NaN;
22
- let end = strs[1] ? parseInt(strs[1], 10) : undefined;
23
- return { start, end };
24
- }
25
- /**
26
- * 解析消息头,返回静态文件处理需要的信息
27
- * @param headers
28
- */
29
- function parseHeaders(headers) {
30
- // 是否支持 gzip
31
- const acceptEncoding = headers['accept-encoding'];
32
- let acceptGzip = false;
33
- if (acceptEncoding) {
34
- // Accept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1
35
- const acceptEncodings = acceptEncoding
36
- .trim()
37
- .split(',')
38
- .map(item => item.trim())
39
- .map(item => item.split(';')[0]);
40
- if (acceptEncodings.includes('gzip') || acceptEncodings.includes('*')) {
41
- acceptGzip = true;
42
- }
43
- }
44
- let res = {
45
- gzip: acceptGzip
46
- };
47
- // 支持 If-Modified-Since
48
- // 由于只是简单的文件映射,没有 etag,不能支持 If-None-Match
49
- const ifModifiedSince = headers['if-modified-since'];
50
- if (ifModifiedSince) {
51
- const modifiedSince = new Date(ifModifiedSince);
52
- if (modifiedSince instanceof Date && !isNaN(modifiedSince.getTime())) {
53
- res.ifModifiedSince = modifiedSince;
54
- }
55
- }
56
- // 支持 Range
57
- // https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Range
58
- const rangeHeader = headers['range'];
59
- if (rangeHeader) {
60
- const rangeRes = parseRange(rangeHeader);
61
- if (rangeRes) {
62
- res.range = rangeRes;
63
- }
64
- }
65
- return res;
66
- }
67
- exports.parseHeaders = parseHeaders;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseHeaders = void 0;
4
+ /**
5
+ * 解析 range 消息头,如果解析失败,返回 null
6
+ */
7
+ function parseRange(rangeHeader) {
8
+ // 解析,range 示例:bytes=200-1000, 2000-6576, 19000-
9
+ // 多段的情况,暂时不做支持,非常麻烦,段数多还可能会有效率问题
10
+ // 如果不是字节范围不是以字节为单位,暂时也不做支持
11
+ const ranges = rangeHeader.split(',');
12
+ if (!ranges.length) {
13
+ return null;
14
+ }
15
+ let range = ranges[0].trim();
16
+ if (!range.startsWith('bytes=')) {
17
+ return null;
18
+ }
19
+ range = range.substring(6);
20
+ const strs = range.split('-');
21
+ let start = strs[0] ? parseInt(strs[0], 10) : NaN;
22
+ let end = strs[1] ? parseInt(strs[1], 10) : undefined;
23
+ return { start, end };
24
+ }
25
+ /**
26
+ * 解析消息头,返回静态文件处理需要的信息
27
+ * @param headers
28
+ */
29
+ function parseHeaders(headers) {
30
+ // 是否支持 gzip
31
+ const acceptEncoding = headers['accept-encoding'];
32
+ let acceptGzip = false;
33
+ if (acceptEncoding) {
34
+ // Accept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1
35
+ const acceptEncodings = acceptEncoding
36
+ .trim()
37
+ .split(',')
38
+ .map(item => item.trim())
39
+ .map(item => item.split(';')[0]);
40
+ if (acceptEncodings.includes('gzip') || acceptEncodings.includes('*')) {
41
+ acceptGzip = true;
42
+ }
43
+ }
44
+ let res = {
45
+ gzip: acceptGzip
46
+ };
47
+ // 支持 If-Modified-Since
48
+ // 由于只是简单的文件映射,没有 etag,不能支持 If-None-Match
49
+ const ifModifiedSince = headers['if-modified-since'];
50
+ if (ifModifiedSince) {
51
+ const modifiedSince = new Date(ifModifiedSince);
52
+ if (modifiedSince instanceof Date && !isNaN(modifiedSince.getTime())) {
53
+ res.ifModifiedSince = modifiedSince;
54
+ }
55
+ }
56
+ // 支持 Range
57
+ // https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Range
58
+ const rangeHeader = headers['range'];
59
+ if (rangeHeader) {
60
+ const rangeRes = parseRange(rangeHeader);
61
+ if (rangeRes) {
62
+ res.range = rangeRes;
63
+ }
64
+ }
65
+ return res;
66
+ }
67
+ exports.parseHeaders = parseHeaders;
@@ -1,6 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./mime-type"), exports);
5
- tslib_1.__exportStar(require("./header"), exports);
6
- tslib_1.__exportStar(require("./static-handler"), exports);
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./mime-type"), exports);
5
+ tslib_1.__exportStar(require("./header"), exports);
6
+ tslib_1.__exportStar(require("./static-handler"), exports);
@@ -1,84 +1,84 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.decideContentType = exports.MIME_TYPES = void 0;
4
- exports.MIME_TYPES = {
5
- aac: 'audio/aac',
6
- abw: 'application/x-abiword',
7
- arc: 'application/x-freearc',
8
- avi: 'video/x-msvideo',
9
- azw: 'application/vnd.amazon.ebook',
10
- bin: 'application/octet-stream',
11
- bmp: 'image/bmp',
12
- bz: 'application/x-bzip',
13
- bz2: 'application/x-bzip2',
14
- csh: 'application/x-csh',
15
- css: 'text/css',
16
- csv: 'text/csv',
17
- doc: 'application/msword',
18
- docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
19
- eot: 'application/vnd.ms-fontobject',
20
- epub: 'application/epub+zip',
21
- gif: 'image/gif',
22
- htm: 'text/html',
23
- html: 'text/html',
24
- ico: 'image/vnd.microsoft.icon',
25
- ics: 'text/calendar',
26
- jar: 'application/java-archive',
27
- jpeg: 'image/jpeg',
28
- jpg: 'image/jpeg',
29
- js: 'text/javascript',
30
- json: 'application/json',
31
- jsonld: 'application/ld+json',
32
- mid: 'audio/midi',
33
- midi: 'audio/midi',
34
- mjs: 'text/javascript',
35
- mp3: 'audio/mpeg',
36
- mpeg: 'video/mpeg',
37
- mpkg: 'application/vnd.apple.installer+xml',
38
- odp: 'application/vnd.oasis.opendocument.presentation',
39
- ods: 'application/vnd.oasis.opendocument.spreadsheet',
40
- odt: 'application/vnd.oasis.opendocument.text',
41
- oga: 'audio/ogg',
42
- ogv: 'video/ogg',
43
- ogx: 'application/ogg',
44
- otf: 'font/otf',
45
- png: 'image/png',
46
- pdf: 'application/pdf',
47
- ppt: 'application/vnd.ms-powerpoint',
48
- pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
49
- rar: 'application/x-rar-compressed',
50
- rtf: 'application/rtf',
51
- sh: 'application/x-sh',
52
- svg: 'image/svg+xml',
53
- swf: 'application/x-shockwave-flash',
54
- tar: 'application/x-tar',
55
- tif: 'image/tiff',
56
- tiff: 'image/tiff',
57
- ttf: 'font/ttf',
58
- txt: 'text/plain',
59
- vsd: 'application/vnd.visio',
60
- wav: 'audio/wav',
61
- weba: 'audio/webm',
62
- webm: 'video/webm',
63
- webp: 'image/webp',
64
- woff: 'font/woff',
65
- woff2: 'font/woff2',
66
- xhtml: 'application/xhtml+xml',
67
- xls: 'application/vnd.ms-excel',
68
- xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
69
- xml: 'application/xml',
70
- xul: 'application/vnd.mozilla.xul+xml',
71
- zip: 'application/zip',
72
- '3gp': 'video/3gpp',
73
- '3g2': 'video/3gpp2',
74
- '7z': 'application/x-7z-compressed'
75
- };
76
- function decideContentType(fileName) {
77
- const idx = fileName.lastIndexOf('.');
78
- if (idx === -1) {
79
- return undefined;
80
- }
81
- const suffix = fileName.substring(idx + 1);
82
- return exports.MIME_TYPES[suffix];
83
- }
84
- exports.decideContentType = decideContentType;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decideContentType = exports.MIME_TYPES = void 0;
4
+ exports.MIME_TYPES = {
5
+ aac: 'audio/aac',
6
+ abw: 'application/x-abiword',
7
+ arc: 'application/x-freearc',
8
+ avi: 'video/x-msvideo',
9
+ azw: 'application/vnd.amazon.ebook',
10
+ bin: 'application/octet-stream',
11
+ bmp: 'image/bmp',
12
+ bz: 'application/x-bzip',
13
+ bz2: 'application/x-bzip2',
14
+ csh: 'application/x-csh',
15
+ css: 'text/css',
16
+ csv: 'text/csv',
17
+ doc: 'application/msword',
18
+ docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
19
+ eot: 'application/vnd.ms-fontobject',
20
+ epub: 'application/epub+zip',
21
+ gif: 'image/gif',
22
+ htm: 'text/html',
23
+ html: 'text/html',
24
+ ico: 'image/vnd.microsoft.icon',
25
+ ics: 'text/calendar',
26
+ jar: 'application/java-archive',
27
+ jpeg: 'image/jpeg',
28
+ jpg: 'image/jpeg',
29
+ js: 'text/javascript',
30
+ json: 'application/json',
31
+ jsonld: 'application/ld+json',
32
+ mid: 'audio/midi',
33
+ midi: 'audio/midi',
34
+ mjs: 'text/javascript',
35
+ mp3: 'audio/mpeg',
36
+ mpeg: 'video/mpeg',
37
+ mpkg: 'application/vnd.apple.installer+xml',
38
+ odp: 'application/vnd.oasis.opendocument.presentation',
39
+ ods: 'application/vnd.oasis.opendocument.spreadsheet',
40
+ odt: 'application/vnd.oasis.opendocument.text',
41
+ oga: 'audio/ogg',
42
+ ogv: 'video/ogg',
43
+ ogx: 'application/ogg',
44
+ otf: 'font/otf',
45
+ png: 'image/png',
46
+ pdf: 'application/pdf',
47
+ ppt: 'application/vnd.ms-powerpoint',
48
+ pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
49
+ rar: 'application/x-rar-compressed',
50
+ rtf: 'application/rtf',
51
+ sh: 'application/x-sh',
52
+ svg: 'image/svg+xml',
53
+ swf: 'application/x-shockwave-flash',
54
+ tar: 'application/x-tar',
55
+ tif: 'image/tiff',
56
+ tiff: 'image/tiff',
57
+ ttf: 'font/ttf',
58
+ txt: 'text/plain',
59
+ vsd: 'application/vnd.visio',
60
+ wav: 'audio/wav',
61
+ weba: 'audio/webm',
62
+ webm: 'video/webm',
63
+ webp: 'image/webp',
64
+ woff: 'font/woff',
65
+ woff2: 'font/woff2',
66
+ xhtml: 'application/xhtml+xml',
67
+ xls: 'application/vnd.ms-excel',
68
+ xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
69
+ xml: 'application/xml',
70
+ xul: 'application/vnd.mozilla.xul+xml',
71
+ zip: 'application/zip',
72
+ '3gp': 'video/3gpp',
73
+ '3g2': 'video/3gpp2',
74
+ '7z': 'application/x-7z-compressed'
75
+ };
76
+ function decideContentType(fileName) {
77
+ const idx = fileName.lastIndexOf('.');
78
+ if (idx === -1) {
79
+ return undefined;
80
+ }
81
+ const suffix = fileName.substring(idx + 1);
82
+ return exports.MIME_TYPES[suffix];
83
+ }
84
+ exports.decideContentType = decideContentType;
@@ -1,66 +1,66 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getConfig = exports.parseSize = void 0;
4
- const config_1 = require("../../config");
5
- const validation_1 = require("../../validation");
6
- function parseSize(size) {
7
- if (typeof size === 'number') {
8
- return size;
9
- }
10
- const match = size.match(/^(\d+)([kmg]?)$/i);
11
- if (!match) {
12
- throw new Error(`Invalid size: ${size}`);
13
- }
14
- const [, num, unit] = match;
15
- let sizeNum = parseInt(num, 10);
16
- switch (unit.toLowerCase()) {
17
- case 'k':
18
- sizeNum *= 1024;
19
- break;
20
- case 'm':
21
- sizeNum *= 1024 * 1024;
22
- break;
23
- case 'g':
24
- sizeNum *= 1024 * 1024 * 1024;
25
- break;
26
- default:
27
- break;
28
- }
29
- return sizeNum;
30
- }
31
- exports.parseSize = parseSize;
32
- function validateSize(max) {
33
- const maxNum = parseSize(max);
34
- const validator = 'size';
35
- return val => {
36
- if (val === null || val === undefined) {
37
- return { ok: true };
38
- }
39
- const sizeNum = typeof val === 'number' ? val : parseSize(val);
40
- if (sizeNum < 1) {
41
- return { ok: false, validator, message: `size must greater than 1` };
42
- }
43
- if (sizeNum > maxNum) {
44
- return { ok: false, validator, message: `size must less than ${max}` };
45
- }
46
- return { ok: true };
47
- };
48
- }
49
- /**
50
- * 获取缓存的配置信息
51
- * @returns
52
- */
53
- function getConfig() {
54
- return (0, config_1.generateConfig)({
55
- enable: false,
56
- maxAge: 600,
57
- maxSize: '100m',
58
- maxFileSize: '10m'
59
- }, 'SERVER_STATIC_CACHE', {
60
- enable: [(0, validation_1.notNull)()],
61
- maxAge: [(0, validation_1.notNull)(), (0, validation_1.min)(1), (0, validation_1.max)(31536000)],
62
- maxSize: [(0, validation_1.notNull)(), validateSize('1024g')],
63
- maxFileSize: [(0, validation_1.notNull)(), validateSize('1g')]
64
- });
65
- }
66
- exports.getConfig = getConfig;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getConfig = exports.parseSize = void 0;
4
+ const config_1 = require("../../config");
5
+ const validation_1 = require("../../validation");
6
+ function parseSize(size) {
7
+ if (typeof size === 'number') {
8
+ return size;
9
+ }
10
+ const match = size.match(/^(\d+)([kmg]?)$/i);
11
+ if (!match) {
12
+ throw new Error(`Invalid size: ${size}`);
13
+ }
14
+ const [, num, unit] = match;
15
+ let sizeNum = parseInt(num, 10);
16
+ switch (unit.toLowerCase()) {
17
+ case 'k':
18
+ sizeNum *= 1024;
19
+ break;
20
+ case 'm':
21
+ sizeNum *= 1024 * 1024;
22
+ break;
23
+ case 'g':
24
+ sizeNum *= 1024 * 1024 * 1024;
25
+ break;
26
+ default:
27
+ break;
28
+ }
29
+ return sizeNum;
30
+ }
31
+ exports.parseSize = parseSize;
32
+ function validateSize(max) {
33
+ const maxNum = parseSize(max);
34
+ const validator = 'size';
35
+ return val => {
36
+ if (val === null || val === undefined) {
37
+ return { ok: true };
38
+ }
39
+ const sizeNum = typeof val === 'number' ? val : parseSize(val);
40
+ if (sizeNum < 1) {
41
+ return { ok: false, validator, message: `size must greater than 1` };
42
+ }
43
+ if (sizeNum > maxNum) {
44
+ return { ok: false, validator, message: `size must less than ${max}` };
45
+ }
46
+ return { ok: true };
47
+ };
48
+ }
49
+ /**
50
+ * 获取缓存的配置信息
51
+ * @returns
52
+ */
53
+ function getConfig() {
54
+ return (0, config_1.generateConfig)({
55
+ enable: false,
56
+ maxAge: 600,
57
+ maxSize: '100m',
58
+ maxFileSize: '10m'
59
+ }, 'SERVER_STATIC_CACHE', {
60
+ enable: [(0, validation_1.notNull)()],
61
+ maxAge: [(0, validation_1.notNull)(), (0, validation_1.min)(1), (0, validation_1.max)(31536000)],
62
+ maxSize: [(0, validation_1.notNull)(), validateSize('1024g')],
63
+ maxFileSize: [(0, validation_1.notNull)(), validateSize('1g')]
64
+ });
65
+ }
66
+ exports.getConfig = getConfig;