@lsby/net-core 0.11.2 → 0.13.3

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 (248) hide show
  1. package/dist/bin/gen-api-list/bin.cjs +14 -2
  2. package/dist/bin/gen-api-list/index.cjs +14 -2
  3. package/dist/bin/gen-api-type/bin.cjs +60 -43
  4. package/dist/bin/gen-api-type/index.cjs +60 -43
  5. package/dist/bin/gen-test/bin.cjs +16 -4
  6. package/dist/bin/gen-test/index.cjs +16 -4
  7. package/dist/cjs/bin/gen-api-list/bin.cjs +14 -2
  8. package/dist/cjs/bin/gen-api-list/index.cjs +14 -2
  9. package/dist/cjs/bin/gen-api-type/bin.cjs +60 -43
  10. package/dist/cjs/bin/gen-api-type/index.cjs +60 -43
  11. package/dist/cjs/bin/gen-test/bin.cjs +16 -4
  12. package/dist/cjs/bin/gen-test/index.cjs +16 -4
  13. package/dist/cjs/global/log.cjs +31 -0
  14. package/dist/cjs/global/log.d.cts +5 -0
  15. package/dist/cjs/global/model/hub.cjs +84 -0
  16. package/dist/cjs/global/model/hub.d.cts +26 -0
  17. package/dist/cjs/global/model/web-socket.cjs +166 -0
  18. package/dist/cjs/global/model/web-socket.d.cts +21 -0
  19. package/dist/cjs/global/web-socket.cjs +169 -0
  20. package/dist/cjs/global/web-socket.d.cts +7 -0
  21. package/dist/cjs/help/help.cjs +151 -2
  22. package/dist/cjs/help/help.d.cts +12 -5
  23. package/dist/cjs/help/interior.cjs +12 -1
  24. package/dist/cjs/help/interior.d.cts +6 -3
  25. package/dist/cjs/index.cjs +672 -454
  26. package/dist/cjs/index.d.cts +27 -18
  27. package/dist/cjs/interface/interface-base.cjs +15 -17
  28. package/dist/cjs/interface/interface-base.d.cts +43 -5
  29. package/dist/cjs/interface/interface-logic.cjs +148 -12
  30. package/dist/cjs/interface/interface-logic.d.cts +131 -7
  31. package/dist/cjs/interface/interface-plugin.cjs +45 -0
  32. package/dist/cjs/interface/interface-plugin.d.cts +37 -0
  33. package/dist/cjs/{plugin/plug.cjs → interface/interface-returner.cjs} +7 -17
  34. package/dist/cjs/interface/interface-returner.d.cts +32 -0
  35. package/dist/cjs/interface/interface-test.cjs +41 -9
  36. package/dist/cjs/interface/interface-test.d.cts +29 -6
  37. package/dist/cjs/plugin/{extend/custom-data.cjs → custom-data.cjs} +18 -11
  38. package/dist/cjs/plugin/custom-data.d.cts +16 -0
  39. package/dist/cjs/plugin/custom.cjs +54 -0
  40. package/dist/cjs/plugin/custom.d.cts +18 -0
  41. package/dist/cjs/plugin/form.cjs +109 -0
  42. package/dist/cjs/plugin/form.d.cts +37 -0
  43. package/dist/cjs/plugin/{extend/json.cjs → json.cjs} +24 -20
  44. package/dist/cjs/plugin/json.d.cts +36 -0
  45. package/dist/cjs/plugin/{extend/log-headers.cjs → log-headers.cjs} +18 -12
  46. package/dist/cjs/plugin/log-headers.d.cts +17 -0
  47. package/dist/cjs/plugin/parse-path.cjs +100 -0
  48. package/dist/cjs/plugin/parse-path.d.cts +73 -0
  49. package/dist/cjs/plugin/{extend/query.cjs → query.cjs} +24 -20
  50. package/dist/cjs/plugin/query.d.cts +36 -0
  51. package/dist/cjs/plugin/urlencoded.cjs +103 -0
  52. package/dist/cjs/plugin/urlencoded.d.cts +36 -0
  53. package/dist/cjs/plugin/web-socket.cjs +183 -0
  54. package/dist/cjs/plugin/web-socket.d.cts +31 -0
  55. package/dist/cjs/returner/common.cjs +107 -0
  56. package/dist/cjs/returner/common.d.cts +36 -0
  57. package/dist/cjs/returner/custom.cjs +55 -0
  58. package/dist/cjs/returner/custom.d.cts +26 -0
  59. package/dist/cjs/returner/file-stream-download.cjs +111 -0
  60. package/dist/cjs/returner/file-stream-download.d.cts +33 -0
  61. package/dist/cjs/returner/static-file.cjs +95 -0
  62. package/dist/cjs/returner/static-file.d.cts +30 -0
  63. package/dist/cjs/returner/virtual-file.cjs +66 -0
  64. package/dist/cjs/returner/virtual-file.d.cts +30 -0
  65. package/dist/cjs/server/server.cjs +187 -139
  66. package/dist/cjs/server/server.d.cts +37 -4
  67. package/dist/cjs/symbol/export-type.cjs +1 -1
  68. package/dist/cjs/types/types.cjs +18 -0
  69. package/dist/cjs/types/types.d.cts +22 -0
  70. package/dist/esm/bin/gen-api-list/bin.js +2 -1
  71. package/dist/esm/bin/gen-api-list/index.js +2 -1
  72. package/dist/esm/bin/gen-api-type/bin.js +1 -1
  73. package/dist/esm/bin/gen-api-type/index.js +1 -1
  74. package/dist/esm/bin/gen-test/bin.js +2 -1
  75. package/dist/esm/bin/gen-test/index.js +2 -1
  76. package/dist/esm/{chunk-ZIVQ3WZA.js → chunk-2CGBESLT.js} +12 -2
  77. package/dist/esm/{chunk-B5DKJ5AV.js → chunk-6OPO4OWK.js} +60 -43
  78. package/dist/esm/{chunk-C5FED6EO.js → chunk-7GT72IUT.js} +34 -16
  79. package/dist/esm/chunk-7OU27OBO.js +14 -0
  80. package/dist/esm/chunk-7S6SPW32.js +35 -0
  81. package/dist/esm/{chunk-NRUNCIP7.js → chunk-AB35ZHL3.js} +48 -59
  82. package/dist/esm/chunk-AG36MLAF.js +65 -0
  83. package/dist/esm/chunk-EGIJQJFI.js +21 -0
  84. package/dist/esm/chunk-F5IAX56T.js +7 -0
  85. package/dist/esm/chunk-FP6Q65NN.js +7 -0
  86. package/dist/esm/chunk-GGNRLQAM.js +48 -0
  87. package/dist/esm/chunk-HINGVOU6.js +21 -0
  88. package/dist/esm/{chunk-ZF7EC2OM.js → chunk-HT7VG4BT.js} +1 -1
  89. package/dist/esm/{chunk-AFWSZAXR.js → chunk-HWIV3BTW.js} +7 -4
  90. package/dist/esm/chunk-J5BX4WJJ.js +69 -0
  91. package/dist/esm/chunk-JLNRCPJD.js +34 -0
  92. package/dist/esm/chunk-JSMTJQ3K.js +69 -0
  93. package/dist/esm/chunk-MRTIZDKN.js +88 -0
  94. package/dist/esm/{chunk-7LQRWJ3X.js → chunk-MVMDWJTB.js} +14 -1
  95. package/dist/esm/chunk-NTDDPUP7.js +59 -0
  96. package/dist/esm/chunk-OEABQXPT.js +29 -0
  97. package/dist/esm/chunk-P23ZAK4I.js +10 -0
  98. package/dist/esm/chunk-PAP3X3RJ.js +37 -0
  99. package/dist/esm/chunk-QQFE27NG.js +37 -0
  100. package/dist/esm/chunk-RVEKW2PT.js +31 -0
  101. package/dist/esm/chunk-RWSXMQQI.js +22 -0
  102. package/dist/esm/{chunk-E23EZWBE.js → chunk-TE6CG2FF.js} +9 -13
  103. package/dist/esm/{chunk-UKAZDGUR.js → chunk-W7HT4TA6.js} +5 -2
  104. package/dist/esm/chunk-WXTNTK3M.js +40 -0
  105. package/dist/esm/global/log.d.ts +5 -0
  106. package/dist/esm/global/log.js +6 -0
  107. package/dist/esm/global/model/hub.d.ts +26 -0
  108. package/dist/esm/global/model/hub.js +8 -0
  109. package/dist/esm/global/model/web-socket.d.ts +21 -0
  110. package/dist/esm/global/model/web-socket.js +8 -0
  111. package/dist/esm/global/web-socket.d.ts +7 -0
  112. package/dist/esm/global/web-socket.js +9 -0
  113. package/dist/esm/help/help.d.ts +12 -5
  114. package/dist/esm/help/help.js +9 -3
  115. package/dist/esm/help/interior.d.ts +6 -3
  116. package/dist/esm/help/interior.js +3 -1
  117. package/dist/esm/index.d.ts +27 -18
  118. package/dist/esm/index.js +63 -59
  119. package/dist/esm/interface/interface-base.d.ts +43 -5
  120. package/dist/esm/interface/interface-base.js +1 -1
  121. package/dist/esm/interface/interface-logic.d.ts +131 -7
  122. package/dist/esm/interface/interface-logic.js +6 -2
  123. package/dist/esm/interface/interface-plugin.d.ts +37 -0
  124. package/dist/esm/{plugin/plug.js → interface/interface-plugin.js} +1 -1
  125. package/dist/esm/interface/interface-returner.d.ts +32 -0
  126. package/dist/esm/interface/interface-returner.js +6 -0
  127. package/dist/esm/interface/interface-test.d.ts +29 -6
  128. package/dist/esm/interface/interface-test.js +5 -3
  129. package/dist/esm/plugin/custom-data.d.ts +16 -0
  130. package/dist/esm/plugin/{extend/custom-data.js → custom-data.js} +2 -2
  131. package/dist/esm/plugin/custom.d.ts +18 -0
  132. package/dist/esm/plugin/custom.js +7 -0
  133. package/dist/esm/plugin/form.d.ts +37 -0
  134. package/dist/esm/plugin/form.js +42 -0
  135. package/dist/esm/plugin/json.d.ts +36 -0
  136. package/dist/esm/plugin/json.js +8 -0
  137. package/dist/esm/plugin/log-headers.d.ts +17 -0
  138. package/dist/esm/plugin/{extend/log-headers.js → log-headers.js} +2 -2
  139. package/dist/esm/plugin/parse-path.d.ts +73 -0
  140. package/dist/esm/plugin/parse-path.js +8 -0
  141. package/dist/esm/plugin/query.d.ts +36 -0
  142. package/dist/esm/plugin/query.js +8 -0
  143. package/dist/esm/plugin/urlencoded.d.ts +36 -0
  144. package/dist/esm/plugin/urlencoded.js +8 -0
  145. package/dist/esm/plugin/web-socket.d.ts +31 -0
  146. package/dist/esm/plugin/web-socket.js +8 -0
  147. package/dist/esm/returner/common.d.ts +36 -0
  148. package/dist/esm/returner/common.js +8 -0
  149. package/dist/esm/returner/custom.d.ts +26 -0
  150. package/dist/esm/returner/custom.js +7 -0
  151. package/dist/esm/returner/file-stream-download.d.ts +33 -0
  152. package/dist/esm/returner/file-stream-download.js +8 -0
  153. package/dist/esm/returner/static-file.d.ts +30 -0
  154. package/dist/esm/returner/static-file.js +7 -0
  155. package/dist/esm/returner/virtual-file.d.ts +30 -0
  156. package/dist/esm/returner/virtual-file.js +7 -0
  157. package/dist/esm/server/server.d.ts +37 -4
  158. package/dist/esm/server/server.js +5 -3
  159. package/dist/esm/symbol/export-type.js +1 -1
  160. package/dist/esm/types/types.d.ts +22 -0
  161. package/dist/esm/types/types.js +1 -0
  162. package/package.json +35 -40
  163. package/dist/bin/gen-api-list/test.cjs +0 -1
  164. package/dist/bin/gen-api-list/test.d.cts +0 -2
  165. package/dist/bin/gen-api-type/test.cjs +0 -1
  166. package/dist/bin/gen-api-type/test.d.cts +0 -2
  167. package/dist/cjs/action/action.bak.cjs +0 -158
  168. package/dist/cjs/action/action.bak.d.cts +0 -99
  169. package/dist/cjs/bin/gen-api-list/test.cjs +0 -1
  170. package/dist/cjs/bin/gen-api-list/test.d.cts +0 -2
  171. package/dist/cjs/bin/gen-api-type/test.cjs +0 -1
  172. package/dist/cjs/bin/gen-api-type/test.d.cts +0 -2
  173. package/dist/cjs/global/global.cjs +0 -91
  174. package/dist/cjs/global/global.d.cts +0 -21
  175. package/dist/cjs/interface/interface-result.cjs +0 -65
  176. package/dist/cjs/interface/interface-result.d.cts +0 -8
  177. package/dist/cjs/interface/interface-retuen.cjs +0 -49
  178. package/dist/cjs/interface/interface-retuen.d.cts +0 -30
  179. package/dist/cjs/interface-base-gRngpxki.d.cts +0 -235
  180. package/dist/cjs/plugin/extend/custom-data.d.cts +0 -17
  181. package/dist/cjs/plugin/extend/json.d.cts +0 -25
  182. package/dist/cjs/plugin/extend/log-headers.d.cts +0 -15
  183. package/dist/cjs/plugin/extend/query.d.cts +0 -25
  184. package/dist/cjs/plugin/extend/urlencoded.cjs +0 -76
  185. package/dist/cjs/plugin/extend/urlencoded.d.cts +0 -16
  186. package/dist/cjs/plugin/extend/web-socket.cjs +0 -168
  187. package/dist/cjs/plugin/extend/web-socket.d.cts +0 -27
  188. package/dist/cjs/plugin/plug.d.cts +0 -8
  189. package/dist/cjs/wrapper/common-wrapper-return.cjs +0 -106
  190. package/dist/cjs/wrapper/common-wrapper-return.d.cts +0 -29
  191. package/dist/cjs/wrapper/common-wrapper.cjs +0 -102
  192. package/dist/cjs/wrapper/common-wrapper.d.cts +0 -27
  193. package/dist/cjs/wrapper/deferred-result-wrapper.cjs +0 -102
  194. package/dist/cjs/wrapper/deferred-result-wrapper.d.cts +0 -26
  195. package/dist/cjs/wrapper/express-compatible-wrapper.cjs +0 -228
  196. package/dist/cjs/wrapper/express-compatible-wrapper.d.cts +0 -55
  197. package/dist/cjs/wrapper/file-download-wrapper.cjs +0 -134
  198. package/dist/cjs/wrapper/file-download-wrapper.d.cts +0 -80
  199. package/dist/esm/action/action.bak.d.ts +0 -99
  200. package/dist/esm/action/action.bak.js +0 -133
  201. package/dist/esm/bin/gen-api-list/test.d.ts +0 -2
  202. package/dist/esm/bin/gen-api-type/test.d.ts +0 -2
  203. package/dist/esm/bin/gen-api-type/test.js +0 -0
  204. package/dist/esm/chunk-3XRAG6DM.js +0 -30
  205. package/dist/esm/chunk-43GZE5YL.js +0 -17
  206. package/dist/esm/chunk-7MHKNSNT.js +0 -20
  207. package/dist/esm/chunk-DNJQGD5M.js +0 -39
  208. package/dist/esm/chunk-H7LZCHCE.js +0 -24
  209. package/dist/esm/chunk-HDPEZW7H.js +0 -24
  210. package/dist/esm/chunk-MDUWXEQ7.js +0 -37
  211. package/dist/esm/chunk-N7TPWCQ5.js +0 -17
  212. package/dist/esm/chunk-NB2QNDI2.js +0 -24
  213. package/dist/esm/chunk-NCYHKHIH.js +0 -54
  214. package/dist/esm/chunk-NJKBRPN7.js +0 -66
  215. package/dist/esm/chunk-TSDOOGHG.js +0 -37
  216. package/dist/esm/chunk-UUXGAK5S.js +0 -31
  217. package/dist/esm/chunk-VMCAX3QH.js +0 -18
  218. package/dist/esm/chunk-XBAKTT6S.js +0 -23
  219. package/dist/esm/chunk-XSYZ5A6R.js +0 -61
  220. package/dist/esm/global/global.d.ts +0 -21
  221. package/dist/esm/global/global.js +0 -8
  222. package/dist/esm/interface/interface-result.d.ts +0 -8
  223. package/dist/esm/interface/interface-result.js +0 -10
  224. package/dist/esm/interface/interface-retuen.d.ts +0 -30
  225. package/dist/esm/interface/interface-retuen.js +0 -10
  226. package/dist/esm/interface-base-DDfmN_Dg.d.ts +0 -235
  227. package/dist/esm/plugin/extend/custom-data.d.ts +0 -17
  228. package/dist/esm/plugin/extend/json.d.ts +0 -25
  229. package/dist/esm/plugin/extend/json.js +0 -8
  230. package/dist/esm/plugin/extend/log-headers.d.ts +0 -15
  231. package/dist/esm/plugin/extend/query.d.ts +0 -25
  232. package/dist/esm/plugin/extend/query.js +0 -8
  233. package/dist/esm/plugin/extend/urlencoded.d.ts +0 -16
  234. package/dist/esm/plugin/extend/urlencoded.js +0 -7
  235. package/dist/esm/plugin/extend/web-socket.d.ts +0 -27
  236. package/dist/esm/plugin/extend/web-socket.js +0 -8
  237. package/dist/esm/plugin/plug.d.ts +0 -8
  238. package/dist/esm/wrapper/common-wrapper-return.d.ts +0 -29
  239. package/dist/esm/wrapper/common-wrapper-return.js +0 -9
  240. package/dist/esm/wrapper/common-wrapper.d.ts +0 -27
  241. package/dist/esm/wrapper/common-wrapper.js +0 -9
  242. package/dist/esm/wrapper/deferred-result-wrapper.d.ts +0 -26
  243. package/dist/esm/wrapper/deferred-result-wrapper.js +0 -9
  244. package/dist/esm/wrapper/express-compatible-wrapper.d.ts +0 -55
  245. package/dist/esm/wrapper/express-compatible-wrapper.js +0 -11
  246. package/dist/esm/wrapper/file-download-wrapper.d.ts +0 -80
  247. package/dist/esm/wrapper/file-download-wrapper.js +0 -9
  248. /package/dist/esm/{bin/gen-api-list/test.js → chunk-BWFSM5FK.js} +0 -0
