sa2kit 3.1.0 → 3.2.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 (712) hide show
  1. package/README.md +5 -5
  2. package/dist/AliyunOSSProvider-7IOT5U6M.js +15 -0
  3. package/dist/{AliyunOSSProvider-4GRL2FJB.js.map → AliyunOSSProvider-7IOT5U6M.js.map} +1 -1
  4. package/dist/AliyunOSSProvider-ZXZM7OQA.mjs +6 -0
  5. package/dist/{AliyunOSSProvider-QNVFIZ7Q.mjs.map → AliyunOSSProvider-ZXZM7OQA.mjs.map} +1 -1
  6. package/dist/LocalStorageProvider-KJKRCKBS.js +15 -0
  7. package/dist/{LocalStorageProvider-PFA2DMIJ.js.map → LocalStorageProvider-KJKRCKBS.js.map} +1 -1
  8. package/dist/LocalStorageProvider-O22465NY.mjs +6 -0
  9. package/dist/{LocalStorageProvider-J5RHV37G.mjs.map → LocalStorageProvider-O22465NY.mjs.map} +1 -1
  10. package/dist/{chunk-SLKOEYFH.js → chunk-2234T4A6.js} +5 -5
  11. package/dist/chunk-2234T4A6.js.map +1 -0
  12. package/dist/{chunk-HQLKOXG7.js → chunk-36KGNXKW.js} +3 -3
  13. package/dist/{chunk-HQLKOXG7.js.map → chunk-36KGNXKW.js.map} +1 -1
  14. package/dist/{chunk-BCE6RUZV.js → chunk-375C7WL7.js} +19 -19
  15. package/dist/chunk-375C7WL7.js.map +1 -0
  16. package/dist/{chunk-VMTEDX5H.js → chunk-3J24Z4MB.js} +34 -318
  17. package/dist/chunk-3J24Z4MB.js.map +1 -0
  18. package/dist/{chunk-PBI7FKMB.js → chunk-3QCATFQV.js} +3 -3
  19. package/dist/chunk-3QCATFQV.js.map +1 -0
  20. package/dist/{chunk-FXQOXLDE.js → chunk-3R6JHA6D.js} +4 -4
  21. package/dist/chunk-3R6JHA6D.js.map +1 -0
  22. package/dist/{chunk-ZRAW3HXA.js → chunk-4OXKHV7J.js} +3 -3
  23. package/dist/chunk-4OXKHV7J.js.map +1 -0
  24. package/dist/chunk-4PJM4752.js +4 -0
  25. package/dist/{chunk-5USIS3UM.js.map → chunk-4PJM4752.js.map} +1 -1
  26. package/dist/{chunk-3Z43XGA4.mjs → chunk-65JRVC3F.mjs} +4 -4
  27. package/dist/{chunk-3Z43XGA4.mjs.map → chunk-65JRVC3F.mjs.map} +1 -1
  28. package/dist/{chunk-Q5EDCKQA.js → chunk-6HL54I2B.js} +16 -16
  29. package/dist/chunk-6HL54I2B.js.map +1 -0
  30. package/dist/chunk-6V2MIQPF.mjs +77 -0
  31. package/dist/chunk-6V2MIQPF.mjs.map +1 -0
  32. package/dist/{chunk-C6KV7VTZ.mjs → chunk-7CRU2Y5X.mjs} +5 -5
  33. package/dist/chunk-7CRU2Y5X.mjs.map +1 -0
  34. package/dist/chunk-7PMT4L4I.js +324 -0
  35. package/dist/chunk-7PMT4L4I.js.map +1 -0
  36. package/dist/{chunk-XJ7ZAGC5.js → chunk-7VVZHFEM.js} +3 -3
  37. package/dist/chunk-7VVZHFEM.js.map +1 -0
  38. package/dist/chunk-AWHGIKTQ.js +56 -0
  39. package/dist/{chunk-FHLTPXAR.js.map → chunk-AWHGIKTQ.js.map} +1 -1
  40. package/dist/chunk-B3GYF6TY.js +37 -0
  41. package/dist/{chunk-2Y7BKFKZ.js.map → chunk-B3GYF6TY.js.map} +1 -1
  42. package/dist/{chunk-5FUAQLGC.mjs → chunk-BDBJFOXM.mjs} +3 -3
  43. package/dist/{chunk-5FUAQLGC.mjs.map → chunk-BDBJFOXM.mjs.map} +1 -1
  44. package/dist/{chunk-ZGVB35L2.mjs → chunk-BTW3SWQN.mjs} +3 -3
  45. package/dist/chunk-BTW3SWQN.mjs.map +1 -0
  46. package/dist/{chunk-I5ZPEDNR.mjs → chunk-CHYSSZ4E.mjs} +10 -10
  47. package/dist/chunk-CHYSSZ4E.mjs.map +1 -0
  48. package/dist/{chunk-FIUBFREP.mjs → chunk-DO6QYAZV.mjs} +5 -5
  49. package/dist/chunk-DO6QYAZV.mjs.map +1 -0
  50. package/dist/{chunk-MBANGIG3.mjs → chunk-DTR53LQO.mjs} +6 -6
  51. package/dist/chunk-DTR53LQO.mjs.map +1 -0
  52. package/dist/{chunk-EQXPL7TN.mjs → chunk-EI2S4XDG.mjs} +16 -5
  53. package/dist/chunk-EI2S4XDG.mjs.map +1 -0
  54. package/dist/{chunk-GSNGCENJ.js → chunk-EOZHUI46.js} +16 -4
  55. package/dist/chunk-EOZHUI46.js.map +1 -0
  56. package/dist/{chunk-25OFOKNF.js → chunk-F2BZIU67.js} +18 -5
  57. package/dist/chunk-F2BZIU67.js.map +1 -0
  58. package/dist/{chunk-AQPU2AXH.js → chunk-F2TEJSCP.js} +10 -10
  59. package/dist/chunk-F2TEJSCP.js.map +1 -0
  60. package/dist/{chunk-UCOE6SET.js → chunk-FCLS5R24.js} +3 -3
  61. package/dist/chunk-FCLS5R24.js.map +1 -0
  62. package/dist/{chunk-3NHAT7D4.mjs → chunk-FUA6ZGMI.mjs} +27 -12
  63. package/dist/chunk-FUA6ZGMI.mjs.map +1 -0
  64. package/dist/chunk-FY2X3LYR.mjs +3 -0
  65. package/dist/{chunk-VRN76M56.mjs.map → chunk-FY2X3LYR.mjs.map} +1 -1
  66. package/dist/{chunk-V7EVKD5G.mjs → chunk-GS4SAW25.mjs} +4 -4
  67. package/dist/chunk-GS4SAW25.mjs.map +1 -0
  68. package/dist/chunk-H56ICWUO.js +321 -0
  69. package/dist/chunk-H56ICWUO.js.map +1 -0
  70. package/dist/{chunk-HDMIOOZY.mjs → chunk-HG34SGMN.mjs} +4 -4
  71. package/dist/chunk-HG34SGMN.mjs.map +1 -0
  72. package/dist/chunk-HL4H2HF6.js +279 -0
  73. package/dist/chunk-HL4H2HF6.js.map +1 -0
  74. package/dist/chunk-IJIQUMAK.mjs +272 -0
  75. package/dist/chunk-IJIQUMAK.mjs.map +1 -0
  76. package/dist/{imageCrop/index.mjs → chunk-KEZFTDZT.mjs} +24 -6
  77. package/dist/chunk-KEZFTDZT.mjs.map +1 -0
  78. package/dist/{chunk-KQ643L7Z.js → chunk-KHOVC2KL.js} +3 -3
  79. package/dist/chunk-KHOVC2KL.js.map +1 -0
  80. package/dist/{chunk-6PMXAK7F.js → chunk-KRBSTLKC.js} +57 -57
  81. package/dist/chunk-KRBSTLKC.js.map +1 -0
  82. package/dist/chunk-KVYHCGRY.js +2011 -0
  83. package/dist/chunk-KVYHCGRY.js.map +1 -0
  84. package/dist/{chunk-G7UBMCUT.mjs → chunk-LZ5YTMMP.mjs} +3 -3
  85. package/dist/chunk-LZ5YTMMP.mjs.map +1 -0
  86. package/dist/{chunk-WW4GE6CZ.js → chunk-MJ6XJGAL.js} +23 -119
  87. package/dist/chunk-MJ6XJGAL.js.map +1 -0
  88. package/dist/{chunk-NCRP2YHY.mjs → chunk-MKLXCV4Z.mjs} +8 -96
  89. package/dist/chunk-MKLXCV4Z.mjs.map +1 -0
  90. package/dist/chunk-MMDSZIXD.mjs +286 -0
  91. package/dist/chunk-MMDSZIXD.mjs.map +1 -0
  92. package/dist/{chunk-TC5YU6A4.mjs → chunk-N2O3OX5Y.mjs} +3 -3
  93. package/dist/chunk-N2O3OX5Y.mjs.map +1 -0
  94. package/dist/{chunk-3FRAIS4T.mjs → chunk-O6NNSPWD.mjs} +5 -5
  95. package/dist/{chunk-3FRAIS4T.mjs.map → chunk-O6NNSPWD.mjs.map} +1 -1
  96. package/dist/chunk-OIRZXSYM.js +80 -0
  97. package/dist/chunk-OIRZXSYM.js.map +1 -0
  98. package/dist/{chunk-Q5VFBPMG.mjs → chunk-P7JQRNBJ.mjs} +3 -3
  99. package/dist/chunk-P7JQRNBJ.mjs.map +1 -0
  100. package/dist/{chunk-BIHYZA67.mjs → chunk-PLIG5257.mjs} +18 -18
  101. package/dist/chunk-PLIG5257.mjs.map +1 -0
  102. package/dist/chunk-QIF4MG5V.mjs +283 -0
  103. package/dist/chunk-QIF4MG5V.mjs.map +1 -0
  104. package/dist/{chunk-4OOANEJV.mjs → chunk-RHECN4E2.mjs} +21 -21
  105. package/dist/chunk-RHECN4E2.mjs.map +1 -0
  106. package/dist/{chunk-YOTQG4NP.mjs → chunk-RHHTZTIN.mjs} +4 -4
  107. package/dist/chunk-RHHTZTIN.mjs.map +1 -0
  108. package/dist/{chunk-G6NSKJMH.js → chunk-RRQ2X26Z.js} +4 -4
  109. package/dist/chunk-RRQ2X26Z.js.map +1 -0
  110. package/dist/{chunk-4WBCWJSN.js → chunk-RST2T54Y.js} +7 -7
  111. package/dist/chunk-RST2T54Y.js.map +1 -0
  112. package/dist/{chunk-R2DXTE2L.js → chunk-RVNQI6BI.js} +4 -4
  113. package/dist/chunk-RVNQI6BI.js.map +1 -0
  114. package/dist/{chunk-SKFEJPMJ.mjs → chunk-S3K4LTRI.mjs} +6 -6
  115. package/dist/chunk-S3K4LTRI.mjs.map +1 -0
  116. package/dist/{chunk-ZM2SZJTZ.js → chunk-SWZ5XNF6.js} +9 -9
  117. package/dist/chunk-SWZ5XNF6.js.map +1 -0
  118. package/dist/{chunk-QSKLQX6H.js → chunk-U7HNBCBS.js} +16 -16
  119. package/dist/chunk-U7HNBCBS.js.map +1 -0
  120. package/dist/{chunk-CIVO4R6N.mjs → chunk-UJS3YSD3.mjs} +3 -3
  121. package/dist/chunk-UJS3YSD3.mjs.map +1 -0
  122. package/dist/{chunk-G6HXNQ2U.mjs → chunk-UJUWDF7M.mjs} +8 -8
  123. package/dist/chunk-UJUWDF7M.mjs.map +1 -0
  124. package/dist/{chunk-CAYOQDBR.js → chunk-UR5NENGE.js} +3 -3
  125. package/dist/chunk-UR5NENGE.js.map +1 -0
  126. package/dist/{chunk-QXAOXBVB.mjs → chunk-V7HGBDCB.mjs} +3 -3
  127. package/dist/chunk-V7HGBDCB.mjs.map +1 -0
  128. package/dist/{chunk-ATUCZXJY.js → chunk-V7RLIZMN.js} +14 -4
  129. package/dist/chunk-V7RLIZMN.js.map +1 -0
  130. package/dist/{chunk-ACUFEDVQ.js → chunk-VCKXK6V5.js} +9 -9
  131. package/dist/chunk-VCKXK6V5.js.map +1 -0
  132. package/dist/{chunk-XUS5ACKR.mjs → chunk-VIEXDTNF.mjs} +3 -3
  133. package/dist/chunk-VIEXDTNF.mjs.map +1 -0
  134. package/dist/{imageCrop/index.js → chunk-VN2DULIA.js} +24 -5
  135. package/dist/chunk-VN2DULIA.js.map +1 -0
  136. package/dist/{chunk-S6YSGVWD.js → chunk-VNWMRUY6.js} +31 -87
  137. package/dist/chunk-VNWMRUY6.js.map +1 -0
  138. package/dist/{chunk-3DXPQ4YV.mjs → chunk-VYK4M2D6.mjs} +18 -6
  139. package/dist/chunk-VYK4M2D6.mjs.map +1 -0
  140. package/dist/{chunk-WEEXCPSE.mjs → chunk-WB4H6ZUW.mjs} +3 -3
  141. package/dist/chunk-WB4H6ZUW.mjs.map +1 -0
  142. package/dist/{chunk-GWNBVGDT.mjs → chunk-WM3AEJ2E.mjs} +6 -257
  143. package/dist/chunk-WM3AEJ2E.mjs.map +1 -0
  144. package/dist/{chunk-CX2GHCAI.mjs → chunk-X5GINUGI.mjs} +26 -81
  145. package/dist/chunk-X5GINUGI.mjs.map +1 -0
  146. package/dist/{chunk-DIF5VRL3.mjs → chunk-XB7GUEHZ.mjs} +14 -5
  147. package/dist/chunk-XB7GUEHZ.mjs.map +1 -0
  148. package/dist/{chunk-ZLYPALF3.js → chunk-XE5RGZ3B.js} +11 -11
  149. package/dist/chunk-XE5RGZ3B.js.map +1 -0
  150. package/dist/{chunk-WJ7IMUEJ.mjs → chunk-XNTIMVSL.mjs} +7 -7
  151. package/dist/chunk-XNTIMVSL.mjs.map +1 -0
  152. package/dist/{chunk-ZWQJSZEY.js → chunk-Y7WHUKJF.js} +28 -12
  153. package/dist/chunk-Y7WHUKJF.js.map +1 -0
  154. package/dist/{components/index.mjs → chunk-YIRPPMCN.mjs} +305 -785
  155. package/dist/chunk-YIRPPMCN.mjs.map +1 -0
  156. package/dist/{chunk-KH6RQ4J5.js → chunk-Z2SNB5LJ.js} +3 -3
  157. package/dist/chunk-Z2SNB5LJ.js.map +1 -0
  158. package/dist/{chunk-HJ6MH7J7.js → chunk-ZOP7YIVX.js} +17 -17
  159. package/dist/chunk-ZOP7YIVX.js.map +1 -0
  160. package/dist/{chunk-HJZHQW5R.mjs → chunk-ZUZLWHH5.mjs} +3 -3
  161. package/dist/chunk-ZUZLWHH5.mjs.map +1 -0
  162. package/dist/{ai → common/ai}/llm/core/index.d.mts +3 -3
  163. package/dist/{ai → common/ai}/llm/core/index.d.ts +3 -3
  164. package/dist/{ai/llm → common/ai/llm/core}/index.js +14 -14
  165. package/dist/{ai/llm → common/ai/llm/core}/index.mjs +3 -3
  166. package/dist/{ai → common/ai}/llm/electron/index.d.mts +3 -3
  167. package/dist/{ai/llm/web → common/ai/llm/electron}/index.d.ts +3 -3
  168. package/dist/common/ai/llm/electron/index.js +67 -0
  169. package/dist/common/ai/llm/electron/index.mjs +10 -0
  170. package/dist/{ai → common/ai}/llm/index.d.mts +2 -2
  171. package/dist/{ai → common/ai}/llm/index.d.ts +2 -2
  172. package/dist/{ai/llm/core → common/ai/llm}/index.js +13 -13
  173. package/dist/{ai/llm/core → common/ai/llm}/index.mjs +2 -2
  174. package/dist/{ai → common/ai}/llm/miniapp/index.d.mts +3 -3
  175. package/dist/{ai → common/ai}/llm/miniapp/index.d.ts +3 -3
  176. package/dist/{ai/llm/rn → common/ai/llm/miniapp}/index.js +16 -16
  177. package/dist/{ai/llm/rn → common/ai/llm/miniapp}/index.mjs +4 -4
  178. package/dist/{ai → common/ai}/llm/rn/index.d.mts +3 -3
  179. package/dist/{ai → common/ai}/llm/rn/index.d.ts +3 -3
  180. package/dist/{ai/llm/miniapp → common/ai/llm/rn}/index.js +16 -16
  181. package/dist/{ai/llm/miniapp → common/ai/llm/rn}/index.mjs +4 -4
  182. package/dist/common/ai/llm/ui/electron/index.d.mts +5 -0
  183. package/dist/common/ai/llm/ui/electron/index.d.ts +5 -0
  184. package/dist/common/ai/llm/ui/electron/index.js +22 -0
  185. package/dist/common/ai/llm/ui/electron/index.mjs +9 -0
  186. package/dist/common/ai/llm/ui/miniapp/index.d.mts +9 -0
  187. package/dist/common/ai/llm/ui/miniapp/index.d.ts +9 -0
  188. package/dist/common/ai/llm/ui/miniapp/index.js +14 -0
  189. package/dist/common/ai/llm/ui/miniapp/index.mjs +5 -0
  190. package/dist/common/ai/llm/ui/rn/index.d.mts +9 -0
  191. package/dist/common/ai/llm/ui/rn/index.d.ts +9 -0
  192. package/dist/common/ai/llm/ui/rn/index.js +14 -0
  193. package/dist/common/ai/llm/ui/rn/index.mjs +5 -0
  194. package/dist/{ai → common/ai}/llm/ui/web/index.d.mts +7 -7
  195. package/dist/{ai → common/ai}/llm/ui/web/index.d.ts +7 -7
  196. package/dist/common/ai/llm/ui/web/index.js +21 -0
  197. package/dist/common/ai/llm/ui/web/index.mjs +8 -0
  198. package/dist/{ai → common/ai}/llm/web/index.d.mts +3 -3
  199. package/dist/{ai/llm/electron → common/ai/llm/web}/index.d.ts +3 -3
  200. package/dist/common/ai/llm/web/index.js +66 -0
  201. package/dist/common/ai/llm/web/index.mjs +9 -0
  202. package/dist/{analytics → common/analytics}/index.d.mts +1 -1
  203. package/dist/{analytics → common/analytics}/index.d.ts +1 -1
  204. package/dist/{analytics → common/analytics}/index.js +79 -79
  205. package/dist/{analytics → common/analytics}/index.mjs +3 -3
  206. package/dist/{analytics → common/analytics}/server/index.js +2 -2
  207. package/dist/common/analytics/server/index.js.map +1 -0
  208. package/dist/{analytics → common/analytics}/server/index.mjs +2 -2
  209. package/dist/common/analytics/server/index.mjs.map +1 -0
  210. package/dist/{api → common/api}/index.d.mts +3 -3
  211. package/dist/{api → common/api}/index.d.ts +3 -3
  212. package/dist/common/api/index.js +21 -0
  213. package/dist/common/api/index.mjs +4 -0
  214. package/dist/common/auth/components/index.d.mts +9 -9
  215. package/dist/common/auth/components/index.d.ts +9 -9
  216. package/dist/common/auth/index.js +6 -6
  217. package/dist/common/auth/index.mjs +2 -2
  218. package/dist/common/auth/react/index.d.mts +3 -3
  219. package/dist/common/auth/react/index.d.ts +3 -3
  220. package/dist/common/auth/rn/index.d.mts +2 -2
  221. package/dist/common/auth/rn/index.d.ts +2 -2
  222. package/dist/common/auth/rn/index.js +2 -2
  223. package/dist/common/auth/rn/index.js.map +1 -1
  224. package/dist/common/auth/rn/index.mjs +1 -1
  225. package/dist/common/auth/rn/index.mjs.map +1 -1
  226. package/dist/common/components/index.d.mts +4 -0
  227. package/dist/common/components/index.d.ts +4 -0
  228. package/dist/common/components/index.js +414 -0
  229. package/dist/common/components/index.mjs +9 -0
  230. package/dist/{config → common/config}/index.d.mts +1 -1
  231. package/dist/{config → common/config}/index.d.ts +1 -1
  232. package/dist/common/config/index.js +21 -0
  233. package/dist/common/config/index.mjs +4 -0
  234. package/dist/{config → common/config}/server/index.js +5 -5
  235. package/dist/common/config/server/index.js.map +1 -0
  236. package/dist/{config → common/config}/server/index.mjs +5 -5
  237. package/dist/common/config/server/index.mjs.map +1 -0
  238. package/dist/common/export/index.d.mts +2 -2
  239. package/dist/common/export/index.d.ts +2 -2
  240. package/dist/common/export/index.js +67 -67
  241. package/dist/common/export/index.mjs +3 -3
  242. package/dist/common/export/server/index.d.mts +2 -2
  243. package/dist/common/export/server/index.d.ts +2 -2
  244. package/dist/common/export/server/index.js +76 -48
  245. package/dist/common/export/server/index.mjs +3 -3
  246. package/dist/common/file/index.d.mts +2 -2
  247. package/dist/common/file/index.d.ts +2 -2
  248. package/dist/common/file/index.js +27 -27
  249. package/dist/common/file/index.mjs +5 -5
  250. package/dist/common/file/server/index.d.mts +2 -2
  251. package/dist/common/file/server/index.d.ts +2 -2
  252. package/dist/common/file/server/index.js +58 -50
  253. package/dist/common/file/server/index.mjs +8 -8
  254. package/dist/{i18n → common/i18n}/index.d.mts +1 -1
  255. package/dist/{i18n → common/i18n}/index.d.ts +1 -1
  256. package/dist/{i18n → common/i18n}/index.js +18 -18
  257. package/dist/{i18n → common/i18n}/index.mjs +2 -2
  258. package/dist/common/imageCrop/index.d.mts +2 -0
  259. package/dist/common/imageCrop/index.d.ts +2 -0
  260. package/dist/common/imageCrop/index.js +61 -0
  261. package/dist/common/imageCrop/index.mjs +4 -0
  262. package/dist/common/index.d.mts +16 -16
  263. package/dist/common/index.d.ts +16 -16
  264. package/dist/common/index.js +75 -67
  265. package/dist/common/index.mjs +26 -26
  266. package/dist/common/logger/index.d.mts +1 -1
  267. package/dist/common/logger/index.d.ts +1 -1
  268. package/dist/common/logger/index.js +6 -7
  269. package/dist/common/logger/index.mjs +1 -2
  270. package/dist/{ossFile → common/ossFile}/index.d.mts +6 -6
  271. package/dist/{ossFile → common/ossFile}/index.d.ts +6 -6
  272. package/dist/{ossFile → common/ossFile}/index.js +26 -26
  273. package/dist/{ossFile → common/ossFile}/index.mjs +5 -5
  274. package/dist/{ossFile/server/index.d.ts → common/ossFile/server/index.d.mts} +7 -7
  275. package/dist/{ossFile/server/index.d.mts → common/ossFile/server/index.d.ts} +7 -7
  276. package/dist/{ossFile → common/ossFile}/server/index.js +60 -52
  277. package/dist/{ossFile → common/ossFile}/server/index.mjs +10 -10
  278. package/dist/common/platform/index.js +8 -8
  279. package/dist/common/platform/index.mjs +4 -4
  280. package/dist/common/request/index.d.mts +1 -1
  281. package/dist/common/request/index.d.ts +1 -1
  282. package/dist/common/request/index.js +5 -6
  283. package/dist/common/request/index.mjs +2 -3
  284. package/dist/common/storage/index.d.mts +1 -1
  285. package/dist/common/storage/index.d.ts +1 -1
  286. package/dist/common/storage/index.js +17 -17
  287. package/dist/common/storage/index.mjs +5 -5
  288. package/dist/{universalExport → common/universalExport}/index.d.mts +6 -86
  289. package/dist/{universalExport → common/universalExport}/index.d.ts +6 -86
  290. package/dist/{universalExport → common/universalExport}/index.js +67 -67
  291. package/dist/common/universalExport/index.mjs +5 -0
  292. package/dist/{universalExport → common/universalExport}/server/index.d.mts +3 -84
  293. package/dist/{universalExport → common/universalExport}/server/index.d.ts +3 -84
  294. package/dist/common/universalExport/server/index.js +151 -0
  295. package/dist/common/universalExport/server/index.mjs +6 -0
  296. package/dist/{universalFile/index.d.ts → common/universalFile/index.d.mts} +9 -9
  297. package/dist/{universalFile/index.d.mts → common/universalFile/index.d.ts} +9 -9
  298. package/dist/{universalFile → common/universalFile}/index.js +63 -63
  299. package/dist/common/universalFile/index.js.map +1 -0
  300. package/dist/{universalFile → common/universalFile}/index.mjs +4 -4
  301. package/dist/common/universalFile/index.mjs.map +1 -0
  302. package/dist/{universalFile → common/universalFile}/server/index.d.mts +5 -5
  303. package/dist/{universalFile → common/universalFile}/server/index.d.ts +5 -5
  304. package/dist/{universalFile → common/universalFile}/server/index.js +68 -68
  305. package/dist/{universalFile → common/universalFile}/server/index.mjs +8 -8
  306. package/dist/common/utils/index.d.mts +1 -1
  307. package/dist/common/utils/index.d.ts +1 -1
  308. package/dist/common/utils/index.js +11 -12
  309. package/dist/common/utils/index.mjs +2 -3
  310. package/dist/{index-WrR57hKT.d.ts → index-BRLygK4h.d.ts} +2 -2
  311. package/dist/{request/index.d.mts → index-BWNK5mH2.d.ts} +19 -2
  312. package/dist/{utils/index.d.mts → index-BiCK6gg6.d.mts} +19 -1
  313. package/dist/{utils/index.d.ts → index-BiCK6gg6.d.ts} +19 -1
  314. package/dist/{index-DoUo8IrU.d.mts → index-BxZauNN_.d.mts} +8 -8
  315. package/dist/{index-DoUo8IrU.d.ts → index-BxZauNN_.d.ts} +8 -8
  316. package/dist/{request/index.d.ts → index-C-P2yBTH.d.mts} +19 -2
  317. package/dist/{index-D0cqaQEH.d.mts → index-CLB80GCP.d.mts} +5 -5
  318. package/dist/{index-D0cqaQEH.d.ts → index-CLB80GCP.d.ts} +5 -5
  319. package/dist/{index-2G9Dxjvt.d.ts → index-CT4K2z-O.d.ts} +2 -2
  320. package/dist/{index-qcOvRVuN.d.mts → index-D6RJTGce.d.mts} +2 -2
  321. package/dist/{storage/index.d.ts → index-DA7L9JlE.d.mts} +26 -3
  322. package/dist/{imageCrop/index.d.mts → index-DXVph21C.d.mts} +40 -4
  323. package/dist/{imageCrop/index.d.ts → index-DXVph21C.d.ts} +40 -4
  324. package/dist/{index-CYuUB8aF.d.mts → index-DzyK789B.d.mts} +2 -2
  325. package/dist/{logger/index.d.mts → index-FVJZCEtm.d.mts} +21 -1
  326. package/dist/{logger/index.d.ts → index-FVJZCEtm.d.ts} +21 -1
  327. package/dist/{storage/index.d.mts → index-nD9vPCZT.d.ts} +26 -3
  328. package/dist/{components/index.d.mts → index-nOmIv2BG.d.mts} +159 -5
  329. package/dist/{components/index.d.ts → index-nOmIv2BG.d.ts} +159 -5
  330. package/dist/{path-qjVnH8qU.d.ts → path-Bzc7hj1N.d.ts} +5 -1
  331. package/dist/{path-DkaHQSyW.d.mts → path-DN_65vhO.d.mts} +5 -1
  332. package/dist/{types-3ujSNAXb.d.mts → utils-Dm3O1rAa.d.mts} +81 -1
  333. package/dist/{types-3ujSNAXb.d.ts → utils-Dm3O1rAa.d.ts} +81 -1
  334. package/package.json +292 -312
  335. package/dist/AliyunOSSProvider-4GRL2FJB.js +0 -15
  336. package/dist/AliyunOSSProvider-QNVFIZ7Q.mjs +0 -6
  337. package/dist/CollisionBalls-BpHufX3H.d.mts +0 -41
  338. package/dist/CollisionBalls-BpHufX3H.d.ts +0 -41
  339. package/dist/ConfigService-BxK06xP6.d.mts +0 -262
  340. package/dist/ConfigService-BxK06xP6.d.ts +0 -262
  341. package/dist/LocalStorageProvider-J5RHV37G.mjs +0 -6
  342. package/dist/LocalStorageProvider-PFA2DMIJ.js +0 -15
  343. package/dist/UniversalFileService-CC4d3wkc.d.ts +0 -139
  344. package/dist/UniversalFileService-CzAE_G4V.d.mts +0 -139
  345. package/dist/ai/llm/electron/index.js +0 -66
  346. package/dist/ai/llm/electron/index.mjs +0 -9
  347. package/dist/ai/llm/ui/electron/index.d.mts +0 -5
  348. package/dist/ai/llm/ui/electron/index.d.ts +0 -5
  349. package/dist/ai/llm/ui/electron/index.js +0 -21
  350. package/dist/ai/llm/ui/electron/index.mjs +0 -8
  351. package/dist/ai/llm/ui/miniapp/index.d.mts +0 -9
  352. package/dist/ai/llm/ui/miniapp/index.d.ts +0 -9
  353. package/dist/ai/llm/ui/miniapp/index.js +0 -14
  354. package/dist/ai/llm/ui/miniapp/index.mjs +0 -5
  355. package/dist/ai/llm/ui/rn/index.d.mts +0 -9
  356. package/dist/ai/llm/ui/rn/index.d.ts +0 -9
  357. package/dist/ai/llm/ui/rn/index.js +0 -14
  358. package/dist/ai/llm/ui/rn/index.mjs +0 -5
  359. package/dist/ai/llm/ui/web/index.js +0 -20
  360. package/dist/ai/llm/ui/web/index.mjs +0 -7
  361. package/dist/ai/llm/web/index.js +0 -65
  362. package/dist/ai/llm/web/index.mjs +0 -8
  363. package/dist/analytics/server/index.js.map +0 -1
  364. package/dist/analytics/server/index.mjs.map +0 -1
  365. package/dist/api/index.js +0 -21
  366. package/dist/api/index.mjs +0 -4
  367. package/dist/audioDetection/index.d.mts +0 -449
  368. package/dist/audioDetection/index.d.ts +0 -449
  369. package/dist/audioDetection/index.js +0 -1244
  370. package/dist/audioDetection/index.js.map +0 -1
  371. package/dist/audioDetection/index.mjs +0 -1227
  372. package/dist/audioDetection/index.mjs.map +0 -1
  373. package/dist/boothVaultService-Cn4WPhjg.d.mts +0 -83
  374. package/dist/boothVaultService-Cn4WPhjg.d.ts +0 -83
  375. package/dist/business/index.d.mts +0 -2
  376. package/dist/business/index.d.ts +0 -2
  377. package/dist/business/index.js +0 -581
  378. package/dist/business/index.js.map +0 -1
  379. package/dist/business/index.mjs +0 -575
  380. package/dist/business/index.mjs.map +0 -1
  381. package/dist/calendar/index.d.mts +0 -1325
  382. package/dist/calendar/index.d.ts +0 -1325
  383. package/dist/calendar/index.js +0 -5964
  384. package/dist/calendar/index.js.map +0 -1
  385. package/dist/calendar/index.mjs +0 -5878
  386. package/dist/calendar/index.mjs.map +0 -1
  387. package/dist/calendar/routes/index.d.mts +0 -191
  388. package/dist/calendar/routes/index.d.ts +0 -191
  389. package/dist/calendar/routes/index.js +0 -844
  390. package/dist/calendar/routes/index.js.map +0 -1
  391. package/dist/calendar/routes/index.mjs +0 -826
  392. package/dist/calendar/routes/index.mjs.map +0 -1
  393. package/dist/chunk-25OFOKNF.js.map +0 -1
  394. package/dist/chunk-2Y7BKFKZ.js +0 -37
  395. package/dist/chunk-3CSCIRQY.js +0 -17
  396. package/dist/chunk-3CSCIRQY.js.map +0 -1
  397. package/dist/chunk-3DXPQ4YV.mjs.map +0 -1
  398. package/dist/chunk-3NHAT7D4.mjs.map +0 -1
  399. package/dist/chunk-4FDUURSD.js +0 -22
  400. package/dist/chunk-4FDUURSD.js.map +0 -1
  401. package/dist/chunk-4OOANEJV.mjs.map +0 -1
  402. package/dist/chunk-4WBCWJSN.js.map +0 -1
  403. package/dist/chunk-5GBDDXYL.mjs +0 -23
  404. package/dist/chunk-5GBDDXYL.mjs.map +0 -1
  405. package/dist/chunk-5USIS3UM.js +0 -4
  406. package/dist/chunk-6PMXAK7F.js.map +0 -1
  407. package/dist/chunk-7B5SI4OF.mjs +0 -15
  408. package/dist/chunk-7B5SI4OF.mjs.map +0 -1
  409. package/dist/chunk-ACUFEDVQ.js.map +0 -1
  410. package/dist/chunk-AQPU2AXH.js.map +0 -1
  411. package/dist/chunk-ATUCZXJY.js.map +0 -1
  412. package/dist/chunk-BCE6RUZV.js.map +0 -1
  413. package/dist/chunk-BIHYZA67.mjs.map +0 -1
  414. package/dist/chunk-C6KV7VTZ.mjs.map +0 -1
  415. package/dist/chunk-CAYOQDBR.js.map +0 -1
  416. package/dist/chunk-CIVO4R6N.mjs.map +0 -1
  417. package/dist/chunk-CX2GHCAI.mjs.map +0 -1
  418. package/dist/chunk-DIF5VRL3.mjs.map +0 -1
  419. package/dist/chunk-EQXPL7TN.mjs.map +0 -1
  420. package/dist/chunk-FCEBAWN6.js +0 -18
  421. package/dist/chunk-FCEBAWN6.js.map +0 -1
  422. package/dist/chunk-FHIE5MTC.mjs +0 -541
  423. package/dist/chunk-FHIE5MTC.mjs.map +0 -1
  424. package/dist/chunk-FHLTPXAR.js +0 -56
  425. package/dist/chunk-FIUBFREP.mjs.map +0 -1
  426. package/dist/chunk-FXQOXLDE.js.map +0 -1
  427. package/dist/chunk-G6HXNQ2U.mjs.map +0 -1
  428. package/dist/chunk-G6NSKJMH.js.map +0 -1
  429. package/dist/chunk-G7UBMCUT.mjs.map +0 -1
  430. package/dist/chunk-GSNGCENJ.js.map +0 -1
  431. package/dist/chunk-GWNBVGDT.mjs.map +0 -1
  432. package/dist/chunk-HDMIOOZY.mjs.map +0 -1
  433. package/dist/chunk-HJ6MH7J7.js.map +0 -1
  434. package/dist/chunk-HJZHQW5R.mjs.map +0 -1
  435. package/dist/chunk-I5ZPEDNR.mjs.map +0 -1
  436. package/dist/chunk-KH6RQ4J5.js.map +0 -1
  437. package/dist/chunk-KQ643L7Z.js.map +0 -1
  438. package/dist/chunk-LFB5EIIM.mjs +0 -31
  439. package/dist/chunk-LFB5EIIM.mjs.map +0 -1
  440. package/dist/chunk-MBANGIG3.mjs.map +0 -1
  441. package/dist/chunk-NCRP2YHY.mjs.map +0 -1
  442. package/dist/chunk-NDGHXVGS.js +0 -25
  443. package/dist/chunk-NDGHXVGS.js.map +0 -1
  444. package/dist/chunk-NDPO5OMC.js +0 -563
  445. package/dist/chunk-NDPO5OMC.js.map +0 -1
  446. package/dist/chunk-PBI7FKMB.js.map +0 -1
  447. package/dist/chunk-Q5EDCKQA.js.map +0 -1
  448. package/dist/chunk-Q5VFBPMG.mjs.map +0 -1
  449. package/dist/chunk-QSKLQX6H.js.map +0 -1
  450. package/dist/chunk-QXAOXBVB.mjs.map +0 -1
  451. package/dist/chunk-R2DXTE2L.js.map +0 -1
  452. package/dist/chunk-RTD2WHQQ.mjs +0 -16
  453. package/dist/chunk-RTD2WHQQ.mjs.map +0 -1
  454. package/dist/chunk-S6YSGVWD.js.map +0 -1
  455. package/dist/chunk-SKFEJPMJ.mjs.map +0 -1
  456. package/dist/chunk-SLKOEYFH.js.map +0 -1
  457. package/dist/chunk-TC5YU6A4.mjs.map +0 -1
  458. package/dist/chunk-UCOE6SET.js.map +0 -1
  459. package/dist/chunk-UIYKZ73N.js +0 -36
  460. package/dist/chunk-UIYKZ73N.js.map +0 -1
  461. package/dist/chunk-V7EVKD5G.mjs.map +0 -1
  462. package/dist/chunk-VMTEDX5H.js.map +0 -1
  463. package/dist/chunk-VRN76M56.mjs +0 -3
  464. package/dist/chunk-VXFUXZN5.mjs +0 -20
  465. package/dist/chunk-VXFUXZN5.mjs.map +0 -1
  466. package/dist/chunk-WEEXCPSE.mjs.map +0 -1
  467. package/dist/chunk-WJ7IMUEJ.mjs.map +0 -1
  468. package/dist/chunk-WW4GE6CZ.js.map +0 -1
  469. package/dist/chunk-XJ7ZAGC5.js.map +0 -1
  470. package/dist/chunk-XUS5ACKR.mjs.map +0 -1
  471. package/dist/chunk-YOTQG4NP.mjs.map +0 -1
  472. package/dist/chunk-ZGVB35L2.mjs.map +0 -1
  473. package/dist/chunk-ZLYPALF3.js.map +0 -1
  474. package/dist/chunk-ZM2SZJTZ.js.map +0 -1
  475. package/dist/chunk-ZRAW3HXA.js.map +0 -1
  476. package/dist/chunk-ZWQJSZEY.js.map +0 -1
  477. package/dist/components/index.js +0 -2516
  478. package/dist/components/index.js.map +0 -1
  479. package/dist/components/index.mjs.map +0 -1
  480. package/dist/config/index.js +0 -21
  481. package/dist/config/index.mjs +0 -4
  482. package/dist/config/server/index.js.map +0 -1
  483. package/dist/config/server/index.mjs.map +0 -1
  484. package/dist/drizzle-schema-BNhqj2AZ.d.mts +0 -1114
  485. package/dist/drizzle-schema-BNhqj2AZ.d.ts +0 -1114
  486. package/dist/festivalCard/index.d.mts +0 -76
  487. package/dist/festivalCard/index.d.ts +0 -76
  488. package/dist/festivalCard/index.js +0 -1492
  489. package/dist/festivalCard/index.js.map +0 -1
  490. package/dist/festivalCard/index.mjs +0 -1475
  491. package/dist/festivalCard/index.mjs.map +0 -1
  492. package/dist/festivalCard/routes/index.d.mts +0 -42
  493. package/dist/festivalCard/routes/index.d.ts +0 -42
  494. package/dist/festivalCard/routes/index.js +0 -361
  495. package/dist/festivalCard/routes/index.js.map +0 -1
  496. package/dist/festivalCard/routes/index.mjs +0 -356
  497. package/dist/festivalCard/routes/index.mjs.map +0 -1
  498. package/dist/festivalCard/server/index.d.mts +0 -120
  499. package/dist/festivalCard/server/index.d.ts +0 -120
  500. package/dist/festivalCard/server/index.js +0 -272
  501. package/dist/festivalCard/server/index.js.map +0 -1
  502. package/dist/festivalCard/server/index.mjs +0 -265
  503. package/dist/festivalCard/server/index.mjs.map +0 -1
  504. package/dist/festivalCardService-B3GsnNpV.d.ts +0 -13
  505. package/dist/festivalCardService-CWhrLNE9.d.mts +0 -13
  506. package/dist/imageCrop/index.js.map +0 -1
  507. package/dist/imageCrop/index.mjs.map +0 -1
  508. package/dist/index-Bjem5rWn.d.mts +0 -17
  509. package/dist/index-C5U-2hJq.d.ts +0 -23
  510. package/dist/index-CifSBBP2.d.ts +0 -17
  511. package/dist/index-D0K4ehme.d.mts +0 -20
  512. package/dist/index-DLnfKN-a.d.mts +0 -23
  513. package/dist/index-DSel44Ke.d.mts +0 -93
  514. package/dist/index-DSel44Ke.d.ts +0 -93
  515. package/dist/index-DZ5iJtNO.d.mts +0 -102
  516. package/dist/index-DZ5iJtNO.d.ts +0 -102
  517. package/dist/index-Da7qdkgW.d.ts +0 -20
  518. package/dist/index-DrPcMJPc.d.mts +0 -250
  519. package/dist/index-DrPcMJPc.d.ts +0 -250
  520. package/dist/index-oLUvfqT8.d.ts +0 -20
  521. package/dist/index-pe38RDgC.d.mts +0 -20
  522. package/dist/index.d.mts +0 -11611
  523. package/dist/index.d.ts +0 -11611
  524. package/dist/index.js +0 -17230
  525. package/dist/index.js.map +0 -1
  526. package/dist/index.mjs +0 -16954
  527. package/dist/index.mjs.map +0 -1
  528. package/dist/logger/index.js +0 -29
  529. package/dist/logger/index.mjs +0 -4
  530. package/dist/mikuContest/ui/web/index.d.mts +0 -2
  531. package/dist/mikuContest/ui/web/index.d.ts +0 -2
  532. package/dist/mikuContest/ui/web/index.js +0 -353
  533. package/dist/mikuContest/ui/web/index.js.map +0 -1
  534. package/dist/mikuContest/ui/web/index.mjs +0 -343
  535. package/dist/mikuContest/ui/web/index.mjs.map +0 -1
  536. package/dist/mikuFireworks3D/index.d.mts +0 -268
  537. package/dist/mikuFireworks3D/index.d.ts +0 -268
  538. package/dist/mikuFireworks3D/index.js +0 -1267
  539. package/dist/mikuFireworks3D/index.js.map +0 -1
  540. package/dist/mikuFireworks3D/index.mjs +0 -1228
  541. package/dist/mikuFireworks3D/index.mjs.map +0 -1
  542. package/dist/mikuFusionGame/index.d.mts +0 -117
  543. package/dist/mikuFusionGame/index.d.ts +0 -117
  544. package/dist/mikuFusionGame/index.js +0 -1208
  545. package/dist/mikuFusionGame/index.js.map +0 -1
  546. package/dist/mikuFusionGame/index.mjs +0 -1195
  547. package/dist/mikuFusionGame/index.mjs.map +0 -1
  548. package/dist/mmd/admin/index.d.mts +0 -487
  549. package/dist/mmd/admin/index.d.ts +0 -487
  550. package/dist/mmd/admin/index.js +0 -1058
  551. package/dist/mmd/admin/index.js.map +0 -1
  552. package/dist/mmd/admin/index.mjs +0 -1027
  553. package/dist/mmd/admin/index.mjs.map +0 -1
  554. package/dist/mmd/index.d.mts +0 -2467
  555. package/dist/mmd/index.d.ts +0 -2467
  556. package/dist/mmd/index.js +0 -10119
  557. package/dist/mmd/index.js.map +0 -1
  558. package/dist/mmd/index.mjs +0 -10028
  559. package/dist/mmd/index.mjs.map +0 -1
  560. package/dist/mmd/server/index.d.mts +0 -139
  561. package/dist/mmd/server/index.d.ts +0 -139
  562. package/dist/mmd/server/index.js +0 -424
  563. package/dist/mmd/server/index.js.map +0 -1
  564. package/dist/mmd/server/index.mjs +0 -404
  565. package/dist/mmd/server/index.mjs.map +0 -1
  566. package/dist/music/index.d.mts +0 -74
  567. package/dist/music/index.d.ts +0 -74
  568. package/dist/music/index.js +0 -830
  569. package/dist/music/index.js.map +0 -1
  570. package/dist/music/index.mjs +0 -809
  571. package/dist/music/index.mjs.map +0 -1
  572. package/dist/music/server/index.d.mts +0 -1
  573. package/dist/music/server/index.d.ts +0 -1
  574. package/dist/music/server/index.js +0 -194
  575. package/dist/music/server/index.js.map +0 -1
  576. package/dist/music/server/index.mjs +0 -182
  577. package/dist/music/server/index.mjs.map +0 -1
  578. package/dist/navigation/index.d.mts +0 -93
  579. package/dist/navigation/index.d.ts +0 -93
  580. package/dist/navigation/index.js +0 -453
  581. package/dist/navigation/index.js.map +0 -1
  582. package/dist/navigation/index.mjs +0 -443
  583. package/dist/navigation/index.mjs.map +0 -1
  584. package/dist/portfolio/index.d.mts +0 -66
  585. package/dist/portfolio/index.d.ts +0 -66
  586. package/dist/portfolio/index.js +0 -736
  587. package/dist/portfolio/index.js.map +0 -1
  588. package/dist/portfolio/index.mjs +0 -724
  589. package/dist/portfolio/index.mjs.map +0 -1
  590. package/dist/qqbot/server/index.d.mts +0 -216
  591. package/dist/qqbot/server/index.d.ts +0 -216
  592. package/dist/qqbot/server/index.js +0 -394
  593. package/dist/qqbot/server/index.js.map +0 -1
  594. package/dist/qqbot/server/index.mjs +0 -385
  595. package/dist/qqbot/server/index.mjs.map +0 -1
  596. package/dist/qqbot/ui/web/index.d.mts +0 -10
  597. package/dist/qqbot/ui/web/index.d.ts +0 -10
  598. package/dist/qqbot/ui/web/index.js +0 -105
  599. package/dist/qqbot/ui/web/index.js.map +0 -1
  600. package/dist/qqbot/ui/web/index.mjs +0 -99
  601. package/dist/qqbot/ui/web/index.mjs.map +0 -1
  602. package/dist/request/index.js +0 -22
  603. package/dist/request/index.mjs +0 -5
  604. package/dist/screenReceiver/index.d.mts +0 -86
  605. package/dist/screenReceiver/index.d.ts +0 -86
  606. package/dist/screenReceiver/index.js +0 -281
  607. package/dist/screenReceiver/index.js.map +0 -1
  608. package/dist/screenReceiver/index.mjs +0 -273
  609. package/dist/screenReceiver/index.mjs.map +0 -1
  610. package/dist/storage/index.js +0 -48
  611. package/dist/storage/index.mjs +0 -7
  612. package/dist/testYourself/admin/index.d.mts +0 -58
  613. package/dist/testYourself/admin/index.d.ts +0 -58
  614. package/dist/testYourself/admin/index.js +0 -1009
  615. package/dist/testYourself/admin/index.js.map +0 -1
  616. package/dist/testYourself/admin/index.mjs +0 -1002
  617. package/dist/testYourself/admin/index.mjs.map +0 -1
  618. package/dist/testYourself/index.d.mts +0 -53
  619. package/dist/testYourself/index.d.ts +0 -53
  620. package/dist/testYourself/index.js +0 -2551
  621. package/dist/testYourself/index.js.map +0 -1
  622. package/dist/testYourself/index.mjs +0 -2531
  623. package/dist/testYourself/index.mjs.map +0 -1
  624. package/dist/testYourself/server/index.d.mts +0 -1029
  625. package/dist/testYourself/server/index.d.ts +0 -1029
  626. package/dist/testYourself/server/index.js +0 -825
  627. package/dist/testYourself/server/index.js.map +0 -1
  628. package/dist/testYourself/server/index.mjs +0 -816
  629. package/dist/testYourself/server/index.mjs.map +0 -1
  630. package/dist/types-B6B210gX.d.mts +0 -270
  631. package/dist/types-B6B210gX.d.ts +0 -270
  632. package/dist/types-Bdnte5EN.d.mts +0 -292
  633. package/dist/types-Cs0CLvrH.d.mts +0 -70
  634. package/dist/types-Cs0CLvrH.d.ts +0 -70
  635. package/dist/types-HorDyIRv.d.mts +0 -303
  636. package/dist/types-HorDyIRv.d.ts +0 -303
  637. package/dist/types-_rFX1atk.d.ts +0 -292
  638. package/dist/universalExport/index.mjs +0 -5
  639. package/dist/universalExport/server/index.js +0 -123
  640. package/dist/universalExport/server/index.mjs +0 -6
  641. package/dist/universalFile/index.js.map +0 -1
  642. package/dist/universalFile/index.mjs.map +0 -1
  643. package/dist/universalFile/server/index.js.map +0 -1
  644. package/dist/universalFile/server/index.mjs.map +0 -1
  645. package/dist/utils/index.js +0 -46
  646. package/dist/utils/index.js.map +0 -1
  647. package/dist/utils/index.mjs +0 -5
  648. package/dist/utils/index.mjs.map +0 -1
  649. package/dist/vocaloidBooth/index.d.mts +0 -64
  650. package/dist/vocaloidBooth/index.d.ts +0 -64
  651. package/dist/vocaloidBooth/index.js +0 -376
  652. package/dist/vocaloidBooth/index.js.map +0 -1
  653. package/dist/vocaloidBooth/index.mjs +0 -362
  654. package/dist/vocaloidBooth/index.mjs.map +0 -1
  655. package/dist/vocaloidBooth/server/index.d.mts +0 -111
  656. package/dist/vocaloidBooth/server/index.d.ts +0 -111
  657. package/dist/vocaloidBooth/server/index.js +0 -247
  658. package/dist/vocaloidBooth/server/index.js.map +0 -1
  659. package/dist/vocaloidBooth/server/index.mjs +0 -237
  660. package/dist/vocaloidBooth/server/index.mjs.map +0 -1
  661. package/dist/vocaloidBooth/web/index.d.mts +0 -3
  662. package/dist/vocaloidBooth/web/index.d.ts +0 -3
  663. package/dist/vocaloidBooth/web/index.js +0 -376
  664. package/dist/vocaloidBooth/web/index.js.map +0 -1
  665. package/dist/vocaloidBooth/web/index.mjs +0 -362
  666. package/dist/vocaloidBooth/web/index.mjs.map +0 -1
  667. /package/dist/{ai → common/ai}/llm/core/index.js.map +0 -0
  668. /package/dist/{ai → common/ai}/llm/core/index.mjs.map +0 -0
  669. /package/dist/{ai → common/ai}/llm/electron/index.js.map +0 -0
  670. /package/dist/{ai → common/ai}/llm/electron/index.mjs.map +0 -0
  671. /package/dist/{ai → common/ai}/llm/index.js.map +0 -0
  672. /package/dist/{ai → common/ai}/llm/index.mjs.map +0 -0
  673. /package/dist/{ai → common/ai}/llm/miniapp/index.js.map +0 -0
  674. /package/dist/{ai → common/ai}/llm/miniapp/index.mjs.map +0 -0
  675. /package/dist/{ai → common/ai}/llm/rn/index.js.map +0 -0
  676. /package/dist/{ai → common/ai}/llm/rn/index.mjs.map +0 -0
  677. /package/dist/{ai → common/ai}/llm/ui/electron/index.js.map +0 -0
  678. /package/dist/{ai → common/ai}/llm/ui/electron/index.mjs.map +0 -0
  679. /package/dist/{ai → common/ai}/llm/ui/miniapp/index.js.map +0 -0
  680. /package/dist/{ai → common/ai}/llm/ui/miniapp/index.mjs.map +0 -0
  681. /package/dist/{ai → common/ai}/llm/ui/rn/index.js.map +0 -0
  682. /package/dist/{ai → common/ai}/llm/ui/rn/index.mjs.map +0 -0
  683. /package/dist/{ai → common/ai}/llm/ui/web/index.js.map +0 -0
  684. /package/dist/{ai → common/ai}/llm/ui/web/index.mjs.map +0 -0
  685. /package/dist/{ai → common/ai}/llm/web/index.js.map +0 -0
  686. /package/dist/{ai → common/ai}/llm/web/index.mjs.map +0 -0
  687. /package/dist/{analytics → common/analytics}/index.js.map +0 -0
  688. /package/dist/{analytics → common/analytics}/index.mjs.map +0 -0
  689. /package/dist/{analytics → common/analytics}/server/index.d.mts +0 -0
  690. /package/dist/{analytics → common/analytics}/server/index.d.ts +0 -0
  691. /package/dist/{api → common/api}/index.js.map +0 -0
  692. /package/dist/{api → common/api}/index.mjs.map +0 -0
  693. /package/dist/{config → common/components}/index.js.map +0 -0
  694. /package/dist/{config → common/components}/index.mjs.map +0 -0
  695. /package/dist/{i18n → common/config}/index.js.map +0 -0
  696. /package/dist/{i18n → common/config}/index.mjs.map +0 -0
  697. /package/dist/{config → common/config}/server/index.d.mts +0 -0
  698. /package/dist/{config → common/config}/server/index.d.ts +0 -0
  699. /package/dist/{logger → common/i18n}/index.js.map +0 -0
  700. /package/dist/{logger → common/i18n}/index.mjs.map +0 -0
  701. /package/dist/{ossFile → common/imageCrop}/index.js.map +0 -0
  702. /package/dist/{ossFile → common/imageCrop}/index.mjs.map +0 -0
  703. /package/dist/{ossFile/server → common/ossFile}/index.js.map +0 -0
  704. /package/dist/{ossFile/server → common/ossFile}/index.mjs.map +0 -0
  705. /package/dist/{request → common/ossFile/server}/index.js.map +0 -0
  706. /package/dist/{request → common/ossFile/server}/index.mjs.map +0 -0
  707. /package/dist/{storage → common/universalExport}/index.js.map +0 -0
  708. /package/dist/{storage → common/universalExport}/index.mjs.map +0 -0
  709. /package/dist/{universalExport → common/universalExport/server}/index.js.map +0 -0
  710. /package/dist/{universalExport → common/universalExport/server}/index.mjs.map +0 -0
  711. /package/dist/{universalExport → common/universalFile}/server/index.js.map +0 -0
  712. /package/dist/{universalExport → common/universalFile}/server/index.mjs.map +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/universalFile/constants.ts","../src/universalFile/utils.ts","../src/universalFile/client.ts"],"names":[],"mappings":"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","file":"chunk-MBANGIG3.mjs","sourcesContent":["/**\n * 通用文件服务常量定义\n */\n\n// ============= 版本信息 =============\n\n/** 模块版本 */\nexport const UNIVERSAL_FILE_VERSION = '1.0.0';\n\n/** 模块名称 */\nexport const UNIVERSAL_FILE_NAME = '@qhr123/sa2kit/universalFile';\n\n// ============= 文件大小限制 =============\n\n/** 默认最大文件大小(字节) - 100MB */\nexport const DEFAULT_MAX_FILE_SIZE = 100 * 1024 * 1024;\n\n/** 默认最大图片大小(字节) - 10MB */\nexport const DEFAULT_MAX_IMAGE_SIZE = 10 * 1024 * 1024;\n\n/** 默认最大视频大小(字节) - 500MB */\nexport const DEFAULT_MAX_VIDEO_SIZE = 500 * 1024 * 1024;\n\n/** 默认最大音频大小(字节) - 50MB */\nexport const DEFAULT_MAX_AUDIO_SIZE = 50 * 1024 * 1024;\n\n/** 默认最大文档大小(字节) - 20MB */\nexport const DEFAULT_MAX_DOCUMENT_SIZE = 20 * 1024 * 1024;\n\n// ============= MIME类型 =============\n\n/** 图片MIME类型 */\nexport const IMAGE_MIME_TYPES = [\n 'image/jpeg',\n 'image/jpg',\n 'image/png',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml',\n];\n\n/** 视频MIME类型 */\nexport const VIDEO_MIME_TYPES = [\n 'video/mp4',\n 'video/mpeg',\n 'video/quicktime',\n 'video/x-msvideo',\n 'video/webm',\n];\n\n/** 音频MIME类型 */\nexport const AUDIO_MIME_TYPES = ['audio/mpeg', 'audio/mp3', 'audio/wav', 'audio/ogg', 'audio/aac'];\n\n/** 文档MIME类型 */\nexport const DOCUMENT_MIME_TYPES = [\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'text/plain',\n];\n\n/** 所有支持的MIME类型 */\nexport const ALL_SUPPORTED_MIME_TYPES = [\n ...IMAGE_MIME_TYPES,\n ...VIDEO_MIME_TYPES,\n ...AUDIO_MIME_TYPES,\n ...DOCUMENT_MIME_TYPES,\n];\n\n// ============= 文件扩展名 =============\n\n/** 图片扩展名 */\nexport const IMAGE_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg'];\n\n/** 视频扩展名 */\nexport const VIDEO_EXTENSIONS = ['.mp4', '.mpeg', '.mov', '.avi', '.webm'];\n\n/** 音频扩展名 */\nexport const AUDIO_EXTENSIONS = ['.mp3', '.wav', '.ogg', '.aac'];\n\n/** 文档扩展名 */\nexport const DOCUMENT_EXTENSIONS = [\n '.pdf',\n '.doc',\n '.docx',\n '.xls',\n '.xlsx',\n '.ppt',\n '.pptx',\n '.txt',\n];\n\n// ============= API端点 =============\n\n/** API基础路径 */\nexport const API_BASE_PATH = '/api/universal-file';\n\n/** API端点 */\nexport const API_ENDPOINTS = {\n /** 上传文件 */\n UPLOAD: (API_BASE_PATH) + '/upload',\n /** 获取文件URL */\n GET_URL: (fileId: string) => (API_BASE_PATH) + '/files/' + (fileId) + '/url',\n /** 获取文件元数据 */\n GET_METADATA: (fileId: string) => (API_BASE_PATH) + '/files/' + (fileId),\n /** 删除文件 */\n DELETE: (fileId: string) => (API_BASE_PATH) + '/files/' + (fileId),\n /** 查询文件列表 */\n QUERY: (API_BASE_PATH) + '/files',\n /** 批量删除 */\n BATCH_DELETE: (API_BASE_PATH) + '/files/batch-delete',\n /** 获取上传进度 */\n GET_PROGRESS: (fileId: string) => (API_BASE_PATH) + '/upload/' + (fileId) + '/progress',\n} as const;\n\n// ============= 错误代码 =============\n\n/** 错误代码 */\nexport const ERROR_CODES = {\n /** 文件上传错误 */\n FILE_UPLOAD_ERROR: 'FILE_UPLOAD_ERROR',\n /** 文件大小超限 */\n FILE_SIZE_EXCEEDED: 'FILE_SIZE_EXCEEDED',\n /** 文件类型不支持 */\n FILE_TYPE_NOT_SUPPORTED: 'FILE_TYPE_NOT_SUPPORTED',\n /** 文件不存在 */\n FILE_NOT_FOUND: 'FILE_NOT_FOUND',\n /** 文件处理错误 */\n FILE_PROCESSING_ERROR: 'FILE_PROCESSING_ERROR',\n /** 存储提供者错误 */\n STORAGE_PROVIDER_ERROR: 'STORAGE_PROVIDER_ERROR',\n /** CDN提供者错误 */\n CDN_PROVIDER_ERROR: 'CDN_PROVIDER_ERROR',\n /** 网络错误 */\n NETWORK_ERROR: 'NETWORK_ERROR',\n /** 超时错误 */\n TIMEOUT_ERROR: 'TIMEOUT_ERROR',\n /** 未授权 */\n UNAUTHORIZED: 'UNAUTHORIZED',\n /** 权限不足 */\n FORBIDDEN: 'FORBIDDEN',\n /** 服务器错误 */\n SERVER_ERROR: 'SERVER_ERROR',\n} as const;\n\n// ============= 默认配置 =============\n\n/** 默认分页大小 */\nexport const DEFAULT_PAGE_SIZE = 20;\n\n/** 默认请求超时时间(毫秒) - 30秒 */\nexport const DEFAULT_REQUEST_TIMEOUT = 30000;\n\n/** 默认上传超时时间(毫秒) - 5分钟 */\nexport const DEFAULT_UPLOAD_TIMEOUT = 300000;\n\n/** 默认分片上传大小(字节) - 5MB */\nexport const DEFAULT_CHUNK_SIZE = 5 * 1024 * 1024;\n","/**\n * 通用文件服务工具函数\n */\n\nimport {\n IMAGE_MIME_TYPES,\n VIDEO_MIME_TYPES,\n AUDIO_MIME_TYPES,\n DOCUMENT_MIME_TYPES,\n} from './constants';\n\n// ============= 文件大小处理 =============\n\n/**\n * 格式化文件大小\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 B';\n\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n const k = 1024;\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return ((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + (units[i]);\n}\n\n/**\n * 解析文件大小字符串\n */\nexport function parseFileSize(sizeStr: string): number {\n const match = sizeStr.match(/^(\\d+(?:\\.\\d+)?)\\s*([KMGT]?B)$/i);\n if (!match || !match[1] || !match[2]) return 0;\n\n const value = parseFloat(match[1]);\n const unit = match[2].toUpperCase();\n\n const units: Record<string, number> = {\n B: 1,\n KB: 1024,\n MB: 1024 * 1024,\n GB: 1024 * 1024 * 1024,\n TB: 1024 * 1024 * 1024 * 1024,\n };\n\n return value * (units[unit] || 1);\n}\n\n// ============= MIME类型处理 =============\n\n/**\n * 获取文件扩展名\n */\nexport function getFileExtension(fileName: string): string {\n const lastDot = fileName.lastIndexOf('.');\n if (lastDot === -1) return '';\n return fileName.substring(lastDot).toLowerCase();\n}\n\n/**\n * 根据文件名获取MIME类型\n */\nexport function getMimeTypeFromFileName(fileName: string): string {\n const ext = getFileExtension(fileName);\n\n const mimeMap: Record<string, string> = {\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.png': 'image/png',\n '.gif': 'image/gif',\n '.webp': 'image/webp',\n '.svg': 'image/svg+xml',\n '.pdf': 'application/pdf',\n '.txt': 'text/plain',\n '.mp4': 'video/mp4',\n '.avi': 'video/x-msvideo',\n '.mov': 'video/quicktime',\n '.mp3': 'audio/mpeg',\n '.wav': 'audio/wav',\n '.ogg': 'audio/ogg',\n '.doc': 'application/msword',\n '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n '.xls': 'application/vnd.ms-excel',\n '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n };\n\n return mimeMap[ext] || 'application/octet-stream';\n}\n\n/**\n * 检查MIME类型是否支持\n */\nexport function isMimeTypeSupported(mimeType: string, allowedTypes?: string[]): boolean {\n if (allowedTypes && allowedTypes.length > 0) {\n return allowedTypes.includes(mimeType);\n }\n\n return (\n IMAGE_MIME_TYPES.includes(mimeType) ||\n VIDEO_MIME_TYPES.includes(mimeType) ||\n AUDIO_MIME_TYPES.includes(mimeType) ||\n DOCUMENT_MIME_TYPES.includes(mimeType)\n );\n}\n\n/**\n * 判断是否为图片类型\n */\nexport function isImageFile(mimeType: string): boolean {\n return IMAGE_MIME_TYPES.includes(mimeType);\n}\n\n/**\n * 判断是否为视频类型\n */\nexport function isVideoFile(mimeType: string): boolean {\n return VIDEO_MIME_TYPES.includes(mimeType);\n}\n\n/**\n * 判断是否为音频类型\n */\nexport function isAudioFile(mimeType: string): boolean {\n return AUDIO_MIME_TYPES.includes(mimeType);\n}\n\n/**\n * 判断是否为文档类型\n */\nexport function isDocumentFile(mimeType: string): boolean {\n return DOCUMENT_MIME_TYPES.includes(mimeType);\n}\n\n/**\n * 获取文件类型类别\n */\nexport function getFileCategory(\n mimeType: string\n): 'image' | 'video' | 'audio' | 'document' | 'other' {\n if (isImageFile(mimeType)) return 'image';\n if (isVideoFile(mimeType)) return 'video';\n if (isAudioFile(mimeType)) return 'audio';\n if (isDocumentFile(mimeType)) return 'document';\n return 'other';\n}\n\n// ============= 文件名处理 =============\n\n/**\n * 验证文件名是否合法\n */\nexport function validateFileName(fileName: string): boolean {\n // 检查是否包含非法字符\n const invalidChars = /[<>:\"|?*\\/\\\\]/;\n if (invalidChars.test(fileName)) {\n return false;\n }\n\n // 检查长度\n if (fileName.length === 0 || fileName.length > 255) {\n return false;\n }\n\n // 检查是否以点开头\n if (fileName.startsWith('.')) {\n return false;\n }\n\n return true;\n}\n\n/**\n * 清理文件名,移除非法字符\n */\nexport function sanitizeFileName(fileName: string): string {\n return fileName\n .replace(/[<>:\"|?*\\/\\\\]/g, '_')\n .replace(/^\\.+/, '')\n .substring(0, 255);\n}\n\n/**\n * 生成唯一文件名\n */\nexport function generateUniqueFileName(originalName: string, fileId: string): string {\n const ext = getFileExtension(originalName);\n return (fileId) + (ext);\n}\n\n// ============= 存储路径处理 =============\n\n/**\n * 生成存储路径\n */\nexport function generateStoragePath(\n moduleId: string,\n fileName: string,\n options?: {\n businessId?: string;\n useDate?: boolean;\n customPrefix?: string;\n }\n): string {\n const parts: string[] = [];\n\n // 添加自定义前缀\n if (options?.customPrefix) {\n parts.push(options.customPrefix);\n }\n\n // 添加模块标识\n parts.push(moduleId);\n\n // 添加业务标识\n if (options?.businessId) {\n parts.push(options.businessId);\n }\n\n // 添加日期路径\n if (options?.useDate !== false) {\n const date = new Date();\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n parts.push(String(year), month, day);\n }\n\n // 添加文件名\n parts.push(fileName);\n\n return parts.join('/');\n}\n\n/**\n * 解析存储路径\n */\nexport function parseStoragePath(path: string): {\n moduleId?: string;\n businessId?: string;\n year?: string;\n month?: string;\n day?: string;\n fileName: string;\n} {\n const parts = path.split('/');\n const fileName = parts[parts.length - 1] || '';\n\n return {\n moduleId: parts[0] || undefined,\n businessId: parts.length > 5 ? parts[1] : undefined,\n year: parts.length > 3 ? parts[parts.length - 4] : undefined,\n month: parts.length > 2 ? parts[parts.length - 3] : undefined,\n day: parts.length > 1 ? parts[parts.length - 2] : undefined,\n fileName,\n };\n}\n\n// ============= 文件验证 =============\n\n/**\n * 验证文件大小\n */\nexport function validateFileSize(file: File, maxSize: number): { valid: boolean; error?: string } {\n if (file.size > maxSize) {\n return {\n valid: false,\n error: '文件大小超过限制: ' + (formatFileSize(file.size)) + ' > ' + (formatFileSize(maxSize)),\n };\n }\n\n return { valid: true };\n}\n\n/**\n * 验证文件类型\n */\nexport function validateFileType(\n file: File,\n allowedTypes?: string[]\n): { valid: boolean; error?: string } {\n const mimeType = file.type || getMimeTypeFromFileName(file.name);\n\n if (!isMimeTypeSupported(mimeType, allowedTypes)) {\n return {\n valid: false,\n error: '不支持的文件类型: ' + (mimeType),\n };\n }\n\n return { valid: true };\n}\n\n/**\n * 验证文件\n */\nexport function validateFile(\n file: File,\n options?: {\n maxSize?: number;\n allowedTypes?: string[];\n }\n): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n // 验证文件名\n if (!validateFileName(file.name)) {\n errors.push('文件名包含非法字符或长度不合法');\n }\n\n // 验证文件大小\n if (options?.maxSize) {\n const sizeResult = validateFileSize(file, options.maxSize);\n if (!sizeResult.valid && sizeResult.error) {\n errors.push(sizeResult.error);\n }\n }\n\n // 验证文件类型\n if (options?.allowedTypes) {\n const typeResult = validateFileType(file, options.allowedTypes);\n if (!typeResult.valid && typeResult.error) {\n errors.push(typeResult.error);\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n// ============= URL处理 =============\n\n/**\n * 构建查询字符串\n */\nexport function buildQueryString(params: Record<string, any>): string {\n const searchParams = new URLSearchParams();\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n if (Array.isArray(value)) {\n value.forEach((v) => searchParams.append(key, String(v)));\n } else {\n searchParams.append(key, String(value));\n }\n }\n });\n\n const queryString = searchParams.toString();\n return queryString ? '?' + (queryString) : '';\n}\n\n/**\n * 解析URL查询参数\n */\nexport function parseQueryString(url: string): Record<string, string> {\n const params: Record<string, string> = {};\n const urlObj = new URL(url, window.location.origin);\n\n urlObj.searchParams.forEach((value, key) => {\n params[key] = value;\n });\n\n return params;\n}\n\n// ============= 进度计算 =============\n\n/**\n * 计算上传进度\n */\nexport function calculateProgress(uploadedBytes: number, totalBytes: number): number {\n if (totalBytes === 0) return 0;\n return Math.min(Math.round((uploadedBytes / totalBytes) * 100), 100);\n}\n\n/**\n * 计算上传速度\n */\nexport function calculateSpeed(uploadedBytes: number, elapsedTime: number): number {\n if (elapsedTime === 0) return 0;\n return uploadedBytes / (elapsedTime / 1000); // 字节/秒\n}\n\n/**\n * 计算剩余时间\n */\nexport function calculateRemainingTime(\n uploadedBytes: number,\n totalBytes: number,\n speed: number\n): number {\n if (speed === 0) return 0;\n const remainingBytes = totalBytes - uploadedBytes;\n return Math.round(remainingBytes / speed); // 秒\n}\n\n// ============= 错误处理 =============\n\n/**\n * 创建文件错误对象\n */\nexport function createFileError(\n code: string,\n message: string,\n details?: Record<string, any>\n): { code: string; message: string; details?: Record<string, any>; timestamp: Date } {\n return {\n code,\n message,\n details,\n timestamp: new Date(),\n };\n}\n\n/**\n * 格式化错误消息\n */\nexport function formatErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n\n if (typeof error === 'string') {\n return error;\n }\n\n if (error && typeof error === 'object' && 'message' in error) {\n return String(error.message);\n }\n\n return '未知错误';\n}\n\n// ============= 文件读取 =============\n\n/**\n * 读取文件为Base64\n */\nexport function readFileAsBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => {\n const result = reader.result as string;\n // 移除Data URL前缀\n const base64 = result.split(',')[1] || '';\n resolve(base64);\n };\n\n reader.onerror = () => {\n reject(new Error('读取文件失败'));\n };\n\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * 读取文件为ArrayBuffer\n */\nexport function readFileAsArrayBuffer(file: File): Promise<ArrayBuffer> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => {\n resolve(reader.result as ArrayBuffer);\n };\n\n reader.onerror = () => {\n reject(new Error('读取文件失败'));\n };\n\n reader.readAsArrayBuffer(file);\n });\n}\n\n/**\n * 读取文件为文本\n */\nexport function readFileAsText(file: File, encoding: string = 'UTF-8'): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => {\n resolve(reader.result as string);\n };\n\n reader.onerror = () => {\n reject(new Error('读取文件失败'));\n };\n\n reader.readAsText(file, encoding);\n });\n}\n","/**\n * 通用文件服务客户端SDK\n *\n * 提供文件上传、下载、查询等功能的客户端接口\n */\n\nimport type {\n FileMetadata,\n UploadFileInfo,\n UploadProgress,\n FileQueryOptions,\n PaginatedResult,\n BatchOperationResult,\n} from './types';\nimport {\n API_ENDPOINTS,\n ERROR_CODES,\n DEFAULT_REQUEST_TIMEOUT,\n DEFAULT_UPLOAD_TIMEOUT,\n} from './constants';\nimport { createFileError, formatErrorMessage, buildQueryString } from './utils';\nimport { createLogger } from '../logger';\n\nconst clientLogger = createLogger('UniversalFileClient');\n\n// ============= 配置类型 =============\n\nexport interface UniversalFileClientConfig {\n /** API基础URL */\n baseUrl?: string;\n /** 请求超时时间(毫秒) */\n timeout?: number;\n /** 上传超时时间(毫秒) */\n uploadTimeout?: number;\n /** 自定义请求头 */\n headers?: Record<string, string>;\n}\n\n// ============= 客户端类 =============\n\n/**\n * 通用文件服务客户端\n */\nexport class UniversalFileClient {\n private config: Required<UniversalFileClientConfig>;\n\n constructor(config: UniversalFileClientConfig = {}) {\n this.config = {\n baseUrl: config.baseUrl || '',\n timeout: config.timeout || DEFAULT_REQUEST_TIMEOUT,\n uploadTimeout: config.uploadTimeout || DEFAULT_UPLOAD_TIMEOUT,\n headers: config.headers || {},\n };\n }\n\n // ============= 文件上传API =============\n\n /**\n * 上传文件\n */\n async uploadFile(\n fileInfo: UploadFileInfo,\n onProgress?: (progress: UploadProgress) => void\n ): Promise<FileMetadata> {\n const url = (this.config.baseUrl) + (API_ENDPOINTS.UPLOAD);\n const startTime = Date.now();\n\n // 创建FormData\n const formData = new FormData();\n formData.append('file', fileInfo.file);\n formData.append('moduleId', fileInfo.moduleId);\n\n if (fileInfo.businessId) {\n formData.append('businessId', fileInfo.businessId);\n }\n\n if (fileInfo.permission) {\n formData.append('permission', fileInfo.permission);\n }\n\n if (fileInfo.customPath) {\n formData.append('customPath', fileInfo.customPath);\n }\n\n if (fileInfo.metadata) {\n formData.append('metadata', JSON.stringify(fileInfo.metadata));\n }\n\n if (fileInfo.needsProcessing !== undefined) {\n formData.append('needsProcessing', String(fileInfo.needsProcessing));\n }\n\n if (fileInfo.processingOptions) {\n formData.append('processingOptions', JSON.stringify(fileInfo.processingOptions));\n }\n\n try {\n clientLogger.debug('开始上传文件', {\n url,\n fileName: fileInfo.file.name,\n fileSize: fileInfo.file.size,\n moduleId: fileInfo.moduleId,\n businessId: fileInfo.businessId,\n });\n\n // 创建XMLHttpRequest以支持上传进度\n return await new Promise<FileMetadata>((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n \n // 重要:启用 credentials 以携带 cookie\n xhr.withCredentials = true;\n\n // 监听上传进度\n xhr.upload.addEventListener('progress', (event) => {\n if (event.lengthComputable && onProgress) {\n const elapsedTime = Date.now() - startTime;\n const speed = event.loaded / (elapsedTime / 1000);\n const remainingBytes = event.total - event.loaded;\n const remainingTime = speed > 0 ? remainingBytes / speed : 0;\n\n const progress: UploadProgress = {\n fileId: '', // 暂时为空,上传完成后会有\n status: 'uploading',\n progress: Math.round((event.loaded / event.total) * 100),\n uploadedBytes: event.loaded,\n totalBytes: event.total,\n speed,\n remainingTime,\n };\n\n onProgress(progress);\n }\n });\n\n // 监听上传完成\n xhr.addEventListener('load', () => {\n clientLogger.debug('上传响应', {\n status: xhr.status,\n statusText: xhr.statusText,\n responseLength: xhr.responseText?.length,\n });\n \n if (xhr.status >= 200 && xhr.status < 300) {\n try {\n const response = JSON.parse(xhr.responseText);\n clientLogger.debug('解析响应成功', response);\n \n // 支持多种响应格式\n const fileData = response.file || response.data || response;\n const fileMetadata = this.transformFileMetadataFromAPI(fileData);\n\n if (onProgress) {\n onProgress({\n fileId: fileMetadata.id,\n status: 'completed',\n progress: 100,\n uploadedBytes: fileInfo.file.size,\n totalBytes: fileInfo.file.size,\n speed: 0,\n remainingTime: 0,\n });\n }\n\n resolve(fileMetadata);\n } catch (error) {\n clientLogger.error('解析响应失败', { error, responseText: xhr.responseText });\n reject(new Error('解析响应失败'));\n }\n } else {\n clientLogger.error('上传失败', {\n status: xhr.status,\n statusText: xhr.statusText,\n responseText: xhr.responseText,\n });\n reject(new Error('上传失败: ' + (xhr.statusText)));\n }\n });\n\n // 监听错误\n xhr.addEventListener('error', (event) => {\n clientLogger.error('网络错误', event);\n if (onProgress) {\n onProgress({\n fileId: '',\n status: 'failed',\n progress: 0,\n uploadedBytes: 0,\n totalBytes: fileInfo.file.size,\n speed: 0,\n remainingTime: 0,\n error: '网络错误',\n });\n }\n reject(new Error('上传失败: 网络错误'));\n });\n\n // 监听超时\n xhr.addEventListener('timeout', () => {\n if (onProgress) {\n onProgress({\n fileId: '',\n status: 'failed',\n progress: 0,\n uploadedBytes: 0,\n totalBytes: fileInfo.file.size,\n speed: 0,\n remainingTime: 0,\n error: '上传超时',\n });\n }\n reject(new Error('上传超时'));\n });\n\n // 配置请求\n xhr.open('POST', url);\n xhr.timeout = this.config.uploadTimeout;\n\n // 设置请求头\n Object.entries(this.config.headers).forEach(([key, value]) => {\n xhr.setRequestHeader(key, value);\n });\n\n // 发送请求\n xhr.send(formData);\n });\n } catch (error) {\n throw createFileError(\n ERROR_CODES.FILE_UPLOAD_ERROR,\n '文件上传失败: ' + (formatErrorMessage(error)),\n { fileInfo, originalError: error }\n );\n }\n }\n\n // ============= 文件查询API =============\n\n /**\n * 获取文件访问URL\n */\n async getFileUrl(fileId: string, expiresIn?: number): Promise<string> {\n const url = this.config.baseUrl + API_ENDPOINTS.GET_URL(fileId) + (expiresIn ? `?expiresIn=${expiresIn}` : '');\n\n try {\n const response = await this.fetchWithTimeout(url, {\n method: 'GET',\n headers: this.getHeaders(),\n });\n\n if (!response.ok) {\n throw new Error('获取文件URL失败: ' + (response.statusText));\n }\n\n const data = await response.json();\n return data.url;\n } catch (error) {\n throw createFileError(\n ERROR_CODES.NETWORK_ERROR,\n '获取文件URL失败: ' + (formatErrorMessage(error)),\n { fileId, expiresIn, originalError: error }\n );\n }\n }\n\n /**\n * 获取文件元数据\n */\n async getFileMetadata(fileId: string): Promise<FileMetadata> {\n const url = (this.config.baseUrl) + (API_ENDPOINTS.GET_METADATA(fileId));\n\n try {\n const response = await this.fetchWithTimeout(url, {\n method: 'GET',\n headers: this.getHeaders(),\n });\n\n if (!response.ok) {\n if (response.status === 404) {\n throw createFileError(ERROR_CODES.FILE_NOT_FOUND, '文件不存在', { fileId });\n }\n throw new Error('获取文件元数据失败: ' + (response.statusText));\n }\n\n const data = await response.json();\n return this.transformFileMetadataFromAPI(data.file);\n } catch (error) {\n throw createFileError(\n ERROR_CODES.NETWORK_ERROR,\n '获取文件元数据失败: ' + (formatErrorMessage(error)),\n { fileId, originalError: error }\n );\n }\n }\n\n /**\n * 查询文件列表\n */\n async queryFiles(options: FileQueryOptions): Promise<PaginatedResult<FileMetadata>> {\n const queryString = buildQueryString({\n moduleId: options.moduleId,\n businessId: options.businessId,\n uploaderId: options.uploaderId,\n mimeType: options.mimeType,\n minSize: options.minSize,\n maxSize: options.maxSize,\n startTime: options.startTime?.toISOString(),\n endTime: options.endTime?.toISOString(),\n keyword: options.keyword,\n tags: options.tags,\n sortBy: options.sortBy,\n sortOrder: options.sortOrder,\n page: options.page,\n pageSize: options.pageSize,\n });\n\n const url = (this.config.baseUrl) + (API_ENDPOINTS.QUERY) + (queryString);\n\n try {\n const response = await this.fetchWithTimeout(url, {\n method: 'GET',\n headers: this.getHeaders(),\n });\n\n if (!response.ok) {\n clientLogger.error('查询文件列表失败', {\n status: response.status,\n statusText: response.statusText,\n });\n throw new Error('查询文件列表失败: ' + (response.statusText));\n }\n\n const data = await response.json();\n clientLogger.debug('查询文件列表响应', {\n itemsCount: data.items?.length,\n total: data.total,\n page: data.page,\n });\n \n // 防御性检查\n if (!data.items || !Array.isArray(data.items)) {\n clientLogger.error('响应格式错误: items 不是数组', data);\n return {\n items: [],\n total: 0,\n page: 1,\n pageSize: 20,\n totalPages: 0,\n hasNext: false,\n hasPrev: false,\n };\n }\n \n return {\n items: data.items.map((item: any) => this.transformFileMetadataFromAPI(item)),\n total: data.total,\n page: data.page,\n pageSize: data.pageSize,\n totalPages: data.totalPages,\n hasNext: data.hasNext,\n hasPrev: data.hasPrev,\n };\n } catch (error) {\n throw createFileError(\n ERROR_CODES.NETWORK_ERROR,\n '查询文件列表失败: ' + (formatErrorMessage(error)),\n { options, originalError: error }\n );\n }\n }\n\n // ============= 文件删除API =============\n\n /**\n * 删除文件\n */\n async deleteFile(fileId: string): Promise<void> {\n const url = (this.config.baseUrl) + (API_ENDPOINTS.DELETE(fileId));\n\n try {\n const response = await this.fetchWithTimeout(url, {\n method: 'DELETE',\n headers: this.getHeaders(),\n });\n\n if (!response.ok) {\n if (response.status === 404) {\n throw createFileError(ERROR_CODES.FILE_NOT_FOUND, '文件不存在', { fileId });\n }\n throw new Error('删除文件失败: ' + (response.statusText));\n }\n } catch (error) {\n throw createFileError(\n ERROR_CODES.NETWORK_ERROR,\n '删除文件失败: ' + (formatErrorMessage(error)),\n { fileId, originalError: error }\n );\n }\n }\n\n /**\n * 批量删除文件\n */\n async batchDeleteFiles(fileIds: string[]): Promise<BatchOperationResult> {\n const url = (this.config.baseUrl) + (API_ENDPOINTS.BATCH_DELETE);\n\n try {\n const response = await this.fetchWithTimeout(url, {\n method: 'POST',\n headers: {\n ...this.getHeaders(),\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ fileIds }),\n });\n\n if (!response.ok) {\n throw new Error('批量删除文件失败: ' + (response.statusText));\n }\n\n const data = await response.json();\n return data.result;\n } catch (error) {\n throw createFileError(\n ERROR_CODES.NETWORK_ERROR,\n '批量删除文件失败: ' + (formatErrorMessage(error)),\n { fileIds, originalError: error }\n );\n }\n }\n\n // ============= 上传进度API =============\n\n /**\n * 获取上传进度\n */\n async getUploadProgress(fileId: string): Promise<UploadProgress> {\n const url = (this.config.baseUrl) + (API_ENDPOINTS.GET_PROGRESS(fileId));\n\n try {\n const response = await this.fetchWithTimeout(url, {\n method: 'GET',\n headers: this.getHeaders(),\n });\n\n if (!response.ok) {\n throw new Error('获取上传进度失败: ' + (response.statusText));\n }\n\n const data = await response.json();\n return data.progress;\n } catch (error) {\n throw createFileError(\n ERROR_CODES.NETWORK_ERROR,\n '获取上传进度失败: ' + (formatErrorMessage(error)),\n { fileId, originalError: error }\n );\n }\n }\n\n // ============= 私有辅助方法 =============\n\n /**\n * 获取请求头\n */\n private getHeaders(): Record<string, string> {\n return {\n ...this.config.headers,\n };\n }\n\n /**\n * 带超时的fetch请求\n */\n private async fetchWithTimeout(url: string, options: RequestInit): Promise<Response> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await fetch(url, {\n ...options,\n signal: controller.signal,\n credentials: 'include', // 携带 cookie 用于授权\n });\n return response;\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n throw createFileError(ERROR_CODES.TIMEOUT_ERROR, '请求超时', {\n url,\n timeout: this.config.timeout,\n });\n }\n throw error;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n /**\n * 转换API返回的文件元数据\n */\n private transformFileMetadataFromAPI(apiData: any): FileMetadata {\n return {\n id: apiData.id,\n originalName: apiData.originalName,\n storageName: apiData.storageName || apiData.storedName,\n size: apiData.size,\n mimeType: apiData.mimeType,\n extension: apiData.extension,\n hash: apiData.hash || apiData.md5Hash || apiData.sha256Hash,\n uploadTime: new Date(apiData.uploadTime),\n permission: apiData.permission || 'public',\n uploaderId: apiData.uploaderId,\n moduleId: apiData.moduleId,\n businessId: apiData.businessId,\n storageProvider: apiData.storageProvider || 'local',\n storagePath: apiData.storagePath,\n cdnUrl: apiData.cdnUrl,\n accessCount: apiData.accessCount,\n lastAccessTime: apiData.lastAccessTime ? new Date(apiData.lastAccessTime) : undefined,\n expiresAt: apiData.expiresAt ? new Date(apiData.expiresAt) : undefined,\n metadata: apiData.metadata,\n };\n }\n}\n\n// ============= 单例导出 =============\n\n/**\n * 默认客户端实例\n */\nexport const universalFileClient = new UniversalFileClient();\n\n/**\n * 创建自定义客户端实例\n */\nexport function createFileClient(config?: UniversalFileClientConfig): UniversalFileClient {\n return new UniversalFileClient(config);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/universalExport/server/UniversalExportService.ts","../src/universalExport/server/factory.ts","../src/universalExport/server/presets.ts","../src/universalExport/server/validation.ts","../src/universalExport/server/utils/index.ts","../src/universalExport/server/drizzle-schemas/postgres.ts","../src/universalExport/server/drizzle-database.ts"],"names":["endTime","duration","timestamp"],"mappings":";;;;;;AAkCA,IAAM,MAAA,GAAS,aAAa,wBAAwB,CAAA;AAcpD,IAAM,cAAA,GAA+C;AAAA,EACnD,aAAA,EAAe,KAAA;AAAA,EACf,gBAAA,EAAkB,GAAA;AAAA,EAClB,eAAA,EAAiB,OAAA;AAAA,EACjB,aAAA,EAAe,IAAA;AAAA,EACf,WAAA,EAAa,MAAM,IAAA,GAAO,IAAA;AAAA;AAAA,EAC1B,YAAA,EAAc,GAAA;AAAA,EACd,oBAAA,EAAsB,CAAA;AAAA,EACtB,aAAA,EAAe,GAAA;AAAA;AAAA,EACf,KAAA,EAAO;AAAA,IACL,SAAA,EAAW,IAAA;AAAA;AAAA,IACX,SAAA,EAAW;AAAA;AAAA;AAEf,CAAA;AAIA,IAAM,kBAAA,GAAgD;AAAA;AAAA,EAEpD,IAAA,EAAM,CAAC,KAAA,KAAe;AACpB,IAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,KAAK,CAAA;AAC3B,IAAA,OAAO,KAAK,WAAA,EAAY,CAAE,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAAA,EACxC,CAAA;AAAA;AAAA,EAGA,QAAA,EAAU,CAAC,KAAA,KAAe;AACxB,IAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,KAAK,CAAA;AAC3B,IAAA,OAAO,IAAA,CAAK,eAAe,OAAO,CAAA;AAAA,EACpC,CAAA;AAAA;AAAA,EAGA,MAAA,EAAQ,CAAC,KAAA,KAAe;AACtB,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,EAAA;AAClD,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB,CAAA;AAAA;AAAA,EAGA,QAAA,EAAU,CAAC,KAAA,KAAe;AACxB,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,EAAA;AAClD,IAAA,OAAO,MAAA,GAAO,MAAA,CAAO,KAAK,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,EACvC,CAAA;AAAA;AAAA,EAGA,UAAA,EAAY,CAAC,KAAA,KAAe;AAC1B,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,EAAA;AAClD,IAAA,OAAA,CAAS,OAAO,KAAK,CAAA,GAAI,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAA,GAAK,GAAA;AAAA,EAC9C,CAAA;AAAA;AAAA,EAGA,OAAA,EAAS,CAAC,KAAA,KAAe;AACvB,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,EAAA;AAClD,IAAA,OAAO,QAAQ,QAAA,GAAM,QAAA;AAAA,EACvB,CAAA;AAAA;AAAA,EAGA,KAAA,EAAO,CAAC,KAAA,KAAe;AACrB,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,GAAG,OAAO,EAAA;AAClC,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB,CAAA;AAAA;AAAA,EAGA,MAAA,EAAQ,CAAC,KAAA,KAAe;AACtB,IAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,UAAU,OAAO,EAAA;AAChD,IAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,EAC7B;AACF,CAAA;AAYO,IAAM,yBAAN,MAA6B;AAAA,EAQlC,WAAA,CACE,QACA,MAAA,EACA;AATF,IAAA,IAAA,CAAQ,cAAA,uBAAyD,GAAA,EAAI;AACrE,IAAA,IAAA,CAAQ,aAAA,uBAAiD,GAAA,EAAI;AAC7D,IAAA,IAAA,CAAQ,WAAA,uBAA4E,GAAA,EAAI;AACxF,IAAA,IAAA,CAAQ,WAAA,uBAA4E,GAAA,EAAI;AAOtF,IAAA,IAAA,CAAK,MAAA,GAAS,EAAE,GAAG,cAAA,EAAgB,GAAG,MAAA,EAAO;AAC7C,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aACJ,MAAA,EACuB;AACvB,IAAA,IAAI;AAEF,MAAA,IAAA,CAAK,cAAA,CAAe;AAAA,QAClB,GAAG,MAAA;AAAA,QACH,EAAA,EAAI,MAAA;AAAA,QACJ,SAAA,sBAAe,IAAA,EAAK;AAAA,QACpB,SAAA,sBAAe,IAAA;AAAK,OACrB,CAAA;AAGD,MAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,QAAA,MAAM,IAAI,iBAAA,CAAkB,8DAAA,EAAc,MAAM,CAAA;AAAA,MAClD;AACA,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,MAAA,CAAO,aAAa,MAAM,CAAA;AAGvD,MAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,SAAA,CAAU,EAAA,EAAI;AAAA,QACjC,MAAA,EAAQ,SAAA;AAAA,QACR,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAGD,MAAA,IAAA,CAAK,SAAA,CAAU;AAAA,QACb,IAAA,EAAM,aAAA;AAAA,QACN,UAAU,SAAA,CAAU,EAAA;AAAA,QACpB,SAAA,sBAAe,IAAA,EAAK;AAAA,QACpB,IAAA,EAAM,EAAE,MAAA,EAAQ,SAAA;AAAU,OAC3B,CAAA;AAED,MAAA,OAAO,SAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,iBAAA;AAAA,QACR,oDAAA,IAAgB,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,0BAAA,CAAA;AAAA,QACzD,EAAE,eAAe,KAAA;AAAM,OACzB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,QAAA,EAAgD;AAE9D,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA;AAC5C,IAAA,IAAI,MAAA,IAAU,IAAA,CAAK,GAAA,EAAI,GAAI,MAAA,CAAO,YAAY,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,SAAA,GAAY,GAAA,EAAM;AAChF,MAAA,OAAO,MAAA,CAAO,MAAA;AAAA,IAChB;AAGA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,CAAa,QAAA,EAAkB,OAAA,EAAuD;AAC1F,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,iBAAA,CAAkB,kCAAA,GAAa,QAAS,CAAA;AAAA,IACpD;AAEA,IAAA,MAAM,aAAA,GAA8B;AAAA,MAClC,GAAG,QAAA;AAAA,MACH,GAAG,OAAA;AAAA,MACH,SAAA,sBAAe,IAAA;AAAK,KACtB;AAGA,IAAA,IAAA,CAAK,eAAe,aAAa,CAAA;AAGjC,IAAA,IAAA,CAAK,WAAA,CAAY,IAAI,QAAA,EAAU;AAAA,MAC7B,MAAA,EAAQ,aAAA;AAAA,MACR,SAAA,EAAW,KAAK,GAAA;AAAI,KACrB,CAAA;AAGD,IAAA,IAAA,CAAK,SAAA,CAAU;AAAA,MACb,IAAA,EAAM,aAAA;AAAA,MACN,QAAA,EAAU,QAAA;AAAA,MACV,SAAA,sBAAe,IAAA,EAAK;AAAA,MACpB,IAAA,EAAM,EAAE,MAAA,EAAQ,aAAA;AAAc,KAC/B,CAAA;AAED,IAAA,OAAO,aAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,QAAA,EAAiC;AAClD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,iBAAA,CAAkB,kCAAA,GAAa,QAAS,CAAA;AAAA,IACpD;AAGA,IAAA,IAAA,CAAK,WAAA,CAAY,OAAO,QAAQ,CAAA;AAGhC,IAAA,IAAA,CAAK,SAAA,CAAU;AAAA,MACb,IAAA,EAAM,eAAA;AAAA,MACN,QAAA,EAAU,QAAA;AAAA,MACV,SAAA,sBAAe,IAAA,EAAK;AAAA,MACpB,IAAA,EAAM,EAAE,QAAA;AAAS,KAClB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,CAAmB,QAAA,EAAkB,UAAA,EAA8C;AACvF,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,iBAAA,CAAkB,8DAAA,EAAc,EAAE,QAAA,EAAU,YAAY,CAAA;AAAA,IACpE;AACA,IAAA,OAAO,MAAM,IAAA,CAAK,MAAA,CAAO,kBAAA,CAAmB,UAAU,UAAU,CAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAO,OAAA,EAA+C;AAC1D,IAAA,MAAM,QAAA,GAAW,KAAK,UAAA,EAAW;AACjC,IAAA,MAAM,SAAA,uBAAgB,IAAA,EAAK;AAE3B,IAAA,MAAA,CAAO,KAAK,8DAAA,EAAqC;AAAA,MAC/C,QAAA;AAAA,MACA,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,aAAA,EAAe,CAAC,CAAC,OAAA,CAAQ,UAAA;AAAA,MACzB,YAAA,EAAc,CAAC,CAAC,OAAA,CAAQ;AAAA,KACzB,CAAA;AAED,IAAA,IAAI;AAEF,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,OAAO,OAAA,CAAQ,QAAA,KAAa,QAAA,IAAY,OAAA,CAAQ,aAAa,IAAA,EAAM;AAErE,QAAA,MAAA,GAAS,OAAA,CAAQ,QAAA;AACjB,QAAA,MAAA,CAAO,KAAK,4FAAA,EAA0C;AAAA,UACpD,UAAU,MAAA,CAAO,EAAA;AAAA,UACjB,YAAY,MAAA,CAAO,IAAA;AAAA,UACnB,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,WAAA,EAAa,OAAO,MAAA,CAAO,MAAA;AAAA,UAC3B,WAAA,EAAa,CAAC,CAAC,MAAA,CAAO,QAAA;AAAA,UACtB,eAAA,EAAiB,OAAO,QAAA,EAAU,OAAA;AAAA,UAClC,mBAAA,EAAqB,MAAA,CAAO,QAAA,EAAU,MAAA,EAAQ,MAAA,IAAU,CAAA;AAAA,UACxD,gBACE,MAAA,CAAO,QAAA,EAAU,MAAA,EAAQ,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAA,EAAK,CAAA,CAAE,KAAK,UAAA,EAAY,CAAA,CAAE,UAAA,EAAW,CAAE,KAAK;AAAC,SACvF,CAAA;AAAA,MACH,CAAA,MAAO;AAEL,QAAA,MAAA,CAAO,IAAA,CAAK,gFAAA,EAAwC,OAAA,CAAQ,QAAQ,CAAA;AACpE,QAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,QAAkB,CAAA;AACpE,QAAA,IAAI,CAAC,YAAA,EAAc;AACjB,UAAA,MAAM,IAAI,iBAAA,CAAkB,8CAAA,GAAe,OAAA,CAAQ,QAAS,CAAA;AAAA,QAC9D;AACA,QAAA,MAAA,GAAS,YAAA;AACT,QAAA,MAAA,CAAO,KAAK,mFAAA,EAAwC;AAAA,UAClD,UAAU,MAAA,CAAO,EAAA;AAAA,UACjB,YAAY,MAAA,CAAO;AAAA,SACpB,CAAA;AAAA,MACH;AAGA,MAAA,MAAM,QAAA,GAA2B;AAAA,QAC/B,QAAA;AAAA,QACA,MAAA,EAAQ,SAAA;AAAA,QACR,QAAA,EAAU,CAAA;AAAA,QACV,aAAA,EAAe,CAAA;AAAA,QACf,SAAA,EAAW,CAAA;AAAA,QACX;AAAA,OACF;AAEA,MAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,QAAA,EAAU,QAAQ,CAAA;AAGzC,MAAA,IAAA,CAAK,SAAA,CAAU;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,QAAA;AAAA,QACA,SAAA,EAAW,SAAA;AAAA,QACX,IAAA,EAAM,EAAE,MAAA,EAAQ,OAAA;AAAQ,OACzB,CAAA;AAGD,MAAA,IAAI,OAAA,CAAQ,WAAW,UAAA,EAAY;AACjC,QAAA,MAAA,CAAO,KAAK,wFAAmD,CAAA;AAC/D,QAAA,OAAA,CAAQ,SAAA,CAAU,WAAW,QAAQ,CAAA;AAAA,MACvC;AAEA,MAAA,MAAA,CAAO,KAAK,4EAAuC,CAAA;AAGnD,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA;AACvC,MAAA,MAAA,CAAO,KAAK,uEAAA,EAAsC;AAAA,QAChD,YAAY,IAAA,CAAK,MAAA;AAAA,QACjB,SAAA,EAAW,IAAA,CAAK,CAAC,CAAA,GAAI,MAAA,CAAO,KAAK,IAAA,CAAK,CAAC,CAAC,CAAA,GAAI,EAAC;AAAA,QAC7C,UAAA,EAAY,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC;AAAA,OAC5B,CAAA;AAED,MAAA,QAAA,CAAS,YAAY,IAAA,CAAK,MAAA;AAC1B,MAAA,QAAA,CAAS,MAAA,GAAS,YAAA;AAGlB,MAAA,IAAI,OAAA,CAAQ,WAAW,UAAA,EAAY;AACjC,QAAA,MAAA,CAAO,KAAK,oGAAqD,CAAA;AACjE,QAAA,QAAA,CAAS,QAAA,GAAW,EAAA;AACpB,QAAA,OAAA,CAAQ,SAAA,CAAU,WAAW,QAAQ,CAAA;AAAA,MACvC;AAGA,MAAA,MAAA,CAAO,KAAK,4EAAuC,CAAA;AACnD,MAAA,MAAM,gBAAgB,MAAM,IAAA,CAAK,WAAA,CAAY,IAAA,EAAM,SAAS,MAAM,CAAA;AAClE,MAAA,MAAA,CAAO,KAAK,uEAAA,EAAsC;AAAA,QAChD,gBAAgB,IAAA,CAAK,MAAA;AAAA,QACrB,iBAAiB,aAAA,CAAc;AAAA,OAChC,CAAA;AAGD,MAAA,IAAI,OAAA,CAAQ,WAAW,UAAA,EAAY;AACjC,QAAA,MAAA,CAAO,KAAK,oGAAqD,CAAA;AACjE,QAAA,QAAA,CAAS,QAAA,GAAW,EAAA;AACpB,QAAA,OAAA,CAAQ,SAAA,CAAU,WAAW,QAAQ,CAAA;AAAA,MACvC;AAGA,MAAA,MAAA,CAAO,KAAK,4EAAuC,CAAA;AACnD,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,aAAa,aAAA,EAAe,MAAA,EAAQ,SAAS,QAAQ,CAAA;AAC/E,MAAA,MAAA,CAAO,KAAK,uEAAA,EAAsC;AAAA,QAChD,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,cAAc,MAAA,CAAO;AAAA,OACtB,CAAA;AAGD,MAAA,QAAA,CAAS,MAAA,GAAS,WAAA;AAClB,MAAA,QAAA,CAAS,QAAA,GAAW,GAAA;AACpB,MAAA,QAAA,CAAS,gBAAgB,IAAA,CAAK,MAAA;AAG9B,MAAA,IAAI,OAAA,CAAQ,WAAW,SAAA,EAAW;AAChC,QAAA,MAAA,CAAO,KAAK,wEAA6C,CAAA;AACzD,QAAA,OAAA,CAAQ,SAAA,CAAU,UAAU,MAAM,CAAA;AAAA,MACpC;AAGA,MAAA,IAAA,CAAK,SAAA,CAAU;AAAA,QACb,IAAA,EAAM,iBAAA;AAAA,QACN,QAAA;AAAA,QACA,SAAA,sBAAe,IAAA,EAAK;AAAA,QACpB,IAAA,EAAM,EAAE,MAAA;AAAO,OAChB,CAAA;AAGD,MAAA,IAAA,CAAK,WAAA,CAAY,IAAI,QAAA,EAAU;AAAA,QAC7B,MAAA;AAAA,QACA,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAGD,MAAA,IAAA,CAAK,aAAA,CAAc,OAAO,QAAQ,CAAA;AAElC,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,QAAA,GAAwB;AAAA,QAC5B,IAAA,EAAM,eAAA;AAAA,QACN,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,0BAAA;AAAA,QAClD,OAAA,EAAS,EAAE,aAAA,EAAe,KAAA,EAAM;AAAA,QAChC,SAAA,sBAAe,IAAA;AAAK,OACtB;AAGA,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAChD,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,CAAS,MAAA,GAAS,QAAA;AAClB,QAAA,QAAA,CAAS,QAAQ,QAAA,CAAS,OAAA;AAC1B,QAAA,IAAA,CAAK,aAAA,CAAc,OAAO,QAAQ,CAAA;AAAA,MACpC;AAGA,MAAA,IAAI,OAAA,CAAQ,WAAW,OAAA,EAAS;AAC9B,QAAA,MAAA,CAAO,KAAK,sEAA2C,CAAA;AACvD,QAAA,OAAA,CAAQ,SAAA,CAAU,QAAQ,QAAQ,CAAA;AAAA,MACpC;AAGA,MAAA,IAAA,CAAK,SAAA,CAAU;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,QAAA;AAAA,QACA,SAAA,sBAAe,IAAA,EAAK;AAAA,QACpB,OAAO,QAAA,CAAS,OAAA;AAAA,QAChB,IAAA,EAAM,EAAE,KAAA,EAAO,QAAA;AAAS,OACzB,CAAA;AAED,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,QAAA,EAAyC;AACzD,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA,IAAK,IAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,QAAA,EAA2B;AACtC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAChD,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,QAAA,CAAS,MAAA,GAAS,WAAA;AAClB,IAAA,IAAA,CAAK,aAAA,CAAc,OAAO,QAAQ,CAAA;AAGlC,IAAA,IAAA,CAAK,SAAA,CAAU;AAAA,MACb,IAAA,EAAM,eAAA;AAAA,MACN,QAAA;AAAA,MACA,SAAA,sBAAe,IAAA,EAAK;AAAA,MACpB,IAAA,EAAM,EAAE,QAAA;AAAS,KAClB,CAAA;AAED,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAA,CAAiB,MAAc,QAAA,EAAqC;AAClE,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA,EAAG;AAClC,MAAA,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAA,EAAM,EAAE,CAAA;AAAA,IAClC;AACA,IAAA,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA,CAAG,KAAK,QAAQ,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,CAAoB,MAAc,QAAA,EAAqC;AACrE,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AAC9C,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,OAAA,CAAQ,QAAQ,CAAA;AACxC,MAAA,IAAI,QAAQ,EAAA,EAAI;AACd,QAAA,SAAA,CAAU,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,UAAA,GAAqB;AAC3B,IAAA,OAAO,SAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAK,GAAA,GAAO,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,MAAA,EAA4B;AACjD,IAAA,IAAI,CAAC,MAAA,CAAO,IAAA,IAAQ,OAAO,IAAA,CAAK,IAAA,OAAW,EAAA,EAAI;AAC7C,MAAA,MAAM,IAAI,kBAAkB,kDAAU,CAAA;AAAA,IACxC;AAEA,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,WAAW,CAAA,EAAG;AAChD,MAAA,MAAM,IAAI,kBAAkB,8DAAY,CAAA;AAAA,IAC1C;AAEA,IAAA,MAAM,gBAAgB,MAAA,CAAO,MAAA,CAAO,OAAO,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA;AAC3D,IAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,MAAA,MAAM,IAAI,kBAAkB,8DAAY,CAAA;AAAA,IAC1C;AAGA,IAAA,MAAM,OAAO,MAAA,CAAO,MAAA,CAAO,IAAI,CAAC,CAAA,KAAM,EAAE,GAAG,CAAA;AAC3C,IAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,IAAI,CAAA;AAC/B,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,UAAA,CAAW,IAAA,EAAM;AACnC,MAAA,MAAM,IAAI,kBAAkB,kDAAU,CAAA;AAAA,IACxC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,QAAQ,OAAA,EAAwC;AAC5D,IAAA,MAAA,CAAO,KAAK,wEAA6C,CAAA;AACzD,IAAA,IAAI;AAEF,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA,EAAG;AACrC,QAAA,MAAA,CAAO,KAAK,wGAAA,EAA4C;AAAA,UACtD,MAAA,EAAQ,QAAQ,UAAA,CAAW;AAAA,SAC5B,CAAA;AACD,QAAA,OAAO,OAAA,CAAQ,UAAA;AAAA,MACjB;AAGA,MAAA,IAAI,OAAO,OAAA,CAAQ,UAAA,KAAe,UAAA,EAAY;AAC5C,QAAA,MAAA,CAAO,KAAK,kFAAwC,CAAA;AACpD,QAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,UAAA,EAAW;AACtC,QAAA,MAAA,CAAO,KAAK,yFAAA,EAAyC;AAAA,UACnD,UAAU,OAAO,IAAA;AAAA,UACjB,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,UAC3B,QAAQ,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,KAAK,MAAA,GAAS;AAAA,SAC7C,CAAA;AACD,QAAA,OAAO,IAAA;AAAA,MACT;AAGA,MAAA,OAAA,CAAQ,KAAA,CAAM,mFAAA,EAAwC,OAAO,OAAA,CAAQ,UAAU,CAAA;AAC/E,MAAA,MAAM,IAAI,gBAAgB,wDAAW,CAAA;AAAA,IACvC,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,yEAAsC,KAAK,CAAA;AACzD,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,wCAAA,IAAc,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,0BAAA,CAAA;AAAA,QACvD,EAAE,eAAe,KAAA;AAAM,OACzB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,WAAA,CACZ,IAAA,EACA,OAAA,EACA,MAAA,EACgB;AAChB,IAAA,MAAA,CAAO,KAAK,0EAAA,EAAiD;AAAA,MAC3D,YAAY,IAAA,CAAK,MAAA;AAAA,MACjB,YAAY,CAAC,EAAE,QAAQ,OAAA,IAAW,OAAA,CAAQ,QAAQ,MAAA,GAAS,CAAA,CAAA;AAAA,MAC3D,WAAW,CAAC,EAAE,QAAQ,MAAA,IAAU,OAAA,CAAQ,OAAO,MAAA,GAAS,CAAA,CAAA;AAAA,MACxD,aAAA,EAAe,CAAC,CAAC,OAAA,CAAQ,UAAA;AAAA,MACzB,aAAa,CAAC,EAAE,MAAA,CAAO,QAAA,IAAY,OAAO,QAAA,CAAS,OAAA,CAAA;AAAA,MACnD,SAAS,MAAA,CAAO;AAAA,KACjB,CAAA;AAGD,IAAA,MAAA,CAAO,KAAK,sFAAA,EAAyC;AAAA,MACnD,gBAAgB,MAAA,CAAO,QAAA;AAAA,MACvB,cAAA,EAAgB,CAAC,CAAC,MAAA,CAAO,QAAA;AAAA,MACzB,eAAA,EAAiB,OAAO,QAAA,EAAU,OAAA;AAAA,MAClC,cAAA,EAAgB,OAAO,QAAA,EAAU,MAAA;AAAA,MACjC,oBAAA,EAAsB,MAAA,CAAO,QAAA,EAAU,MAAA,EAAQ;AAAA,KAChD,CAAA;AAED,IAAA,IAAI,aAAA,GAAgB,CAAC,GAAG,IAAI,CAAA;AAG5B,IAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA,EAAG;AACjD,MAAA,MAAA,CAAO,KAAK,sEAAsC,CAAA;AAClD,MAAA,aAAA,GAAgB,IAAA,CAAK,YAAA,CAAa,aAAA,EAAe,OAAA,CAAQ,OAAO,CAAA;AAChE,MAAA,MAAA,CAAO,KAAK,6EAAA,EAAuC;AAAA,QACjD,cAAc,IAAA,CAAK,MAAA;AAAA,QACnB,aAAa,aAAA,CAAc;AAAA,OAC5B,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,EAAG;AAC/C,MAAA,MAAA,CAAO,KAAK,gEAAqC,CAAA;AACjD,MAAA,aAAA,GAAgB,IAAA,CAAK,YAAA,CAAa,aAAA,EAAe,OAAA,CAAQ,MAAM,CAAA;AAC/D,MAAA,MAAA,CAAO,KAAK,sEAAmC,CAAA;AAAA,IACjD;AAGA,IAAA,IAAI,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,OAAA,EAAS;AAC9C,MAAA,MAAA,CAAO,KAAK,gEAAqC,CAAA;AACjD,MAAA,aAAA,GAAgB,IAAA,CAAK,aAAA,CAAc,aAAA,EAAe,MAAA,CAAO,QAAQ,CAAA;AACjE,MAAA,MAAA,CAAO,KAAK,uEAAA,EAAsC;AAAA,QAChD,WAAA,EAAa,IAAA,CAAK,WAAA,CAAY,aAAa,CAAA;AAAA,QAC3C,cAAc,aAAA,CAAc;AAAA,OAC7B,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,MAAA,CAAO,KAAK,gEAAqC,CAAA;AACjD,MAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,OAAA,CAAQ,UAAA;AACnC,MAAA,MAAM,KAAA,GAAA,CAAS,OAAO,CAAA,IAAK,QAAA;AAC3B,MAAA,MAAM,MAAM,KAAA,GAAQ,QAAA;AACpB,MAAA,aAAA,GAAgB,aAAA,CAAc,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAC9C,MAAA,MAAA,CAAO,KAAK,uEAAA,EAAsC;AAAA,QAChD,IAAA;AAAA,QACA,QAAA;AAAA,QACA,KAAA;AAAA,QACA,GAAA;AAAA,QACA,cAAc,aAAA,CAAc;AAAA,OAC7B,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,MAAA,CAAO,OAAA,IAAW,aAAA,CAAc,MAAA,GAAS,OAAO,OAAA,EAAS;AAC3D,MAAA,MAAA,CAAO,KAAK,4EAAuC,CAAA;AACnD,MAAA,aAAA,GAAgB,aAAA,CAAc,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,OAAO,CAAA;AACrD,MAAA,MAAA,CAAO,KAAK,mFAAA,EAAwC;AAAA,QAClD,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,cAAc,aAAA,CAAc;AAAA,OAC7B,CAAA;AAAA,IACH;AAEA,IAAA,MAAA,CAAO,KAAK,uEAAA,EAAgD;AAAA,MAC1D,gBAAgB,IAAA,CAAK,MAAA;AAAA,MACrB,aAAa,aAAA,CAAc;AAAA,KAC5B,CAAA;AAED,IAAA,OAAO,aAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAA,CAAa,MAAa,OAAA,EAAuB;AACvD,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,IAAA,KAAS;AAC3B,MAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAC,MAAA,KAAW;AAC/B,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,OAAO,KAAK,CAAA;AAEpD,QAAA,QAAQ,OAAO,QAAA;AAAU,UACvB,KAAK,IAAA;AACH,YAAA,OAAO,UAAU,MAAA,CAAO,KAAA;AAAA,UAC1B,KAAK,IAAA;AACH,YAAA,OAAO,UAAU,MAAA,CAAO,KAAA;AAAA,UAC1B,KAAK,IAAA;AACH,YAAA,OAAO,QAAQ,MAAA,CAAO,KAAA;AAAA,UACxB,KAAK,KAAA;AACH,YAAA,OAAO,SAAS,MAAA,CAAO,KAAA;AAAA,UACzB,KAAK,IAAA;AACH,YAAA,OAAO,QAAQ,MAAA,CAAO,KAAA;AAAA,UACxB,KAAK,KAAA;AACH,YAAA,OAAO,SAAS,MAAA,CAAO,KAAA;AAAA,UACzB,KAAK,UAAA;AACH,YAAA,OAAO,OAAO,KAAK,CAAA,CAAE,SAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,UACpD,KAAK,YAAA;AACH,YAAA,OAAO,OAAO,KAAK,CAAA,CAAE,WAAW,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,UACtD,KAAK,UAAA;AACH,YAAA,OAAO,OAAO,KAAK,CAAA,CAAE,SAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,UACpD,KAAK,IAAA;AACH,YAAA,OAAO,KAAA,CAAM,QAAQ,MAAA,CAAO,KAAK,KAAK,MAAA,CAAO,KAAA,CAAM,SAAS,KAAK,CAAA;AAAA,UACnE,KAAK,OAAA;AACH,YAAA,OAAO,KAAA,CAAM,QAAQ,MAAA,CAAO,KAAK,KAAK,CAAC,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA;AAAA,UACpE;AACE,YAAA,OAAO,IAAA;AAAA;AACX,MACF,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAA,CAAa,MAAa,MAAA,EAAsB;AACtD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACzB,MAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,cAAA,CAAe,CAAA,EAAG,KAAK,KAAK,CAAA;AAChD,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,cAAA,CAAe,CAAA,EAAG,KAAK,KAAK,CAAA;AAEhD,QAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,UAAA,OAAO,IAAA,CAAK,SAAA,KAAc,KAAA,GAAQ,EAAA,GAAK,CAAA;AAAA,QACzC;AACA,QAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,UAAA,OAAO,IAAA,CAAK,SAAA,KAAc,KAAA,GAAQ,CAAA,GAAI,EAAA;AAAA,QACxC;AAAA,MACF;AACA,MAAA,OAAO,CAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAA,CAAe,KAAU,IAAA,EAAmB;AAClD,IAAA,OAAO,KAAK,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAAC,SAAS,GAAA,KAAQ;AAC9C,MAAA,OAAO,WAAW,OAAA,CAAQ,GAAG,MAAM,MAAA,GAAY,OAAA,CAAQ,GAAG,CAAA,GAAI,IAAA;AAAA,IAChE,GAAG,GAAG,CAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAA,CAAkB,MAAa,MAAA,EAAsC;AAC3E,IAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU;AAE9C,MAAA,MAAM,eAAA,GAAkB,CAAC,cAAA,EAAgB,OAAA,EAAS,YAAY,CAAA;AAC9D,MAAA,IAAI,eAAA,CAAgB,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,EAAG;AACvC,QAAA,MAAA,CAAO,KAAK,2EAAA,GAA0C,KAAA,CAAM,MAAO,KAAA,GAAS,KAAA,CAAM,QAAS,GAAG,CAAA;AAC9F,QAAA,OAAO,IAAA;AAAA,MACT;AAGA,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,CAAC,IAAA,KAAS;AACnC,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,MAAM,GAAG,CAAA;AACjD,QAAA,OAAO,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,EAAA;AAAA,MAC5D,CAAC,CAAA;AAED,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAA,CAAO,IAAA;AAAA,UACL,mDAAA,GAAsC,KAAA,CAAM,GAAA,GAAO,KAAA,GAAS,MAAM,KAAA,GAAS;AAAA,SAC7E;AAAA,MACF;AAEA,MAAA,OAAO,QAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,KAAK,0EAAA,EAAuC;AAAA,MACjD,gCAAO,MAAA,CAAO,MAAA;AAAA,MACd,sCAAQ,cAAA,CAAe,MAAA;AAAA,MACvB,oCAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,CAAC,MAAM,CAAC,cAAA,CAAe,QAAA,CAAS,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAG,CAAA;AAAA,MAC1E,gCAAO,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAG;AAAA,KACvC,CAAA;AAED,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,YAAA,CACZ,IAAA,EACA,MAAA,EACA,SACA,QAAA,EACuB;AACvB,IAAA,MAAM,SAAA,uBAAgB,IAAA,EAAK;AAC3B,IAAA,MAAM,gBAAgB,MAAA,CAAO,MAAA,CAAO,OAAO,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA;AAE3D,IAAA,MAAA,CAAO,KAAK,2EAAA,EAAkD;AAAA,MAC5D,YAAY,IAAA,CAAK,MAAA;AAAA,MACjB,oBAAoB,aAAA,CAAc,MAAA;AAAA,MAClC,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,aAAA,EAAe,aAAA,CAAc,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAA,EAAK,CAAA,CAAE,GAAA,EAAK,KAAA,EAAO,CAAA,CAAE,KAAA,EAAM,CAAE;AAAA,KACzE,CAAA;AAED,IAAA,IAAI;AACF,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI,QAAA;AAEJ,MAAA,QAAQ,OAAO,MAAA;AAAQ,QACrB,KAAK,KAAA;AACH,UAAA,MAAA,CAAO,KAAK,mEAAwC,CAAA;AACpD,UAAA,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,IAAA,EAAM,aAAA,EAAe,MAAM,CAAA;AACtD,UAAA,QAAA,GAAW,IAAA,CAAK,gBAAA;AAAA,YACd,OAAA,CAAQ,kBAAkB,MAAA,CAAO,gBAAA;AAAA,YACjC;AAAA,WACF;AACA,UAAA,MAAA,CAAO,KAAK,8DAAA,EAAuC;AAAA,YACjD,eAAe,OAAA,CAAQ,MAAA;AAAA,YACvB;AAAA,WACD,CAAA;AACD,UAAA;AAAA,QACF,KAAK,OAAA;AACH,UAAA,MAAA,CAAO,KAAK,qEAA0C,CAAA;AACtD,UAAA,MAAM,WAAA,GAAc,IAAA,CAAK,aAAA,CAAc,IAAA,EAAM,eAAe,MAAM,CAAA;AAClE,UAAA,QAAA,GAAW,IAAA,CAAK,gBAAA;AAAA,YACd,OAAA,CAAQ,kBAAkB,MAAA,CAAO,gBAAA;AAAA,YACjC;AAAA,WACF;AACA,UAAA,MAAA,CAAO,KAAK,gEAAA,EAAyC;AAAA,YACnD,cAAc,WAAA,CAAY,UAAA;AAAA,YAC1B;AAAA,WACD,CAAA;AAED,UAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,CAAC,WAAW,CAAA,EAAG,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,MAAM,GAAG,CAAA;AACnF,UAAA,MAAMA,QAAAA,uBAAc,IAAA,EAAK;AACzB,UAAA,MAAMC,SAAAA,GAAWD,QAAAA,CAAQ,OAAA,EAAQ,GAAI,UAAU,OAAA,EAAQ;AACvD,UAAA,OAAO;AAAA,YACL,QAAA;AAAA,YACA,QAAA;AAAA,YACA,UAAU,SAAA,CAAU,IAAA;AAAA,YACpB,QAAA,EAAU,SAAA;AAAA,YACV,cAAc,IAAA,CAAK,MAAA;AAAA,YACnB,SAAA;AAAA,YACA,OAAA,EAAAA,QAAAA;AAAA,YACA,QAAA,EAAAC,SAAAA;AAAA,YACA,UAAA,EAAY;AAAA,cACV,WAAW,IAAA,CAAK,MAAA;AAAA,cAChB,cAAc,IAAA,CAAK,MAAA;AAAA,cACnB,cAAc,IAAA,CAAK,MAAA;AAAA,cACnB,WAAA,EAAa;AAAA;AACf,WACF;AAAA,QACF,KAAK,MAAA;AACH,UAAA,MAAA,CAAO,KAAK,oEAAyC,CAAA;AACrD,UAAA,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,aAAa,CAAA;AAC/C,UAAA,QAAA,GAAW,IAAA,CAAK,gBAAA;AAAA,YACd,OAAA,CAAQ,kBAAkB,MAAA,CAAO,gBAAA;AAAA,YACjC;AAAA,WACF;AACA,UAAA,MAAA,CAAO,KAAK,+DAAA,EAAwC;AAAA,YAClD,eAAe,OAAA,CAAQ,MAAA;AAAA,YACvB;AAAA,WACD,CAAA;AACD,UAAA;AAAA,QACF;AACE,UAAA,OAAA,CAAQ,KAAA,CAAM,uEAAA,EAAsC,MAAA,CAAO,MAAM,CAAA;AACjE,UAAA,MAAM,IAAI,eAAA,CAAgB,oDAAA,GAAgB,MAAA,CAAO,MAAO,CAAA;AAAA;AAI5D,MAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,CAAC,OAAO,CAAA,EAAG,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,MAAM,GAAG,CAAA;AAG1E,MAAA,IAAI,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,WAAA,EAAa;AACvC,QAAA,MAAM,IAAI,gBAAgB,oDAAA,GAAgB,IAAA,CAAK,OAAQ,KAAA,GAAS,IAAA,CAAK,OAAO,WAAY,CAAA;AAAA,MAC1F;AAEA,MAAA,MAAM,OAAA,uBAAc,IAAA,EAAK;AACzB,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,OAAA,EAAQ,GAAI,UAAU,OAAA,EAAQ;AAEvD,MAAA,OAAO;AAAA,QACL,QAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAU,IAAA,CAAK,IAAA;AAAA,QACf,QAAA,EAAU,IAAA;AAAA,QACV,cAAc,IAAA,CAAK,MAAA;AAAA,QACnB,SAAA;AAAA,QACA,OAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAA,EAAY;AAAA,UACV,WAAW,IAAA,CAAK,MAAA;AAAA,UAChB,cAAc,IAAA,CAAK,MAAA;AAAA,UACnB,cAAc,IAAA,CAAK,MAAA;AAAA,UACnB,WAAA,EAAa;AAAA;AACf,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,wCAAA,IAAc,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,0BAAA,CAAA;AAAA,QACvD,EAAE,eAAe,KAAA;AAAM,OACzB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAA,CAAY,IAAA,EAAa,MAAA,EAAuB,MAAA,EAA8B;AACpF,IAAA,MAAA,CAAO,KAAK,0EAAA,EAAiD;AAAA,MAC3D,YAAY,IAAA,CAAK,MAAA;AAAA,MACjB,aAAa,MAAA,CAAO,MAAA;AAAA,MACpB,eAAe,MAAA,CAAO,aAAA;AAAA,MACtB,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,QAAQ,MAAA,CAAO;AAAA,KAChB,CAAA;AAED,IAAA,MAAM,QAAkB,EAAC;AAGzB,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AACnB,MAAA,MAAA,CAAO,KAAK,oDAAmC,CAAA;AAAA,IACjD;AAGA,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,iBAAA,CAAkB,IAAA,EAAM,MAAM,CAAA;AAC1D,IAAA,MAAA,CAAO,KAAK,oEAAA,EAAsC;AAAA,MAChD,qBAAqB,MAAA,CAAO,MAAA;AAAA,MAC5B,qBAAqB,cAAA,CAAe,MAAA;AAAA,MACpC,aAAA,EAAe,MAAA,CACZ,MAAA,CAAO,CAAC,MAAmB,CAAC,cAAA,CAAe,QAAA,CAAS,CAAC,CAAC,CAAA,CACtD,GAAA,CAAI,CAAC,CAAA,KAAmB,EAAE,GAAG;AAAA,KACjC,CAAA;AAGD,IAAA,IAAI,OAAO,aAAA,EAAe;AACxB,MAAA,MAAM,OAAA,GAAU,eAAe,GAAA,CAAI,CAAC,MAAM,IAAA,CAAK,cAAA,CAAe,CAAA,CAAE,KAAK,CAAC,CAAA;AACtE,MAAA,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,SAAS,CAAC,CAAA;AACzC,MAAA,MAAA,CAAO,IAAA,CAAK,gEAAqC,OAAO,CAAA;AAAA,IAC1D;AAGA,IAAA,MAAA,CAAO,KAAK,kFAAwC,CAAA;AACpD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AACnB,MAAA,IAAI,MAAM,CAAA,EAAG;AACX,QAAA,MAAA,CAAO,IAAA,CAAK,kFAAwC,IAAI,CAAA;AAAA,MAC1D;AAEA,MAAA,MAAM,GAAA,GAAM,cAAA,CAAe,GAAA,CAAI,CAAC,KAAA,KAAU;AAExC,QAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,UAAA,OAAO,KAAK,cAAA,CAAe,IAAA,CAAK,KAAA,CAAM,GAAG,KAAK,EAAE,CAAA;AAAA,QAClD;AAEA,QAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,MAAM,GAAG,CAAA;AAG/C,QAAA,IAAI,MAAM,SAAA,EAAW;AACnB,UAAA,KAAA,GAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAAA,QAC/B,CAAA,MAAA,IAAW,kBAAA,CAAmB,KAAA,CAAM,IAAI,CAAA,EAAG;AACzC,UAAA,KAAA,GAAQ,kBAAA,CAAmB,KAAA,CAAM,IAAI,CAAA,CAAE,KAAK,CAAA;AAAA,QAC9C,CAAA,MAAO;AACL,UAAA,KAAA,GAAQ,MAAA,CAAO,SAAS,EAAE,CAAA;AAAA,QAC5B;AAEA,QAAA,OAAO,IAAA,CAAK,eAAe,KAAK,CAAA;AAAA,MAClC,CAAC,CAAA;AAED,MAAA,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,SAAS,CAAC,CAAA;AAErC,MAAA,IAAI,MAAM,CAAA,EAAG;AACX,QAAA,MAAA,CAAO,IAAA,CAAK,kFAAwC,GAAG,CAAA;AAAA,MACzD;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAC9B,IAAA,MAAA,CAAO,KAAK,8DAAA,EAAuC;AAAA,MACjD,YAAY,KAAA,CAAM,MAAA;AAAA,MAClB,cAAc,MAAA,CAAO;AAAA,KACtB,CAAA;AACD,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAA,CAAa,MAAa,MAAA,EAA+B;AAC/D,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,GAAA,CAAI,CAAC,IAAA,KAAS;AACvC,MAAA,MAAM,YAAiC,EAAC;AAExC,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,MAAM,GAAG,CAAA;AAG/C,QAAA,IAAI,MAAM,SAAA,EAAW;AACnB,UAAA,KAAA,GAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAAA,QAC/B,CAAA,MAAA,IAAW,kBAAA,CAAmB,KAAA,CAAM,IAAI,CAAA,EAAG;AACzC,UAAA,KAAA,GAAQ,kBAAA,CAAmB,KAAA,CAAM,IAAI,CAAA,CAAE,KAAK,CAAA;AAAA,QAC9C;AAEA,QAAA,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA;AAAA,MACzB;AAEA,MAAA,OAAO,SAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,aAAA,EAAe,IAAA,EAAM,CAAC,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,KAAA,EAAuB;AAC5C,IAAA,IAAI,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,EAAG;AACtE,MAAA,OAAO,GAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA,GAAK,GAAA;AAAA,IAC7C;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAA,CAAiB,UAAkB,SAAA,EAA2B;AACpE,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,UAAU,GAAA,CAAI,WAAA,GAAc,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAC9C,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,YAAA,EAAa,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAElE,IAAA,OACE,SACG,OAAA,CAAQ,QAAA,EAAU,OAAO,CAAA,CACzB,QAAQ,QAAA,EAAU,OAAO,CAAA,CACzB,OAAA,CAAQ,eAAe,GAAA,CAAI,OAAA,GAAU,QAAA,EAAU,IAAI,GAAA,GAAO,SAAA;AAAA,EAEjE;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,MAAA,EAA8B;AAChD,IAAA,QAAQ,MAAA;AAAQ,MACd,KAAK,KAAA;AACH,QAAA,OAAO,yBAAA;AAAA,MACT,KAAK,MAAA;AACH,QAAA,OAAO,iCAAA;AAAA,MACT,KAAK,OAAA;AACH,QAAA,OAAO,mEAAA;AAAA,MACT;AACE,QAAA,OAAO,0BAAA;AAAA;AACX,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAU,KAAA,EAA0B;AAC1C,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,MAAM,IAAI,CAAA;AACpD,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAAa;AAC9B,QAAA,IAAI;AACF,UAAA,QAAA,CAAS,KAAK,CAAA;AAAA,QAChB,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,KAAA,CAAM,2DAAc,KAAK,CAAA;AAAA,QACnC;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,aAAA,CAAc,MAAa,cAAA,EAAuC;AACxE,IAAA,MAAA,CAAO,KAAK,4EAAA,EAAmD;AAAA,MAC7D,YAAY,IAAA,CAAK,MAAA;AAAA,MACjB,gBAAgB,cAAA,CAAe,MAAA,CAAO,IAAI,CAAC,CAAA,KAAM,EAAE,GAAG,CAAA;AAAA,MACtD,eAAe,cAAA,CAAe;AAAA,KAC/B,CAAA;AAED,IAAA,IAAI,CAAC,cAAA,CAAe,MAAA,IAAU,cAAA,CAAe,MAAA,CAAO,WAAW,CAAA,EAAG;AAChE,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,iBAAA,CAAkB,IAAA,EAAM,cAAc,CAAA;AAG3D,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,kBAAA,CAAmB,OAAA,EAAS,cAAc,CAAA;AAE9D,IAAA,MAAA,CAAO,KAAK,yEAAA,EAAkD;AAAA,MAC5D,gBAAgB,IAAA,CAAK,MAAA;AAAA,MACrB,eAAe,MAAA,CAAO;AAAA,KACvB,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAA,CAAkB,MAAa,cAAA,EAAoD;AACzF,IAAA,MAAM,MAAA,uBAAa,GAAA,EAAmB;AAEtC,IAAA,KAAA,MAAW,QAAQ,IAAA,EAAM;AAEvB,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,IAAA,EAAM,eAAe,MAAM,CAAA;AAElE,MAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA,EAAG;AACzB,QAAA,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU,EAAE,CAAA;AAAA,MACzB;AACA,MAAA,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA,CAAG,IAAA,CAAK,IAAI,CAAA;AAAA,IACjC;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAA,CAAiB,MAAW,cAAA,EAAyC;AAC3E,IAAA,MAAM,QAAA,GAAW,cAAA,CAAe,GAAA,CAAI,CAAC,KAAA,KAAU;AAC7C,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,MAAM,GAAG,CAAA;AAGjD,MAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,IAAa,UAAU,EAAA,EAAI;AACzD,QAAA,OAAO,UAAA;AAAA,MACT;AAEA,MAAA,OAAO,OAAO,KAAK,CAAA;AAAA,IACrB,CAAC,CAAA;AAED,IAAA,OAAO,QAAA,CAAS,KAAK,GAAG,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAA,CAAmB,QAA4B,cAAA,EAAuC;AAC5F,IAAA,MAAM,SAAgB,EAAC;AAEvB,IAAA,KAAA,MAAW,CAAC,QAAA,EAAU,UAAU,CAAA,IAAK,MAAA,EAAQ;AAC3C,MAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAG7B,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;AAGtC,MAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,YAAA,CAAa,UAAA,EAAY,gBAAgB,WAAW,CAAA;AAChF,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,cAAc,CAAA;AAAA,IAC/B;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAA,CACN,UAAA,EACA,cAAA,EACA,WAAA,EACO;AACP,IAAA,MAAM,SAAgB,EAAC;AAGvB,IAAA,MAAM,kBAAkB,cAAA,CAAe,MAAA,CAAO,KAAK,CAAC,CAAA,KAAM,EAAE,eAAe,CAAA;AAC3E,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,iBAAA,CAAkB,WAAA,EAAa,eAAe,MAAM,CAAA;AAC7E,MAAA,MAAA,CAAO,KAAK,WAAW,CAAA;AAAA,IACzB;AAGA,IAAA,IAAI,cAAA,CAAe,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAEpC,MAAA,MAAA,CAAO,KAAK,GAAG,IAAA,CAAK,2BAA2B,UAAA,EAAY,cAAA,CAAe,MAAM,CAAC,CAAA;AAAA,IACnF,CAAA,MAAO;AAEL,MAAA,MAAM,iBAAA,GAAoB,cAAA,CAAe,MAAA,CAAO,CAAC,CAAA;AAEjD,MAAA,QAAQ,kBAAkB,IAAA;AAAM,QAC9B,KAAK,OAAA;AAEH,UAAA,MAAA,CAAO,KAAK,GAAG,IAAA,CAAK,gBAAA,CAAiB,UAAA,EAAY,iBAAiB,CAAC,CAAA;AACnE,UAAA;AAAA,QACF,KAAK,UAAA;AAEH,UAAA,MAAA,CAAO,IAAA,CAAK,GAAG,UAAU,CAAA;AACzB,UAAA;AAAA,QACF,KAAK,QAAA;AAEH,UAAA,MAAA,CAAO,KAAK,GAAG,IAAA,CAAK,iBAAA,CAAkB,UAAA,EAAY,cAAc,CAAC,CAAA;AACjE,UAAA;AAAA,QACF;AACE,UAAA,MAAA,CAAO,IAAA,CAAK,GAAG,UAAU,CAAA;AAAA;AAC7B,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAA,CAAkB,aAAuB,cAAA,EAAsC;AACrF,IAAA,MAAM,MAAA,GAAc,EAAE,eAAA,EAAiB,IAAA,EAAK;AAE5C,IAAA,cAAA,CAAe,OAAA,CAAQ,CAAC,KAAA,EAAO,KAAA,KAAU;AACvC,MAAA,MAAM,QAAQ,WAAA,CAAY,KAAK,MAAM,UAAA,GAAa,EAAA,GAAK,YAAY,KAAK,CAAA;AACxE,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,mBAAA,IAAwB,KAAA,CAAM,KAAA,GAAS,WAAA;AAC9D,MAAA,MAAA,CAAO,MAAM,GAAG,CAAA,GAAI,QAAA,CAAS,OAAA,CAAQ,WAAW,KAAK,CAAA;AAAA,IACvD,CAAC,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAA,CAAiB,YAAmB,UAAA,EAAkC;AAC5E,IAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAErC,IAAA,MAAM,SAAgB,EAAC;AAGvB,IAAA,MAAM,SAAA,GAAY,EAAE,GAAG,UAAA,CAAW,CAAC,CAAA,EAAE;AACrC,IAAA,SAAA,CAAU,cAAc,UAAA,CAAW,MAAA;AACnC,IAAA,SAAA,CAAU,cAAA,GAAiB,IAAA;AAC3B,IAAA,MAAA,CAAO,KAAK,SAAS,CAAA;AAGrB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,MAAM,IAAA,GAAO,EAAE,GAAG,UAAA,CAAW,CAAC,CAAA,EAAE;AAChC,MAAA,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,EAAA;AACvB,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AACtB,MAAA,IAAA,CAAK,YAAA,GAAe,CAAA;AACpB,MAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,IAClB;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,0BAAA,CAA2B,YAAmB,WAAA,EAAqC;AACzF,IAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAErC,IAAA,MAAM,SAAgB,EAAC;AAGvB,IAAA,MAAM,SAAA,GAAY,EAAE,GAAG,UAAA,CAAW,CAAC,CAAA,EAAE;AACrC,IAAA,SAAA,CAAU,cAAc,UAAA,CAAW,MAAA;AACnC,IAAA,SAAA,CAAU,cAAA,GAAiB,IAAA;AAG3B,IAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC7B,MAAA,SAAA,CAAU,IAAA,GAAQ,KAAA,CAAM,GAAA,GAAO,YAAY,IAAI,UAAA,CAAW,MAAA;AAC1D,MAAA,SAAA,CAAU,IAAA,GAAQ,KAAA,CAAM,GAAA,GAAO,eAAe,CAAA,GAAI,IAAA;AAAA,IACpD,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,KAAK,SAAS,CAAA;AAErB,IAAA,MAAA,CAAO,KAAK,4FAAA,EAA0C;AAAA,MACpD,kBAAkB,UAAA,CAAW,MAAA;AAAA,MAC7B,aAAa,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAG,CAAA;AAAA,MACzC;AAAA,KACD,CAAA;AAGD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,MAAM,IAAA,GAAO,EAAE,GAAG,UAAA,CAAW,CAAC,CAAA,EAAE;AAGhC,MAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC7B,QAAA,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,GAAI,EAAA;AAAA,MACpB,CAAC,CAAA;AAED,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AACtB,MAAA,IAAA,CAAK,YAAA,GAAe,CAAA;AACpB,MAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,IAClB;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAA,CAAkB,YAAmB,cAAA,EAAuC;AAElF,IAAA,IAAI,cAAA,CAAe,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AACtC,MAAA,OAAO,KAAK,gBAAA,CAAiB,UAAA,EAAY,cAAA,CAAe,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,IACnE;AAGA,IAAA,MAAM,iBAAA,GAAoC;AAAA,MACxC,GAAG,cAAA;AAAA,MACH,MAAA,EAAQ,cAAA,CAAe,MAAA,CAAO,KAAA,CAAM,CAAC;AAAA,KACvC;AAEA,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,UAAA,EAAY,iBAAiB,CAAA;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,IAAA,EAAqB;AACvC,IAAA,MAAM,eAAe,IAAA,CAAK,MAAA,CAAO,CAAC,IAAA,KAAS,KAAK,eAAe,CAAA;AAC/D,IAAA,MAAM,cAAc,IAAA,CAAK,MAAA,CAAO,CAAC,IAAA,KAAS,KAAK,cAAc,CAAA;AAC7D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa,MAAA,EAAQ,YAAY,MAAM,CAAA;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAA,CAAc,IAAA,EAAa,MAAA,EAAuB,MAAA,EAAmC;AAC3F,IAAA,MAAA,CAAO,KAAK,4EAAA,EAAmD;AAAA,MAC7D,YAAY,IAAA,CAAK,MAAA;AAAA,MACjB,aAAa,MAAA,CAAO,MAAA;AAAA,MACpB,aAAa,CAAC,EAAE,MAAA,CAAO,QAAA,IAAY,OAAO,QAAA,CAAS,OAAA;AAAA,KACpD,CAAA;AAGD,IAAA,MAAM,QAAA,GAAgB,WAAM,QAAA,EAAS;AAGrC,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,iBAAA,CAAkB,IAAA,EAAM,MAAM,CAAA;AAG1D,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiB,IAAA,EAAM,gBAAgB,MAAM,CAAA;AAGxE,IAAA,MAAM,SAAA,GAAiB,IAAA,CAAA,KAAA,CAAM,YAAA,CAAa,aAAa,CAAA;AAGvD,IAAA,IAAI,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,OAAA,EAAS;AAC9C,MAAA,IAAA,CAAK,kBAAA;AAAA,QACH,SAAA;AAAA,QACA,IAAA;AAAA,QACA,cAAA;AAAA,QACA,MAAA,CAAO,QAAA;AAAA,QACP,MAAA,CAAO;AAAA,OACT;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,oBAAA,CAAqB,WAAW,cAAc,CAAA;AAGnD,IAAA,IAAA,CAAK,oBAAA,CAAqB,SAAA,EAAW,MAAA,CAAO,aAAa,CAAA;AAGzD,IAAK,IAAA,CAAA,KAAA,CAAM,iBAAA,CAAkB,QAAA,EAAU,SAAA,EAAW,QAAQ,CAAA;AAG1D,IAAA,MAAM,WAAA,GAAmB,WAAM,QAAA,EAAU;AAAA,MACvC,QAAA,EAAU,MAAA;AAAA,MACV,IAAA,EAAM,OAAA;AAAA,MACN,UAAA,EAAY;AAAA,KACb,CAAA;AAED,IAAA,MAAA,CAAO,KAAK,wEAA+C,CAAA;AAC3D,IAAA,OAAO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAA,CAAiB,IAAA,EAAa,MAAA,EAAuB,MAAA,EAA+B;AAC1F,IAAA,MAAM,SAAkB,EAAC;AAEzB,IAAA,MAAA,CAAO,KAAK,mEAAA,EAA0C;AAAA,MACpD,YAAY,IAAA,CAAK,MAAA;AAAA,MACjB,aAAa,MAAA,CAAO,MAAA;AAAA,MACpB,eAAe,MAAA,CAAO,aAAA;AAAA,MACtB,aAAa,CAAC,EAAE,MAAA,CAAO,QAAA,IAAY,OAAO,QAAA,CAAS,OAAA;AAAA,KACpD,CAAA;AAGD,IAAA,IAAI,OAAO,aAAA,EAAe;AACxB,MAAA,MAAM,UAAU,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,MAAM,KAAK,CAAA;AACjD,MAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,MAAA,CAAO,IAAA,CAAK,gEAAqC,OAAO,CAAA;AAAA,IAC1D;AAGA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AAEnB,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AAEhC,QAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,UAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,IAAK,EAAA;AAAA,QAC5B;AAEA,QAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,MAAM,GAAG,CAAA;AAG/C,QAAA,IAAI,MAAM,SAAA,EAAW;AACnB,UAAA,KAAA,GAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAAA,QAC/B,CAAA,MAAA,IAAW,kBAAA,CAAmB,KAAA,CAAM,IAAI,CAAA,EAAG;AACzC,UAAA,KAAA,GAAQ,kBAAA,CAAmB,KAAA,CAAM,IAAI,CAAA,CAAE,KAAK,CAAA;AAAA,QAC9C,CAAA,MAAO;AACL,UAAA,KAAA,GAAQ,MAAA,CAAO,SAAS,EAAE,CAAA;AAAA,QAC5B;AAEA,QAAA,OAAO,KAAA;AAAA,MACT,CAAC,CAAA;AAED,MAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAEf,MAAA,IAAI,MAAM,CAAA,EAAG;AACX,QAAA,MAAA,CAAO,IAAA,CAAK,kFAAwC,GAAG,CAAA;AAAA,MACzD;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,KAAK,4EAAA,EAA2C;AAAA,MACrD,WAAW,MAAA,CAAO,MAAA;AAAA,MAClB,UAAA,EAAY,MAAA,CAAO,aAAA,GAAgB,CAAA,GAAI,CAAA;AAAA,MACvC,QAAA,EAAU,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,gBAAgB,CAAA,GAAI,CAAA;AAAA,KACvD,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,mBACN,SAAA,EACA,IAAA,EACA,MAAA,EACA,cAAA,EACA,gBAAyB,IAAA,EACnB;AACN,IAAA,IAAI,CAAC,SAAA,CAAU,SAAS,CAAA,EAAG;AACzB,MAAA,SAAA,CAAU,SAAS,IAAI,EAAC;AAAA,IAC1B;AAEA,IAAA,MAAM,YAAA,GAAe,gBAAgB,CAAA,GAAI,CAAA;AACzC,IAAA,IAAI,UAAA,GAAa,YAAA;AAEjB,IAAA,MAAA,CAAO,KAAK,mHAAA,EAAkD;AAAA,MAC5D,YAAY,IAAA,CAAK,MAAA;AAAA,MACjB,YAAA;AAAA,MACA,cAAA,EAAgB,cAAA,CAAe,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAA,EAAK,CAAA,CAAE,GAAA,EAAK,UAAA,EAAY,CAAA,CAAE,YAAW,CAAE;AAAA,KAC5F,CAAA;AAED,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AAEnB,MAAA,IAAI,IAAA,CAAK,cAAA,IAAkB,IAAA,CAAK,WAAA,GAAc,CAAA,EAAG;AAC/C,QAAA,MAAA,CAAO,KAAK,0EAAA,EAAuC;AAAA,UACjD,GAAA,EAAK,UAAA;AAAA,UACL,WAAW,IAAA,CAAK,WAAA;AAAA,UAChB;AAAA,SACD,CAAA;AAGD,QAAA,cAAA,CAAe,MAAA,CAAO,OAAA,CAAQ,CAAC,UAAA,KAAe;AAC5C,UAAA,IAAI,WAAW,UAAA,EAAY;AACzB,YAAA,MAAM,UAAA,GAAa,OAAO,SAAA,CAAU,CAAC,MAAM,CAAA,CAAE,GAAA,KAAQ,WAAW,GAAG,CAAA;AACnE,YAAA,IAAI,cAAc,CAAA,EAAG;AAEnB,cAAA,MAAM,YAAY,IAAA,CAAK,IAAA,GAAQ,WAAW,GAAA,GAAO,YAAY,KAAK,IAAA,CAAK,WAAA;AAGvE,cAAA,MAAM,UAAA,GAAa;AAAA,gBACjB,CAAA,EAAG,EAAE,CAAA,EAAG,UAAA,EAAY,GAAG,UAAA,EAAW;AAAA;AAAA,gBAClC,GAAG,EAAE,CAAA,EAAG,aAAa,SAAA,GAAY,CAAA,EAAG,GAAG,UAAA;AAAW;AAAA,eACpD;AAEA,cAAA,MAAA,CAAO,KAAK,0EAAA,EAAuC;AAAA,gBACjD,OAAO,UAAA,CAAW,GAAA;AAAA,gBAClB,UAAA;AAAA,gBACA,SAAA;AAAA,gBACA;AAAA,eACD,CAAA;AAED,cAAA,SAAA,CAAU,SAAS,CAAA,CAAG,IAAA,CAAK,UAAU,CAAA;AAGrC,cAAA,MAAM,gBAAA,GAAwB,IAAA,CAAA,KAAA,CAAM,WAAA,CAAY,UAAA,CAAW,CAAC,CAAA;AAC5D,cAAA,IAAI,SAAA,CAAU,gBAAgB,CAAA,EAAG;AAC/B,gBAAA,SAAA,CAAU,gBAAgB,EAAE,CAAA,GAAI;AAAA,kBAC9B,GAAG,SAAA,CAAU,gBAAgB,CAAA,CAAE,CAAA;AAAA,kBAC/B,SAAA,EAAW,EAAE,UAAA,EAAY,QAAA,EAAU,UAAU,QAAA,EAAS;AAAA,kBACtD,MAAM,EAAE,OAAA,EAAS,EAAE,GAAA,EAAK,UAAS,EAAE;AAAA,kBACnC,MAAA,EAAQ;AAAA,oBACN,GAAA,EAAK,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAO,EAAE,GAAA,EAAK,UAAS,EAAE;AAAA,oBAC/C,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAO,EAAE,GAAA,EAAK,UAAS,EAAE;AAAA,oBAClD,IAAA,EAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAO,EAAE,GAAA,EAAK,UAAS,EAAE;AAAA,oBAChD,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAO,EAAE,GAAA,EAAK,UAAS;AAAE;AACnD,iBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC,CAAA;AAAA,MACH;AAEA,MAAA,UAAA,EAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,KAAK,gHAAA,EAAiD;AAAA,MAC3D,WAAA,EAAa,SAAA,CAAU,SAAS,CAAA,EAAG,MAAA,IAAU;AAAA,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAAA,CAAqB,WAA2B,MAAA,EAA6B;AACnF,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MACvC,GAAA,EAAK,MAAM,KAAA,IAAS;AAAA;AAAA,KACtB,CAAE,CAAA;AAEF,IAAA,SAAA,CAAU,OAAO,CAAA,GAAI,SAAA;AAGrB,IAAA,IAAI,SAAA,CAAU,MAAM,CAAA,EAAG;AACrB,MAAA,MAAM,KAAA,GAAa,IAAA,CAAA,KAAA,CAAM,YAAA,CAAa,SAAA,CAAU,MAAM,CAAC,CAAA;AACvD,MAAA,KAAA,IAAS,GAAA,GAAM,MAAM,CAAA,CAAE,CAAA,EAAG,OAAO,KAAA,CAAM,CAAA,CAAE,GAAG,GAAA,EAAA,EAAO;AACjD,QAAA,MAAM,WAAA,GAAmB,WAAM,WAAA,CAAY,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,KAAK,CAAA;AAC3D,QAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAE1B,UAAA,SAAA,CAAU,WAAW,EAAE,CAAA,GAAI;AAAA,YACzB,IAAA,EAAM,EAAE,IAAA,EAAM,IAAA,EAAM,OAAO,EAAE,GAAA,EAAK,UAAS,EAAE;AAAA,YAC7C,MAAM,EAAE,OAAA,EAAS,EAAE,GAAA,EAAK,UAAS,EAAE;AAAA,YACnC,SAAA,EAAW,EAAE,UAAA,EAAY,QAAA,EAAU,UAAU,QAAA,EAAS;AAAA,YACtD,MAAA,EAAQ;AAAA,cACN,GAAA,EAAK,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAO,EAAE,GAAA,EAAK,UAAS,EAAE;AAAA,cAC/C,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAO,EAAE,GAAA,EAAK,UAAS,EAAE;AAAA,cAClD,IAAA,EAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAO,EAAE,GAAA,EAAK,UAAS,EAAE;AAAA,cAChD,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAO,EAAE,GAAA,EAAK,UAAS;AAAE;AACnD,WACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,KAAK,8FAAA,EAA8C;AAAA,MACxD,cAAc,SAAA,CAAU,MAAA;AAAA,MACxB,YAAA,EAAc,SAAA,CAAU,GAAA,CAAI,CAAC,KAAK,KAAA,MAAW,EAAE,KAAA,EAAO,MAAA,CAAO,KAAK,CAAA,EAAG,GAAA,EAAK,KAAA,EAAO,GAAA,CAAI,KAAI,CAAE;AAAA,KAC5F,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAAA,CAAqB,SAAA,EAA2B,aAAA,GAAyB,IAAA,EAAY;AAC3F,IAAA,IAAI,CAAC,SAAA,CAAU,MAAM,CAAA,EAAG;AAExB,IAAA,MAAM,KAAA,GAAa,IAAA,CAAA,KAAA,CAAM,YAAA,CAAa,SAAA,CAAU,MAAM,CAAC,CAAA;AACvD,IAAA,MAAM,QAAA,GAAW,gBAAgB,CAAA,GAAI,CAAA;AAErC,IAAA,MAAA,CAAO,KAAK,2FAAA,EAA8C;AAAA,MACxD,SAAA,EAAW,KAAA,CAAM,CAAA,CAAE,CAAA,GAAI,CAAA;AAAA,MACvB,SAAA,EAAW,KAAA,CAAM,CAAA,CAAE,CAAA,GAAI,CAAA;AAAA,MACvB;AAAA,KACD,CAAA;AAGD,IAAA,KAAA,IAAS,MAAM,QAAA,EAAU,GAAA,IAAO,KAAA,CAAM,CAAA,CAAE,GAAG,GAAA,EAAA,EAAO;AAChD,MAAA,KAAA,IAAS,GAAA,GAAM,MAAM,CAAA,CAAE,CAAA,EAAG,OAAO,KAAA,CAAM,CAAA,CAAE,GAAG,GAAA,EAAA,EAAO;AACjD,QAAA,MAAM,WAAA,GAAmB,WAAM,WAAA,CAAY,EAAE,GAAG,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA;AAC7D,QAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAE1B,UAAA,MAAM,aAAA,GAAgB,SAAA,CAAU,WAAW,CAAA,CAAE,KAAK,EAAC;AAEnD,UAAA,SAAA,CAAU,WAAW,EAAE,CAAA,GAAI;AAAA,YACzB,GAAG,aAAA;AAAA,YACH,MAAA,EAAQ;AAAA,cACN,GAAA,EAAK,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAO,EAAE,GAAA,EAAK,UAAS,EAAE;AAAA,cAC/C,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAO,EAAE,GAAA,EAAK,UAAS,EAAE;AAAA,cAClD,IAAA,EAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAO,EAAE,GAAA,EAAK,UAAS,EAAE;AAAA,cAChD,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAO,EAAE,GAAA,EAAK,UAAS;AAAE,aACnD;AAAA,YACA,SAAA,EAAW;AAAA,cACT,GAAG,aAAA,CAAc,SAAA;AAAA,cACjB,QAAA,EAAU;AAAA;AACZ,WACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,KAAK,uFAA0C,CAAA;AAAA,EACxD;AACF;;;AC7hDO,SAAS,yBAAA,CACd,OAAA,GAAiD,EAAC,EACpB;AAC9B,EAAA,OAAO;AAAA,IACL,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,IAAI,UAAA,IAAc,WAAA;AAAA,IAC1D,OAAA,EAAS,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,IAAI,QAAA,IAAY,QAAA;AAAA,IACpD,OAAA,EAAS,QAAQ,OAAA,IAAW,GAAA;AAAA;AAAA,IAC5B,eAAA,EAAiB,QAAQ,eAAA,KAAoB,KAAA;AAAA;AAAA,IAC7C,OAAA,EAAS,QAAQ,OAAA,IAAW;AAAA;AAAA,GAC9B;AACF;AAkBO,SAAS,4BAAA,CACd,OAAA,GAAiD,EAAC,EAClD;AACA,EAAA,MAAM,MAAA,GAAS,0BAA0B,OAAO,CAAA;AAIhD,EAAA,OAAA,CAAQ,IAAA;AAAA,IACN;AAAA,GAGF;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA;AAAA,IAEA,MAAM,MAAA,GAAS;AACb,MAAA,MAAM,IAAI,MAAM,sGAA+C,CAAA;AAAA,IACjE,CAAA;AAAA,IACA,MAAM,UAAA,GAAa;AACjB,MAAA,MAAM,IAAI,MAAM,sGAA+C,CAAA;AAAA,IACjE;AAAA,GACF;AACF;AAcO,SAAS,2BAA2B,EAAA,EAAU;AACnD,EAAA,OAAO,4BAAA,CAA6B;AAAA,IAClC,EAAA;AAAA,IACA,SAAA,EAAW,QAAQ,GAAA,CAAI,UAAA;AAAA,IACvB,OAAA,EAAS,QAAQ,GAAA,CAAI,QAAA;AAAA,IACrB,OAAA,EAAS,QAAQ,GAAA,CAAI,eAAA,GACjB,SAAS,OAAA,CAAQ,GAAA,CAAI,eAAe,CAAA,GACpC;AAAA,GACL,CAAA;AACH;;;AC3EO,SAAS,oBAAA,GAA8D;AAC5E,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,GAAA;AAAA;AAAA,IACT,OAAA,EAAS,GAAA;AAAA;AAAA,IACT,eAAA,EAAiB;AAAA;AAAA,GACnB;AACF;AAKO,SAAS,qBAAA,GAA+D;AAC7E,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,GAAA;AAAA;AAAA,IACT,OAAA,EAAS,GAAA;AAAA;AAAA,IACT,eAAA,EAAiB;AAAA,GACnB;AACF;AAKO,SAAS,oBAAA,GAA8D;AAC5E,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,GAAA;AAAA;AAAA,IACT,OAAA,EAAS,GAAA;AAAA;AAAA,IACT,eAAA,EAAiB;AAAA,GACnB;AACF;AAKO,SAAS,0BAAA,GAAoE;AAClF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,GAAA;AAAA;AAAA,IACT,OAAA,EAAS,GAAA;AAAA;AAAA,IACT,eAAA,EAAiB;AAAA,GACnB;AACF;AAKO,SAAS,uBAAA,GAAiE;AAC/E,EAAA,OAAO;AAAA,IACL,SAAS,MAAA,CAAO,gBAAA;AAAA;AAAA,IAChB,OAAA,EAAS,IAAA;AAAA;AAAA,IACT,eAAA,EAAiB;AAAA,GACnB;AACF;AAKO,SAAS,uBAAA,GAAiE;AAC/E,EAAA,MAAM,UAAA,GAAa,QAAQ,GAAA,CAAI,eAAA;AAE/B,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,OAAA,GAAU,SAAS,UAAU,CAAA;AAGnC,IAAA,IAAI,WAAW,GAAA,EAAO;AACpB,MAAA,OAAO,oBAAA,EAAqB;AAAA,IAC9B,CAAA,MAAA,IAAW,WAAW,GAAA,EAAQ;AAC5B,MAAA,OAAO,qBAAA,EAAsB;AAAA,IAC/B,CAAA,MAAO;AACL,MAAA,OAAO,oBAAA,EAAqB;AAAA,IAC9B;AAAA,EACF;AAGA,EAAA,OAAO,qBAAA,EAAsB;AAC/B;;;AC7EO,IAAM,qBAAA,GAAN,cAAoC,KAAA,CAAM;AAAA,EAC/C,WAAA,CAAY,SAAwB,KAAA,EAAe;AACjD,IAAA,KAAA,CAAM,OAAO,CAAA;AADqB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAElC,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EACd;AACF;AAKO,SAAS,qBAAqB,MAAA,EAA4C;AAE/E,EAAA,IAAI,CAAC,OAAO,SAAA,EAAW;AACrB,IAAA,MAAM,IAAI,qBAAA,CAAsB,uBAAA,EAAyB,WAAW,CAAA;AAAA,EACtE;AAGA,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,MAAM,IAAI,qBAAA,CAAsB,qBAAA,EAAuB,SAAS,CAAA;AAAA,EAClE;AAGA,EAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,OAAA,IAAW,CAAA,EAAG;AACzC,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,gCAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,OAAA,IAAW,CAAA,EAAG;AACzC,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,gCAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,OAAA,GAAU,GAAA,EAAS;AAC9C,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,kCAAA,GAA4B,OAAO,OAAA,GAAW,CAAA,+EAAA;AAAA,KAEhD;AAAA,EACF;AACF;AAKO,SAAS,oBAAoB,YAAA,EAA8B;AAChE,EAAA,MAAM,UAAoB,EAAC;AAE3B,EAAA,KAAA,MAAW,WAAW,YAAA,EAAc;AAClC,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG;AACzB,MAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,IACtB;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,0CAAA,GAA8C,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAAA,MAC/D;AAAA,KACF;AAAA,EACF;AACF;;;ACzDO,SAAS,gBAAA,CAAiB,OAAY,KAAA,EAA4B;AAEvE,EAAA,IAAI,MAAM,SAAA,EAAW;AACnB,IAAA,OAAO,KAAA,CAAM,UAAU,KAAK,CAAA;AAAA,EAC9B;AAGA,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,OAAO,EAAA;AAAA,EACT;AAGA,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,MAAA;AACH,MAAA,OAAO,KAAA,YAAiB,IAAA,GACnB,KAAA,CAAM,WAAA,EAAY,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA,GACtC,MAAA,CAAO,KAAK,CAAA;AAAA,IAElB,KAAK,SAAA;AACH,MAAA,OAAO,QAAQ,QAAA,GAAM,QAAA;AAAA,IAEvB,KAAK,OAAA;AACH,MAAA,OAAO,KAAA,CAAM,QAAQ,KAAK,CAAA,GAAI,MAAM,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AAAA,IAE/D,KAAK,QAAA;AACH,MAAA,OAAO,OAAO,UAAU,QAAA,GACpB,IAAA,CAAK,UAAU,KAAK,CAAA,GACpB,OAAO,KAAK,CAAA;AAAA,IAElB,KAAK,QAAA;AACH,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GACpB,MAAM,cAAA,EAAe,GACrB,OAAO,KAAK,CAAA;AAAA,IAElB;AACE,MAAA,OAAO,OAAO,KAAK,CAAA;AAAA;AAEzB;AASO,SAAS,kBAAA,CAAmB,OAAY,KAAA,EAA6B;AAE1E,EAAA,IAAI,MAAM,QAAA,KAAa,KAAA,KAAU,QAAQ,KAAA,KAAU,MAAA,IAAa,UAAU,EAAA,CAAA,EAAK;AAC7E,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,QAAA;AACH,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAE1D,KAAK,SAAA;AACH,MAAA,OAAO,OAAO,KAAA,KAAU,SAAA;AAAA,IAE1B,KAAK,OAAA;AACH,MAAA,OAAO,KAAA,CAAM,QAAQ,KAAK,CAAA;AAAA,IAE5B,KAAK,QAAA;AACH,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA;AAAA,IAE1B,KAAK,MAAA;AACH,MAAA,OAAO,iBAAiB,IAAA,IAAQ,CAAC,MAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,IAE1D;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AASO,SAAS,gBAAA,CAAiB,OAAY,UAAA,EAA4B;AACvE,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,QAAQ,UAAA;AAAY,IAClB,KAAK,QAAA;AACH,MAAA,OAAO,OAAO,KAAK,CAAA;AAAA,IAErB,KAAK,QAAA;AACH,MAAA,OAAO,OAAO,KAAK,CAAA;AAAA,IAErB,KAAK,SAAA;AACH,MAAA,OAAO,QAAQ,KAAK,CAAA;AAAA,IAEtB,KAAK,MAAA;AACH,MAAA,OAAO,KAAA,YAAiB,IAAA,GAAO,KAAA,GAAQ,IAAI,KAAK,KAAK,CAAA;AAAA,IAEvD,KAAK,OAAA;AACH,MAAA,OAAO,MAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,CAAC,KAAK,CAAA;AAAA,IAE9C,KAAK,QAAA;AACH,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,EAAE,KAAA,EAAM;AAAA,IAErD;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAgBO,SAAS,cAAA,CAAe,KAAU,IAAA,EAAmB;AAC1D,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,OAAA,EAAS,GAAA,KAAQ,OAAA,GAAU,GAAG,CAAA,EAAG,GAAG,CAAA;AACrE;AAQO,SAAS,eAAe,KAAA,EAAuB;AAEpD,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,EAAG;AACtE,IAAA,OAAO,GAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA,GAAK,GAAA;AAAA,EAC7C;AACA,EAAA,OAAO,KAAA;AACT;AAeO,SAAS,sBAAA,CAAuB,QAAgB,SAAA,EAA2B;AAChF,EAAA,MAAMC,UAAAA,GAAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY,CAAE,OAAA,CAAQ,OAAA,EAAS,GAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAC5E,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,SAAA,CAAU,CAAA,EAAG,CAAC,CAAA;AACxD,EAAA,OAAQ,MAAA,GAAU,GAAA,GAAOA,UAAAA,GAAa,GAAA,GAAO,SAAU,GAAA,GAAO,SAAA;AAChE;AASO,SAAS,iBAAA,CAAkB,WAAmB,KAAA,EAAuB;AAC1E,EAAA,IAAI,KAAA,KAAU,GAAG,OAAO,CAAA;AACxB,EAAA,OAAO,IAAA,CAAK,IAAI,IAAA,CAAK,KAAA,CAAO,YAAY,KAAA,GAAS,GAAG,GAAG,GAAG,CAAA;AAC5D;AAUO,SAAS,qBAAA,CACd,SAAA,EACA,KAAA,EACA,SAAA,EACQ;AACR,EAAA,IAAI,SAAA,KAAc,GAAG,OAAO,CAAA;AAC5B,EAAA,MAAM,gBAAgB,SAAA,GAAY,SAAA;AAClC,EAAA,MAAM,gBAAgB,KAAA,GAAQ,SAAA;AAC9B,EAAA,OAAO,IAAA,CAAK,KAAA,CAAO,aAAA,GAAgB,aAAA,GAAiB,GAAI,CAAA;AAC1D;ACjLO,IAAM,aAAA,GAAgB,QAAQ,cAAA,EAAgB;AAAA;AAAA,EAEnD,EAAA,EAAI,KAAK,IAAI,CAAA,CACV,YAAW,CACX,UAAA,CAAW,MAAM,gBAAA,GAAoB,IAAA,CAAK,GAAA,KAAS,GAAA,GAAO,IAAA,CAAK,QAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,CAAC,CAAE,CAAA;AAAA;AAAA,EAGrG,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA,CAAE,OAAA,EAAQ;AAAA;AAAA,EAG3B,WAAA,EAAa,KAAK,aAAa,CAAA;AAAA;AAAA,EAG/B,MAAA,EAAQ,IAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ;AAAA;AAAA,EAG/B,MAAA,EAAQ,KAAA,CAAM,QAAQ,CAAA,CAAE,OAAA,EAAQ;AAAA;AAAA;AAAA,EAGhC,QAAA,EAAU,MAAM,UAAU,CAAA;AAAA;AAAA;AAAA,EAG1B,gBAAA,EAAkB,IAAA,CAAK,kBAAkB,CAAA,CAAE,OAAA,EAAQ;AAAA;AAAA,EAGnD,eAAe,OAAA,CAAQ,eAAe,EAAE,OAAA,CAAQ,IAAI,EAAE,OAAA,EAAQ;AAAA;AAAA,EAG9D,WAAW,IAAA,CAAK,WAAW,EAAE,OAAA,CAAQ,GAAG,EAAE,OAAA,EAAQ;AAAA;AAAA,EAGlD,UAAU,IAAA,CAAK,UAAU,EAAE,OAAA,CAAQ,OAAO,EAAE,OAAA,EAAQ;AAAA;AAAA,EAGpD,QAAQ,OAAA,CAAQ,QAAQ,EAAE,OAAA,CAAQ,IAAI,EAAE,OAAA,EAAQ;AAAA;AAAA,EAGhD,OAAA,EAAS,QAAQ,SAAS,CAAA;AAAA;AAAA,EAG1B,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ;AAAA;AAAA,EAGnC,UAAA,EAAY,KAAK,YAAY,CAAA;AAAA;AAAA,EAG7B,SAAA,EAAW,KAAK,WAAW,CAAA;AAAA;AAAA,EAG3B,SAAA,EAAW,SAAA,CAAU,WAAA,EAAa,EAAE,SAAA,EAAW,CAAA,EAAG,IAAA,EAAM,MAAA,EAAQ,CAAA,CAC7D,OAAA,CAAQ,GAAA,CAAA,iBAAA,CAAsB,EAC9B,OAAA,EAAQ;AAAA;AAAA,EAGX,SAAA,EAAW,SAAA,CAAU,WAAA,EAAa,EAAE,SAAA,EAAW,CAAA,EAAG,IAAA,EAAM,MAAA,EAAQ,CAAA,CAC7D,OAAA,CAAQ,GAAA,CAAA,iBAAA,CAAsB,EAC9B,OAAA;AACL,CAAC;AAOM,IAAM,aAAA,GAAgB,QAAQ,eAAA,EAAiB;AAAA;AAAA,EAEpD,EAAA,EAAI,KAAK,IAAI,CAAA,CACV,YAAW,CACX,UAAA,CAAW,MAAM,iBAAA,GAAqB,IAAA,CAAK,GAAA,KAAS,GAAA,GAAO,IAAA,CAAK,QAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,CAAC,CAAE,CAAA;AAAA;AAAA,EAGtG,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ;AAAA;AAAA,EAGnC,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ;AAAA;AAAA,EAGnC,QAAA,EAAU,OAAA,CAAQ,UAAU,CAAA,CAAE,OAAA,EAAQ;AAAA;AAAA,EAGtC,YAAA,EAAc,OAAA,CAAQ,cAAc,CAAA,CAAE,OAAA,EAAQ;AAAA;AAAA,EAG9C,MAAA,EAAQ,IAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ;AAAA;AAAA,EAG/B,KAAA,EAAO,KAAK,OAAO,CAAA;AAAA;AAAA,EAGnB,QAAA,EAAU,QAAQ,UAAU,CAAA;AAAA;AAAA,EAG5B,SAAA,EAAW,SAAA,CAAU,WAAA,EAAa,EAAE,SAAA,EAAW,GAAG,IAAA,EAAM,MAAA,EAAQ,CAAA,CAAE,OAAA,EAAQ;AAAA;AAAA,EAG1E,OAAA,EAAS,UAAU,SAAA,EAAW,EAAE,WAAW,CAAA,EAAG,IAAA,EAAM,QAAQ,CAAA;AAAA;AAAA,EAG5D,SAAA,EAAW,KAAK,WAAW,CAAA;AAAA;AAAA,EAG3B,SAAA,EAAW,SAAA,CAAU,WAAA,EAAa,EAAE,SAAA,EAAW,CAAA,EAAG,IAAA,EAAM,MAAA,EAAQ,CAAA,CAC7D,OAAA,CAAQ,GAAA,CAAA,iBAAA,CAAsB,EAC9B,OAAA;AACL,CAAC;AAQM,IAAM,yBAAyB,SAAA,CAAU,aAAA,EAAe,CAAC,EAAE,MAAK,MAAO;AAAA,EAC5E,OAAA,EAAS,KAAK,aAAa;AAC7B,CAAA,CAAE;AAMK,IAAM,yBAAyB,SAAA,CAAU,aAAA,EAAe,CAAC,EAAE,KAAI,MAAO;AAAA,EAC3E,MAAA,EAAQ,IAAI,aAAA,EAAe;AAAA,IACzB,MAAA,EAAQ,CAAC,aAAA,CAAc,QAAQ,CAAA;AAAA,IAC/B,UAAA,EAAY,CAAC,aAAA,CAAc,EAAE;AAAA,GAC9B;AACH,CAAA,CAAE;ACjHK,IAAM,8BAAN,MAAkC;AAAA,EACvC,YAA6B,EAAA,EAAe;AAAf,IAAA,IAAA,CAAA,EAAA,GAAA,EAAA;AAAA,EAAgB;AAAA;AAAA;AAAA;AAAA,EAK7C,MAAM,aACJ,MAAA,EACuB;AACvB,IAAA,MAAM,EAAA,GAAK,gBAAA,GAAoB,IAAA,CAAK,GAAA,KAAS,GAAA,GAAO,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,MAAA,CAAO,GAAG,CAAC,CAAA;AAC1F,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AAErB,IAAA,MAAM,CAAC,SAAS,CAAA,GAAI,MAAM,KAAK,EAAA,CAC5B,MAAA,CAAO,aAAa,CAAA,CACpB,MAAA,CAAO;AAAA,MACN,EAAA;AAAA,MACA,GAAG,MAAA;AAAA,MACH,SAAA,EAAW,GAAA;AAAA,MACX,SAAA,EAAW;AAAA,KACZ,EACA,SAAA,EAAU;AAEb,IAAA,OAAO,SAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,EAAA,EAA0C;AAC5D,IAAA,MAAM,CAAC,MAAM,CAAA,GAAI,MAAM,IAAA,CAAK,EAAA,CACzB,QAAO,CACP,IAAA,CAAK,aAAa,CAAA,CAClB,KAAA,CAAM,GAAG,aAAA,CAAc,EAAA,EAAI,EAAE,CAAC,CAAA,CAC9B,MAAM,CAAC,CAAA;AAEV,IAAA,OAAO,MAAA,IAAU,IAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,CAAmB,QAAA,EAAkB,UAAA,EAA8C;AACvF,IAAA,MAAM,kBAAkB,UAAA,GACpB,GAAA,CAAI,EAAA,CAAG,aAAA,CAAc,UAAU,QAAQ,CAAA,EAAG,EAAA,CAAG,aAAA,CAAc,YAAY,UAAU,CAAC,IAClF,EAAA,CAAG,aAAA,CAAc,UAAU,QAAQ,CAAA;AAEvC,IAAA,OAAO,MAAM,IAAA,CAAK,EAAA,CACf,MAAA,GACA,IAAA,CAAK,aAAa,CAAA,CAClB,KAAA,CAAM,eAAe,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAc,SAAS,CAAC,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,CACJ,EAAA,EACA,OAAA,EAC8B;AAC9B,IAAA,MAAM,CAAC,aAAa,CAAA,GAAI,MAAM,KAAK,EAAA,CAChC,MAAA,CAAO,aAAa,CAAA,CACpB,GAAA,CAAI;AAAA,MACH,GAAG,OAAA;AAAA,MACH,SAAA,sBAAe,IAAA;AAAK,KACrB,EACA,KAAA,CAAM,EAAA,CAAG,cAAc,EAAA,EAAI,EAAE,CAAC,CAAA,CAC9B,SAAA,EAAU;AAEb,IAAA,OAAO,aAAA,IAAiB,IAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,EAAA,EAA8B;AAC/C,IAAA,MAAM,IAAA,CAAK,EAAA,CAAG,MAAA,CAAO,aAAa,CAAA,CAAE,MAAM,EAAA,CAAG,aAAA,CAAc,EAAA,EAAI,EAAE,CAAC,CAAA;AAClE,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,MAAA,EAAyC;AAC9D,IAAA,OAAO,MAAM,IAAA,CAAK,EAAA,CACf,QAAO,CACP,IAAA,CAAK,aAAa,CAAA,CAClB,KAAA,CAAM,GAAG,aAAA,CAAc,SAAA,EAAW,MAAM,CAAC,CAAA,CACzC,QAAQ,IAAA,CAAK,aAAA,CAAc,SAAS,CAAC,CAAA;AAAA,EAC1C;AACF;AAOO,IAAM,+BAAN,MAAmC;AAAA,EACxC,YAA6B,EAAA,EAAe;AAAf,IAAA,IAAA,CAAA,EAAA,GAAA,EAAA;AAAA,EAAgB;AAAA;AAAA;AAAA;AAAA,EAK7C,MAAM,cAAc,OAAA,EAA6E;AAC/F,IAAA,MAAM,EAAA,GAAK,iBAAA,GAAqB,IAAA,CAAK,GAAA,KAAS,GAAA,GAAO,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,MAAA,CAAO,GAAG,CAAC,CAAA;AAE3F,IAAA,MAAM,CAAC,UAAU,CAAA,GAAI,MAAM,KAAK,EAAA,CAC7B,MAAA,CAAO,aAAa,CAAA,CACpB,MAAA,CAAO;AAAA,MACN,EAAA;AAAA,MACA,GAAG,OAAA;AAAA,MACH,SAAA,sBAAe,IAAA;AAAK,KACrB,EACA,SAAA,EAAU;AAEb,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBAAqB,QAAA,EAA4C;AACrE,IAAA,OAAO,MAAM,IAAA,CAAK,EAAA,CACf,QAAO,CACP,IAAA,CAAK,aAAa,CAAA,CAClB,KAAA,CAAM,GAAG,aAAA,CAAc,QAAA,EAAU,QAAQ,CAAC,CAAA,CAC1C,QAAQ,IAAA,CAAK,aAAA,CAAc,SAAS,CAAC,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,MAAA,EAA0C;AAC/D,IAAA,OAAO,MAAM,IAAA,CAAK,EAAA,CACf,QAAO,CACP,IAAA,CAAK,aAAa,CAAA,CAClB,KAAA,CAAM,GAAG,aAAA,CAAc,SAAA,EAAW,MAAM,CAAC,CAAA,CACzC,QAAQ,IAAA,CAAK,aAAA,CAAc,SAAS,CAAC,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,CAAiB,KAAA,GAAgB,EAAA,EAA8B;AACnE,IAAA,OAAO,MAAM,IAAA,CAAK,EAAA,CACf,MAAA,GACA,IAAA,CAAK,aAAa,CAAA,CAClB,OAAA,CAAQ,KAAK,aAAA,CAAc,SAAS,CAAC,CAAA,CACrC,MAAM,KAAK,CAAA;AAAA,EAChB;AACF;AAoBO,SAAS,6BAA6B,OAAA,EAAuC;AAClF,EAAA,MAAM,EAAE,IAAG,GAAI,OAAA;AAEf,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,IAAI,2BAAA,CAA4B,EAAE,CAAA;AAAA,IAC5C,SAAA,EAAW,IAAI,4BAAA,CAA6B,EAAE;AAAA,GAChD;AACF","file":"chunk-NCRP2YHY.mjs","sourcesContent":["// @ts-nocheck\n\n/**\n * 通用导出服务\n *\n * 提供统一的导出功能,支持配置化字段选择、格式化和分组\n */\n\nimport type {\n ExportConfig,\n ExportRequest,\n ExportResult,\n ExportProgress,\n ExportError,\n ExportField,\n ExportFormat,\n UniversalExportServiceConfig,\n ExportEvent,\n ExportEventListener,\n FieldMapper,\n DataTransformer,\n Validator,\n Formatter,\n GroupingConfig,\n GroupingField,\n GroupingMode,\n GroupValueProcessing,\n} from '../types';\n\n// Excel导出依赖\nimport * as XLSX from 'xlsx';\n\n// 日志\nimport { createLogger } from '../../logger';\nconst logger = createLogger('UniversalExportService');\n\n// 客户端服务(可选依赖,通过构造函数注入)\n// import { universalExportClient } from './client';\n\nimport {\n ExportServiceError,\n ExportConfigError,\n ExportDataError,\n ExportFileError,\n} from '../types';\n\n// ============= 默认配置 =============\n\nconst DEFAULT_CONFIG: UniversalExportServiceConfig = {\n defaultFormat: 'csv',\n defaultDelimiter: ',',\n defaultEncoding: 'utf-8',\n defaultAddBOM: true,\n maxFileSize: 100 * 1024 * 1024, // 100MB\n maxRowsLimit: 100000,\n maxConcurrentExports: 5,\n exportTimeout: 300000, // 5分钟\n cache: {\n configTTL: 3600, // 1小时\n resultTTL: 1800, // 30分钟\n },\n};\n\n// ============= 内置格式化器 =============\n\nconst DEFAULT_FORMATTERS: Record<string, Formatter> = {\n // 日期格式化\n date: (value: any) => {\n if (!value) return '';\n const date = new Date(value);\n return date.toISOString().split('T')[0];\n },\n\n // 时间格式化\n datetime: (value: any) => {\n if (!value) return '';\n const date = new Date(value);\n return date.toLocaleString('zh-CN');\n },\n\n // 数字格式化\n number: (value: any) => {\n if (value === null || value === undefined) return '';\n return String(value);\n },\n\n // 货币格式化\n currency: (value: any) => {\n if (value === null || value === undefined) return '';\n return '¥' + (Number(value).toFixed(2));\n },\n\n // 百分比格式化\n percentage: (value: any) => {\n if (value === null || value === undefined) return '';\n return ((Number(value) * 100).toFixed(2)) + '%';\n },\n\n // 布尔值格式化\n boolean: (value: any) => {\n if (value === null || value === undefined) return '';\n return value ? '是' : '否';\n },\n\n // 数组格式化\n array: (value: any) => {\n if (!Array.isArray(value)) return '';\n return value.join(', ');\n },\n\n // 对象格式化\n object: (value: any) => {\n if (!value || typeof value !== 'object') return '';\n return JSON.stringify(value);\n },\n};\n\n// ============= 主服务类 =============\n\n/**\n * 导出客户端接口(用于依赖注入)\n */\nexport interface IExportClient {\n createConfig(config: Omit<ExportConfig, 'id' | 'createdAt' | 'updatedAt'>): Promise<ExportConfig>;\n getConfigsByModule(moduleId: string, businessId?: string): Promise<ExportConfig[]>;\n}\n\nexport class UniversalExportService {\n private config: UniversalExportServiceConfig;\n private eventListeners: Map<string, ExportEventListener[]> = new Map();\n private activeExports: Map<string, ExportProgress> = new Map();\n private configCache: Map<string, { config: ExportConfig; timestamp: number }> = new Map();\n private resultCache: Map<string, { result: ExportResult; timestamp: number }> = new Map();\n private client?: IExportClient;\n\n constructor(\n config?: Partial<UniversalExportServiceConfig>,\n client?: IExportClient\n ) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n this.client = client;\n }\n\n // ============= 配置管理 =============\n\n /**\n * 创建导出配置\n */\n async createConfig(\n config: Omit<ExportConfig, 'id' | 'createdAt' | 'updatedAt'>\n ): Promise<ExportConfig> {\n try {\n // 验证配置\n this.validateConfig({\n ...config,\n id: 'temp',\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n\n // 通过客户端API保存到数据库(如果提供了client)\n if (!this.client) {\n throw new ExportConfigError('未提供导出客户端服务', config);\n }\n const newConfig = await this.client.createConfig(config);\n\n // 保存到缓存\n this.configCache.set(newConfig.id, {\n config: newConfig,\n timestamp: Date.now(),\n });\n\n // 触发事件\n this.emitEvent({\n type: 'config:save',\n exportId: newConfig.id,\n timestamp: new Date(),\n data: { config: newConfig },\n });\n\n return newConfig;\n } catch (error) {\n throw new ExportConfigError(\n '创建导出配置失败: ' + (error instanceof Error ? error.message : '未知错误'),\n { originalError: error }\n );\n }\n }\n\n /**\n * 获取导出配置\n */\n async getConfig(configId: string): Promise<ExportConfig | null> {\n // 先从缓存获取\n const cached = this.configCache.get(configId);\n if (cached && Date.now() - cached.timestamp < this.config.cache.configTTL * 1000) {\n return cached.config;\n }\n\n // 从缓存中获取(暂时不支持从数据库获取单个配置)\n return null;\n }\n\n /**\n * 更新导出配置\n */\n async updateConfig(configId: string, updates: Partial<ExportConfig>): Promise<ExportConfig> {\n const existing = await this.getConfig(configId);\n if (!existing) {\n throw new ExportConfigError('配置不存在: ' + (configId));\n }\n\n const updatedConfig: ExportConfig = {\n ...existing,\n ...updates,\n updatedAt: new Date(),\n };\n\n // 验证配置\n this.validateConfig(updatedConfig);\n\n // 更新缓存\n this.configCache.set(configId, {\n config: updatedConfig,\n timestamp: Date.now(),\n });\n\n // 触发事件\n this.emitEvent({\n type: 'config:save',\n exportId: configId,\n timestamp: new Date(),\n data: { config: updatedConfig },\n });\n\n return updatedConfig;\n }\n\n /**\n * 删除导出配置\n */\n async deleteConfig(configId: string): Promise<void> {\n const existing = await this.getConfig(configId);\n if (!existing) {\n throw new ExportConfigError('配置不存在: ' + (configId));\n }\n\n // 从缓存删除\n this.configCache.delete(configId);\n\n // 触发事件\n this.emitEvent({\n type: 'config:delete',\n exportId: configId,\n timestamp: new Date(),\n data: { configId },\n });\n }\n\n /**\n * 获取模块的配置列表\n */\n async getConfigsByModule(moduleId: string, businessId?: string): Promise<ExportConfig[]> {\n if (!this.client) {\n throw new ExportConfigError('未提供导出客户端服务', { moduleId, businessId });\n }\n return await this.client.getConfigsByModule(moduleId, businessId);\n }\n\n // ============= 导出执行 =============\n\n /**\n * 执行导出\n */\n async export(request: ExportRequest): Promise<ExportResult> {\n const exportId = this.generateId();\n const startTime = new Date();\n\n logger.info('🚀 [UniversalExportService] 开始导出:', {\n exportId,\n configId: request.configId,\n hasDataSource: !!request.dataSource,\n hasCallbacks: !!request.callbacks,\n });\n\n try {\n // 获取配置 - 支持直接传入配置对象或从缓存获取\n let config: ExportConfig;\n if (typeof request.configId === 'object' && request.configId !== null) {\n // 直接传入配置对象\n config = request.configId as ExportConfig;\n logger.info('📋 [UniversalExportService] 使用直接传入的配置:', {\n configId: config.id,\n configName: config.name,\n format: config.format,\n fieldsCount: config.fields.length,\n hasGrouping: !!config.grouping,\n groupingEnabled: config.grouping?.enabled,\n groupingFieldsCount: config.grouping?.fields?.length || 0,\n groupingFields:\n config.grouping?.fields?.map((f) => ({ key: f.key, mergeCells: f.mergeCells })) || [],\n });\n } else {\n // 从缓存获取配置\n logger.info('🔍 [UniversalExportService] 从缓存获取配置:', request.configId);\n const cachedConfig = await this.getConfig(request.configId as string);\n if (!cachedConfig) {\n throw new ExportConfigError('导出配置不存在: ' + (request.configId));\n }\n config = cachedConfig;\n logger.info('✅ [UniversalExportService] 成功获取缓存配置:', {\n configId: config.id,\n configName: config.name,\n });\n }\n\n // 创建进度对象\n const progress: ExportProgress = {\n exportId,\n status: 'pending',\n progress: 0,\n processedRows: 0,\n totalRows: 0,\n startTime,\n };\n\n this.activeExports.set(exportId, progress);\n\n // 触发开始事件\n this.emitEvent({\n type: 'export:start',\n exportId,\n timestamp: startTime,\n data: { config, request },\n });\n\n // 调用进度回调\n if (request.callbacks?.onProgress) {\n logger.info('📞 [UniversalExportService] 调用 onProgress 回调 - 开始');\n request.callbacks.onProgress(progress);\n }\n\n logger.info('📊 [UniversalExportService] 开始获取数据...');\n\n // 获取数据\n const data = await this.getData(request);\n logger.info('✅ [UniversalExportService] 数据获取成功:', {\n dataLength: data.length,\n firstItem: data[0] ? Object.keys(data[0]) : [],\n sampleData: data.slice(0, 2),\n });\n\n progress.totalRows = data.length;\n progress.status = 'processing';\n\n // 更新进度回调\n if (request.callbacks?.onProgress) {\n logger.info('📞 [UniversalExportService] 调用 onProgress 回调 - 数据处理');\n progress.progress = 30;\n request.callbacks.onProgress(progress);\n }\n\n // 过滤和排序数据\n logger.info('🔄 [UniversalExportService] 开始处理数据...');\n const processedData = await this.processData(data, request, config);\n logger.info('✅ [UniversalExportService] 数据处理完成:', {\n originalLength: data.length,\n processedLength: processedData.length,\n });\n\n // 更新进度回调\n if (request.callbacks?.onProgress) {\n logger.info('📞 [UniversalExportService] 调用 onProgress 回调 - 数据完成');\n progress.progress = 60;\n request.callbacks.onProgress(progress);\n }\n\n // 生成文件\n logger.info('📄 [UniversalExportService] 开始生成文件...');\n const result = await this.generateFile(processedData, config, request, exportId);\n logger.info('✅ [UniversalExportService] 文件生成成功:', {\n fileName: result.fileName,\n fileSize: result.fileSize,\n exportedRows: result.exportedRows,\n });\n\n // 更新进度\n progress.status = 'completed';\n progress.progress = 100;\n progress.processedRows = data.length;\n\n // 调用成功回调\n if (request.callbacks?.onSuccess) {\n logger.info('📞 [UniversalExportService] 调用 onSuccess 回调');\n request.callbacks.onSuccess(result);\n }\n\n // 触发完成事件\n this.emitEvent({\n type: 'export:complete',\n exportId,\n timestamp: new Date(),\n data: { result },\n });\n\n // 缓存结果\n this.resultCache.set(exportId, {\n result,\n timestamp: Date.now(),\n });\n\n // 清理进度\n this.activeExports.delete(exportId);\n\n return result;\n } catch (error) {\n const errorObj: ExportError = {\n code: 'EXPORT_FAILED',\n message: error instanceof Error ? error.message : '导出失败',\n details: { originalError: error },\n timestamp: new Date(),\n };\n\n // 更新进度\n const progress = this.activeExports.get(exportId);\n if (progress) {\n progress.status = 'failed';\n progress.error = errorObj.message;\n this.activeExports.delete(exportId);\n }\n\n // 调用错误回调\n if (request.callbacks?.onError) {\n logger.info('📞 [UniversalExportService] 调用 onError 回调');\n request.callbacks.onError(errorObj);\n }\n\n // 触发错误事件\n this.emitEvent({\n type: 'export:error',\n exportId,\n timestamp: new Date(),\n error: errorObj.message,\n data: { error: errorObj },\n });\n\n throw error;\n }\n }\n\n /**\n * 获取导出进度\n */\n getExportProgress(exportId: string): ExportProgress | null {\n return this.activeExports.get(exportId) || null;\n }\n\n /**\n * 取消导出\n */\n cancelExport(exportId: string): boolean {\n const progress = this.activeExports.get(exportId);\n if (!progress) {\n return false;\n }\n\n progress.status = 'cancelled';\n this.activeExports.delete(exportId);\n\n // 触发取消事件\n this.emitEvent({\n type: 'export:cancel',\n exportId,\n timestamp: new Date(),\n data: { progress },\n });\n\n return true;\n }\n\n // ============= 事件管理 =============\n\n /**\n * 添加事件监听器\n */\n addEventListener(type: string, listener: ExportEventListener): void {\n if (!this.eventListeners.has(type)) {\n this.eventListeners.set(type, []);\n }\n this.eventListeners.get(type)!.push(listener);\n }\n\n /**\n * 移除事件监听器\n */\n removeEventListener(type: string, listener: ExportEventListener): void {\n const listeners = this.eventListeners.get(type);\n if (listeners) {\n const index = listeners.indexOf(listener);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n }\n }\n\n // ============= 私有方法 =============\n\n /**\n * 生成唯一ID\n */\n private generateId(): string {\n return 'export_' + (Date.now()) + '_' + (Math.random().toString(36).substr(2, 9));\n }\n\n /**\n * 验证配置\n */\n private validateConfig(config: ExportConfig): void {\n if (!config.name || config.name.trim() === '') {\n throw new ExportConfigError('配置名称不能为空');\n }\n\n if (!config.fields || config.fields.length === 0) {\n throw new ExportConfigError('至少需要定义一个字段');\n }\n\n const enabledFields = config.fields.filter((f) => f.enabled);\n if (enabledFields.length === 0) {\n throw new ExportConfigError('至少需要启用一个字段');\n }\n\n // 检查字段键名唯一性\n const keys = config.fields.map((f) => f.key);\n const uniqueKeys = new Set(keys);\n if (keys.length !== uniqueKeys.size) {\n throw new ExportConfigError('字段键名必须唯一');\n }\n }\n\n /**\n * 获取数据\n */\n private async getData(request: ExportRequest): Promise<any[]> {\n logger.info('🔍 [UniversalExportService] getData 开始执行...');\n try {\n // 支持直接传递数据数组(用于客户端直接导出)\n if (Array.isArray(request.dataSource)) {\n logger.info('📦 [UniversalExportService] 使用直接传递的数据数组:', {\n length: request.dataSource.length,\n });\n return request.dataSource;\n }\n\n // 支持数据源函数(用于服务端导出)\n if (typeof request.dataSource === 'function') {\n logger.info('📞 [UniversalExportService] 调用数据源函数...');\n const data = await request.dataSource();\n logger.info('✅ [UniversalExportService] 数据源函数执行成功:', {\n dataType: typeof data,\n isArray: Array.isArray(data),\n length: Array.isArray(data) ? data.length : 'N/A',\n });\n return data;\n }\n\n // 这里可以扩展支持从API获取数据\n console.error('❌ [UniversalExportService] 数据源类型不支持:', typeof request.dataSource);\n throw new ExportDataError('不支持的数据源类型');\n } catch (error) {\n console.error('❌ [UniversalExportService] 获取数据失败:', error);\n throw new ExportDataError(\n '获取数据失败: ' + (error instanceof Error ? error.message : '未知错误'),\n { originalError: error }\n );\n }\n }\n\n /**\n * 处理数据\n */\n private async processData(\n data: any[],\n request: ExportRequest,\n config: ExportConfig\n ): Promise<any[]> {\n logger.info('🔄 [UniversalExportService] processData 开始执行:', {\n dataLength: data.length,\n hasFilters: !!(request.filters && request.filters.length > 0),\n hasSortBy: !!(request.sortBy && request.sortBy.length > 0),\n hasPagination: !!request.pagination,\n hasGrouping: !!(config.grouping && config.grouping.enabled),\n maxRows: config.maxRows,\n });\n\n // 🔍 详细调试分组配置\n logger.info('🔍 [UniversalExportService] 详细分组配置检查:', {\n configGrouping: config.grouping,\n groupingExists: !!config.grouping,\n groupingEnabled: config.grouping?.enabled,\n groupingFields: config.grouping?.fields,\n groupingFieldsLength: config.grouping?.fields?.length,\n });\n\n let processedData = [...data];\n\n // 应用过滤器\n if (request.filters && request.filters.length > 0) {\n logger.info('🔍 [UniversalExportService] 应用过滤器...');\n processedData = this.applyFilters(processedData, request.filters);\n logger.info('✅ [UniversalExportService] 过滤器应用完成:', {\n beforeLength: data.length,\n afterLength: processedData.length,\n });\n }\n\n // 应用排序\n if (request.sortBy && request.sortBy.length > 0) {\n logger.info('📊 [UniversalExportService] 应用排序...');\n processedData = this.applySorting(processedData, request.sortBy);\n logger.info('✅ [UniversalExportService] 排序应用完成');\n }\n\n // 应用分组\n if (config.grouping && config.grouping.enabled) {\n logger.info('📊 [UniversalExportService] 应用分组...');\n processedData = this.applyGrouping(processedData, config.grouping);\n logger.info('✅ [UniversalExportService] 分组应用完成:', {\n groupsCount: this.countGroups(processedData),\n resultLength: processedData.length,\n });\n }\n\n // 应用分页\n if (request.pagination) {\n logger.info('📄 [UniversalExportService] 应用分页...');\n const { page, pageSize } = request.pagination;\n const start = (page - 1) * pageSize;\n const end = start + pageSize;\n processedData = processedData.slice(start, end);\n logger.info('✅ [UniversalExportService] 分页应用完成:', {\n page,\n pageSize,\n start,\n end,\n resultLength: processedData.length,\n });\n }\n\n // 限制行数\n if (config.maxRows && processedData.length > config.maxRows) {\n logger.info('📏 [UniversalExportService] 应用行数限制...');\n processedData = processedData.slice(0, config.maxRows);\n logger.info('✅ [UniversalExportService] 行数限制应用完成:', {\n maxRows: config.maxRows,\n resultLength: processedData.length,\n });\n }\n\n logger.info('✅ [UniversalExportService] processData 执行完成:', {\n originalLength: data.length,\n finalLength: processedData.length,\n });\n\n return processedData;\n }\n\n /**\n * 应用过滤器\n */\n private applyFilters(data: any[], filters: any[]): any[] {\n return data.filter((item) => {\n return filters.every((filter) => {\n const value = this.getNestedValue(item, filter.field);\n\n switch (filter.operator) {\n case 'eq':\n return value === filter.value;\n case 'ne':\n return value !== filter.value;\n case 'gt':\n return value > filter.value;\n case 'gte':\n return value >= filter.value;\n case 'lt':\n return value < filter.value;\n case 'lte':\n return value <= filter.value;\n case 'contains':\n return String(value).includes(String(filter.value));\n case 'startsWith':\n return String(value).startsWith(String(filter.value));\n case 'endsWith':\n return String(value).endsWith(String(filter.value));\n case 'in':\n return Array.isArray(filter.value) && filter.value.includes(value);\n case 'notIn':\n return Array.isArray(filter.value) && !filter.value.includes(value);\n default:\n return true;\n }\n });\n });\n }\n\n /**\n * 应用排序\n */\n private applySorting(data: any[], sortBy: any[]): any[] {\n return data.sort((a, b) => {\n for (const sort of sortBy) {\n const aValue = this.getNestedValue(a, sort.field);\n const bValue = this.getNestedValue(b, sort.field);\n\n if (aValue < bValue) {\n return sort.direction === 'asc' ? -1 : 1;\n }\n if (aValue > bValue) {\n return sort.direction === 'asc' ? 1 : -1;\n }\n }\n return 0;\n });\n }\n\n /**\n * 获取嵌套值\n */\n private getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n return current && current[key] !== undefined ? current[key] : null;\n }, obj);\n }\n\n /**\n * 过滤掉所有行都为空值的字段\n */\n private filterEmptyFields(data: any[], fields: ExportField[]): ExportField[] {\n const filteredFields = fields.filter((field) => {\n // 特殊处理:强制保留某些重要字段,即使所有行都为空值\n const forceKeepFields = ['pickupMethod', 'notes', 'adminNotes'];\n if (forceKeepFields.includes(field.key)) {\n logger.info('🔧 [UniversalExportService] 强制保留字段 \"' + (field.key) + '\" (' + (field.label) + ')');\n return true;\n }\n\n // 检查所有数据行,如果至少有一行该字段有值,则保留该字段\n const hasValue = data.some((item) => {\n const value = this.getNestedValue(item, field.key);\n return value !== null && value !== undefined && value !== '';\n });\n\n if (!hasValue) {\n logger.info(\n '🔍 [UniversalExportService] 字段 \"' + (field.key) + '\" (' + (field.label) + ') 被过滤掉 - 所有行都为空值'\n );\n }\n\n return hasValue;\n });\n\n logger.info('📊 [UniversalExportService] 字段过滤结果:', {\n 原始字段数: fields.length,\n 过滤后字段数: filteredFields.length,\n 被过滤的字段: fields.filter((f) => !filteredFields.includes(f)).map((f) => f.key),\n 保留的字段: filteredFields.map((f) => f.key),\n });\n\n return filteredFields;\n }\n\n /**\n * 生成文件\n */\n private async generateFile(\n data: any[],\n config: ExportConfig,\n request: ExportRequest,\n exportId: string\n ): Promise<ExportResult> {\n const startTime = new Date();\n const enabledFields = config.fields.filter((f) => f.enabled);\n\n logger.info('📄 [UniversalExportService] generateFile 开始执行:', {\n dataLength: data.length,\n enabledFieldsCount: enabledFields.length,\n format: config.format,\n enabledFields: enabledFields.map((f) => ({ key: f.key, label: f.label })),\n });\n\n try {\n let content: string;\n let fileName: string;\n\n switch (config.format) {\n case 'csv':\n logger.info('📊 [UniversalExportService] 生成CSV格式...');\n content = this.generateCSV(data, enabledFields, config);\n fileName = this.generateFileName(\n request.customFileName || config.fileNameTemplate,\n 'csv'\n );\n logger.info('✅ [UniversalExportService] CSV生成完成:', {\n contentLength: content.length,\n fileName,\n });\n break;\n case 'excel':\n logger.info('📊 [UniversalExportService] 生成Excel格式...');\n const excelBuffer = this.generateExcel(data, enabledFields, config);\n fileName = this.generateFileName(\n request.customFileName || config.fileNameTemplate,\n 'xlsx'\n );\n logger.info('✅ [UniversalExportService] Excel生成完成:', {\n bufferLength: excelBuffer.byteLength,\n fileName,\n });\n // 创建Excel Blob\n const excelBlob = new Blob([excelBuffer], { type: this.getMimeType(config.format) });\n const endTime = new Date();\n const duration = endTime.getTime() - startTime.getTime();\n return {\n exportId,\n fileName,\n fileSize: excelBlob.size,\n fileBlob: excelBlob,\n exportedRows: data.length,\n startTime,\n endTime,\n duration,\n statistics: {\n totalRows: data.length,\n filteredRows: data.length,\n exportedRows: data.length,\n skippedRows: 0,\n },\n };\n case 'json':\n logger.info('📄 [UniversalExportService] 生成JSON格式...');\n content = this.generateJSON(data, enabledFields);\n fileName = this.generateFileName(\n request.customFileName || config.fileNameTemplate,\n 'json'\n );\n logger.info('✅ [UniversalExportService] JSON生成完成:', {\n contentLength: content.length,\n fileName,\n });\n break;\n default:\n console.error('❌ [UniversalExportService] 不支持的格式:', config.format);\n throw new ExportFileError('不支持的导出格式: ' + (config.format));\n }\n\n // 创建Blob\n const blob = new Blob([content], { type: this.getMimeType(config.format) });\n\n // 检查文件大小\n if (blob.size > this.config.maxFileSize) {\n throw new ExportFileError('文件大小超过限制: ' + (blob.size) + ' > ' + (this.config.maxFileSize));\n }\n\n const endTime = new Date();\n const duration = endTime.getTime() - startTime.getTime();\n\n return {\n exportId,\n fileName,\n fileSize: blob.size,\n fileBlob: blob,\n exportedRows: data.length,\n startTime,\n endTime,\n duration,\n statistics: {\n totalRows: data.length,\n filteredRows: data.length,\n exportedRows: data.length,\n skippedRows: 0,\n },\n };\n } catch (error) {\n throw new ExportFileError(\n '生成文件失败: ' + (error instanceof Error ? error.message : '未知错误'),\n { originalError: error }\n );\n }\n }\n\n /**\n * 生成CSV内容\n */\n private generateCSV(data: any[], fields: ExportField[], config: ExportConfig): string {\n logger.info('📊 [UniversalExportService] generateCSV 开始执行:', {\n dataLength: data.length,\n fieldsCount: fields.length,\n includeHeader: config.includeHeader,\n delimiter: config.delimiter,\n addBOM: config.addBOM,\n });\n\n const lines: string[] = [];\n\n // 添加BOM\n if (config.addBOM) {\n lines.push('\\uFEFF');\n logger.info('📝 [UniversalExportService] 添加BOM');\n }\n\n // 过滤掉所有行都为空值的字段\n const nonEmptyFields = this.filterEmptyFields(data, fields);\n logger.info('📊 [UniversalExportService] 过滤空字段:', {\n originalFieldsCount: fields.length,\n nonEmptyFieldsCount: nonEmptyFields.length,\n removedFields: fields\n .filter((f: ExportField) => !nonEmptyFields.includes(f))\n .map((f: ExportField) => f.key),\n });\n\n // 添加表头\n if (config.includeHeader) {\n const headers = nonEmptyFields.map((f) => this.escapeCSVField(f.label));\n lines.push(headers.join(config.delimiter));\n logger.info('📋 [UniversalExportService] 添加表头:', headers);\n }\n\n // 添加数据行\n logger.info('📊 [UniversalExportService] 开始处理数据行...');\n for (let i = 0; i < data.length; i++) {\n const item = data[i];\n if (i === 0) {\n logger.info('📊 [UniversalExportService] 第一行数据示例:', item);\n }\n\n const row = nonEmptyFields.map((field) => {\n // 处理分组头行\n if (item.__isGroupHeader) {\n return this.escapeCSVField(item[field.key] || '');\n }\n\n let value = this.getNestedValue(item, field.key);\n\n // 应用格式化器\n if (field.formatter) {\n value = field.formatter(value);\n } else if (DEFAULT_FORMATTERS[field.type]) {\n value = DEFAULT_FORMATTERS[field.type](value);\n } else {\n value = String(value || '');\n }\n\n return this.escapeCSVField(value);\n });\n\n lines.push(row.join(config.delimiter));\n\n if (i === 0) {\n logger.info('📊 [UniversalExportService] 第一行处理结果:', row);\n }\n }\n\n const result = lines.join('\\n');\n logger.info('✅ [UniversalExportService] CSV生成完成:', {\n totalLines: lines.length,\n resultLength: result.length,\n });\n return result;\n }\n\n /**\n * 生成JSON内容\n */\n private generateJSON(data: any[], fields: ExportField[]): string {\n const processedData = data.map((item) => {\n const processed: Record<string, any> = {};\n\n for (const field of fields) {\n let value = this.getNestedValue(item, field.key);\n\n // 应用格式化器\n if (field.formatter) {\n value = field.formatter(value);\n } else if (DEFAULT_FORMATTERS[field.type]) {\n value = DEFAULT_FORMATTERS[field.type](value);\n }\n\n processed[field.key] = value;\n }\n\n return processed;\n });\n\n return JSON.stringify(processedData, null, 2);\n }\n\n /**\n * 转义CSV字段\n */\n private escapeCSVField(value: string): string {\n if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\n return '\"' + (value.replace(/\"/g, '\"\"')) + '\"';\n }\n return value;\n }\n\n /**\n * 生成文件名\n */\n private generateFileName(template: string, extension: string): string {\n const now = new Date();\n const dateStr = now.toISOString().split('T')[0];\n const timeStr = now.toTimeString().split(' ')[0].replace(/:/g, '-');\n\n return (\n template\n .replace('{date}', dateStr)\n .replace('{time}', timeStr)\n .replace('{timestamp}', now.getTime().toString()) + '.' + (extension)\n );\n }\n\n /**\n * 获取MIME类型\n */\n private getMimeType(format: ExportFormat): string {\n switch (format) {\n case 'csv':\n return 'text/csv; charset=utf-8';\n case 'json':\n return 'application/json; charset=utf-8';\n case 'excel':\n return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n default:\n return 'application/octet-stream';\n }\n }\n\n /**\n * 触发事件\n */\n private emitEvent(event: ExportEvent): void {\n const listeners = this.eventListeners.get(event.type);\n if (listeners) {\n listeners.forEach((listener) => {\n try {\n listener(event);\n } catch (error) {\n console.error('事件监听器执行失败:', error);\n }\n });\n }\n }\n\n // ============= 分组相关方法 =============\n\n /**\n * 应用分组\n */\n private applyGrouping(data: any[], groupingConfig: GroupingConfig): any[] {\n logger.info('📊 [UniversalExportService] applyGrouping 开始执行:', {\n dataLength: data.length,\n groupingFields: groupingConfig.fields.map((f) => f.key),\n preserveOrder: groupingConfig.preserveOrder,\n });\n\n if (!groupingConfig.fields || groupingConfig.fields.length === 0) {\n return data;\n }\n\n // 按分组字段对数据进行分组\n const grouped = this.groupDataByFields(data, groupingConfig);\n\n // 处理分组后的数据\n const result = this.processGroupedData(grouped, groupingConfig);\n\n logger.info('✅ [UniversalExportService] applyGrouping 执行完成:', {\n originalLength: data.length,\n groupedLength: result.length,\n });\n\n return result;\n }\n\n /**\n * 按字段分组数据\n */\n private groupDataByFields(data: any[], groupingConfig: GroupingConfig): Map<string, any[]> {\n const groups = new Map<string, any[]>();\n\n for (const item of data) {\n // 生成分组键\n const groupKey = this.generateGroupKey(item, groupingConfig.fields);\n\n if (!groups.has(groupKey)) {\n groups.set(groupKey, []);\n }\n groups.get(groupKey)!.push(item);\n }\n\n return groups;\n }\n\n /**\n * 生成分组键\n */\n private generateGroupKey(item: any, groupingFields: GroupingField[]): string {\n const keyParts = groupingFields.map((field) => {\n const value = this.getNestedValue(item, field.key);\n\n // 处理空值\n if (value === null || value === undefined || value === '') {\n return '__NULL__';\n }\n\n return String(value);\n });\n\n return keyParts.join('|');\n }\n\n /**\n * 处理分组后的数据\n */\n private processGroupedData(groups: Map<string, any[]>, groupingConfig: GroupingConfig): any[] {\n const result: any[] = [];\n\n for (const [groupKey, groupItems] of groups) {\n if (groupItems.length === 0) continue;\n\n // 解析分组键\n const groupValues = groupKey.split('|');\n\n // 处理分组\n const processedGroup = this.processGroup(groupItems, groupingConfig, groupValues);\n result.push(...processedGroup);\n }\n\n return result;\n }\n\n /**\n * 处理单个分组\n */\n private processGroup(\n groupItems: any[],\n groupingConfig: GroupingConfig,\n groupValues: string[]\n ): any[] {\n const result: any[] = [];\n\n // 添加分组头行(如果需要)\n const showGroupHeader = groupingConfig.fields.some((f) => f.showGroupHeader);\n if (showGroupHeader) {\n const groupHeader = this.createGroupHeader(groupValues, groupingConfig.fields);\n result.push(groupHeader);\n }\n\n // 处理分组模式 - 对于多字段分组,使用特殊处理\n if (groupingConfig.fields.length > 1) {\n // 多字段合并模式\n result.push(...this.processMultiFieldMergeMode(groupItems, groupingConfig.fields));\n } else {\n // 单字段分组\n const primaryGroupField = groupingConfig.fields[0];\n\n switch (primaryGroupField.mode) {\n case 'merge':\n // 合并模式:第一行显示分组值,其他行为空\n result.push(...this.processMergeMode(groupItems, primaryGroupField));\n break;\n case 'separate':\n // 分离模式:每个分组独立显示\n result.push(...groupItems);\n break;\n case 'nested':\n // 嵌套模式:支持多级分组\n result.push(...this.processNestedMode(groupItems, groupingConfig));\n break;\n default:\n result.push(...groupItems);\n }\n }\n\n return result;\n }\n\n /**\n * 创建分组头行\n */\n private createGroupHeader(groupValues: string[], groupingFields: GroupingField[]): any {\n const header: any = { __isGroupHeader: true };\n\n groupingFields.forEach((field, index) => {\n const value = groupValues[index] === '__NULL__' ? '' : groupValues[index];\n const template = field.groupHeaderTemplate || (field.label) + ': {value}';\n header[field.key] = template.replace('{value}', value);\n });\n\n return header;\n }\n\n /**\n * 处理合并模式\n */\n private processMergeMode(groupItems: any[], groupField: GroupingField): any[] {\n if (groupItems.length === 0) return [];\n\n const result: any[] = [];\n\n // 第一行保持原样\n const firstItem = { ...groupItems[0] };\n firstItem.__groupSize = groupItems.length;\n firstItem.__isGroupFirst = true;\n result.push(firstItem);\n\n // 其他行的分组字段设置为空,用于合并单元格\n for (let i = 1; i < groupItems.length; i++) {\n const item = { ...groupItems[i] };\n item[groupField.key] = ''; // 空值表示需要合并\n item.__isGroupChild = true;\n item.__groupIndex = i;\n result.push(item);\n }\n\n return result;\n }\n\n /**\n * 处理多字段合并模式\n */\n private processMultiFieldMergeMode(groupItems: any[], groupFields: GroupingField[]): any[] {\n if (groupItems.length === 0) return [];\n\n const result: any[] = [];\n\n // 第一行保持原样,添加分组标记\n const firstItem = { ...groupItems[0] };\n firstItem.__groupSize = groupItems.length;\n firstItem.__isGroupFirst = true;\n\n // 为每个分组字段标记\n groupFields.forEach((field) => {\n firstItem['__' + (field.key) + '_groupSize'] = groupItems.length;\n firstItem['__' + (field.key) + '_isGroupFirst'] = true;\n });\n\n result.push(firstItem);\n\n logger.info('🔗 [UniversalExportService] 处理多字段合并模式:', {\n groupItemsLength: groupItems.length,\n groupFields: groupFields.map((f) => f.key),\n firstItem: firstItem,\n });\n\n // 其他行的所有分组字段设置为空,用于合并单元格\n for (let i = 1; i < groupItems.length; i++) {\n const item = { ...groupItems[i] };\n\n // 清空所有分组字段的值,用于单元格合并\n groupFields.forEach((field) => {\n item[field.key] = ''; // 空值表示需要合并\n });\n\n item.__isGroupChild = true;\n item.__groupIndex = i;\n result.push(item);\n }\n\n return result;\n }\n\n /**\n * 处理嵌套模式\n */\n private processNestedMode(groupItems: any[], groupingConfig: GroupingConfig): any[] {\n // 如果只有一个分组字段,按merge模式处理\n if (groupingConfig.fields.length === 1) {\n return this.processMergeMode(groupItems, groupingConfig.fields[0]);\n }\n\n // 多级分组:递归处理下一级\n const subGroupingConfig: GroupingConfig = {\n ...groupingConfig,\n fields: groupingConfig.fields.slice(1),\n };\n\n return this.applyGrouping(groupItems, subGroupingConfig);\n }\n\n /**\n * 统计分组数量\n */\n private countGroups(data: any[]): number {\n const groupHeaders = data.filter((item) => item.__isGroupHeader);\n const groupFirsts = data.filter((item) => item.__isGroupFirst);\n return Math.max(groupHeaders.length, groupFirsts.length);\n }\n\n /**\n * 生成Excel文件\n */\n private generateExcel(data: any[], fields: ExportField[], config: ExportConfig): ArrayBuffer {\n logger.info('📊 [UniversalExportService] generateExcel 开始执行:', {\n dataLength: data.length,\n fieldsCount: fields.length,\n hasGrouping: !!(config.grouping && config.grouping.enabled),\n });\n\n // 创建工作簿\n const workbook = XLSX.utils.book_new();\n\n // 过滤掉所有行都为空值的字段\n const nonEmptyFields = this.filterEmptyFields(data, fields);\n\n // 准备数据\n const worksheetData = this.prepareExcelData(data, nonEmptyFields, config);\n\n // 创建工作表\n const worksheet = XLSX.utils.aoa_to_sheet(worksheetData);\n\n // 应用分组和合并单元格\n if (config.grouping && config.grouping.enabled) {\n this.applyExcelGrouping(\n worksheet,\n data,\n nonEmptyFields,\n config.grouping,\n config.includeHeader\n );\n }\n\n // 设置列宽和样式\n this.setExcelColumnWidths(worksheet, nonEmptyFields);\n\n // 为所有数据单元格添加边框\n this.applyExcelDataStyles(worksheet, config.includeHeader);\n\n // 添加工作表到工作簿\n XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');\n\n // 生成文件\n const excelBuffer = XLSX.write(workbook, {\n bookType: 'xlsx',\n type: 'array',\n cellStyles: true,\n });\n\n logger.info('✅ [UniversalExportService] generateExcel 执行完成');\n return excelBuffer;\n }\n\n /**\n * 准备Excel数据\n */\n private prepareExcelData(data: any[], fields: ExportField[], config: ExportConfig): any[][] {\n const result: any[][] = [];\n\n logger.info('📊 [UniversalExportService] 准备Excel数据:', {\n dataLength: data.length,\n fieldsCount: fields.length,\n includeHeader: config.includeHeader,\n hasGrouping: !!(config.grouping && config.grouping.enabled),\n });\n\n // 添加表头\n if (config.includeHeader) {\n const headers = fields.map((field) => field.label);\n result.push(headers);\n logger.info('📋 [UniversalExportService] 添加表头:', headers);\n }\n\n // 添加数据行\n for (let i = 0; i < data.length; i++) {\n const item = data[i];\n\n const row = fields.map((field) => {\n // 跳过分组头行的处理\n if (item.__isGroupHeader) {\n return item[field.key] || '';\n }\n\n let value = this.getNestedValue(item, field.key);\n\n // 应用格式化器\n if (field.formatter) {\n value = field.formatter(value);\n } else if (DEFAULT_FORMATTERS[field.type]) {\n value = DEFAULT_FORMATTERS[field.type](value);\n } else {\n value = String(value || '');\n }\n\n return value;\n });\n\n result.push(row);\n\n if (i === 0) {\n logger.info('📊 [UniversalExportService] 第一行数据示例:', row);\n }\n }\n\n logger.info('✅ [UniversalExportService] Excel数据准备完成:', {\n totalRows: result.length,\n headerRows: config.includeHeader ? 1 : 0,\n dataRows: result.length - (config.includeHeader ? 1 : 0),\n });\n\n return result;\n }\n\n /**\n * 应用Excel分组和合并单元格\n */\n private applyExcelGrouping(\n worksheet: XLSX.WorkSheet,\n data: any[],\n fields: ExportField[],\n groupingConfig: GroupingConfig,\n includeHeader: boolean = true\n ): void {\n if (!worksheet['!merges']) {\n worksheet['!merges'] = [];\n }\n\n const headerOffset = includeHeader ? 1 : 0; // 是否有表头\n let currentRow = headerOffset;\n\n logger.info('📊 [UniversalExportService] 开始处理Excel分组和合并单元格:', {\n dataLength: data.length,\n headerOffset,\n groupingFields: groupingConfig.fields.map((f) => ({ key: f.key, mergeCells: f.mergeCells })),\n });\n\n for (let i = 0; i < data.length; i++) {\n const item = data[i];\n\n if (item.__isGroupFirst && item.__groupSize > 1) {\n logger.info('🔗 [UniversalExportService] 处理分组合并:', {\n row: currentRow,\n groupSize: item.__groupSize,\n item: item,\n });\n\n // 找到需要合并的分组字段\n groupingConfig.fields.forEach((groupField) => {\n if (groupField.mergeCells) {\n const fieldIndex = fields.findIndex((f) => f.key === groupField.key);\n if (fieldIndex >= 0) {\n // 获取分组大小 - 优先使用字段特定的分组大小\n const groupSize = item['__' + (groupField.key) + '_groupSize'] || item.__groupSize;\n\n // 创建合并区域\n const mergeRange = {\n s: { r: currentRow, c: fieldIndex }, // 开始行列\n e: { r: currentRow + groupSize - 1, c: fieldIndex }, // 结束行列\n };\n\n logger.info('📊 [UniversalExportService] 添加合并区域:', {\n field: groupField.key,\n fieldIndex,\n groupSize,\n mergeRange,\n });\n\n worksheet['!merges']!.push(mergeRange);\n\n // 为合并单元格添加样式\n const startCellAddress = XLSX.utils.encode_cell(mergeRange.s);\n if (worksheet[startCellAddress]) {\n worksheet[startCellAddress].s = {\n ...worksheet[startCellAddress].s,\n alignment: { horizontal: 'center', vertical: 'middle' },\n fill: { fgColor: { rgb: 'F2F2F2' } },\n border: {\n top: { style: 'thin', color: { rgb: '000000' } },\n bottom: { style: 'thin', color: { rgb: '000000' } },\n left: { style: 'thin', color: { rgb: '000000' } },\n right: { style: 'thin', color: { rgb: '000000' } },\n },\n };\n }\n }\n }\n });\n }\n\n currentRow++;\n }\n\n logger.info('✅ [UniversalExportService] Excel分组和合并单元格处理完成:', {\n totalMerges: worksheet['!merges']?.length || 0,\n });\n }\n\n /**\n * 设置Excel列宽和样式\n */\n private setExcelColumnWidths(worksheet: XLSX.WorkSheet, fields: ExportField[]): void {\n const colWidths = fields.map((field) => ({\n wch: field.width || 15, // 默认宽度15字符\n }));\n\n worksheet['!cols'] = colWidths;\n\n // 设置表头样式\n if (worksheet['!ref']) {\n const range = XLSX.utils.decode_range(worksheet['!ref']);\n for (let col = range.s.c; col <= range.e.c; col++) {\n const cellAddress = XLSX.utils.encode_cell({ r: 0, c: col });\n if (worksheet[cellAddress]) {\n // 为表头添加样式\n worksheet[cellAddress].s = {\n font: { bold: true, color: { rgb: 'FFFFFF' } },\n fill: { fgColor: { rgb: '4472C4' } },\n alignment: { horizontal: 'center', vertical: 'center' },\n border: {\n top: { style: 'thin', color: { rgb: '000000' } },\n bottom: { style: 'thin', color: { rgb: '000000' } },\n left: { style: 'thin', color: { rgb: '000000' } },\n right: { style: 'thin', color: { rgb: '000000' } },\n },\n };\n }\n }\n }\n\n logger.info('✅ [UniversalExportService] Excel列宽和样式设置完成:', {\n columnsCount: colWidths.length,\n columnWidths: colWidths.map((col, index) => ({ field: fields[index]?.key, width: col.wch })),\n });\n }\n\n /**\n * 为Excel数据单元格应用样式\n */\n private applyExcelDataStyles(worksheet: XLSX.WorkSheet, includeHeader: boolean = true): void {\n if (!worksheet['!ref']) return;\n\n const range = XLSX.utils.decode_range(worksheet['!ref']);\n const startRow = includeHeader ? 1 : 0; // 跳过表头\n\n logger.info('🎨 [UniversalExportService] 开始应用Excel数据样式:', {\n totalRows: range.e.r + 1,\n totalCols: range.e.c + 1,\n startRow,\n });\n\n // 为数据单元格添加边框和对齐\n for (let row = startRow; row <= range.e.r; row++) {\n for (let col = range.s.c; col <= range.e.c; col++) {\n const cellAddress = XLSX.utils.encode_cell({ r: row, c: col });\n if (worksheet[cellAddress]) {\n // 保留已有样式(如合并单元格的样式)\n const existingStyle = worksheet[cellAddress].s || {};\n\n worksheet[cellAddress].s = {\n ...existingStyle,\n border: {\n top: { style: 'thin', color: { rgb: 'CCCCCC' } },\n bottom: { style: 'thin', color: { rgb: 'CCCCCC' } },\n left: { style: 'thin', color: { rgb: 'CCCCCC' } },\n right: { style: 'thin', color: { rgb: 'CCCCCC' } },\n },\n alignment: {\n ...existingStyle.alignment,\n vertical: 'center',\n },\n };\n }\n }\n }\n\n logger.info('✅ [UniversalExportService] Excel数据样式应用完成');\n }\n}\n","/**\n * UniversalExport Service 工厂函数\n * 提供简化的服务初始化方式\n */\n\nimport type { UniversalExportServiceConfig } from './types';\n\n/**\n * 创建导出服务配置(带智能默认值)\n */\nexport function createExportServiceConfig(\n options: Partial<UniversalExportServiceConfig> = {}\n): UniversalExportServiceConfig {\n return {\n db: options.db,\n exportDir: options.exportDir || process.env.EXPORT_DIR || './exports',\n tempDir: options.tempDir || process.env.TEMP_DIR || './temp',\n maxRows: options.maxRows || 100000, // 默认最多导出 10 万行\n enableStreaming: options.enableStreaming !== false, // 默认启用流式导出\n timeout: options.timeout || 300000, // 默认超时 5 分钟\n };\n}\n\n/**\n * 创建导出服务实例(简化版)\n *\n * @example\n * ```typescript\n * // 最简配置\n * const service = createUniversalExportService();\n *\n * // 标准配置\n * const service = createUniversalExportService({\n * db: drizzleDb,\n * exportDir: './exports',\n * maxRows: 50000,\n * });\n * ```\n */\nexport function createUniversalExportService(\n options: Partial<UniversalExportServiceConfig> = {}\n) {\n const config = createExportServiceConfig(options);\n\n // 注意:实际的 UniversalExportService 将在后续 Phase 中迁移\n // 这里先返回一个占位对象,包含基本的类型信息\n console.warn(\n '⚠️ UniversalExportService 的完整实现将在后续 Phase 中迁移到 Sa2kit。\\n' +\n ' 当前版本仅包含类型定义和配置工厂函数。\\n' +\n ' 请暂时继续从 LyricNote 的 lib/universalExport 导入服务类。'\n );\n\n return {\n config,\n // 占位方法\n async export() {\n throw new Error('UniversalExportService 尚未完全迁移,请从 LyricNote 导入');\n },\n async createTask() {\n throw new Error('UniversalExportService 尚未完全迁移,请从 LyricNote 导入');\n },\n };\n}\n\n/**\n * 从环境变量创建配置(便利函数)\n *\n * @example\n * ```typescript\n * // .env\n * // EXPORT_DIR=./exports\n * // EXPORT_MAX_ROWS=50000\n *\n * const service = createExportServiceFromEnv();\n * ```\n */\nexport function createExportServiceFromEnv(db?: any) {\n return createUniversalExportService({\n db,\n exportDir: process.env.EXPORT_DIR,\n tempDir: process.env.TEMP_DIR,\n maxRows: process.env.EXPORT_MAX_ROWS\n ? parseInt(process.env.EXPORT_MAX_ROWS)\n : undefined,\n });\n}\n\n","/**\n * UniversalExport 预设配置\n * 提供常见场景的开箱即用配置\n */\n\nimport type { UniversalExportServiceConfig } from './types';\n\n/**\n * 小型应用预设(数据量小)\n */\nexport function createSmallAppPreset(): Partial<UniversalExportServiceConfig> {\n return {\n maxRows: 10000, // 1万行\n timeout: 60000, // 1分钟\n enableStreaming: false, // 小数据量不需要流式导出\n };\n}\n\n/**\n * 中型应用预设(默认配置)\n */\nexport function createMediumAppPreset(): Partial<UniversalExportServiceConfig> {\n return {\n maxRows: 100000, // 10万行\n timeout: 300000, // 5分钟\n enableStreaming: true,\n };\n}\n\n/**\n * 大型应用预设(数据量大)\n */\nexport function createLargeAppPreset(): Partial<UniversalExportServiceConfig> {\n return {\n maxRows: 1000000, // 100万行\n timeout: 600000, // 10分钟\n enableStreaming: true,\n };\n}\n\n/**\n * 实时导出预设(快速响应)\n */\nexport function createRealtimeExportPreset(): Partial<UniversalExportServiceConfig> {\n return {\n maxRows: 5000, // 5千行\n timeout: 30000, // 30秒\n enableStreaming: false,\n };\n}\n\n/**\n * 批量导出预设(大批量、离线处理)\n */\nexport function createBatchExportPreset(): Partial<UniversalExportServiceConfig> {\n return {\n maxRows: Number.MAX_SAFE_INTEGER, // 不限制\n timeout: 1800000, // 30分钟\n enableStreaming: true,\n };\n}\n\n/**\n * 智能预设:根据环境自动选择\n */\nexport function createSmartExportPreset(): Partial<UniversalExportServiceConfig> {\n const envMaxRows = process.env.EXPORT_MAX_ROWS;\n\n if (envMaxRows) {\n const maxRows = parseInt(envMaxRows);\n\n // 根据配置的最大行数自动选择合适的预设\n if (maxRows <= 10000) {\n return createSmallAppPreset();\n } else if (maxRows <= 100000) {\n return createMediumAppPreset();\n } else {\n return createLargeAppPreset();\n }\n }\n\n // 默认使用中型应用预设\n return createMediumAppPreset();\n}\n\n","/**\n * UniversalExport 配置验证\n */\n\nimport type { UniversalExportServiceConfig } from './types';\n\nexport class ConfigValidationError extends Error {\n constructor(message: string, public field: string) {\n super(message);\n this.name = 'ConfigValidationError';\n }\n}\n\n/**\n * 验证导出服务配置\n */\nexport function validateExportConfig(config: UniversalExportServiceConfig): void {\n // 验证导出目录\n if (!config.exportDir) {\n throw new ConfigValidationError('exportDir is required', 'exportDir');\n }\n\n // 验证临时目录\n if (!config.tempDir) {\n throw new ConfigValidationError('tempDir is required', 'tempDir');\n }\n\n // 验证最大行数\n if (config.maxRows && config.maxRows <= 0) {\n throw new ConfigValidationError(\n 'maxRows must be greater than 0',\n 'maxRows'\n );\n }\n\n // 验证超时时间\n if (config.timeout && config.timeout <= 0) {\n throw new ConfigValidationError(\n 'timeout must be greater than 0',\n 'timeout'\n );\n }\n\n // 安全建议\n if (config.maxRows && config.maxRows > 1000000) {\n console.warn(\n '⚠️ Warning: maxRows (' + (config.maxRows) + ') is very large. ' +\n `Consider using pagination or streaming for better performance.`\n );\n }\n}\n\n/**\n * 验证环境变量\n */\nexport function validateEnvironment(requiredVars: string[]): void {\n const missing: string[] = [];\n\n for (const varName of requiredVars) {\n if (!process.env[varName]) {\n missing.push(varName);\n }\n }\n\n if (missing.length > 0) {\n throw new ConfigValidationError(\n 'Missing required environment variables: ' + (missing.join(', ')),\n 'environment'\n );\n }\n}\n\n","/**\n * UniversalExport Server 工具函数\n */\n\nimport type { ExportField, FieldType } from '../../types';\n\n/**\n * 格式化字段值\n *\n * @param value 原始值\n * @param field 字段定义\n * @returns 格式化后的值\n */\nexport function formatFieldValue(value: any, field: ExportField): string {\n // 如果字段有自定义格式化函数,使用它\n if (field.formatter) {\n return field.formatter(value);\n }\n\n // 空值处理\n if (value === null || value === undefined) {\n return '';\n }\n\n // 根据字段类型进行默认格式化\n switch (field.type) {\n case 'date':\n return value instanceof Date\n ? (value.toISOString().split('T')[0] || '')\n : String(value);\n\n case 'boolean':\n return value ? '是' : '否';\n\n case 'array':\n return Array.isArray(value) ? value.join(', ') : String(value);\n\n case 'object':\n return typeof value === 'object'\n ? JSON.stringify(value)\n : String(value);\n\n case 'number':\n return typeof value === 'number'\n ? value.toLocaleString()\n : String(value);\n\n default:\n return String(value);\n }\n}\n\n/**\n * 验证字段值\n *\n * @param value 字段值\n * @param field 字段定义\n * @returns 是否有效\n */\nexport function validateFieldValue(value: any, field: ExportField): boolean {\n // 必填字段检查\n if (field.required && (value === null || value === undefined || value === '')) {\n return false;\n }\n\n // 类型检查\n switch (field.type) {\n case 'number':\n return typeof value === 'number' || !isNaN(Number(value));\n\n case 'boolean':\n return typeof value === 'boolean';\n\n case 'array':\n return Array.isArray(value);\n\n case 'object':\n return typeof value === 'object';\n\n case 'date':\n return value instanceof Date || !isNaN(Date.parse(value));\n\n default:\n return true;\n }\n}\n\n/**\n * 转换字段类型\n *\n * @param value 原始值\n * @param targetType 目标类型\n * @returns 转换后的值\n */\nexport function convertFieldType(value: any, targetType: FieldType): any {\n if (value === null || value === undefined) {\n return value;\n }\n\n switch (targetType) {\n case 'string':\n return String(value);\n\n case 'number':\n return Number(value);\n\n case 'boolean':\n return Boolean(value);\n\n case 'date':\n return value instanceof Date ? value : new Date(value);\n\n case 'array':\n return Array.isArray(value) ? value : [value];\n\n case 'object':\n return typeof value === 'object' ? value : { value };\n\n default:\n return value;\n }\n}\n\n/**\n * 安全获取嵌套属性值\n *\n * @param obj 对象\n * @param path 属性路径(支持点号分隔)\n * @returns 属性值\n *\n * @example\n * ```typescript\n * const obj = { user: { name: 'John', age: 30 } };\n * getNestedValue(obj, 'user.name') // 'John'\n * getNestedValue(obj, 'user.email') // undefined\n * ```\n */\nexport function getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n}\n\n/**\n * 转义 CSV 字段值\n *\n * @param value 字段值\n * @returns 转义后的值\n */\nexport function escapeCsvValue(value: string): string {\n // 如果包含逗号、引号或换行符,需要用引号包裹并转义引号\n if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\n return '\"' + (value.replace(/\"/g, '\"\"')) + '\"';\n }\n return value;\n}\n\n/**\n * 生成唯一的文件名\n *\n * @param prefix 前缀\n * @param extension 扩展名\n * @returns 唯一文件名\n *\n * @example\n * ```typescript\n * generateUniqueFilename('export', 'xlsx')\n * // 'export_20231111_123456_abc123.xlsx'\n * ```\n */\nexport function generateUniqueFilename(prefix: string, extension: string): string {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);\n const random = Math.random().toString(36).substring(2, 8);\n return (prefix) + '_' + (timestamp) + '_' + (random) + '.' + (extension);\n}\n\n/**\n * 计算导出进度百分比\n *\n * @param processed 已处理行数\n * @param total 总行数\n * @returns 百分比(0-100)\n */\nexport function calculateProgress(processed: number, total: number): number {\n if (total === 0) return 0;\n return Math.min(Math.round((processed / total) * 100), 100);\n}\n\n/**\n * 估算剩余时间(秒)\n *\n * @param processed 已处理行数\n * @param total 总行数\n * @param elapsedMs 已用时间(毫秒)\n * @returns 剩余时间(秒)\n */\nexport function estimateRemainingTime(\n processed: number,\n total: number,\n elapsedMs: number\n): number {\n if (processed === 0) return 0;\n const avgTimePerRow = elapsedMs / processed;\n const remainingRows = total - processed;\n return Math.round((remainingRows * avgTimePerRow) / 1000);\n}\n\n","/**\n * 通用导出服务 - PostgreSQL 数据库表结构定义\n *\n * 提供导出配置和历史记录的数据库表结构。\n *\n * 表结构概览:\n * - export_configs: 导出配置表\n * - export_history: 导出历史记录表\n *\n * 设计特点:\n * - 支持多种导出格式(CSV, Excel, JSON)\n * - 灵活的字段配置和分组\n * - 完整的历史记录追踪\n *\n * @fileoverview 数据库表结构 - 通用导出服务 (PostgreSQL)\n * @package sa2kit/universalExport/server\n */\n\nimport { pgTable, text, boolean, jsonb, timestamp, integer } from 'drizzle-orm/pg-core';\nimport { sql, relations } from 'drizzle-orm';\n\n/**\n * 导出配置表 (ExportConfig)\n *\n * 存储导出任务的配置信息,包括字段选择、格式化、分组等。\n */\nexport const exportConfigs = pgTable('ExportConfig', {\n /** 主键ID */\n id: text('id')\n .primaryKey()\n .$defaultFn(() => 'export_config_' + (Date.now()) + '_' + (Math.random().toString(36).substr(2, 9))),\n\n /** 配置名称 */\n name: text('name').notNull(),\n\n /** 配置描述 */\n description: text('description'),\n\n /** 导出格式:'csv' | 'excel' | 'json' */\n format: text('format').notNull(),\n\n /** 导出字段配置(JSON数组) */\n fields: jsonb('fields').notNull(), // ExportField[]\n\n /** 分组配置 */\n grouping: jsonb('grouping'), // GroupingConfig\n\n /** 文件名模板 */\n fileNameTemplate: text('fileNameTemplate').notNull(),\n\n /** 是否包含表头 */\n includeHeader: boolean('includeHeader').default(true).notNull(),\n\n /** 分隔符(用于CSV格式) */\n delimiter: text('delimiter').default(',').notNull(),\n\n /** 编码格式 */\n encoding: text('encoding').default('utf-8').notNull(),\n\n /** 是否添加BOM(用于Excel打开UTF-8 CSV) */\n addBOM: boolean('addBOM').default(true).notNull(),\n\n /** 最大导出行数 */\n maxRows: integer('maxRows'),\n\n /** 模块ID */\n moduleId: text('moduleId').notNull(),\n\n /** 业务ID */\n businessId: text('businessId'),\n\n /** 创建者ID */\n createdBy: text('createdBy'),\n\n /** 创建时间 */\n createdAt: timestamp('createdAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n\n /** 更新时间 */\n updatedAt: timestamp('updatedAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n});\n\n/**\n * 导出历史记录表 (ExportHistory)\n *\n * 记录每次导出任务的执行情况,包括状态、耗时、文件信息等。\n */\nexport const exportHistory = pgTable('ExportHistory', {\n /** 主键ID */\n id: text('id')\n .primaryKey()\n .$defaultFn(() => 'export_history_' + (Date.now()) + '_' + (Math.random().toString(36).substr(2, 9))),\n\n /** 关联的配置ID */\n configId: text('configId').notNull(),\n\n /** 导出的文件名 */\n fileName: text('fileName').notNull(),\n\n /** 文件大小(字节) */\n fileSize: integer('fileSize').notNull(),\n\n /** 导出的行数 */\n exportedRows: integer('exportedRows').notNull(),\n\n /** 导出状态:'pending' | 'processing' | 'completed' | 'failed' */\n status: text('status').notNull(),\n\n /** 错误信息(如果失败) */\n error: text('error'),\n\n /** 导出耗时(毫秒) */\n duration: integer('duration'),\n\n /** 开始时间 */\n startTime: timestamp('startTime', { precision: 3, mode: 'date' }).notNull(),\n\n /** 结束时间 */\n endTime: timestamp('endTime', { precision: 3, mode: 'date' }),\n\n /** 创建者ID */\n createdBy: text('createdBy'),\n\n /** 创建时间 */\n createdAt: timestamp('createdAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n});\n\n// ========== 关系定义 ==========\n\n/**\n * 导出配置表关系\n * 一个配置可以有多个导出历史记录\n */\nexport const exportConfigsRelations = relations(exportConfigs, ({ many }) => ({\n history: many(exportHistory),\n}));\n\n/**\n * 导出历史表关系\n * 每个历史记录关联一个配置\n */\nexport const exportHistoryRelations = relations(exportHistory, ({ one }) => ({\n config: one(exportConfigs, {\n fields: [exportHistory.configId],\n references: [exportConfigs.id],\n }),\n}));\n\n// ========== 导出类型 ==========\n\nexport type ExportConfig = typeof exportConfigs.$inferSelect;\nexport type NewExportConfig = typeof exportConfigs.$inferInsert;\n\nexport type ExportHistory = typeof exportHistory.$inferSelect;\nexport type NewExportHistory = typeof exportHistory.$inferInsert;\n\n","/**\n * 通用导出服务 - Drizzle 数据库操作层\n *\n * 提供导出配置和历史记录的数据库操作接口。\n * 支持任何 Drizzle 数据库实例。\n *\n * @package sa2kit/universalExport/server\n */\n\nimport { eq, and, desc } from 'drizzle-orm';\nimport type {\n ExportConfig,\n NewExportConfig,\n ExportHistory,\n NewExportHistory,\n} from './drizzle-schemas/postgres';\nimport { exportConfigs, exportHistory } from './drizzle-schemas/postgres';\n\n/**\n * Drizzle 数据库实例类型\n */\nexport type DrizzleDb = any; // 支持任何 Drizzle 数据库实例\n\n/**\n * 导出配置数据库服务工厂选项\n */\nexport interface ExportDatabaseServiceOptions {\n /**\n * Drizzle 数据库实例\n */\n db: DrizzleDb;\n}\n\n/**\n * 导出配置数据库服务\n *\n * 提供导出配置的 CRUD 操作\n */\nexport class ExportConfigDatabaseService {\n constructor(private readonly db: DrizzleDb) {}\n\n /**\n * 创建导出配置\n */\n async createConfig(\n config: Omit<NewExportConfig, 'id' | 'createdAt' | 'updatedAt'>\n ): Promise<ExportConfig> {\n const id = 'export_config_' + (Date.now()) + '_' + (Math.random().toString(36).substr(2, 9));\n const now = new Date();\n\n const [newConfig] = await this.db\n .insert(exportConfigs)\n .values({\n id,\n ...config,\n createdAt: now,\n updatedAt: now,\n })\n .returning();\n\n return newConfig;\n }\n\n /**\n * 根据ID获取配置\n */\n async getConfigById(id: string): Promise<ExportConfig | null> {\n const [config] = await this.db\n .select()\n .from(exportConfigs)\n .where(eq(exportConfigs.id, id))\n .limit(1);\n\n return config || null;\n }\n\n /**\n * 根据模块和业务ID获取配置列表\n */\n async getConfigsByModule(moduleId: string, businessId?: string): Promise<ExportConfig[]> {\n const whereConditions = businessId\n ? and(eq(exportConfigs.moduleId, moduleId), eq(exportConfigs.businessId, businessId))\n : eq(exportConfigs.moduleId, moduleId);\n\n return await this.db\n .select()\n .from(exportConfigs)\n .where(whereConditions)\n .orderBy(desc(exportConfigs.updatedAt));\n }\n\n /**\n * 更新配置\n */\n async updateConfig(\n id: string,\n updates: Partial<Omit<ExportConfig, 'id' | 'createdAt'>>\n ): Promise<ExportConfig | null> {\n const [updatedConfig] = await this.db\n .update(exportConfigs)\n .set({\n ...updates,\n updatedAt: new Date(),\n })\n .where(eq(exportConfigs.id, id))\n .returning();\n\n return updatedConfig || null;\n }\n\n /**\n * 删除配置\n */\n async deleteConfig(id: string): Promise<boolean> {\n await this.db.delete(exportConfigs).where(eq(exportConfigs.id, id));\n return true;\n }\n\n /**\n * 根据用户ID获取配置列表\n */\n async getConfigsByUser(userId: string): Promise<ExportConfig[]> {\n return await this.db\n .select()\n .from(exportConfigs)\n .where(eq(exportConfigs.createdBy, userId))\n .orderBy(desc(exportConfigs.updatedAt));\n }\n}\n\n/**\n * 导出历史记录数据库服务\n *\n * 提供导出历史记录的 CRUD 操作\n */\nexport class ExportHistoryDatabaseService {\n constructor(private readonly db: DrizzleDb) {}\n\n /**\n * 创建导出历史记录\n */\n async createHistory(history: Omit<NewExportHistory, 'id' | 'createdAt'>): Promise<ExportHistory> {\n const id = 'export_history_' + (Date.now()) + '_' + (Math.random().toString(36).substr(2, 9));\n\n const [newHistory] = await this.db\n .insert(exportHistory)\n .values({\n id,\n ...history,\n createdAt: new Date(),\n })\n .returning();\n\n return newHistory;\n }\n\n /**\n * 根据配置ID获取历史记录\n */\n async getHistoryByConfigId(configId: string): Promise<ExportHistory[]> {\n return await this.db\n .select()\n .from(exportHistory)\n .where(eq(exportHistory.configId, configId))\n .orderBy(desc(exportHistory.createdAt));\n }\n\n /**\n * 根据用户ID获取历史记录\n */\n async getHistoryByUser(userId: string): Promise<ExportHistory[]> {\n return await this.db\n .select()\n .from(exportHistory)\n .where(eq(exportHistory.createdBy, userId))\n .orderBy(desc(exportHistory.createdAt));\n }\n\n /**\n * 获取最近的导出历史记录\n */\n async getRecentHistory(limit: number = 10): Promise<ExportHistory[]> {\n return await this.db\n .select()\n .from(exportHistory)\n .orderBy(desc(exportHistory.createdAt))\n .limit(limit);\n }\n}\n\n/**\n * 创建导出数据库服务实例\n *\n * @param options - 数据库服务选项\n * @returns 导出配置和历史记录服务实例\n *\n * @example\n * ```typescript\n * import { createExportDatabaseServices } from 'sa2kit/universalExport/server';\n * import { db } from './db';\n *\n * const { configDB, historyDB } = createExportDatabaseServices({ db });\n *\n * // 使用服务\n * const config = await configDB.createConfig({ ... });\n * const history = await historyDB.createHistory({ ... });\n * ```\n */\nexport function createExportDatabaseServices(options: ExportDatabaseServiceOptions) {\n const { db } = options;\n\n return {\n configDB: new ExportConfigDatabaseService(db),\n historyDB: new ExportHistoryDatabaseService(db),\n };\n}\n\n"]}
