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,5 +1,5 @@
1
- import { ExportConfigError, ExportDataError, ExportFileError } from './chunk-LFB5EIIM.mjs';
2
- import { createLogger } from './chunk-3DXPQ4YV.mjs';
1
+ import { ExportConfigError, ExportDataError, ExportFileError } from './chunk-QIF4MG5V.mjs';
2
+ import { createLogger } from './chunk-VYK4M2D6.mjs';
3
3
  import * as XLSX from 'xlsx';
4
4
  import { pgTable, timestamp, text, integer, boolean, jsonb } from 'drizzle-orm/pg-core';
5
5
  import { sql, relations, eq, and, desc } from 'drizzle-orm';
@@ -1185,7 +1185,7 @@ var UniversalExportService = class {
1185
1185
  }
1186
1186
  };
1187
1187
 
1188
- // src/universalExport/server/factory.ts
1188
+ // src/common/universalExport/server/factory.ts
1189
1189
  function createExportServiceConfig(options = {}) {
1190
1190
  return {
1191
1191
  db: options.db,
@@ -1224,7 +1224,7 @@ function createExportServiceFromEnv(db) {
1224
1224
  });
1225
1225
  }
1226
1226
 
1227
- // src/universalExport/server/presets.ts
1227
+ // src/common/universalExport/server/presets.ts
1228
1228
  function createSmallAppPreset() {
1229
1229
  return {
1230
1230
  maxRows: 1e4,
@@ -1286,7 +1286,7 @@ function createSmartExportPreset() {
1286
1286
  return createMediumAppPreset();
1287
1287
  }
1288
1288
 
1289
- // src/universalExport/server/validation.ts
1289
+ // src/common/universalExport/server/validation.ts
1290
1290
  var ConfigValidationError = class extends Error {
1291
1291
  constructor(message, field) {
1292
1292
  super(message);
@@ -1333,94 +1333,6 @@ function validateEnvironment(requiredVars) {
1333
1333
  );
1334
1334
  }
1335
1335
  }
1336
-
1337
- // src/universalExport/server/utils/index.ts
1338
- function formatFieldValue(value, field) {
1339
- if (field.formatter) {
1340
- return field.formatter(value);
1341
- }
1342
- if (value === null || value === void 0) {
1343
- return "";
1344
- }
1345
- switch (field.type) {
1346
- case "date":
1347
- return value instanceof Date ? value.toISOString().split("T")[0] || "" : String(value);
1348
- case "boolean":
1349
- return value ? "\u662F" : "\u5426";
1350
- case "array":
1351
- return Array.isArray(value) ? value.join(", ") : String(value);
1352
- case "object":
1353
- return typeof value === "object" ? JSON.stringify(value) : String(value);
1354
- case "number":
1355
- return typeof value === "number" ? value.toLocaleString() : String(value);
1356
- default:
1357
- return String(value);
1358
- }
1359
- }
1360
- function validateFieldValue(value, field) {
1361
- if (field.required && (value === null || value === void 0 || value === "")) {
1362
- return false;
1363
- }
1364
- switch (field.type) {
1365
- case "number":
1366
- return typeof value === "number" || !isNaN(Number(value));
1367
- case "boolean":
1368
- return typeof value === "boolean";
1369
- case "array":
1370
- return Array.isArray(value);
1371
- case "object":
1372
- return typeof value === "object";
1373
- case "date":
1374
- return value instanceof Date || !isNaN(Date.parse(value));
1375
- default:
1376
- return true;
1377
- }
1378
- }
1379
- function convertFieldType(value, targetType) {
1380
- if (value === null || value === void 0) {
1381
- return value;
1382
- }
1383
- switch (targetType) {
1384
- case "string":
1385
- return String(value);
1386
- case "number":
1387
- return Number(value);
1388
- case "boolean":
1389
- return Boolean(value);
1390
- case "date":
1391
- return value instanceof Date ? value : new Date(value);
1392
- case "array":
1393
- return Array.isArray(value) ? value : [value];
1394
- case "object":
1395
- return typeof value === "object" ? value : { value };
1396
- default:
1397
- return value;
1398
- }
1399
- }
1400
- function getNestedValue(obj, path) {
1401
- return path.split(".").reduce((current, key) => current?.[key], obj);
1402
- }
1403
- function escapeCsvValue(value) {
1404
- if (value.includes(",") || value.includes('"') || value.includes("\n")) {
1405
- return '"' + value.replace(/"/g, '""') + '"';
1406
- }
1407
- return value;
1408
- }
1409
- function generateUniqueFilename(prefix, extension) {
1410
- const timestamp2 = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").slice(0, -5);
1411
- const random = Math.random().toString(36).substring(2, 8);
1412
- return prefix + "_" + timestamp2 + "_" + random + "." + extension;
1413
- }
1414
- function calculateProgress(processed, total) {
1415
- if (total === 0) return 0;
1416
- return Math.min(Math.round(processed / total * 100), 100);
1417
- }
1418
- function estimateRemainingTime(processed, total, elapsedMs) {
1419
- if (processed === 0) return 0;
1420
- const avgTimePerRow = elapsedMs / processed;
1421
- const remainingRows = total - processed;
1422
- return Math.round(remainingRows * avgTimePerRow / 1e3);
1423
- }
1424
1336
  var exportConfigs = pgTable("ExportConfig", {
1425
1337
  /** 主键ID */
1426
1338
  id: text("id").primaryKey().$defaultFn(() => "export_config_" + Date.now() + "_" + Math.random().toString(36).substr(2, 9)),
@@ -1593,6 +1505,6 @@ function createExportDatabaseServices(options) {
1593
1505
  };
1594
1506
  }
1595
1507
 
1596
- export { ConfigValidationError, ExportConfigDatabaseService, ExportHistoryDatabaseService, UniversalExportService, calculateProgress, convertFieldType, createBatchExportPreset, createExportDatabaseServices, createExportServiceConfig, createExportServiceFromEnv, createLargeAppPreset, createMediumAppPreset, createRealtimeExportPreset, createSmallAppPreset, createSmartExportPreset, createUniversalExportService, escapeCsvValue, estimateRemainingTime, exportConfigs, exportConfigsRelations, exportHistory, exportHistoryRelations, formatFieldValue, generateUniqueFilename, getNestedValue, validateEnvironment, validateExportConfig, validateFieldValue };
1597
- //# sourceMappingURL=chunk-NCRP2YHY.mjs.map
1598
- //# sourceMappingURL=chunk-NCRP2YHY.mjs.map
1508
+ export { ConfigValidationError, ExportConfigDatabaseService, ExportHistoryDatabaseService, UniversalExportService, createBatchExportPreset, createExportDatabaseServices, createExportServiceConfig, createExportServiceFromEnv, createLargeAppPreset, createMediumAppPreset, createRealtimeExportPreset, createSmallAppPreset, createSmartExportPreset, createUniversalExportService, exportConfigs, exportConfigsRelations, exportHistory, exportHistoryRelations, validateEnvironment, validateExportConfig };
1509
+ //# sourceMappingURL=chunk-MKLXCV4Z.mjs.map
1510
+ //# sourceMappingURL=chunk-MKLXCV4Z.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/universalExport/server/UniversalExportService.ts","../src/common/universalExport/server/factory.ts","../src/common/universalExport/server/presets.ts","../src/common/universalExport/server/validation.ts","../src/common/universalExport/server/drizzle-schemas/postgres.ts","../src/common/universalExport/server/drizzle-database.ts"],"names":["endTime","duration"],"mappings":"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","file":"chunk-MKLXCV4Z.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 * 通用导出服务 - 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"]}