@@ -1,24 +1,33 @@
1
- export { 严格递归合并对象, 普通对象深合并, 构造元组, 构造对象 } from './help/help.cjs';
2
- export { 任 as 任意接口, x as 任意接口结果转换器, n as 任意接口逻辑, y as 任意插件, 兼 as 兼容空对象, A as 取插件内部ts类型, 取 as 取插件内部类型, 可 as 可调用接口逻辑, 合 as 合并插件结果, 常 as 常用形式转换器, b as 接口, a as 接口方法类型, w as 接口结果转换器, 接 as 接口路径类型, m as 接口逻辑, l as 接口逻辑Base, j as 接口逻辑正确类型, i as 接口逻辑错误类型, k as 接口逻辑附加参数类型, 插 as 插件, z as 插件项类型, 日 as 日志回调类型, 服 as 服务器, 清 as 清理函数类型, 直 as 直接形式转换器, 空 as 空对象, c as 获得接口方法类型, f as 获得接口正确形式, g as 获得接口结果转换器类型, h as 获得接口结果返回器类型, 获 as 获得接口路径类型, s as 获得接口逻辑上游接口类型, o as 获得接口逻辑插件类型, t as 获得接口逻辑最后接口类型, r as 获得接口逻辑正确类型, d as 获得接口逻辑类型, q as 获得接口逻辑错误类型, p as 获得接口逻辑附加参数类型, e as 获得接口错误形式, 计 as 计算接口逻辑参数, v as 计算接口逻辑正确结果, u as 计算接口逻辑错误结果, 请 as 请求附加参数类型 } from './interface-base-gRngpxki.cjs';
3
- export { 任意接口结果返回器, 常用返回器, 接口结果返回器, 自定义返回器 } from './interface/interface-retuen.cjs';
4
- export { 接口测试 } from './interface/interface-test.cjs';
5
- export { 自定义数据插件 } from './plugin/extend/custom-data.cjs';
6
- export { JSON解析插件, 任意JSON解析插件, 任意JSON解析插件项, 合并JSON插件结果, 计算接口逻辑JSON参数 } from './plugin/extend/json.cjs';
7
- export { 调试请求头插件 } from './plugin/extend/log-headers.cjs';
8
- export { GET参数解析插件, 任意GET参数解析插件, 任意GET参数解析插件项, 合并GET插件结果, 计算接口逻辑GET参数 } from './plugin/extend/query.cjs';
9
- export { 表单解析插件 } from './plugin/extend/urlencoded.cjs';
10
- export { WebSocket插件, 任意WS插件, 任意WS插件项, 取WS插件泛型, 取第一个WS插件结果 } from './plugin/extend/web-socket.cjs';
1
+ export { 严格递归合并对象, 普通对象深合并, 构造元组, 构造对象, 默认请求附加参数 } from './help/help.cjs';
2
+ export { 任意接口, 接口, 接口方法类型, 接口路径类型, 获得接口方法类型, 获得接口路径类型, 获得接口返回器类型, 获得接口逻辑类型 } from './interface/interface-base.cjs';
3
+ export { 任意接口逻辑, 接口逻辑, 接口逻辑Base, 接口逻辑正确类型, 接口逻辑错误类型, 接口逻辑附加参数类型, 清理函数类型, 获得接口逻辑上游接口类型, 获得接口逻辑插件类型, 获得接口逻辑最后接口类型, 获得接口逻辑正确类型, 获得接口逻辑错误类型, 获得接口逻辑附加参数类型, 计算接口逻辑参数, 计算接口逻辑正确结果, 计算接口逻辑错误结果 } from './interface/interface-logic.cjs';
4
+ export { 任意插件, 取插件正确ts类型, 取插件错误ts类型, 合并插件正确结果, 插件 } from './interface/interface-plugin.cjs';
5
+ export { 任意接口返回器, 接口返回器, 获得接口返回器实现正确类型, 获得接口返回器实现错误类型, 获得接口返回器接口正确类型, 获得接口返回器接口错误类型 } from './interface/interface-returner.cjs';
6
+ export { 任意接口测试, 接口测试, 接口逻辑测试 } from './interface/interface-test.cjs';
7
+ export { 自定义插件 } from './plugin/custom.cjs';
8
+ export { 自定义数据插件 } from './plugin/custom-data.cjs';
9
+ export { JSON参数解析插件, 任意JSON参数解析插件, 任意JSON参数解析插件项, 合并JSON插件结果, 计算接口逻辑JSON参数 } from './plugin/json.cjs';
10
+ export { 调试请求头插件 } from './plugin/log-headers.cjs';
11
+ export { 路径解析插件 } from './plugin/parse-path.cjs';
12
+ export { Query参数解析插件, 任意Query参数解析插件, 任意Query参数解析插件项, 合并Query插件结果, 计算接口逻辑Query参数 } from './plugin/query.cjs';
13
+ export { UrlEncoded参数解析插件, 任意UrlEncoded参数解析插件, 任意UrlEncoded参数解析插件项, 合并UrlEncoded参数解析插件结果, 计算接口逻辑UrlEncoded参数 } from './plugin/urlencoded.cjs';
14
+ export { WebSocket插件, 任意WS插件, 任意WS插件项, 取WS插件泛型, 取第一个WS插件输入, 取第一个WS插件输出 } from './plugin/web-socket.cjs';
15
+ export { 常用接口返回器 } from './returner/common.cjs';
16
+ export { 自定义接口返回器 } from './returner/custom.cjs';
17
+ export { 文件流式下载返回器 } from './returner/file-stream-download.cjs';
18
+ export { 静态文件返回器 } from './returner/static-file.cjs';
19
+ export { 虚拟文件返回器 } from './returner/virtual-file.cjs';
20
+ export { 日志回调类型, 服务器 } from './server/server.cjs';
11
21
  export { EXPORT_TYPE } from './symbol/export-type.cjs';