@@ -1,25 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkS6YSGVWD_js = require('./chunk-S6YSGVWD.js');
4
- var chunkCAYOQDBR_js = require('./chunk-CAYOQDBR.js');
5
- var chunkUCOE6SET_js = require('./chunk-UCOE6SET.js');
6
- var chunkXJ7ZAGC5_js = require('./chunk-XJ7ZAGC5.js');
7
- var chunkNSBPE2FW_js = require('./chunk-NSBPE2FW.js');
8
-
9
- // src/common/storage/index.ts
10
- var storage_exports = {};
11
- chunkNSBPE2FW_js.__export(storage_exports, {
12
- ElectronStorageAdapter: () => chunkUCOE6SET_js.ElectronStorageAdapter,
13
- MiniAppStorageAdapter: () => chunkS6YSGVWD_js.MiniAppStorageAdapter,
14
- ReactNativeStorageAdapter: () => chunkCAYOQDBR_js.ReactNativeStorageAdapter,
15
- WebStorageAdapter: () => chunkXJ7ZAGC5_js.WebStorageAdapter,
16
- useAsyncStorage: () => chunkS6YSGVWD_js.useAsyncStorage,
17
- useElectronStorage: () => chunkS6YSGVWD_js.useElectronStorage,
18
- useLocalStorage: () => chunkS6YSGVWD_js.useLocalStorage,
19
- useStorage: () => chunkS6YSGVWD_js.useStorage,
20
- useTaroStorage: () => chunkS6YSGVWD_js.useTaroStorage
21
- });
22
-
23
- exports.storage_exports = storage_exports;
24
- //# sourceMappingURL=chunk-NDGHXVGS.js.map
25
- //# sourceMappingURL=chunk-NDGHXVGS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/common/storage/index.ts"],"names":["__export","ElectronStorageAdapter","MiniAppStorageAdapter","ReactNativeStorageAdapter","WebStorageAdapter","useAsyncStorage","useElectronStorage","useLocalStorage","useStorage","useTaroStorage"],"mappings":";;;;;;;;;AAAA,IAAA,eAAA,GAAA;AAAAA,yBAAA,CAAA,eAAA,EAAA;AAAA,EAAA,sBAAA,EAAA,MAAAC,uCAAA;AAAA,EAAA,qBAAA,EAAA,MAAAC,sCAAA;AAAA,EAAA,yBAAA,EAAA,MAAAC,0CAAA;AAAA,EAAA,iBAAA,EAAA,MAAAC,kCAAA;AAAA,EAAA,eAAA,EAAA,MAAAC,gCAAA;AAAA,EAAA,kBAAA,EAAA,MAAAC,mCAAA;AAAA,EAAA,eAAA,EAAA,MAAAC,gCAAA;AAAA,EAAA,UAAA,EAAA,MAAAC,2BAAA;AAAA,EAAA,cAAA,EAAA,MAAAC;AAAA,CAAA,CAAA","file":"chunk-NDGHXVGS.js","sourcesContent":["/**\n * @package sa2kit/common/storage\n */\nexport * from '../../storage';\n"]}