12
22
  export { GetNetCoreExportTypeDefine, GetNetCoreExportTypeName, NetCoreExportType } from './types/export-type.cjs';
13
- export { 常用形式接口封装 } from './wrapper/common-wrapper.cjs';
14
- export { 常用形式并自定义返回器接口封装 } from './wrapper/common-wrapper-return.cjs';
15
- export { 常用直接形式接口封装 } from './wrapper/deferred-result-wrapper.cjs';
16
- export { Express兼容接口封装 } from './wrapper/express-compatible-wrapper.cjs';
17
- export { 文件下载接口封装, 文件数据类型 } from './wrapper/file-download-wrapper.cjs';
18
- import 'zod';
23
+ export { 兼容空对象, 可序列化类型, 基本类型, 空对象, 请求附加参数类型, 递归基本类型, 非空基本类型 } from './types/types.cjs';
19
24
  import '@lsby/ts-fp-data';
20
25
  import 'express';
21
26
  import './help/interior.cjs';
22
- import '@lsby/ts-log';
27
+ import 'zod';
28
+ import './global/model/hub.cjs';
29
+ import 'node:stream';
23
30
  import 'node:http';
24
- import 'node:fs';
31
+ import '@lsby/ts-log';
32
+ import './global/model/web-socket.cjs';
33
+ import 'ws';
@@ -24,35 +24,33 @@ __export(interface_base_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(interface_base_exports);
26
26
  var \u63A5\u53E3 = class {
27
- constructor(\u8BF7\u6C42\u8DEF\u5F84, \u8BF7\u6C42\u65B9\u6CD5, \u63A5\u53E3\u903B\u8F91, \u63A5\u53E3\u9519\u8BEF\u5F62\u5F0FZod, \u63A5\u53E3\u6B63\u786E\u5F62\u5F0FZod, \u7ED3\u679C\u8F6C\u6362\u5668, \u7ED3\u679C\u8FD4\u56DE\u5668) {
27
+ constructor(\u8BF7\u6C42\u8DEF\u5F84, \u8BF7\u6C42\u65B9\u6CD5, \u63A5\u53E3\u903B\u8F91, \u63A5\u53E3\u8FD4\u56DE\u5668) {
28
28
  this.\u8BF7\u6C42\u8DEF\u5F84 = \u8BF7\u6C42\u8DEF\u5F84;
29
29
  this.\u8BF7\u6C42\u65B9\u6CD5 = \u8BF7\u6C42\u65B9\u6CD5;
30
30
  this.\u63A5\u53E3\u903B\u8F91 = \u63A5\u53E3\u903B\u8F91;
31
- this.\u63A5\u53E3\u9519\u8BEF\u5F62\u5F0FZod = \u63A5\u53E3\u9519\u8BEF\u5F62\u5F0FZod;
32
- this.\u63A5\u53E3\u6B63\u786E\u5F62\u5F0FZod = \u63A5\u53E3\u6B63\u786E\u5F62\u5F0FZod;
33
- this.\u7ED3\u679C\u8F6C\u6362\u5668 = \u7ED3\u679C\u8F6C\u6362\u5668;
34
- this.\u7ED3\u679C\u8FD4\u56DE\u5668 = \u7ED3\u679C\u8FD4\u56DE\u5668;
31
+ this.\u63A5\u53E3\u8FD4\u56DE\u5668 = \u63A5\u53E3\u8FD4\u56DE\u5668;
35
32
  }
36
33
  \u83B7\u5F97\u8DEF\u5F84() {
37
34
  return this.\u8BF7\u6C42\u8DEF\u5F84;
38
35
  }
36
+ \u5339\u914D\u8DEF\u5F84(\u8DEF\u5F84) {
37
+ let \u89C4\u5219 = this.\u8BF7\u6C42\u8DEF\u5F84;
38
+ if (typeof \u89C4\u5219 === "string") {
39
+ return \u89C4\u5219 === \u8DEF\u5F84;
40
+ }
41
+ if (\u89C4\u5219 instanceof RegExp) {
42
+ return \u89C4\u5219.test(\u8DEF\u5F84);
43
+ }
44
+ return false;
45
+ }
39
46
  \u83B7\u5F97\u65B9\u6CD5() {
40
47
  return this.\u8BF7\u6C42\u65B9\u6CD5;
41
48
  }
42
- \u83B7\u5F97\u903B\u8F91() {
49
+ \u83B7\u5F97\u63A5\u53E3\u903B\u8F91() {
43
50
  return this.\u63A5\u53E3\u903B\u8F91;
44
51
  }
45
- \u83B7\u5F97\u63A5\u53E3\u9519\u8BEF\u5F62\u5F0FZod() {
46
- return this.\u63A5\u53E3\u9519\u8BEF\u5F62\u5F0FZod;
47
- }
48
- \u83B7\u5F97\u63A5\u53E3\u6B63\u786E\u5F62\u5F0FZod() {
49
- return this.\u63A5\u53E3\u6B63\u786E\u5F62\u5F0FZod;
50
- }
51
- \u83B7\u5F97\u7ED3\u679C\u8F6C\u6362\u5668() {
52
- return this.\u7ED3\u679C\u8F6C\u6362\u5668;
53
- }
54
- \u83B7\u5F97\u7ED3\u679C\u8FD4\u56DE\u5668() {
55
- return this.\u7ED3\u679C\u8FD4\u56DE\u5668;
52
+ \u83B7\u5F97\u63A5\u53E3\u8FD4\u56DE\u5668() {
53
+ return this.\u63A5\u53E3\u8FD4\u56DE\u5668;
56
54
  }
57
55
  };
58
56
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,8 +1,46 @@
1
- import 'zod';
2
- export { as 任意接口, b as 接口, a as 接口方法类型, 接 as 接口路径类型, c as 获得接口方法类型, f as 获得接口正确形式, g as 获得接口结果转换器类型, h as 获得接口结果返回器类型, 获 as 获得接口路径类型, d as 获得接口逻辑类型, e as 获得接口错误形式 } from '../interface-base-gRngpxki.cjs';
3
- import './interface-retuen.cjs';
1
+ import { 空对象 as ___ } from '../types/types.cjs';
2
+ import { 接口逻辑Base as ____Base } from './interface-logic.cjs';
3
+ import { 获得接口返回器实现错误类型 as _____________, 获得接口返回器实现正确类型 as _____________$1, 任意接口返回器 as _______ } from './interface-returner.cjs';
4
+ import '@lsby/ts-log';
5
+ import '../global/model/web-socket.cjs';
6
+ import 'ws';
7
+ import '../global/model/hub.cjs';
4
8
  import '@lsby/ts-fp-data';
5
9
  import 'express';
6
10
  import '../help/interior.cjs';
7
- import '@lsby/ts-log';
8
- import 'node:http';
11
+ import './interface-plugin.cjs';
12
+ import 'zod';
13
+
14
+ type 接口路径类型 = string | RegExp;
15
+ type 接口方法类型 = 'get' | 'post' | 'put' | 'delete' | 'patch' | 'head' | 'options';
16
+ /**
17
+ * ### 接口
18
+ *
19
+ * 一个HTTP接口, 它由以下部分组成:
20
+ * - 请求路径: 例如 /api/xxx 或正则表达式 /^\/api\/.+/
21
+ * - 请求方法: get 或 post
22
+ * - 接口逻辑: 接口的实际逻辑行为, 见 {@link 接口逻辑}
23
+ * - 接口返回器: 决定如何将接口逻辑的返回值返回给客户端的逻辑, 见 {@link 接口返回器}
24
+ *
25
+ * 推荐将接口作为文件的默认导出, 这样可以让类型工具对齐进行静态分析, 生成索引和类型
26
+ */
27
+ declare class 接口<路径类型 extends 接口路径类型, 方法类型 extends 接口方法类型, 接口逻辑类型 extends ____Base<any, ___, _____________<接口返回器类型>, _____________$1<接口返回器类型>, any, any>, 接口返回器类型 extends _______> {
28
+ private 请求路径;
29
+ private 请求方法;
30
+ private 接口逻辑;
31
+ private 接口返回器;
32
+ protected readonly __类型保持符号?: [路径类型, 方法类型, 接口逻辑类型, 接口返回器类型];
33
+ constructor(请求路径: 路径类型, 请求方法: 方法类型, 接口逻辑: 接口逻辑类型, 接口返回器: 接口返回器类型);
34
+ 获得路径(): 路径类型;
35
+ 匹配路径(路径: string): boolean;
36
+ 获得方法(): 方法类型;
37
+ 获得接口逻辑(): 接口逻辑类型;
38
+ 获得接口返回器(): 接口返回器类型;
39
+ }
40
+ type 任意接口 = 接口<any, any, any, any>;
41
+ type 获得接口路径类型<A> = A extends 接口<infer X, any, any, any> ? X : never;
42
+ type 获得接口方法类型<A> = A extends 接口<any, infer X, any, any> ? X : never;
43
+ type 获得接口逻辑类型<A> = A extends 接口<any, any, infer X, any> ? X : never;
44
+ type 获得接口返回器类型<A> = A extends 接口<any, any, any, infer X> ? X : never;
45
+
46
+ export { type 任意接口, 接口, type 接口方法类型, type 接口路径类型, type 获得接口方法类型, type 获得接口路径类型, type 获得接口返回器类型, type 获得接口逻辑类型 };
@@ -26,6 +26,146 @@ __export(interface_logic_exports, {
26
26
  module.exports = __toCommonJS(interface_logic_exports);
27
27
  var import_ts_fp_data = require("@lsby/ts-fp-data");
28
28
 
29
+ // src/global/log.ts
30
+ var import_ts_log = require("@lsby/ts-log");
31
+ var \u5168\u5C40\u65E5\u5FD7\u5355\u4F8B = new import_ts_log.Log("@lsby:net-core");
32
+
33
+ // src/global/model/hub.ts
34
+ var \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005 = class {
35
+ constructor(\u76D1\u542C\u5668) {
36
+ this.\u76D1\u542C\u5668 = \u76D1\u542C\u5668;
37
+ }
38
+ };
39
+ var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
40
+ // 使用 WeakRef + FinalizationRegistry 防止"反向持有" this
41
+ static \u6E05\u7406\u6CE8\u518C\u5668 = new FinalizationRegistry(({ \u5B9E\u4F8B\u5F15\u7528, \u76D1\u542C\u5668 }) => {
42
+ let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F15\u7528.deref();
43
+ if (\u5B9E\u4F8B === void 0) return;
44
+ let \u7D22\u5F15 = \u5B9E\u4F8B.\u76D1\u542C\u5668\u5217\u8868.indexOf(\u76D1\u542C\u5668);
45
+ if (\u7D22\u5F15 !== -1) \u5B9E\u4F8B.\u76D1\u542C\u5668\u5217\u8868.splice(\u7D22\u5F15, 1);
46
+ });
47
+ \u76D1\u542C\u5668\u5217\u8868 = [];
48
+ \u6301\u6709\u8005\u6620\u5C04 = /* @__PURE__ */ new WeakMap();
49
+ \u9519\u8BEF\u5904\u7406\u5668 = null;
50
+ /**
51
+ * 设置广播错误时的处理器。
52
+ */
53
+ \u8BBE\u7F6E\u9519\u8BEF\u5904\u7406\u5668(\u5904\u7406\u5668) {
54
+ this.\u9519\u8BEF\u5904\u7406\u5668 = \u5904\u7406\u5668;
55
+ }
56
+ /**
57
+ * 注册监听器。
58
+ * 若外部不再持有返回的 `监听器持有者`,监听器会在未来某个时间自动移除。
59
+ * ⚠️ 自动清理是非确定性的,不能依赖它实现实时释放。
60
+ */
61
+ \u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668) {
62
+ this.\u76D1\u542C\u5668\u5217\u8868.push(\u76D1\u542C\u5668);
63
+ let \u6301\u6709\u8005 = new \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005(\u76D1\u542C\u5668);
64
+ this.\u6301\u6709\u8005\u6620\u5C04.set(\u6301\u6709\u8005, \u76D1\u542C\u5668);
65
+ let \u5B9E\u4F8B\u5F31\u5F15\u7528 = new WeakRef(this);
66
+ _\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.register(\u6301\u6709\u8005, { \u5B9E\u4F8B\u5F15\u7528: \u5B9E\u4F8B\u5F31\u5F15\u7528, \u76D1\u542C\u5668 }, \u6301\u6709\u8005);
67
+ return \u6301\u6709\u8005;
68
+ }
69
+ \u79FB\u9664\u76D1\u542C\u5668(\u6301\u6709\u8005) {
70
+ let \u76D1\u542C\u5668 = this.\u6301\u6709\u8005\u6620\u5C04.get(\u6301\u6709\u8005);
71
+ if (\u76D1\u542C\u5668 === void 0) return;
72
+ let \u7D22\u5F15 = this.\u76D1\u542C\u5668\u5217\u8868.indexOf(\u76D1\u542C\u5668);
73
+ if (\u7D22\u5F15 !== -1) this.\u76D1\u542C\u5668\u5217\u8868.splice(\u7D22\u5F15, 1);
74
+ _\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.unregister(\u6301\u6709\u8005);
75
+ this.\u6301\u6709\u8005\u6620\u5C04.delete(\u6301\u6709\u8005);
76
+ }
77
+ async \u5E7F\u64AD(\u6570\u636E) {
78
+ let snapshot = [...this.\u76D1\u542C\u5668\u5217\u8868];
79
+ let \u7ED3\u679C = await Promise.allSettled(snapshot.map((l) => l(\u6570\u636E)));
80
+ for (let [\u7D22\u5F15, \u7ED3\u679C\u9879] of \u7ED3\u679C.entries()) {
81
+ if (\u7ED3\u679C\u9879.status === "rejected" && this.\u9519\u8BEF\u5904\u7406\u5668 !== null) {
82
+ await Promise.resolve(this.\u9519\u8BEF\u5904\u7406\u5668(\u6570\u636E, \u7D22\u5F15, \u7ED3\u679C\u9879.reason));
83
+ }
84
+ }
85
+ }
86
+ };
87
+
88
+ // src/global/model/web-socket.ts
89
+ var WebSocket\u7BA1\u7406\u5668 = class {
90
+ log = \u5168\u5C40\u65E5\u5FD7\u5355\u4F8B.extend("WebSocket\u7BA1\u7406\u5668");
91
+ \u8FDE\u63A5\u8868 = {};
92
+ \u6D88\u606F\u76D1\u542C\u8868 = {};
93
+ \u8FDE\u63A5\u6E05\u7406\u6A21\u578B = new \u96C6\u7EBF\u5668\u6A21\u578B();
94
+ \u8FDE\u63A5\u6301\u6709\u8005\u8868 = {};
95
+ \u6E05\u7406\u51FD\u6570\u8868 = {};
96
+ \u589E\u52A0\u8FDE\u63A5(id, ws\u53E5\u67C4) {
97
+ if (id in this.\u8FDE\u63A5\u8868) this.\u5220\u9664\u8FDE\u63A5(id);
98
+ this.\u8FDE\u63A5\u8868[id] = ws\u53E5\u67C4;
99
+ if (!(id in this.\u6D88\u606F\u76D1\u542C\u8868)) {
100
+ let \u6A21\u578B = new \u96C6\u7EBF\u5668\u6A21\u578B();
101
+ \u6A21\u578B.\u8BBE\u7F6E\u9519\u8BEF\u5904\u7406\u5668(async (\u6570\u636E, \u7D22\u5F15, \u9519\u8BEF) => {
102
+ await this.log.warn(`WebSocket \u76D1\u542C\u5668\u6267\u884C\u5931\u8D25, id: ${id}, \u7D22\u5F15: ${\u7D22\u5F15}, \u9519\u8BEF: ${\u9519\u8BEF}`);
103
+ });
104
+ this.\u6D88\u606F\u76D1\u542C\u8868[id] = \u6A21\u578B;
105
+ }
106
+ this.\u6CE8\u518Conmessage(id, ws\u53E5\u67C4);
107
+ let \u6301\u6709\u8005 = this.\u8FDE\u63A5\u6E05\u7406\u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(async () => {
108
+ if (id in this.\u8FDE\u63A5\u8868) this.\u5220\u9664\u8FDE\u63A5(id);
109
+ });
110
+ this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id] = \u6301\u6709\u8005;
111
+ return \u6301\u6709\u8005;
112
+ }
113
+ \u5220\u9664\u8FDE\u63A5(id) {
114
+ let ws = this.\u8FDE\u63A5\u8868[id];
115
+ if (ws !== null && ws !== void 0) {
116
+ ws.onmessage = null;
117
+ ws.once("error", (err) => void this.log.error(`WebSocket \u5F02\u6B65\u9519\u8BEF, id: ${id}, \u9519\u8BEF: ${err}`));
118
+ ws.once(
119
+ "close",
120
+ (code, reason) => void this.log.debug(`WebSocket \u5DF2\u5173\u95ED, id: ${id}, \u5173\u95ED\u7801: ${code}, \u539F\u56E0: ${reason}`)
121
+ );
122
+ try {
123
+ ws.close(1e3, "\u670D\u52A1\u5668\u4E3B\u52A8\u5173\u95ED");
124
+ } catch (err) {
125
+ void this.log.error(`WebSocket \u540C\u6B65\u5173\u95ED\u5931\u8D25, id: ${id}, \u9519\u8BEF: ${err}`);
126
+ }
127
+ }
128
+ let \u6E05\u7406\u51FD\u6570 = this.\u6E05\u7406\u51FD\u6570\u8868[id];
129
+ if (\u6E05\u7406\u51FD\u6570 !== void 0) void \u6E05\u7406\u51FD\u6570().catch((err) => this.log.error(`\u6E05\u7406\u8FDE\u63A5\u5931\u8D25, id: ${id}, \u9519\u8BEF: ${err}`));
130
+ delete this.\u8FDE\u63A5\u8868[id];
131
+ delete this.\u6E05\u7406\u51FD\u6570\u8868[id];
132
+ delete this.\u6D88\u606F\u76D1\u542C\u8868[id];
133
+ let \u6301\u6709\u8005 = this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id];
134
+ if (\u6301\u6709\u8005 !== void 0) {
135
+ this.\u8FDE\u63A5\u6E05\u7406\u6A21\u578B.\u79FB\u9664\u76D1\u542C\u5668(\u6301\u6709\u8005);
136
+ delete this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id];
137
+ }
138
+ }
139
+ \u6CE8\u518Conmessage(id, ws\u53E5\u67C4) {
140
+ ws\u53E5\u67C4.onmessage = async (event) => {
141
+ try {
142
+ let \u6570\u636E = JSON.parse(event.data.toString());
143
+ let \u6A21\u578B = this.\u6D88\u606F\u76D1\u542C\u8868[id];
144
+ if (\u6A21\u578B !== void 0) await \u6A21\u578B.\u5E7F\u64AD(\u6570\u636E);
145
+ } catch (err) {
146
+ await this.log.warn(`WebSocket \u6D88\u606F\u5904\u7406\u5931\u8D25, id: ${id}, \u9519\u8BEF: ${err}`);
147
+ }
148
+ };
149
+ }
150
+ \u67E5\u8BE2\u8FDE\u63A5\u5B58\u5728(id) {
151
+ return id in this.\u8FDE\u63A5\u8868;
152
+ }
153
+ async \u83B7\u5F97ws\u53E5\u67C4(id) {
154
+ return this.\u8FDE\u63A5\u8868[id] ?? null;
155
+ }
156
+ async \u8BBE\u7F6E\u6E05\u7406\u51FD\u6570(id, \u6E05\u7406\u51FD\u6570) {
157
+ if (id in this.\u8FDE\u63A5\u8868) this.\u6E05\u7406\u51FD\u6570\u8868[id] = \u6E05\u7406\u51FD\u6570;
158
+ }
159
+ \u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(id, \u56DE\u8C03\u51FD\u6570) {
160
+ let \u6A21\u578B = this.\u6D88\u606F\u76D1\u542C\u8868[id];
161
+ if (\u6A21\u578B === void 0) return null;
162
+ return \u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(\u56DE\u8C03\u51FD\u6570);
163
+ }
164
+ };
165
+
166
+ // src/global/web-socket.ts
167
+ var \u5168\u5C40WebSocket\u7BA1\u7406\u5668\u5355\u4F8B = new WebSocket\u7BA1\u7406\u5668();
168
+
29
169
  // src/help/help.ts
30
170
  function \u666E\u901A\u5BF9\u8C61\u6DF1\u5408\u5E76(target, source) {
31
171
  if (typeof source !== "object" || source === null || Object.getPrototypeOf(source) !== Object.prototype) {
@@ -57,7 +197,7 @@ var \u63A5\u53E3\u903B\u8F91Base = class _\u63A5\u53E3\u903B\u8F91Base {
57
197
  return _\u63A5\u53E3\u903B\u8F91Base.\u6784\u9020([], async () => new import_ts_fp_data.Right({}));
58
198
  }
59
199
  static \u5B8C\u6574\u6784\u9020(\u63D2\u4EF6\u4EEC, \u5B9E\u73B0, \u6E05\u7406\u51FD\u6570, \u4E0A\u6E38\u63A5\u53E3\u903B\u8F91, \u6700\u540E\u63A5\u53E3\u903B\u8F91) {
60
- let c = new class extends _\u63A5\u53E3\u903B\u8F91Base {
200
+ return new class extends _\u63A5\u53E3\u903B\u8F91Base {
61
201
  \u83B7\u5F97\u6E05\u7406\u51FD\u6570() {
62
202
  return \u6E05\u7406\u51FD\u6570;
63
203
  }
@@ -68,7 +208,6 @@ var \u63A5\u53E3\u903B\u8F91Base = class _\u63A5\u53E3\u903B\u8F91Base {
68
208
  return \u5B9E\u73B0(\u53C2\u6570, \u903B\u8F91\u9644\u52A0\u53C2\u6570, \u8BF7\u6C42\u9644\u52A0\u53C2\u6570);
69
209
  }
70
210
  }(\u4E0A\u6E38\u63A5\u53E3\u903B\u8F91, \u6700\u540E\u63A5\u53E3\u903B\u8F91);
71
- return c;
72
211
  }
73
212
  static \u6784\u9020(\u63D2\u4EF6\u4EEC, \u5B9E\u73B0, \u6E05\u7406\u51FD\u6570) {
74
213
  return this.\u5B8C\u6574\u6784\u9020(\u63D2\u4EF6\u4EEC, \u5B9E\u73B0, \u6E05\u7406\u51FD\u6570, null, null);
@@ -78,12 +217,13 @@ var \u63A5\u53E3\u903B\u8F91Base = class _\u63A5\u53E3\u903B\u8F91Base {
78
217
  let \u6240\u6709\u63D2\u4EF6\u7ED3\u679C = [];
79
218
  for (let \u63D2\u4EF6 of \u63D2\u4EF6\u4EEC) {
80
219
  let \u63D2\u4EF6\u8FD4\u56DE = await \u63D2\u4EF6.\u8FD0\u884C(req, res, \u8BF7\u6C42\u9644\u52A0\u53C2\u6570);
81
- \u6240\u6709\u63D2\u4EF6\u7ED3\u679C.push(\u63D2\u4EF6\u8FD4\u56DE);
220
+ if (\u63D2\u4EF6\u8FD4\u56DE.isLeft()) return \u63D2\u4EF6\u8FD4\u56DE;
221
+ \u6240\u6709\u63D2\u4EF6\u7ED3\u679C.push(\u63D2\u4EF6\u8FD4\u56DE.assertRight().getRight());
82
222
  }
83
223
  let \u5408\u5E76\u7ED3\u679C = \u6240\u6709\u63D2\u4EF6\u7ED3\u679C.reduce((s, a) => \u666E\u901A\u5BF9\u8C61\u6DF1\u5408\u5E76(s, a), {});
84
- return \u5408\u5E76\u7ED3\u679C;
224
+ return new import_ts_fp_data.Right(\u5408\u5E76\u7ED3\u679C);
85
225
  }
86
- async \u901A\u8FC7\u63D2\u4EF6\u7ED3\u679C\u8FD0\u884C(\u5408\u5E76\u63D2\u4EF6\u7ED3\u679C, \u4F20\u5165\u7684\u903B\u8F91\u9644\u52A0\u53C2\u6570, \u4F20\u5165\u7684\u8BF7\u6C42\u9644\u52A0\u53C2\u6570) {
226
+ async \u8C03\u7528(\u5408\u5E76\u63D2\u4EF6\u7ED3\u679C, \u4F20\u5165\u7684\u903B\u8F91\u9644\u52A0\u53C2\u6570, \u4F20\u5165\u7684\u8BF7\u6C42\u9644\u52A0\u53C2\u6570) {
87
227
  let \u6E05\u7406\u51FD\u6570 = this.\u83B7\u5F97\u6E05\u7406\u51FD\u6570?.();
88
228
  let \u6700\u7EC8\u7ED3\u679C = void 0;
89
229
  try {
@@ -92,16 +232,12 @@ var \u63A5\u53E3\u903B\u8F91Base = class _\u63A5\u53E3\u903B\u8F91Base {
92
232
  return \u6700\u7EC8\u7ED3\u679C;
93
233
  } finally {
94
234
  if (\u6E05\u7406\u51FD\u6570 !== void 0) {
95
- let \u4E0A\u5C42\u6DF7\u5408\u7ED3\u679C = \u6700\u7EC8\u7ED3\u679C !== void 0 && \u6700\u7EC8\u7ED3\u679C.isRight() === true ? \u6700\u7EC8\u7ED3\u679C.assertRight().getRight() : \u4F20\u5165\u7684\u903B\u8F91\u9644\u52A0\u53C2\u6570;
96
- await \u6E05\u7406\u51FD\u6570(\u5408\u5E76\u63D2\u4EF6\u7ED3\u679C, \u4E0A\u5C42\u6DF7\u5408\u7ED3\u679C, \u4F20\u5165\u7684\u8BF7\u6C42\u9644\u52A0\u53C2\u6570);
235
+ let \u4E0A\u5C42\u7ED1\u5B9A\u7ED3\u679C = \u6700\u7EC8\u7ED3\u679C !== void 0 && \u6700\u7EC8\u7ED3\u679C.isRight() === true ? \u6700\u7EC8\u7ED3\u679C.assertRight().getRight() : \u4F20\u5165\u7684\u903B\u8F91\u9644\u52A0\u53C2\u6570;
236
+ await \u6E05\u7406\u51FD\u6570(\u5408\u5E76\u63D2\u4EF6\u7ED3\u679C, \u4E0A\u5C42\u7ED1\u5B9A\u7ED3\u679C, \u4F20\u5165\u7684\u8BF7\u6C42\u9644\u52A0\u53C2\u6570);
97
237
  }
98
238
  }
99
239
  }
100
- async \u8FD0\u884C(req, res, \u4F20\u5165\u7684\u903B\u8F91\u9644\u52A0\u53C2\u6570, \u4F20\u5165\u7684\u63D2\u4EF6\u9644\u52A0\u53C2\u6570) {
101
- let \u5408\u5E76\u63D2\u4EF6\u7ED3\u679C = await this.\u8BA1\u7B97\u63D2\u4EF6\u7ED3\u679C(req, res, \u4F20\u5165\u7684\u63D2\u4EF6\u9644\u52A0\u53C2\u6570);
102
- return this.\u901A\u8FC7\u63D2\u4EF6\u7ED3\u679C\u8FD0\u884C(\u5408\u5E76\u63D2\u4EF6\u7ED3\u679C, \u4F20\u5165\u7684\u903B\u8F91\u9644\u52A0\u53C2\u6570, \u4F20\u5165\u7684\u63D2\u4EF6\u9644\u52A0\u53C2\u6570);
103
- }
104
- \u6DF7\u5408(\u8F93\u5165) {
240
+ \u7ED1\u5B9A(\u8F93\u5165) {
105
241
  let \u4E0A\u6E05\u7406 = this.\u83B7\u5F97\u6E05\u7406\u51FD\u6570?.();
106
242
  let \u4E0B\u6E05\u7406 = \u8F93\u5165.\u83B7\u5F97\u6E05\u7406\u51FD\u6570?.();
107
243
  let \u5408\u5E76\u6E05\u7406 = void 0;
@@ -1,8 +1,132 @@
1
- import '@lsby/ts-fp-data';
2
- import 'express';
3
- import '../help/interior.cjs';
4
- export { n as 任意接口逻辑, 兼 as 兼容空对象, 可 as 可调用接口逻辑, m as 接口逻辑, l as 接口逻辑Base, j as 接口逻辑正确类型, i as 接口逻辑错误类型, k as 接口逻辑附加参数类型, 清 as 清理函数类型, 空 as 空对象, s as 获得接口逻辑上游接口类型, o as 获得接口逻辑插件类型, t as 获得接口逻辑最后接口类型, r as 获得接口逻辑正确类型, q as 获得接口逻辑错误类型, p as 获得接口逻辑附加参数类型, 计 as 计算接口逻辑参数, v as 计算接口逻辑正确结果, u as 计算接口逻辑错误结果 } from '../interface-base-gRngpxki.cjs';
5
- import 'zod';
1
+ import { Either } from '@lsby/ts-fp-data';
2
+ import { Request, Response } from 'express';
3
+ import { 联合转元组 as _____ } from '../help/interior.cjs';
4
+ import { 空对象 as ___, 请求附加参数类型 as ________$1 } from '../types/types.cjs';
5
+ import { 任意插件 as ____, 合并插件正确结果 as ________ } from './interface-plugin.cjs';
6
6
  import '@lsby/ts-log';
7
- import 'node:http';
8
- import './interface-retuen.cjs';
7
+ import '../global/model/web-socket.cjs';
8
+ import 'ws';
9
+ import '../global/model/hub.cjs';
10
+ import 'zod';
11
+
12
+ type 清理函数类型<插件类型 extends ____[], 逻辑附加参数类型 extends 接口逻辑附加参数类型> = (参数: ________<插件类型>, 逻辑附加参数: 逻辑附加参数类型, 请求附加参数: ________$1) => Promise<void>;
13
+ type 接口逻辑错误类型 = Record<string, any> | string | never;
14
+ type 接口逻辑正确类型 = Record<string, any>;
15
+ type 接口逻辑附加参数类型 = Record<string, any>;
16
+ /**
17
+ * ### 接口逻辑
18
+ *
19
+ * 接口逻辑是接口的实际行为, 它由以下部分组成:
20
+ * - 插件: 业务逻辑的前置行为, 通过与req句柄交互, 获得接口需要的信息, 见 {@link 插件}
21
+ * - 业务逻辑: 实际的运行逻辑, 是一个函数
22
+ * - 业务逻辑的参数是:
23
+ * - 参数: 当前接口逻辑的插件提供的数据
24
+ * - 逻辑附加参数: 上游接口逻辑提供的数据和能力
25
+ * - 请求附加参数: 框架提供的信息, 例如请求id
26
+ * - 业务逻辑应当返回 Either 值, 表示执行成功还是失败
27
+ * - 业务逻辑应当尽可能是纯的, 便于单独测试和调用
28
+ *
29
+ * #### 两用性
30
+ *
31
+ * 接口逻辑可以被两种不同的方法使用:
32
+ * - 组成接口: 将其作为 {@link 接口} 的一部分.
33
+ * 此时, 插件会被执行, 插件将从HTTP上下文中获得信息, 提供给业务逻辑.
34
+ * - 内部调用: 使用 .实现 方法, 在其他代码中调用接口逻辑.
35
+ * 此时, 插件会被跳过, 不会从HTTP上下文中获取任何信息(因为根本就不存在HTTP上下文).
36
+ * 而本来由插件提供的信息将改为需要通过调用参数提供(是类型安全的).
37
+ * 这意味着大部分接口逻辑的实现是纯的, 并且可以独立被调用, 非常容易被测试
38
+ *
39
+ * #### 组合
40
+ *
41
+ * 允许将多个接口逻辑进行组合, 形成新的接口逻辑
42
+ * - 目前只提供"绑定"一种组合方式
43
+ * - 未来可能提供更多组合方法
44
+ *
45
+ * ##### 绑定
46
+ *
47
+ * 这种组合方式将接口逻辑看作一个类monad结构的Either
48
+ *
49
+ * 考虑这样的代码:
50
+ *
51
+ * ```typescript
52
+ * 接口逻辑.空逻辑()
53
+ * .绑定(A)
54
+ * .绑定(B) // B中可以调用A的返回结果
55
+ * .绑定(C) // C中可以调用A和B的返回结果
56
+ * ```
57
+ *
58
+ * 这类似于:
59
+ *
60
+ * ```haskell
61
+ * do
62
+ * a <- A
63
+ * b <- B // B中可以调用a
64
+ * c <- C // C中可以调用a和b
65
+ * pure {a, b, c}
66
+ * ```
67
+ *
68
+ * 注意: 上面的A, B, C的结果皆为Either, 如果返回左值, 后续过程将直接被跳过
69
+ *
70
+ * ## 复用性和代数效应
71
+ *
72
+ * 推荐抽象通用组件, 并构造纯代数效应链:
73
+ *
74
+ * 考虑这样的代码:
75
+ *
76
+ * ```typescript
77
+ * 接口逻辑.空逻辑()
78
+ * .绑定(用户鉴权) // 通用, 可通过参数与业务解耦, 实现跨项目复用
79
+ * .绑定(缓存) // 通用, 可通过参数与业务解耦, 实现跨项目复用
80
+ * .绑定(限流) // 通用, 可通过参数与业务解耦, 实现跨项目复用
81
+ * .绑定(业务相关逻辑) // 业务相关逻辑, 但不触发副作用, 而是返回"描述副作用的数据"
82
+ * .绑定(操作数据库) // 业务相关逻辑, 解析"描述副作用的数据", 并实际执行
83
+ * ```
84
+ *
85
+ * 这样的好处是:
86
+ * - 跨项目复用的逻辑块
87
+ * - 业务逻辑可以保持是纯的, 非常方便独立测试
88
+ */
89
+ declare abstract class 接口逻辑Base<插件类型 extends ____[], in 逻辑附加参数类型 extends 接口逻辑附加参数类型, 错误类型 extends 接口逻辑错误类型, 正确类型 extends 接口逻辑正确类型, 上游接口类型 extends 任意接口逻辑 | null = null, 最后接口类型 extends 任意接口逻辑 | null = null> {
90
+ private 上游接口;
91
+ private 最后接口;
92
+ static 空逻辑(): 接口逻辑Base<[], ___, never, {}, null, null>;
93
+ static 完整构造<插件类型 extends ____[], 逻辑附加参数类型 extends 接口逻辑附加参数类型, 错误类型 extends 接口逻辑错误类型, 返回类型 extends 接口逻辑正确类型, 上游接口类型 extends 任意接口逻辑 | null, 最后接口类型 extends 任意接口逻辑 | null>(插件们: [...插件类型], 实现: (参数: ________<插件类型>, 逻辑附加参数: 逻辑附加参数类型, 请求附加参数: ________$1) => Promise<Either<错误类型, 返回类型>>, 清理函数: 清理函数类型<插件类型, 逻辑附加参数类型> | undefined, 上游接口逻辑: 上游接口类型, 最后接口逻辑: 最后接口类型): 接口逻辑Base<插件类型, 逻辑附加参数类型, 错误类型, 返回类型, 上游接口类型, 最后接口类型>;
94
+ static 构造<插件类型 extends ____[], 逻辑附加参数类型 extends 接口逻辑附加参数类型, 错误类型 extends 接口逻辑错误类型, 返回类型 extends 接口逻辑正确类型>(插件们: [...插件类型], 实现: (参数: ________<插件类型>, 逻辑附加参数: 逻辑附加参数类型, 请求附加参数: ________$1) => Promise<Either<错误类型, 返回类型>>, 清理函数?: 清理函数类型<插件类型, 逻辑附加参数类型> | undefined): 接口逻辑Base<插件类型, 逻辑附加参数类型, 错误类型, 返回类型, null, null>;
95
+ protected readonly __类型保持符号_协变?: [插件类型, 错误类型, 正确类型];
96
+ protected readonly __类型保持符号_逆变?: (a: 逻辑附加参数类型) => void;
97
+ constructor(上游接口: 上游接口类型, 最后接口: 最后接口类型);
98
+ 计算插件结果(req: Request, res: Response, 请求附加参数: ________$1): Promise<Either<{
99
+ code: number;
100
+ data: any;
101
+ }, ________<插件类型>>>;
102
+ abstract 获得插件们(): [...插件类型];
103
+ abstract 实现(参数: ________<插件类型>, 逻辑附加参数: 逻辑附加参数类型, 请求附加参数: ________$1): Promise<Either<错误类型, 正确类型>>;
104
+ 获得清理函数?(): 清理函数类型<插件类型, 逻辑附加参数类型> | undefined;
105
+ 调用(合并插件结果: ________<插件类型>, 传入的逻辑附加参数: 逻辑附加参数类型, 传入的请求附加参数: ________$1): Promise<Either<错误类型, 正确类型>>;
106
+ 绑定<输入的插件类型 extends ____[], 输入的错误类型 extends 接口逻辑错误类型, 输入的返回类型 extends 接口逻辑正确类型, 输入的上游接口逻辑类型 extends 任意接口逻辑 | null, 输入的最后接口逻辑类型 extends 任意接口逻辑 | null>(输入: 接口逻辑Base<输入的插件类型, 正确类型, 输入的错误类型, 输入的返回类型, 输入的上游接口逻辑类型, 输入的最后接口逻辑类型>): 接口逻辑Base<[
107
+ ...插件类型,
108
+ ...输入的插件类型
109
+ ], 逻辑附加参数类型, 错误类型 | 输入的错误类型, 正确类型 & 输入的返回类型, typeof this, typeof 输入>;
110
+ 获得上游接口(): 上游接口类型;
111
+ 获得最后接口(): 最后接口类型;
112
+ }
113
+ /**
114
+ * 详情见 {@link 接口逻辑Base}
115
+ */
116
+ declare abstract class 接口逻辑<插件类型 extends ____[], 逻辑附加参数类型 extends 接口逻辑附加参数类型, 错误类型 extends 接口逻辑错误类型, 正确类型 extends 接口逻辑正确类型> extends 接口逻辑Base<插件类型, 逻辑附加参数类型, 错误类型, 正确类型, null, null> {
117
+ constructor();
118
+ }
119
+ type 任意接口逻辑 = 接口逻辑Base<any, any, any, any, any, any>;
120
+ type 获得接口逻辑插件类型<A> = A extends 接口逻辑Base<infer X, any, any, any, any, any> ? X : never;
121
+ type 获得接口逻辑附加参数类型<A> = A extends 接口逻辑Base<any, infer X, any, any, any, any> ? X : never;
122
+ type 获得接口逻辑错误类型<A> = A extends 接口逻辑Base<any, any, infer X, any, any, any> ? X : never;
123
+ type 获得接口逻辑正确类型<A> = A extends 接口逻辑Base<any, any, any, infer X, any, any> ? X : never;
124
+ type 获得接口逻辑上游接口类型<A> = A extends 接口逻辑Base<any, any, any, any, infer X, any> ? X : never;
125
+ type 获得接口逻辑最后接口类型<A> = A extends 接口逻辑Base<any, any, any, any, any, infer X> ? X : never;
126
+ type 计算接口逻辑参数<接口逻辑> = ________<获得接口逻辑插件类型<接口逻辑>>;
127
+ type 计算接口逻辑错误结果<接口逻辑> = _____<获得接口逻辑错误类型<接口逻辑>>;
128
+ type 计算接口逻辑正确结果<接口逻辑> = {
129
+ [k in keyof 获得接口逻辑正确类型<接口逻辑>]: 获得接口逻辑正确类型<接口逻辑>[k];
130
+ };
131
+
132
+ export { type 任意接口逻辑, 接口逻辑, 接口逻辑Base, type 接口逻辑正确类型, type 接口逻辑错误类型, type 接口逻辑附加参数类型, type 清理函数类型, type 获得接口逻辑上游接口类型, type 获得接口逻辑插件类型, type 获得接口逻辑最后接口类型, type 获得接口逻辑正确类型, type 获得接口逻辑错误类型, type 获得接口逻辑附加参数类型, type 计算接口逻辑参数, type 计算接口逻辑正确结果, type 计算接口逻辑错误结果 };
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/interface/interface-plugin.ts
21
+ var interface_plugin_exports = {};
22
+ __export(interface_plugin_exports, {
23
+ \u63D2\u4EF6: () => \u63D2\u4EF6
24
+ });
25
+ module.exports = __toCommonJS(interface_plugin_exports);
26
+ var \u63D2\u4EF6 = class {
27
+ constructor(\u9519\u8BEF\u7C7B\u578B\u63CF\u8FF0, \u6B63\u786E\u7C7B\u578B\u63CF\u8FF0, \u5B9E\u73B0) {
28
+ this.\u9519\u8BEF\u7C7B\u578B\u63CF\u8FF0 = \u9519\u8BEF\u7C7B\u578B\u63CF\u8FF0;
29
+ this.\u6B63\u786E\u7C7B\u578B\u63CF\u8FF0 = \u6B63\u786E\u7C7B\u578B\u63CF\u8FF0;
30
+ this.\u5B9E\u73B0 = \u5B9E\u73B0;
31
+ }
32
+ \u83B7\u5F97\u9519\u8BEF\u7C7B\u578B\u63CF\u8FF0() {
33
+ return this.\u9519\u8BEF\u7C7B\u578B\u63CF\u8FF0;
34
+ }
35
+ \u83B7\u5F97\u6B63\u786E\u7C7B\u578B\u63CF\u8FF0() {
36
+ return this.\u6B63\u786E\u7C7B\u578B\u63CF\u8FF0;
37
+ }
38
+ \u8FD0\u884C(req, res, \u9644\u52A0\u53C2\u6570) {
39
+ return this.\u5B9E\u73B0(req, res, \u9644\u52A0\u53C2\u6570);
40
+ }
41
+ };
42
+ // Annotate the CommonJS export names for ESM import in node:
43
+ 0 && (module.exports = {
44
+ \u63D2\u4EF6
45
+ });
@@ -0,0 +1,37 @@
1
+ import { Either } from '@lsby/ts-fp-data';
2
+ import { Request, Response } from 'express';
3
+ import { z } from 'zod';
4
+ import { 请求附加参数类型 as ________ } from '../types/types.cjs';
5
+ import '@lsby/ts-log';
6
+ import '../global/model/web-socket.cjs';
7
+ import 'ws';
8
+ import '../global/model/hub.cjs';
9
+
10
+ /**
11
+ * ### 插件
12
+ *
13
+ * 插件是 {@link 接口逻辑} 的一部分, 是"业务逻辑"的前置逻辑
14
+ * - 可以获得原始的req, res对象, 但res对象仅仅是为了兼容express的某些插件添加的, 不要使用res返回数据
15
+ * - 插件的定位是, 从HTTP上下文中获得信息, 使后续逻辑能正确运行
16
+ * - 插件提供的信息是必要的, 如果插件无法获取到信息, 意味着接口逻辑不能正常运行
17
+ * - 插件提供错误处理能力, 可以在插件中返回左值来拒绝请求, 此时, 服务器会直接返回错误信息, 不会进入后续逻辑
18
+ */
19
+ declare class 插件<错误结果 extends z.ZodObject<{
20
+ code: z.ZodLiteral<number>;
21
+ data: z.ZodTypeAny;
22
+ }> | z.ZodNever, 正确结果 extends z.AnyZodObject> {
23
+ private 错误类型描述;
24
+ private 正确类型描述;
25
+ private 实现;
26
+ protected readonly __类型保持符号?: [错误结果, 正确结果];
27
+ constructor(错误类型描述: 错误结果, 正确类型描述: 正确结果, 实现: (req: Request, res: Response, 附加参数: ________) => Promise<Either<z.infer<错误结果>, z.infer<正确结果>>>);
28
+ 获得错误类型描述(): 错误结果;
29
+ 获得正确类型描述(): 正确结果;
30
+ 运行(req: Request, res: Response, 附加参数: ________): Promise<Either<z.infer<错误结果>, z.infer<正确结果>>>;
31
+ }
32
+ type 任意插件 = 插件<any, any>;
33
+ type 取插件错误ts类型<A> = A extends 插件<infer x, any> ? z.infer<x> : never;
34
+ type 取插件正确ts类型<A> = A extends 插件<any, infer x> ? z.infer<x> : never;
35
+ type 合并插件正确结果<Arr extends Array<任意插件>> = Arr extends [] ? {} : Arr extends [infer x, ...infer xs] ? x extends infer 插件项 ? xs extends Array<任意插件> ? 取插件正确ts类型<插件项> & 合并插件正确结果<xs> : {} : {} : {};
36
+
37
+ export { type 任意插件, type 取插件正确ts类型, type 取插件错误ts类型, type 合并插件正确结果, 插件 };
@@ -17,25 +17,15 @@ var __copyProps = (to, from, except, desc) => {
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
 
20
- // src/plugin/plug.ts
21
- var plug_exports = {};
22
- __export(plug_exports, {
23
- \u63D2\u4EF6: () => \u63D2\u4EF6
20
+ // src/interface/interface-returner.ts
21
+ var interface_returner_exports = {};
22
+ __export(interface_returner_exports, {
23
+ \u63A5\u53E3\u8FD4\u56DE\u5668: () => \u63A5\u53E3\u8FD4\u56DE\u5668
24
24
  });
25
- module.exports = __toCommonJS(plug_exports);
26
- var \u63D2\u4EF6 = class {
27
- constructor(\u7C7B\u578B, \u5B9E\u73B0) {
28
- this.\u7C7B\u578B = \u7C7B\u578B;
29
- this.\u5B9E\u73B0 = \u5B9E\u73B0;
30
- }
31
- \u83B7\u5F97\u7C7B\u578B() {
32
- return this.\u7C7B\u578B;
33
- }
34
- \u8FD0\u884C(req, res, \u9644\u52A0\u53C2\u6570) {
35
- return this.\u5B9E\u73B0(req, res, \u9644\u52A0\u53C2\u6570);
36
- }
25
+ module.exports = __toCommonJS(interface_returner_exports);
26
+ var \u63A5\u53E3\u8FD4\u56DE\u5668 = class {
37
27
  };
38
28
  // Annotate the CommonJS export names for ESM import in node:
39
29
  0 && (module.exports = {
40
- \u63D2\u4EF6
30
+ \u63A5\u53E3\u8FD4\u56DE\u5668
41
31
  });