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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/universalExport/client.ts","../src/common/universalExport/components/ExportConfigEditor.tsx","../src/common/universalExport/components/UniversalExportButton.tsx"],"names":["API_ENDPOINTS","createExportError","ERROR_CODES","formatErrorMessage","React","FileText","FileSpreadsheet","Database","useState","useCallback","config","useEffect","Settings","Type","Group","clsx","X","Eye","EyeOff","MoveUp","MoveDown","Trash2","Save","Loader2","Download","ChevronDown"],"mappings":"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","file":"chunk-3J24Z4MB.js","sourcesContent":["/**\n * 通用导出服务客户端SDK\n *\n * 提供与后端API交互的客户端接口\n */\n\nimport type { ExportConfig, ExportProgress, ExportResult, ExportRequest } from './types';\nimport { API_ENDPOINTS, ERROR_CODES } from './constants';\nimport { createExportError, formatErrorMessage } from './utils';\n\n// ============= 配置类型 =============\n\nexport interface UniversalExportClientConfig {\n /** API基础URL */\n baseUrl?: string;\n /** 请求超时时间(毫秒) */\n timeout?: number;\n /** 自定义请求头 */\n headers?: Record<string, string>;\n}\n\n// ============= 客户端类 =============\n\n/**\n * 通用导出服务客户端\n */\nexport class UniversalExportClient {\n private config: UniversalExportClientConfig;\n\n constructor(config: UniversalExportClientConfig = {}) {\n this.config = {\n baseUrl: config.baseUrl || '',\n timeout: config.timeout || 30000,\n headers: config.headers || {},\n };\n }\n\n // ============= 配置管理API =============\n\n /**\n * 获取模块的导出配置列表\n */\n async getConfigsByModule(moduleId: string, businessId?: string): Promise<ExportConfig[]> {\n const params = new URLSearchParams({ moduleId });\n if (businessId) {\n params.append('businessId', businessId);\n }\n\n const url = (this.config.baseUrl) + (API_ENDPOINTS.GET_CONFIGS) + '?' + (params);\n\n try {\n const response = await this.fetchWithTimeout(url, {\n method: 'GET',\n headers: this.getHeaders(),\n });\n\n if (!response.ok) {\n throw new Error('获取配置失败: ' + (response.statusText));\n }\n\n const data = await response.json();\n return this.transformConfigsFromAPI(data.configs || []);\n } catch (error) {\n throw createExportError(\n ERROR_CODES.NETWORK_ERROR,\n '获取导出配置失败: ' + (formatErrorMessage(error)),\n { moduleId, businessId, originalError: error }\n );\n }\n }\n\n /**\n * 创建导出配置\n */\n async createConfig(\n config: Omit<ExportConfig, 'id' | 'createdAt' | 'updatedAt'>\n ): Promise<ExportConfig> {\n const url = (this.config.baseUrl) + (API_ENDPOINTS.CREATE_CONFIG);\n\n try {\n const response = await this.fetchWithTimeout(url, {\n method: 'POST',\n headers: {\n ...this.getHeaders(),\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(config),\n });\n\n if (!response.ok) {\n throw new Error('创建配置失败: ' + (response.statusText));\n }\n\n const data = await response.json();\n return this.transformConfigFromAPI(data.config);\n } catch (error) {\n throw createExportError(\n ERROR_CODES.NETWORK_ERROR,\n '创建导出配置失败: ' + (formatErrorMessage(error)),\n { config, originalError: error }\n );\n }\n }\n\n /**\n * 更新导出配置\n */\n async updateConfig(configId: string, updates: Partial<ExportConfig>): Promise<ExportConfig> {\n const url = (this.config.baseUrl) + (API_ENDPOINTS.UPDATE_CONFIG(configId));\n\n try {\n const response = await this.fetchWithTimeout(url, {\n method: 'PUT',\n headers: {\n ...this.getHeaders(),\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(updates),\n });\n\n if (!response.ok) {\n throw new Error('更新配置失败: ' + (response.statusText));\n }\n\n const data = await response.json();\n return this.transformConfigFromAPI(data.config);\n } catch (error) {\n throw createExportError(\n ERROR_CODES.NETWORK_ERROR,\n '更新导出配置失败: ' + (formatErrorMessage(error)),\n { configId, updates, originalError: error }\n );\n }\n }\n\n /**\n * 删除导出配置\n */\n async deleteConfig(configId: string): Promise<void> {\n const url = (this.config.baseUrl) + (API_ENDPOINTS.DELETE_CONFIG(configId));\n\n try {\n const response = await this.fetchWithTimeout(url, {\n method: 'DELETE',\n headers: this.getHeaders(),\n });\n\n if (!response.ok) {\n throw new Error('删除配置失败: ' + (response.statusText));\n }\n } catch (error) {\n throw createExportError(\n ERROR_CODES.NETWORK_ERROR,\n '删除导出配置失败: ' + (formatErrorMessage(error)),\n { configId, originalError: error }\n );\n }\n }\n\n // ============= 导出执行API =============\n\n /**\n * 触发数据导出\n */\n async exportData(request: Omit<ExportRequest, 'callbacks' | 'dataSource'> & {\n dataSource: any[] | string;\n }): Promise<ExportResult> {\n const url = (this.config.baseUrl) + (API_ENDPOINTS.EXPORT_DATA);\n\n try {\n // 如果 dataSource 是数组,我们需要将其作为请求体的一部分\n const isDataArray = Array.isArray(request.dataSource);\n\n const requestBody: any = {\n queryParams: request.queryParams,\n fieldMapping: request.fieldMapping,\n filters: request.filters,\n sortBy: request.sortBy,\n pagination: request.pagination,\n customFileName: request.customFileName,\n };\n\n // 支持两种方式:传字符串 ID(服务端从缓存/数据库查找)或传完整配置对象(服务端直接使用)\n if (typeof request.configId === 'string') {\n requestBody.configId = request.configId;\n } else if (request.configId && typeof request.configId === 'object') {\n // 传入完整配置对象时,只设置 config 字段,避免与字符串 configId 产生歧义\n requestBody.config = request.configId;\n }\n\n // 如果是数组数据,直接包含在请求体中\n if (isDataArray) {\n requestBody.data = request.dataSource;\n } else {\n requestBody.dataSource = request.dataSource;\n }\n\n const response = await this.fetchWithTimeout(url, {\n method: 'POST',\n headers: {\n ...this.getHeaders(),\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestBody),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n let errorData;\n try {\n errorData = JSON.parse(errorText);\n } catch {\n errorData = { message: errorText };\n }\n throw new Error(errorData.message || '导出失败: ' + (response.statusText));\n }\n\n const data = await response.json();\n return this.transformExportResultFromAPI(data.result);\n } catch (error) {\n throw createExportError(\n ERROR_CODES.EXPORT_DATA_ERROR,\n '数据导出失败: ' + (formatErrorMessage(error)),\n { request, originalError: error }\n );\n }\n }\n\n /**\n * 查询导出进度\n */\n async getExportProgress(exportId: string): Promise<ExportProgress> {\n const url = (this.config.baseUrl) + (API_ENDPOINTS.GET_PROGRESS(exportId));\n\n try {\n const response = await this.fetchWithTimeout(url, {\n method: 'GET',\n headers: this.getHeaders(),\n });\n\n if (!response.ok) {\n throw new Error('获取导出进度失败: ' + (response.statusText));\n }\n\n const data = await response.json();\n return this.transformProgressFromAPI(data.progress);\n } catch (error) {\n throw createExportError(\n ERROR_CODES.NETWORK_ERROR,\n '获取导出进度失败: ' + (formatErrorMessage(error)),\n { exportId, originalError: error }\n );\n }\n }\n\n /**\n * 下载导出文件\n */\n async downloadExportFile(exportId: string): Promise<Blob> {\n const url = (this.config.baseUrl) + (API_ENDPOINTS.DOWNLOAD_FILE(exportId));\n\n try {\n const response = await this.fetchWithTimeout(url, {\n method: 'GET',\n headers: this.getHeaders(),\n });\n\n if (!response.ok) {\n throw new Error('下载文件失败: ' + (response.statusText));\n }\n\n return await response.blob();\n } catch (error) {\n throw createExportError(\n ERROR_CODES.NETWORK_ERROR,\n '下载导出文件失败: ' + (formatErrorMessage(error)),\n { exportId, originalError: error }\n );\n }\n }\n\n // ============= 私有辅助方法 =============\n\n /**\n * 获取请求头\n */\n private getHeaders(): Record<string, string> {\n return {\n ...this.config.headers,\n };\n }\n\n /**\n * 带超时的fetch请求\n */\n private async fetchWithTimeout(url: string, options: RequestInit): Promise<Response> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await fetch(url, {\n ...options,\n signal: controller.signal,\n });\n return response;\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n throw createExportError(ERROR_CODES.TIMEOUT_ERROR, '请求超时', {\n url,\n timeout: this.config.timeout,\n });\n }\n throw error;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n /**\n * 转换API返回的配置数据\n */\n private transformConfigFromAPI(apiConfig: any): ExportConfig {\n return {\n id: apiConfig.id,\n name: apiConfig.name,\n description: apiConfig.description || undefined,\n format: apiConfig.format,\n fields: apiConfig.fields,\n grouping: apiConfig.grouping,\n fileNameTemplate: apiConfig.fileNameTemplate,\n includeHeader: apiConfig.includeHeader,\n delimiter: apiConfig.delimiter,\n encoding: apiConfig.encoding,\n addBOM: apiConfig.addBOM,\n maxRows: apiConfig.maxRows || undefined,\n createdAt: new Date(apiConfig.createdAt),\n updatedAt: new Date(apiConfig.updatedAt),\n moduleId: apiConfig.moduleId,\n businessId: apiConfig.businessId || undefined,\n createdBy: apiConfig.createdBy || undefined,\n };\n }\n\n /**\n * 转换API返回的配置列表\n */\n private transformConfigsFromAPI(apiConfigs: any[]): ExportConfig[] {\n return apiConfigs.map((config) => this.transformConfigFromAPI(config));\n }\n\n /**\n * 转换API返回的导出结果\n */\n private transformExportResultFromAPI(apiResult: any): ExportResult {\n const fileBlob = this.createFileBlobFromBase64(\n apiResult.fileData ?? apiResult.fileBlob,\n apiResult.fileName\n );\n\n return {\n exportId: apiResult.exportId,\n fileName: apiResult.fileName,\n fileSize: apiResult.fileSize,\n fileUrl: apiResult.fileUrl,\n fileBlob,\n exportedRows: apiResult.exportedRows,\n startTime: new Date(apiResult.startTime),\n endTime: new Date(apiResult.endTime),\n duration: apiResult.duration,\n statistics: apiResult.statistics,\n };\n }\n\n /**\n * 将后端返回的base64文件数据转换为Blob\n */\n private createFileBlobFromBase64(fileData?: string, fileName?: string): Blob | undefined {\n if (!fileData || typeof fileData !== 'string') {\n return undefined;\n }\n\n try {\n if (typeof atob === 'function') {\n const binaryString = atob(fileData);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n\n const arrayBuffer = bytes.buffer.slice(\n bytes.byteOffset,\n bytes.byteOffset + bytes.byteLength\n );\n return new Blob([arrayBuffer], { type: this.getMimeTypeByFileName(fileName) });\n } else if (typeof Buffer !== 'undefined') {\n const bufferBytes = Buffer.from(fileData, 'base64');\n const bytes = Uint8Array.from(bufferBytes);\n const arrayBuffer = bytes.buffer.slice(\n bytes.byteOffset,\n bytes.byteOffset + bytes.byteLength\n );\n return new Blob([arrayBuffer], { type: this.getMimeTypeByFileName(fileName) });\n } else {\n return undefined;\n }\n } catch {\n return undefined;\n }\n }\n\n /**\n * 根据文件名推断MIME类型\n */\n private getMimeTypeByFileName(fileName?: string): string {\n const extension = fileName?.split('.').pop()?.toLowerCase();\n\n switch (extension) {\n case 'csv':\n return 'text/csv; charset=utf-8';\n case 'xlsx':\n case 'xls':\n return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n case 'json':\n return 'application/json; charset=utf-8';\n default:\n return 'application/octet-stream';\n }\n }\n\n /**\n * 转换API返回的进度数据\n */\n private transformProgressFromAPI(apiProgress: any): ExportProgress {\n return {\n exportId: apiProgress.exportId,\n status: apiProgress.status,\n progress: apiProgress.progress,\n processedRows: apiProgress.processedRows,\n totalRows: apiProgress.totalRows,\n startTime: new Date(apiProgress.startTime),\n estimatedEndTime: apiProgress.estimatedEndTime\n ? new Date(apiProgress.estimatedEndTime)\n : undefined,\n currentData: apiProgress.currentData,\n error: apiProgress.error,\n };\n }\n}\n\n// ============= 单例导出 =============\n\n/**\n * 默认客户端实例\n */\nexport const universalExportClient = new UniversalExportClient();\n\n/**\n * 创建自定义客户端实例\n */\nexport function createExportClient(config?: UniversalExportClientConfig): UniversalExportClient {\n return new UniversalExportClient(config);\n}\n","/**\n * 导出配置编辑器组件\n * \n * 提供可视化的导出字段配置编辑功能\n */\n\n'use client';\n\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { clsx } from 'clsx';\nimport { \n Settings, \n Trash2, \n Eye, \n EyeOff, \n MoveUp, \n MoveDown, \n Save, \n X,\n FileText,\n Calendar,\n Hash,\n CheckSquare,\n Type,\n AlignLeft,\n AlignCenter,\n AlignRight,\n Group,\n GitMerge,\n Layers,\n ArrowUpDown,\n FileSpreadsheet,\n Database\n} from 'lucide-react';\n\nimport type { \n ExportConfig, \n ExportField, \n FieldType, \n FieldAlignment,\n ExportFormat,\n GroupingConfig,\n GroupingField,\n GroupingMode,\n GroupValueProcessing\n} from '../types';\n\n// ============= 类型定义 =============\n\nexport interface ExportConfigEditorProps {\n /** 初始配置 */\n initialConfig?: ExportConfig;\n /** 模块标识 */\n moduleId: string;\n /** 业务标识 */\n businessId?: string;\n /** 可用的字段定义 */\n availableFields: ExportField[];\n /** 保存配置回调 */\n onSave?: (config: ExportConfig) => void;\n /** 取消回调 */\n onCancel?: () => void;\n /** 是否显示 */\n visible?: boolean;\n /** 自定义样式类名 */\n className?: string;\n /** 配置变化回调(新增/删除/更新) */\n onConfigChange?: () => void;\n}\n\n// ============= 字段类型图标映射 =============\n\nconst FIELD_TYPE_ICONS: Record<FieldType, React.ReactNode> = {\n string: <Type className=\"w-4 h-4\" />,\n number: <Hash className=\"w-4 h-4\" />,\n date: <Calendar className=\"w-4 h-4\" />,\n boolean: <CheckSquare className=\"w-4 h-4\" />,\n array: <FileText className=\"w-4 h-4\" />,\n object: <FileText className=\"w-4 h-4\" />,\n};\n\nconst FIELD_TYPE_LABELS: Record<FieldType, string> = {\n string: '文本',\n number: '数字',\n date: '日期',\n boolean: '布尔',\n array: '数组',\n object: '对象',\n};\n\nconst ALIGNMENT_ICONS: Record<FieldAlignment, React.ReactNode> = {\n left: <AlignLeft className=\"w-4 h-4\" />,\n center: <AlignCenter className=\"w-4 h-4\" />,\n right: <AlignRight className=\"w-4 h-4\" />,\n};\n\nconst ALIGNMENT_LABELS: Record<FieldAlignment, string> = {\n left: '左对齐',\n center: '居中对齐',\n right: '右对齐',\n};\n\n// ============= 分组相关标签 =============\n\nconst GROUPING_MODE_LABELS: Record<GroupingMode, string> = {\n merge: '合并模式',\n separate: '分离模式',\n nested: '嵌套模式',\n};\n\nconst GROUPING_MODE_DESCRIPTIONS: Record<GroupingMode, string> = {\n merge: '同组数据合并显示,Excel支持单元格合并',\n separate: '每个分组独立显示,可添加分组头',\n nested: '支持多级嵌套分组',\n};\n\nconst VALUE_PROCESSING_LABELS: Record<GroupValueProcessing, string> = {\n first: '取第一个值',\n last: '取最后一个值',\n concat: '连接所有值',\n sum: '求和',\n count: '计数',\n custom: '自定义处理',\n};\n\nconst FORMAT_ICONS: Record<ExportFormat, React.ReactNode> = {\n csv: <FileText className=\"w-4 h-4\" />,\n excel: <FileSpreadsheet className=\"w-4 h-4\" />,\n json: <Database className=\"w-4 h-4\" />,\n};\n\nconst FORMAT_DESCRIPTIONS: Record<ExportFormat, string> = {\n csv: '逗号分隔值文件,兼容性最好',\n excel: 'Excel表格文件,支持格式化和单元格合并',\n json: 'JSON数据文件,适合开发者使用',\n};\n\n// ============= 主组件 =============\n\nexport const ExportConfigEditor: React.FC<ExportConfigEditorProps> = ({\n initialConfig,\n moduleId,\n businessId,\n availableFields,\n onSave,\n onCancel,\n visible = false,\n className = '',\n onConfigChange,\n}) => {\n // ============= 状态管理 =============\n \n const [config, setConfig] = useState<ExportConfig>(() => {\n if (initialConfig) {\n return { ...initialConfig };\n }\n \n // 创建默认配置\n return {\n id: '',\n name: '新建导出配置',\n description: '',\n format: 'csv',\n fields: availableFields.map((field, index) => ({\n ...field,\n enabled: true,\n sortOrder: index,\n })),\n grouping: {\n enabled: false,\n fields: [],\n preserveOrder: true,\n nullValueHandling: 'separate',\n nullGroupName: '未分组'\n },\n fileNameTemplate: '导出数据_{date}',\n includeHeader: true,\n delimiter: ',',\n encoding: 'utf-8',\n addBOM: true,\n maxRows: undefined,\n createdAt: new Date(),\n updatedAt: new Date(),\n moduleId,\n businessId,\n };\n });\n\n const [activeTab, setActiveTab] = useState<'basic' | 'fields' | 'grouping' | 'manage'>('basic');\n \n // 配置管理相关状态\n const [savedConfigs, setSavedConfigs] = useState<ExportConfig[]>([]);\n const [loadingConfigs, setLoadingConfigs] = useState(false);\n const [deletingConfigId, setDeletingConfigId] = useState<string | null>(null);\n\n // 加载已保存的配置\n const loadSavedConfigs = useCallback(async () => {\n if (!visible || activeTab !== 'manage') return;\n \n setLoadingConfigs(true);\n try {\n const params = new URLSearchParams({ moduleId });\n if (businessId) {\n params.set('businessId', businessId);\n }\n \n const response = await fetch('/api/universal-export/configs?' + (params.toString()));\n if (response.ok) {\n const data = await response.json();\n setSavedConfigs(data.configs || []);\n }\n } catch (error) {\n console.error('加载配置异常:', error);\n } finally {\n setLoadingConfigs(false);\n }\n }, [visible, activeTab, moduleId, businessId]);\n\n // 删除配置\n const deleteConfig = useCallback(async (configId: string) => {\n setDeletingConfigId(configId);\n try {\n const response = await fetch('/api/universal-export/configs/' + (configId), {\n method: 'DELETE'\n });\n if (response.ok) {\n setSavedConfigs(prev => prev.filter(cfg => cfg.id !== configId));\n onConfigChange?.();\n }\n } catch (error) {\n console.error('删除配置失败:', error);\n } finally {\n setDeletingConfigId(null);\n }\n }, [onConfigChange]);\n\n // 加载配置到编辑器\n const loadConfigToEditor = useCallback((config: ExportConfig) => {\n setConfig(config);\n setActiveTab('basic');\n }, []);\n\n // 当切换到管理tab时加载配置\n useEffect(() => {\n if (activeTab === 'manage') {\n loadSavedConfigs();\n }\n }, [activeTab, loadSavedConfigs]);\n\n // 阻止背景滚动\n useEffect(() => {\n if (!visible) return;\n \n const scrollY = window.scrollY;\n document.body.style.position = 'fixed';\n document.body.style.top = '-' + (scrollY) + 'px';\n document.body.style.left = '0';\n document.body.style.right = '0';\n document.body.style.overflow = 'hidden';\n \n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onCancel?.();\n }\n };\n \n document.addEventListener('keydown', handleKeyDown);\n \n return () => {\n document.body.style.position = '';\n document.body.style.top = '';\n document.body.style.left = '';\n document.body.style.right = '';\n document.body.style.overflow = '';\n window.scrollTo(0, scrollY);\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [visible, onCancel]);\n\n // ============= 字段管理 =============\n\n const toggleFieldEnabled = useCallback((fieldKey: string) => {\n setConfig(prev => ({\n ...prev,\n fields: prev.fields.map(field =>\n field.key === fieldKey\n ? { ...field, enabled: !field.enabled }\n : field\n ),\n }));\n }, []);\n\n const updateField = useCallback((fieldKey: string, updates: Partial<ExportField>) => {\n setConfig(prev => ({\n ...prev,\n fields: prev.fields.map(field =>\n field.key === fieldKey\n ? { ...field, ...updates }\n : field\n ),\n }));\n }, []);\n\n const moveField = useCallback((fieldKey: string, direction: 'up' | 'down') => {\n setConfig(prev => {\n const fields = [...prev.fields];\n const index = fields.findIndex(f => f.key === fieldKey);\n \n if (direction === 'up' && index > 0) {\n const temp = fields[index - 1]!;\n fields[index - 1] = fields[index]!;\n fields[index] = temp;\n } else if (direction === 'down' && index < fields.length - 1) {\n const temp = fields[index + 1]!;\n fields[index + 1] = fields[index]!;\n fields[index] = temp;\n }\n \n return {\n ...prev,\n fields: fields.map((field, idx) => ({ ...field, sortOrder: idx })),\n };\n });\n }, []);\n\n const removeField = useCallback((fieldKey: string) => {\n setConfig(prev => ({\n ...prev,\n fields: prev.fields.filter(f => f.key !== fieldKey),\n }));\n }, []);\n\n // ============= 分组配置管理 =============\n\n const toggleGrouping = useCallback((enabled: boolean) => {\n setConfig(prev => ({\n ...prev,\n grouping: {\n ...prev.grouping!,\n enabled,\n },\n }));\n }, []);\n\n const addGroupingField = useCallback((fieldKey: string) => {\n const field = config.fields.find(f => f.key === fieldKey);\n if (!field) return;\n\n const groupField: GroupingField = {\n key: field.key,\n label: field.label,\n mode: 'merge',\n valueProcessing: 'first',\n showGroupHeader: false,\n mergeCells: true,\n };\n\n setConfig(prev => ({\n ...prev,\n grouping: {\n ...prev.grouping!,\n fields: [...prev.grouping!.fields, groupField],\n },\n }));\n }, [config.fields]);\n\n const removeGroupingField = useCallback((fieldKey: string) => {\n setConfig(prev => ({\n ...prev,\n grouping: {\n ...prev.grouping!,\n fields: prev.grouping!.fields.filter(f => f.key !== fieldKey),\n },\n }));\n }, []);\n\n const updateGroupingField = useCallback((fieldKey: string, updates: Partial<GroupingField>) => {\n setConfig(prev => ({\n ...prev,\n grouping: {\n ...prev.grouping!,\n fields: prev.grouping!.fields.map(field =>\n field.key === fieldKey\n ? { ...field, ...updates }\n : field\n ),\n },\n }));\n }, []);\n\n const moveGroupingField = useCallback((fieldKey: string, direction: 'up' | 'down') => {\n setConfig(prev => {\n const fields = [...prev.grouping!.fields];\n const index = fields.findIndex(f => f.key === fieldKey);\n \n if (direction === 'up' && index > 0) {\n const temp = fields[index - 1]!;\n fields[index - 1] = fields[index]!;\n fields[index] = temp;\n } else if (direction === 'down' && index < fields.length - 1) {\n const temp = fields[index + 1]!;\n fields[index + 1] = fields[index]!;\n fields[index] = temp;\n }\n \n return {\n ...prev,\n grouping: {\n ...prev.grouping!,\n fields,\n },\n };\n });\n }, []);\n\n const updateGroupingConfig = useCallback((updates: Partial<GroupingConfig>) => {\n setConfig(prev => ({\n ...prev,\n grouping: {\n ...prev.grouping!,\n ...updates,\n },\n }));\n }, []);\n\n // ============= 保存配置 =============\n\n const handleSave = useCallback(() => {\n if (!config.name.trim()) {\n alert('请输入配置名称');\n return;\n }\n\n const enabledFields = config.fields.filter(f => f.enabled);\n if (enabledFields.length === 0) {\n alert('至少需要启用一个字段');\n return;\n }\n\n const updatedConfig: ExportConfig = {\n ...config,\n updatedAt: new Date(),\n };\n\n onSave?.(updatedConfig);\n onConfigChange?.();\n }, [config, onSave, onConfigChange]);\n\n // ============= 渲染组件 =============\n\n if (!visible) {\n return null;\n }\n\n const tabs = [\n { id: 'basic' as const, label: '基本配置', icon: <Settings className=\"w-4 h-4\" />, description: '配置名称、格式和基本选项' },\n { id: 'fields' as const, label: '字段设置', icon: <Type className=\"w-4 h-4\" />, description: '选择和配置导出字段' },\n { id: 'grouping' as const, label: '分组设置', icon: <Group className=\"w-4 h-4\" />, description: '配置数据分组和合并选项' },\n { id: 'manage' as const, label: '配置管理', icon: <Database className=\"w-4 h-4\" />, description: '管理已保存的导出配置' },\n ];\n\n return (\n <div \n className={clsx('fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-[50] p-4', className)}\n onClick={onCancel}\n >\n <div \n className=\"bg-white rounded-lg shadow-xl w-full max-w-5xl max-h-[90vh] flex flex-col\"\n onClick={(e) => e.stopPropagation()}\n >\n {/* 头部 */}\n <div className=\"flex items-center justify-between p-4 border-b flex-shrink-0\">\n <div className=\"flex items-center gap-3\">\n <Settings className=\"w-6 h-6 text-blue-600\" />\n <div>\n <h2 className=\"text-xl font-semibold text-gray-900\">导出配置编辑器</h2>\n <p className=\"text-sm text-gray-600\">配置导出字段和格式选项</p>\n </div>\n </div>\n <button onClick={onCancel} className=\"p-2 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded-lg\">\n <X className=\"w-5 h-5\" />\n </button>\n </div>\n\n {/* Tab导航 */}\n <div className=\"border-b bg-gray-50 flex-shrink-0\">\n <nav className=\"flex space-x-1 p-2\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={clsx('flex items-center gap-2 px-4 py-3 text-sm font-medium rounded-lg transition-colors', activeTab === tab.id ? 'bg-white text-blue-600 shadow-sm border border-gray-200' : 'text-gray-600 hover:text-gray-900')}\n >\n {tab.icon}\n <span>{tab.label}</span>\n </button>\n ))}\n </nav>\n </div>\n\n {/* Tab内容 */}\n <div className=\"flex-1 overflow-hidden flex flex-col\">\n <div className=\"bg-blue-50 border-b border-blue-100 p-4 flex-shrink-0\">\n <div className=\"flex items-center gap-2 text-blue-800 text-sm font-medium\">\n {tabs.find(t => t.id === activeTab)?.icon}\n {tabs.find(t => t.id === activeTab)?.description}\n </div>\n </div>\n\n <div className=\"flex-1 overflow-y-auto p-4 sm:p-6\">\n {activeTab === 'basic' && (\n <div className=\"max-w-2xl mx-auto space-y-6\">\n <div className=\"space-y-4\">\n <label className=\"block text-sm font-medium text-gray-700\">配置名称 *</label>\n <input\n type=\"text\"\n value={config.name}\n onChange={(e) => setConfig(prev => ({ ...prev, name: e.target.value }))}\n className=\"w-full px-3 py-2 border border-gray-300 rounded-lg\"\n />\n <label className=\"block text-sm font-medium text-gray-700\">描述</label>\n <textarea\n value={config.description}\n onChange={(e) => setConfig(prev => ({ ...prev, description: e.target.value }))}\n className=\"w-full px-3 py-2 border border-gray-300 rounded-lg\"\n rows={3}\n />\n <label className=\"block text-sm font-medium text-gray-700\">导出格式</label>\n <div className=\"space-y-3\">\n {(['csv', 'excel', 'json'] as ExportFormat[]).map((format) => (\n <label key={format} className=\"flex items-start gap-3 p-3 border rounded-lg cursor-pointer hover:border-blue-300\">\n <input\n type=\"radio\"\n checked={config.format === format}\n onChange={() => setConfig(prev => ({ ...prev, format }))}\n className=\"mt-1\"\n />\n <div>\n <div className=\"flex items-center gap-2 font-medium\">\n {FORMAT_ICONS[format]} {format.toUpperCase()}\n </div>\n <p className=\"text-sm text-gray-600\">{FORMAT_DESCRIPTIONS[format]}</p>\n </div>\n </label>\n ))}\n </div>\n </div>\n </div>\n )}\n\n {activeTab === 'fields' && (\n <div className=\"space-y-4\">\n {config.fields.map((field, index) => (\n <div key={field.key} className=\"flex items-center gap-3 p-3 border rounded-lg bg-white\">\n <button onClick={() => toggleFieldEnabled(field.key)} className={field.enabled ? 'text-blue-600' : 'text-gray-400'}>\n {field.enabled ? <Eye className=\"w-4 h-4\" /> : <EyeOff className=\"w-4 h-4\" />}\n </button>\n <div className=\"flex-1\">\n <div className=\"font-medium\">{field.label}</div>\n <div className=\"text-xs text-gray-500\">{field.key}</div>\n </div>\n <div className=\"flex gap-1\">\n <button onClick={() => moveField(field.key, 'up')} disabled={index === 0} className=\"disabled:opacity-30\"><MoveUp className=\"w-4 h-4\" /></button>\n <button onClick={() => moveField(field.key, 'down')} disabled={index === config.fields.length - 1} className=\"disabled:opacity-30\"><MoveDown className=\"w-4 h-4\" /></button>\n <button onClick={() => removeField(field.key)} className=\"text-red-600\"><Trash2 className=\"w-4 h-4\" /></button>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {activeTab === 'grouping' && (\n <div className=\"space-y-6\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-lg font-medium flex items-center gap-2\"><Group className=\"w-5 h-5 text-blue-600\" /> 分组配置</h3>\n <label className=\"flex items-center gap-2\">\n <input type=\"checkbox\" checked={config.grouping?.enabled} onChange={(e) => toggleGrouping(e.target.checked)} />\n 启用分组\n </label>\n </div>\n {config.grouping?.enabled && (\n <div className=\"space-y-4\">\n {config.grouping.fields.map((gf, index) => (\n <div key={gf.key} className=\"p-4 border rounded-lg bg-blue-50 border-blue-200\">\n <div className=\"flex justify-between items-center mb-4\">\n <span className=\"font-medium text-blue-900\">{gf.label}</span>\n <button onClick={() => removeGroupingField(gf.key)} className=\"text-red-600\"><Trash2 className=\"w-4 h-4\" /></button>\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <select value={gf.mode} onChange={(e) => updateGroupingField(gf.key, { mode: e.target.value as GroupingMode })} className=\"border rounded p-2\">\n <option value=\"merge\">合并模式</option>\n <option value=\"separate\">分离模式</option>\n <option value=\"nested\">嵌套模式</option>\n </select>\n <select value={gf.valueProcessing} onChange={(e) => updateGroupingField(gf.key, { valueProcessing: e.target.value as GroupValueProcessing })} className=\"border rounded p-2\">\n <option value=\"first\">首值</option>\n <option value=\"sum\">求和</option>\n <option value=\"count\">计数</option>\n </select>\n </div>\n </div>\n ))}\n <select onChange={(e) => e.target.value && addGroupingField(e.target.value)} className=\"w-full border rounded p-2\">\n <option value=\"\">添加分组字段...</option>\n {config.fields.filter(f => f.enabled && !config.grouping?.fields.some(gf => gf.key === f.key)).map(f => (\n <option key={f.key} value={f.key}>{f.label}</option>\n ))}\n </select>\n </div>\n )}\n </div>\n )}\n\n {activeTab === 'manage' && (\n <div className=\"space-y-4\">\n {loadingConfigs ? <div className=\"text-center py-10\">加载中...</div> : savedConfigs.map(sc => (\n <div key={sc.id} className=\"flex justify-between items-center p-4 border rounded-lg\">\n <div>\n <div className=\"font-medium\">{sc.name}</div>\n <div className=\"text-sm text-gray-500\">{sc.format}</div>\n </div>\n <div className=\"flex gap-2\">\n <button onClick={() => loadConfigToEditor(sc)} className=\"text-blue-600 px-3 py-1 border rounded\">编辑</button>\n <button onClick={() => deleteConfig(sc.id)} className=\"text-red-600 px-3 py-1 border rounded\">删除</button>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* 底部 */}\n <div className=\"flex justify-end gap-3 p-4 border-t bg-gray-50\">\n <button onClick={onCancel} className=\"px-4 py-2 border rounded\">取消</button>\n {activeTab !== 'manage' && (\n <button onClick={handleSave} className=\"px-4 py-2 bg-blue-600 text-white rounded flex items-center gap-2\">\n <Save className=\"w-4 h-4\" /> 保存配置\n </button>\n )}\n </div>\n </div>\n </div>\n );\n};\n\n","/**\n * 通用导出按钮组件\n * \n * 提供统一的导出功能入口,支持配置化导出\n */\n\n'use client';\n\nimport React, { useState, useCallback } from 'react';\nimport { clsx } from 'clsx';\nimport { \n Download, \n Settings, \n FileText, \n Loader2,\n ChevronDown\n} from 'lucide-react';\n\nimport type { \n ExportConfig, \n ExportField, \n ExportRequest,\n ExportResult,\n ExportProgress \n} from '../types';\n\nimport { ExportConfigEditor } from './ExportConfigEditor';\n\n// ============= 类型定义 =============\n\nexport interface UniversalExportButtonProps {\n /** 导出服务实例 */\n exportService: any; // UniversalExportClient\n /** 模块标识 */\n moduleId: string;\n /** 业务标识 */\n businessId?: string;\n /** 可用的字段定义 */\n availableFields: ExportField[];\n /** 数据源函数 */\n dataSource: () => Promise<any[]>;\n /** 默认配置 */\n defaultConfig?: ExportConfig;\n /** 按钮文本 */\n buttonText?: string;\n /** 按钮样式 */\n variant?: 'primary' | 'secondary' | 'outline';\n /** 按钮大小 */\n size?: 'sm' | 'md' | 'lg';\n /** 是否禁用 */\n disabled?: boolean;\n /** 自定义样式类名 */\n className?: string;\n /** 导出成功回调 */\n onExportSuccess?: (result: ExportResult) => void;\n /** 导出失败回调 */\n onExportError?: (error: string) => void;\n /** 配置保存回调 */\n onConfigSave?: (config: ExportConfig) => void;\n}\n\n// ============= 按钮样式配置 =============\n\nconst BUTTON_STYLES = {\n primary: {\n sm: 'px-3 py-1.5 text-sm bg-blue-600 text-white hover:bg-blue-700',\n md: 'px-4 py-2 text-sm bg-blue-600 text-white hover:bg-blue-700',\n lg: 'px-6 py-3 text-base bg-blue-600 text-white hover:bg-blue-700',\n },\n secondary: {\n sm: 'px-3 py-1.5 text-sm bg-gray-600 text-white hover:bg-gray-700',\n md: 'px-4 py-2 text-sm bg-gray-600 text-white hover:bg-gray-700',\n lg: 'px-6 py-3 text-base bg-gray-600 text-white hover:bg-gray-700',\n },\n outline: {\n sm: 'px-3 py-1.5 text-sm border border-gray-300 text-gray-700 hover:bg-gray-50',\n md: 'px-4 py-2 text-sm border border-gray-300 text-gray-700 hover:bg-gray-50',\n lg: 'px-6 py-3 text-base border border-gray-300 text-gray-700 hover:bg-gray-50',\n },\n};\n\n// ============= 主组件 =============\n\nexport const UniversalExportButton: React.FC<UniversalExportButtonProps> = ({\n exportService,\n moduleId,\n businessId,\n availableFields,\n dataSource,\n defaultConfig,\n buttonText = '导出数据',\n variant = 'primary',\n size = 'md',\n disabled = false,\n className = '',\n onExportSuccess,\n onExportError,\n onConfigSave,\n}) => {\n // ============= 状态管理 =============\n \n const [showConfigEditor, setShowConfigEditor] = useState(false);\n const [showDropdown, setShowDropdown] = useState(false);\n const [isExporting, setIsExporting] = useState(false);\n const [exportProgress, setExportProgress] = useState<ExportProgress | null>(null);\n const [savedConfigs, setSavedConfigs] = useState<ExportConfig[]>([]);\n\n // 加载保存的配置\n const loadSavedConfigs = useCallback(async () => {\n try {\n if (exportService) {\n const configs = await exportService.getConfigsByModule(moduleId, businessId);\n setSavedConfigs(configs);\n }\n } catch (error) {\n console.error('加载保存的配置失败:', error);\n }\n }, [exportService, moduleId, businessId]);\n\n // 组件挂载时加载配置\n React.useEffect(() => {\n loadSavedConfigs();\n }, [loadSavedConfigs]);\n\n // ============= 导出处理 =============\n\n const handleExport = useCallback(async (config: ExportConfig) => {\n console.log('🚀 [UniversalExportButton] 开始导出:', {\n configId: config.id,\n configName: config.name,\n format: config.format,\n fieldsCount: config.fields.length,\n });\n\n if (!exportService) {\n console.error('❌ [UniversalExportButton] 导出服务未初始化');\n onExportError?.('导出服务未初始化');\n return;\n }\n\n setIsExporting(true);\n setExportProgress(null);\n\n try {\n // 获取数据\n console.log('📊 [UniversalExportButton] 获取数据...');\n const data = await dataSource();\n console.log('✅ [UniversalExportButton] 数据获取成功:', {\n dataType: typeof data,\n isArray: Array.isArray(data),\n length: Array.isArray(data) ? data.length : 'N/A',\n });\n\n // 创建导出请求(不包含回调,因为客户端不支持)\n const request = {\n configId: config,\n dataSource: data, // 传递实际数据而不是函数\n queryParams: undefined,\n fieldMapping: undefined,\n filters: undefined,\n sortBy: undefined,\n pagination: undefined,\n customFileName: undefined,\n };\n\n console.log('📞 [UniversalExportButton] 调用导出服务...');\n const result = await exportService.exportData(request);\n\n console.log('✅ [UniversalExportButton] 导出成功:', {\n fileName: result.fileName,\n fileSize: result.fileSize,\n exportedRows: result.exportedRows,\n });\n\n // 由于客户端不支持进度回调,我们模拟一个完成状态\n const progress: ExportProgress = {\n exportId: result.exportId,\n status: 'completed',\n progress: 100,\n processedRows: result.exportedRows,\n totalRows: result.exportedRows,\n startTime: result.startTime,\n estimatedEndTime: result.endTime,\n };\n setExportProgress(progress);\n\n // 下载文件\n if (result.fileUrl) {\n console.log('📥 [UniversalExportButton] 从URL下载文件...');\n const link = document.createElement('a');\n link.href = result.fileUrl;\n link.download = result.fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n console.log('✅ [UniversalExportButton] 文件下载完成');\n } else if (result.fileBlob) {\n console.log('📥 [UniversalExportButton] 从Blob下载文件...');\n const url = window.URL.createObjectURL(result.fileBlob);\n const link = document.createElement('a');\n link.href = url;\n link.download = result.fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n console.log('✅ [UniversalExportButton] 文件下载完成');\n } else if (result.exportId && typeof exportService.downloadExportFile === 'function') {\n console.log('📥 [UniversalExportButton] 从exportId兜底下载文件...');\n const blob = await exportService.downloadExportFile(result.exportId);\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = result.fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n console.log('✅ [UniversalExportButton] 文件下载完成(兜底分支)');\n } else {\n console.warn('⚠️ [UniversalExportButton] 导出成功但缺少可下载文件信息:', result);\n }\n\n // 延迟清除进度状态\n setTimeout(() => {\n setIsExporting(false);\n setExportProgress(null);\n }, 1000);\n\n onExportSuccess?.(result);\n } catch (error) {\n console.error('❌ [UniversalExportButton] 导出异常:', error);\n setIsExporting(false);\n setExportProgress(null);\n\n // 更好地处理错误信息\n let errorMessage = '导出失败';\n if (error && typeof error === 'object') {\n if ('message' in error && typeof error.message === 'string') {\n errorMessage = error.message;\n } else if ('code' in error && 'message' in error) {\n errorMessage = (error.code) + ': ' + (error.message);\n }\n } else if (typeof error === 'string') {\n errorMessage = error;\n }\n\n onExportError?.(errorMessage);\n }\n }, [exportService, dataSource, onExportSuccess, onExportError]);\n\n const handleQuickExport = useCallback(async () => {\n if (defaultConfig) {\n await handleExport(defaultConfig);\n } else {\n // 创建默认配置\n const config: ExportConfig = {\n id: 'quick_export',\n name: '快速导出',\n description: '使用默认配置快速导出',\n format: 'csv',\n fields: availableFields.map((field, index) => ({\n ...field,\n enabled: true,\n sortOrder: index,\n })),\n fileNameTemplate: '导出数据_{date}',\n includeHeader: true,\n delimiter: ',',\n encoding: 'utf-8',\n addBOM: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n moduleId,\n businessId,\n };\n \n await handleExport(config);\n }\n }, [defaultConfig, availableFields, moduleId, businessId, handleExport]);\n\n // ============= 配置管理 =============\n\n const handleConfigSave = useCallback(async (config: ExportConfig) => {\n try {\n if (exportService) {\n const savedConfig = await exportService.createConfig(config);\n // 重新加载配置列表\n await loadSavedConfigs();\n onConfigSave?.(savedConfig);\n }\n setShowConfigEditor(false);\n } catch (error) {\n onExportError?.(error instanceof Error ? error.message : '保存配置失败');\n }\n }, [exportService, onConfigSave, onExportError, loadSavedConfigs]);\n\n // ============= 渲染进度 =============\n\n const renderProgress = () => {\n if (!exportProgress) return null;\n\n const { status, progress, processedRows, totalRows } = exportProgress;\n\n return (\n <div className=\"absolute top-full left-0 right-0 mt-2 bg-white border border-gray-200 rounded-lg shadow-lg p-4 z-[10]\">\n <div className=\"flex items-center gap-3 mb-2\">\n <Loader2 className=\"w-4 h-4 animate-spin text-blue-600\" />\n <span className=\"text-sm font-medium text-gray-900\">\n {status === 'processing' ? '正在导出...' : '导出完成'}\n </span>\n </div>\n \n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-xs text-gray-600\">\n <span>进度: {progress}%</span>\n <span>{processedRows} / {totalRows} 行</span>\n </div>\n \n <div className=\"w-full bg-gray-200 rounded-full h-2\">\n <div \n className=\"bg-blue-600 h-2 rounded-full transition-all duration-300\"\n style={{ width: (progress) + '%' }}\n />\n </div>\n </div>\n </div>\n );\n };\n\n // ============= 渲染下拉菜单 =============\n\n const renderDropdown = () => {\n if (!showDropdown) return null;\n\n return (\n <div className=\"absolute top-full left-0 mt-2 bg-white border border-gray-200 rounded-lg shadow-lg py-2 z-[10] min-w-48\">\n {/* 快速导出 */}\n <button\n onClick={() => {\n setShowDropdown(false);\n handleQuickExport();\n }}\n disabled={isExporting}\n className=\"w-full px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-50 flex items-center gap-2\"\n >\n <Download className=\"w-4 h-4\" />\n 快速导出\n </button>\n\n {/* 使用保存的配置 */}\n {savedConfigs.length > 0 && (\n <>\n <div className=\"border-t border-gray-200 my-1\" />\n {savedConfigs.map((config) => (\n <button\n key={config.id}\n onClick={() => {\n setShowDropdown(false);\n handleExport(config);\n }}\n disabled={isExporting}\n className=\"w-full px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-50 flex items-center gap-2\"\n >\n <FileText className=\"w-4 h-4\" />\n {config.name}\n </button>\n ))}\n </>\n )}\n\n {/* 配置编辑器 */}\n <div className=\"border-t border-gray-200 my-1\" />\n <button\n onClick={() => {\n setShowDropdown(false);\n setShowConfigEditor(true);\n }}\n className=\"w-full px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-50 flex items-center gap-2\"\n >\n <Settings className=\"w-4 h-4\" />\n 自定义配置\n </button>\n </div>\n );\n };\n\n // ============= 渲染组件 =============\n\n const buttonStyle = BUTTON_STYLES[variant][size];\n const baseClasses = 'inline-flex items-center gap-2 rounded-lg font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed ' + (buttonStyle);\n\n return (\n <div className={clsx('relative', className)}>\n {/* 主按钮 */}\n <button\n onClick={() => setShowDropdown(!showDropdown)}\n disabled={disabled || isExporting}\n className={clsx(baseClasses, isExporting ? 'cursor-not-allowed' : '')}\n >\n {isExporting ? (\n <Loader2 className=\"w-4 h-4 animate-spin\" />\n ) : (\n <Download className=\"w-4 h-4\" />\n )}\n <span>{isExporting ? '导出中...' : buttonText}</span>\n <ChevronDown className=\"w-4 h-4\" />\n </button>\n\n {/* 下拉菜单 */}\n {renderDropdown()}\n\n {/* 进度显示 */}\n {renderProgress()}\n\n {/* 配置编辑器 */}\n <ExportConfigEditor\n moduleId={moduleId}\n businessId={businessId}\n availableFields={availableFields}\n onSave={handleConfigSave}\n onCancel={() => setShowConfigEditor(false)}\n visible={showConfigEditor}\n onConfigChange={loadSavedConfigs}\n />\n\n {/* 点击外部关闭下拉菜单 */}\n {showDropdown && (\n <div\n className=\"fixed inset-0 z-[0]\"\n onClick={() => setShowDropdown(false)}\n />\n )}\n </div>\n );\n};\n\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- // src/request/adapters/web-adapter.ts
3
+ // src/common/request/adapters/web-adapter.ts
4
4
  var WebRequestAdapter = class {
5
5
  async request(config) {
6
6
  const { url, method = "GET", headers = {}, body, params } = config;
@@ -39,5 +39,5 @@ var WebRequestAdapter = class {
39
39
  };
40
40
 
41
41
  exports.WebRequestAdapter = WebRequestAdapter;
42
- //# sourceMappingURL=chunk-PBI7FKMB.js.map
43
- //# sourceMappingURL=chunk-PBI7FKMB.js.map
42
+ //# sourceMappingURL=chunk-3QCATFQV.js.map
43
+ //# sourceMappingURL=chunk-3QCATFQV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/request/adapters/web-adapter.ts"],"names":[],"mappings":";;;AAWO,IAAM,oBAAN,MAAkD;AAAA,EACvD,MAAM,QAAiB,MAAA,EAAmC;AACxD,IAAA,MAAM,EAAE,KAAK,MAAA,GAAS,KAAA,EAAO,UAAU,EAAC,EAAG,IAAA,EAAM,MAAA,EAAO,GAAI,MAAA;AAG5D,IAAA,IAAI,OAAA,GAAU,GAAA;AACd,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,MAAA,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC/C,QAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,UAAA,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QACxC;AAAA,MACF,CAAC,CAAA;AACD,MAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,OAAA,IAAA,CAAY,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,GAAI,MAAM,GAAA,IAAO,WAAA;AAAA,MAC/C;AAAA,IACF;AAGA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,EAAS;AAAA,MACpC,MAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,GAAG;AAAA,OACL;AAAA,MACA,IAAA,EAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI,MAAA;AAAA,MACpC,WAAA,EAAa;AAAA;AAAA,KACd,CAAA;AAGD,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAGjC,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,4BAAA,GAAY,QAAA,CAAS;AAAA,OAC5C;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF","file":"chunk-3QCATFQV.js","sourcesContent":["import type { RequestAdapter, RequestConfig } from '../types/types';\n\n/**\n * Web 平台请求适配器\n * 基于标准 fetch API\n *\n * 适用平台:\n * - Web (Next.js)\n * - Desktop (Electron)\n * - Mobile (React Native)\n */\nexport class WebRequestAdapter implements RequestAdapter {\n async request<T = any>(config: RequestConfig): Promise<T> {\n const { url, method = 'GET', headers = {}, body, params } = config;\n\n // 构建 URL(如果有查询参数)\n let fullUrl = url;\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value));\n }\n });\n const queryString = searchParams.toString();\n if (queryString) {\n fullUrl += (url.includes('?') ? '&' : '?') + queryString;\n }\n }\n\n // 发送请求\n const response = await fetch(fullUrl, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n credentials: 'include', // 🔐 自动发送和接收 Cookie(支持 httpOnly Cookie 认证)\n });\n\n // 解析响应\n const data = await response.json();\n\n // 如果响应不成功,返回错误格式\n if (!response.ok) {\n return {\n success: false,\n error: data.error || '请求失败: ' + (response.status),\n } as T;\n }\n\n return data;\n }\n}\n\n"]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  var react = require('react');
4
4
 
5
- // src/ai/llm/prompt/variables.ts
5
+ // src/common/ai/llm/prompt/variables.ts
6
6
  var normalizePromptVariables = (variables = {}) => {
7
7
  const normalized = {};
8
8
  Object.entries(variables).forEach(([key, value]) => {
@@ -15,7 +15,7 @@ var normalizePromptVariables = (variables = {}) => {
15
15
  return normalized;
16
16
  };
17
17
 
18
- // src/ai/llm/prompt/template.ts
18
+ // src/common/ai/llm/prompt/template.ts
19
19
  var applyPromptTemplate = (template, variables = {}, options = {}) => {
20
20
  if (!template) {
21
21
  return "";
@@ -116,5 +116,5 @@ var useAiChat = (options) => {
116
116
  exports.applyPromptTemplate = applyPromptTemplate;
117
117
  exports.normalizePromptVariables = normalizePromptVariables;
118
118
  exports.useAiChat = useAiChat;
119
- //# sourceMappingURL=chunk-FXQOXLDE.js.map
120
- //# sourceMappingURL=chunk-FXQOXLDE.js.map
119
+ //# sourceMappingURL=chunk-3R6JHA6D.js.map
120
+ //# sourceMappingURL=chunk-3R6JHA6D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/ai/llm/prompt/variables.ts","../src/common/ai/llm/prompt/template.ts","../src/common/ai/llm/hooks/useAiChat.ts"],"names":["useRef","useState","useCallback"],"mappings":"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","file":"chunk-3R6JHA6D.js","sourcesContent":["export type PromptVariableValue = string | number | boolean | null | undefined;\n\nexport type PromptVariables = Record<string, PromptVariableValue>;\n\nexport const normalizePromptVariables = (\n variables: PromptVariables = {}\n): Record<string, string> => {\n const normalized: Record<string, string> = {};\n\n Object.entries(variables).forEach(([key, value]) => {\n if (value === null || value === undefined) {\n normalized[key] = '';\n } else {\n normalized[key] = String(value);\n }\n });\n\n return normalized;\n};\n","import { normalizePromptVariables, PromptVariables } from './variables';\n\nexport interface PromptTemplateOptions {\n missingValue?: string;\n preserveUnknown?: boolean;\n}\n\nexport const applyPromptTemplate = (\n template: string,\n variables: PromptVariables = {},\n options: PromptTemplateOptions = {}\n): string => {\n if (!template) {\n return '';\n }\n\n const resolved = normalizePromptVariables(variables);\n const missingValue = options.missingValue ?? '';\n\n return template.replace(/\\{\\{\\s*([a-zA-Z0-9_.-]+)\\s*\\}\\}/g, (_match, key: string) => {\n if (Object.prototype.hasOwnProperty.call(resolved, key)) {\n return resolved[key] ?? '';\n }\n\n return options.preserveUnknown ? `{{${key}}}` : missingValue;\n });\n};\n","import { useCallback, useRef, useState } from 'react';\nimport { applyPromptTemplate } from '../prompt/template';\nimport type {\n AiChatInputOptions,\n AiChatResponse,\n AiChatStatus,\n AiClient,\n AiMessage,\n} from '../types';\n\nexport interface UseAiChatOptions {\n client: AiClient;\n systemPrompt?: string;\n template?: string;\n initialMessages?: AiMessage[];\n}\n\nconst buildBaseMessages = (systemPrompt?: string, initialMessages?: AiMessage[]): AiMessage[] => {\n const baseMessages: AiMessage[] = [];\n if (systemPrompt) {\n baseMessages.push({ role: 'system', content: systemPrompt });\n }\n if (initialMessages?.length) {\n baseMessages.push(...initialMessages);\n }\n return baseMessages;\n};\n\nexport const useAiChat = (options: UseAiChatOptions) => {\n const systemPromptRef = useRef(options.systemPrompt);\n const templateRef = useRef(options.template);\n const [messages, setMessages] = useState<AiMessage[]>(() =>\n buildBaseMessages(systemPromptRef.current, options.initialMessages)\n );\n const messagesRef = useRef(messages);\n const [status, setStatus] = useState<AiChatStatus>('idle');\n const [error, setError] = useState<Error | null>(null);\n const [lastResponse, setLastResponse] = useState<AiChatResponse | null>(null);\n\n const syncMessages = (nextMessages: AiMessage[]) => {\n messagesRef.current = nextMessages;\n setMessages(nextMessages);\n };\n\n const reset = useCallback(() => {\n syncMessages(buildBaseMessages(systemPromptRef.current, options.initialMessages));\n setStatus('idle');\n setError(null);\n setLastResponse(null);\n }, [options.initialMessages]);\n\n const setSystemPrompt = useCallback(\n (prompt?: string) => {\n systemPromptRef.current = prompt;\n reset();\n },\n [reset]\n );\n\n const sendMessage = useCallback(\n async (input: string, requestOptions: AiChatInputOptions = {}) => {\n const { template, variables, ...chatOptions } = requestOptions;\n const activeTemplate = template ?? templateRef.current;\n const mergedVariables = { input, ...(variables ?? {}) };\n const content = activeTemplate ? applyPromptTemplate(activeTemplate, mergedVariables) : input;\n\n const userMessage: AiMessage = { role: 'user', content };\n const nextMessages = [...messagesRef.current, userMessage];\n syncMessages(nextMessages);\n setStatus('loading');\n setError(null);\n\n try {\n const response = await options.client.sendChat({\n messages: nextMessages,\n ...chatOptions,\n });\n\n const assistantMessage: AiMessage =\n response.message ?? {\n role: 'assistant',\n content: response.content,\n toolCalls: response.toolCalls,\n };\n const updatedMessages = [...nextMessages, assistantMessage];\n syncMessages(updatedMessages);\n setStatus('success');\n setLastResponse(response);\n return response;\n } catch (err) {\n const nextError = err instanceof Error ? err : new Error(String(err));\n setStatus('error');\n setError(nextError);\n throw nextError;\n }\n },\n [options.client]\n );\n\n return {\n status,\n isLoading: status === 'loading',\n error,\n messages,\n lastResponse,\n sendMessage,\n reset,\n setSystemPrompt,\n };\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- // src/universalFile/types.ts
3
+ // src/common/universalFile/types.ts
4
4
  var FileServiceError = class extends Error {
5
5
  constructor(message, code, details) {
6
6
  super(message);
@@ -39,5 +39,5 @@ exports.FileProcessingError = FileProcessingError;
39
39
  exports.FileServiceError = FileServiceError;
40
40
  exports.FileUploadError = FileUploadError;
41
41
  exports.StorageProviderError = StorageProviderError;
42
- //# sourceMappingURL=chunk-ZRAW3HXA.js.map
43
- //# sourceMappingURL=chunk-ZRAW3HXA.js.map
42
+ //# sourceMappingURL=chunk-4OXKHV7J.js.map
43
+ //# sourceMappingURL=chunk-4OXKHV7J.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/universalFile/types.ts"],"names":[],"mappings":";;;AAmSO,IAAM,gBAAA,GAAN,cAA+B,KAAA,CAAM;AAAA,EAC1C,WAAA,CACE,OAAA,EACgB,IAAA,EACA,OAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHG,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EACd;AACF;AAGO,IAAM,eAAA,GAAN,cAA8B,gBAAA,CAAiB;AAAA,EACpD,WAAA,CAAY,SAAiB,OAAA,EAA+B;AAC1D,IAAA,KAAA,CAAM,OAAA,EAAS,qBAAqB,OAAO,CAAA;AAC3C,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF;AAGO,IAAM,mBAAA,GAAN,cAAkC,gBAAA,CAAiB;AAAA,EACxD,WAAA,CAAY,SAAiB,OAAA,EAA+B;AAC1D,IAAA,KAAA,CAAM,OAAA,EAAS,yBAAyB,OAAO,CAAA;AAC/C,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AAAA,EACd;AACF;AAGO,IAAM,oBAAA,GAAN,cAAmC,gBAAA,CAAiB;AAAA,EACzD,WAAA,CAAY,SAAiB,OAAA,EAA+B;AAC1D,IAAA,KAAA,CAAM,OAAA,EAAS,0BAA0B,OAAO,CAAA;AAChD,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AAAA,EACd;AACF;AAGO,IAAM,gBAAA,GAAN,cAA+B,gBAAA,CAAiB;AAAA,EACrD,WAAA,CAAY,SAAiB,OAAA,EAA+B;AAC1D,IAAA,KAAA,CAAM,OAAA,EAAS,sBAAsB,OAAO,CAAA;AAC5C,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EACd;AACF","file":"chunk-4OXKHV7J.js","sourcesContent":["/**\n * 通用文件服务类型定义\n *\n * 定义了文件存储、上传、下载等核心接口和类型\n */\n\n// ============= 基础类型定义 =============\n\n/** 文件存储类型 */\nexport type StorageType = 'local' | 'aliyun-oss' | 'aws-s3' | 'qcloud-cos';\n\n/** CDN提供者类型 */\nexport type CDNType = 'none' | 'aliyun-cdn' | 'aws-cloudfront' | 'qcloud-cdn';\n\n/** 文件处理类型 */\nexport type ProcessorType = 'image' | 'audio' | 'video' | 'document';\n\n/** 文件上传状态 */\nexport type UploadStatus = 'pending' | 'uploading' | 'processing' | 'completed' | 'failed';\n\n/** 访问权限类型 */\nexport type AccessPermission = 'public' | 'private' | 'authenticated' | 'owner-only';\n\n// ============= 文件元数据接口 =============\n\n/** 文件元数据基础接口 */\nexport interface FileMetadata {\n /** 文件ID */\n id: string;\n /** 原始文件名 */\n originalName: string;\n /** 存储文件名 */\n storageName: string;\n /** 文件大小(字节) */\n size: number;\n /** MIME类型 */\n mimeType: string;\n /** 文件扩展名 */\n extension: string;\n /** 文件哈希值 */\n hash?: string;\n /** 上传时间 */\n uploadTime: Date;\n /** 访问权限 */\n permission: AccessPermission;\n /** 上传者ID */\n uploaderId: string;\n /** 模块标识 */\n moduleId: string;\n /** 业务标识 */\n businessId?: string;\n /** 存储提供者 */\n storageProvider: StorageType;\n /** 存储路径 */\n storagePath: string;\n /** CDN URL */\n cdnUrl?: string;\n /** 访问次数 */\n accessCount: number;\n /** 最后访问时间 */\n lastAccessTime?: Date;\n /** 过期时间 */\n expiresAt?: Date;\n /** 自定义元数据 */\n metadata?: Record<string, any>;\n}\n\n/** 上传文件信息(客户端使用) */\nexport interface UploadFileInfo {\n /** 文件对象 */\n file: File;\n /** 模块标识 */\n moduleId: string;\n /** 业务标识 */\n businessId?: string;\n /** 访问权限 */\n permission?: AccessPermission;\n /** 自定义存储路径 */\n customPath?: string;\n /** 自定义元数据 */\n metadata?: Record<string, any>;\n /** 是否需要处理 */\n needsProcessing?: boolean;\n /** 处理选项 */\n processingOptions?: ProcessingOptions;\n}\n\n/** 文件处理选项基础接口 */\nexport interface ProcessingOptions {\n /** 处理器类型 */\n type: ProcessorType;\n /** 处理参数 */\n params?: Record<string, any>;\n}\n\n/** 图片处理选项 */\nexport interface ImageProcessingOptions extends ProcessingOptions {\n type: 'image';\n /** 压缩质量 0-100 */\n quality?: number;\n /** 目标宽度 */\n width?: number;\n /** 目标高度 */\n height?: number;\n /** 格式转换 */\n format?: 'jpeg' | 'png' | 'webp' | 'avif';\n /** 是否添加水印 */\n watermark?: boolean;\n /** 水印配置 */\n watermarkOptions?: {\n text?: string;\n image?: string;\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'center';\n opacity?: number;\n };\n}\n\n/** 音频处理选项 */\nexport interface AudioProcessingOptions extends ProcessingOptions {\n type: 'audio';\n /** 比特率 */\n bitrate?: number;\n /** 格式转换 */\n format?: 'mp3' | 'wav' | 'ogg' | 'aac';\n /** 采样率 */\n sampleRate?: number;\n /** 声道数 */\n channels?: number;\n}\n\n/** 视频处理选项 */\nexport interface VideoProcessingOptions extends ProcessingOptions {\n type: 'video';\n /** 视频质量 */\n quality?: number;\n /** 格式转换 */\n format?: 'mp4' | 'avi' | 'mov' | 'webm';\n /** 生成缩略图 */\n generateThumbnail?: boolean;\n /** 缩略图时间点(秒) */\n thumbnailTime?: number;\n}\n\n// ============= 上传相关接口 =============\n\n/** 上传进度 */\nexport interface UploadProgress {\n /** 文件ID */\n fileId: string;\n /** 上传状态 */\n status: UploadStatus;\n /** 进度百分比(0-100) */\n progress: number;\n /** 已上传字节数 */\n uploadedBytes: number;\n /** 总字节数 */\n totalBytes: number;\n /** 上传速度(字节/秒) */\n speed: number;\n /** 剩余时间(秒) */\n remainingTime: number;\n /** 错误信息 */\n error?: string;\n}\n\n/** 上传结果 */\nexport interface UploadResult {\n /** 是否成功 */\n success: boolean;\n /** 文件元数据 */\n file?: FileMetadata;\n /** 文件访问URL */\n url?: string;\n /** 错误信息 */\n error?: string;\n}\n\n/** 批量操作结果 */\nexport interface BatchOperationResult {\n /** 成功数量 */\n successCount: number;\n /** 失败数量 */\n failureCount: number;\n /** 失败详情 */\n failures: Array<{\n fileId: string;\n error: string;\n }>;\n}\n\n// ============= 查询相关接口 =============\n\n/** 文件查询选项 */\nexport interface FileQueryOptions {\n /** 模块标识 */\n moduleId?: string;\n /** 业务标识 */\n businessId?: string;\n /** 上传者ID */\n uploaderId?: string;\n /** MIME类型过滤 */\n mimeType?: string;\n /** 最小文件大小 */\n minSize?: number;\n /** 最大文件大小 */\n maxSize?: number;\n /** 开始时间 */\n startTime?: Date;\n /** 结束时间 */\n endTime?: Date;\n /** 搜索关键词 */\n keyword?: string;\n /** 标签 */\n tags?: string[];\n /** 排序字段 */\n sortBy?: string;\n /** 排序方向 */\n sortOrder?: 'asc' | 'desc';\n /** 页码 */\n page?: number;\n /** 每页数量 */\n pageSize?: number;\n}\n\n/** 分页结果 */\nexport interface PaginatedResult<T> {\n /** 数据项 */\n items: T[];\n /** 总数 */\n total: number;\n /** 当前页码 */\n page: number;\n /** 每页数量 */\n pageSize: number;\n /** 总页数 */\n totalPages: number;\n /** 是否有下一页 */\n hasNext: boolean;\n /** 是否有上一页 */\n hasPrev: boolean;\n}\n\n/** 批量操作结果 */\nexport interface BatchOperationResult {\n /** 成功数量 */\n successCount: number;\n /** 失败数量 */\n failureCount: number;\n /** 失败详情 */\n failures: Array<{\n fileId: string;\n error: string;\n }>;\n}\n\n// ============= 事件相关接口 =============\n\n/** 文件事件类型 */\nexport type FileEventType =\n | 'upload:start'\n | 'upload:progress'\n | 'upload:complete'\n | 'upload:error'\n | 'download:start'\n | 'download:complete'\n | 'download:error'\n | 'delete:complete'\n | 'processing:start'\n | 'processing:complete'\n | 'processing:error';\n\n/** 文件事件 */\nexport interface FileEvent {\n /** 事件类型 */\n type: FileEventType;\n /** 文件ID */\n fileId: string;\n /** 事件时间 */\n timestamp: Date;\n /** 事件数据 */\n data?: Record<string, any>;\n /** 错误信息 */\n error?: string;\n}\n\n/** 文件事件监听器 */\nexport type FileEventListener = (event: FileEvent) => void | Promise<void>;\n\n// ============= 异常类定义 =============\n\n/** 文件服务基础异常 */\nexport class FileServiceError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly details?: Record<string, any>\n ) {\n super(message);\n this.name = 'FileServiceError';\n }\n}\n\n/** 文件上传错误 */\nexport class FileUploadError extends FileServiceError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'FILE_UPLOAD_ERROR', details);\n this.name = 'FileUploadError';\n }\n}\n\n/** 文件处理错误 */\nexport class FileProcessingError extends FileServiceError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'FILE_PROCESSING_ERROR', details);\n this.name = 'FileProcessingError';\n }\n}\n\n/** 存储提供者错误 */\nexport class StorageProviderError extends FileServiceError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'STORAGE_PROVIDER_ERROR', details);\n this.name = 'StorageProviderError';\n }\n}\n\n/** CDN提供者错误 */\nexport class CDNProviderError extends FileServiceError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'CDN_PROVIDER_ERROR', details);\n this.name = 'CDNProviderError';\n }\n}\n\n"]}
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+
3
+ //# sourceMappingURL=chunk-4PJM4752.js.map
4
+ //# sourceMappingURL=chunk-4PJM4752.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-5USIS3UM.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-4PJM4752.js"}
@@ -1,5 +1,5 @@
1
- import { validateFileName, validateExportRequest, validateExportConfig, universalExportClient, setNestedValue, sanitizeFileName, parseCSVField, getNestedValue, generateExportFileName, formatFileSize, formatErrorMessage, formatDuration, estimateEndTime, escapeCSVField, createExportError, createExportClient, applyFormatter, UniversalExportClient, UniversalExportButton, UNIVERSAL_EXPORT_VERSION, UNIVERSAL_EXPORT_NAME, ExportConfigEditor, EXPORT_FORMAT_MIME_TYPES, EXPORT_FORMAT_EXTENSIONS, ERROR_CODES, DEFAULT_RESULT_CACHE_TTL, DEFAULT_MAX_ROWS, DEFAULT_MAX_FILE_SIZE, DEFAULT_MAX_CONCURRENT_EXPORTS, DEFAULT_FORMATTERS, DEFAULT_EXPORT_TIMEOUT, DEFAULT_EXPORT_FORMAT, DEFAULT_ENCODING, DEFAULT_CSV_DELIMITER, DEFAULT_CONFIG_CACHE_TTL, DEFAULT_ADD_BOM, API_ENDPOINTS, API_BASE_PATH } from './chunk-GWNBVGDT.mjs';
2
- import { ExportServiceError, ExportFileError, ExportDataError, ExportConfigError } from './chunk-LFB5EIIM.mjs';
1
+ import { universalExportClient, createExportClient, UniversalExportClient, UniversalExportButton, ExportConfigEditor } from './chunk-WM3AEJ2E.mjs';
2
+ import { validateFileName, validateExportRequest, validateExportConfig, setNestedValue, sanitizeFileName, parseCSVField, getNestedValue, generateExportFileName, formatFileSize, formatErrorMessage, formatDuration, estimateEndTime, escapeCSVField, createExportError, applyFormatter, UNIVERSAL_EXPORT_VERSION, UNIVERSAL_EXPORT_NAME, ExportServiceError, ExportFileError, ExportDataError, ExportConfigError, EXPORT_FORMAT_MIME_TYPES, EXPORT_FORMAT_EXTENSIONS, ERROR_CODES, DEFAULT_RESULT_CACHE_TTL, DEFAULT_MAX_ROWS, DEFAULT_MAX_FILE_SIZE, DEFAULT_MAX_CONCURRENT_EXPORTS, DEFAULT_FORMATTERS, DEFAULT_EXPORT_TIMEOUT, DEFAULT_EXPORT_FORMAT, DEFAULT_ENCODING, DEFAULT_CSV_DELIMITER, DEFAULT_CONFIG_CACHE_TTL, DEFAULT_ADD_BOM, API_ENDPOINTS, API_BASE_PATH } from './chunk-QIF4MG5V.mjs';
3
3
  import { __export } from './chunk-MAI35PU6.mjs';
4
4
 
5
5
  // src/common/export/index.ts
@@ -50,5 +50,5 @@ __export(export_exports, {
50
50
  });
51
51
 
52
52
  export { export_exports };
53
- //# sourceMappingURL=chunk-3Z43XGA4.mjs.map
54
- //# sourceMappingURL=chunk-3Z43XGA4.mjs.map
53
+ //# sourceMappingURL=chunk-65JRVC3F.mjs.map
54
+ //# sourceMappingURL=chunk-65JRVC3F.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/export/index.ts"],"names":[],"mappings":";;;;;AAAA,IAAA,cAAA,GAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,sBAAA,EAAA,MAAA,sBAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,8BAAA,EAAA,MAAA,8BAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,sBAAA,EAAA,MAAA,sBAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA;AAAA,CAAA,CAAA","file":"chunk-3Z43XGA4.mjs","sourcesContent":["/**\n * @package sa2kit/common/export\n */\nexport * from '../../universalExport';\n"]}
1
+ {"version":3,"sources":["../src/common/export/index.ts"],"names":[],"mappings":";;;;;AAAA,IAAA,cAAA,GAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,sBAAA,EAAA,MAAA,sBAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,8BAAA,EAAA,MAAA,8BAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,sBAAA,EAAA,MAAA,sBAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA;AAAA,CAAA,CAAA","file":"chunk-65JRVC3F.mjs","sourcesContent":["/**\n * @package sa2kit/common/export\n */\nexport * from '../universalExport';\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkKH6RQ4J5_js = require('./chunk-KH6RQ4J5.js');
4
- var chunk25OFOKNF_js = require('./chunk-25OFOKNF.js');
3
+ var chunkZ2SNB5LJ_js = require('./chunk-Z2SNB5LJ.js');
4
+ var chunkF2BZIU67_js = require('./chunk-F2BZIU67.js');
5
5
  var fs = require('fs');
6
6
  var path = require('path');
7
7
  var promises = require('stream/promises');
@@ -26,7 +26,7 @@ function _interopNamespace(e) {
26
26
 
27
27
  var path__namespace = /*#__PURE__*/_interopNamespace(path);
28
28
 
29
- var logger = chunk25OFOKNF_js.createLogger("LocalStorageProvider");
29
+ var logger = chunkF2BZIU67_js.createLogger("LocalStorageProvider");
30
30
  var LocalStorageProvider = class {
31
31
  constructor() {
32
32
  this.type = "local";
@@ -38,7 +38,7 @@ var LocalStorageProvider = class {
38
38
  */
39
39
  async initialize(config) {
40
40
  if (config.type !== "local") {
41
- throw new chunkKH6RQ4J5_js.StorageProviderError("\u914D\u7F6E\u7C7B\u578B\u4E0D\u5339\u914D\uFF1A\u671F\u671B local");
41
+ throw new chunkZ2SNB5LJ_js.StorageProviderError("\u914D\u7F6E\u7C7B\u578B\u4E0D\u5339\u914D\uFF1A\u671F\u671B local");
42
42
  }
43
43
  this.config = config;
44
44
  logger.info("\u{1F4C2} [LocalStorageProvider] \u521D\u59CB\u5316\u672C\u5730\u5B58\u50A8\uFF0C\u6839\u76EE\u5F55: " + this.config.rootPath);
@@ -49,7 +49,7 @@ var LocalStorageProvider = class {
49
49
  logger.info("\u2705 [LocalStorageProvider] \u672C\u5730\u5B58\u50A8\u521D\u59CB\u5316\u5B8C\u6210");
50
50
  } catch (error) {
51
51
  logger.error("\u274C [LocalStorageProvider] \u672C\u5730\u5B58\u50A8\u521D\u59CB\u5316\u5931\u8D25:", error);
52
- throw new chunkKH6RQ4J5_js.StorageProviderError(`\u672C\u5730\u5B58\u50A8\u521D\u59CB\u5316\u5931\u8D25`);
52
+ throw new chunkZ2SNB5LJ_js.StorageProviderError(`\u672C\u5730\u5B58\u50A8\u521D\u59CB\u5316\u5931\u8D25`);
53
53
  }
54
54
  }
55
55
  /**
@@ -66,7 +66,7 @@ var LocalStorageProvider = class {
66
66
  await fs.promises.writeFile(fullPath, buffer);
67
67
  const stats = await fs.promises.stat(fullPath);
68
68
  if (stats.size !== fileInfo.file.size) {
69
- throw new chunkKH6RQ4J5_js.StorageProviderError(
69
+ throw new chunkZ2SNB5LJ_js.StorageProviderError(
70
70
  "\u6587\u4EF6\u5927\u5C0F\u4E0D\u5339\u914D: \u671F\u671B " + fileInfo.file.size + ", \u5B9E\u9645 " + stats.size
71
71
  );
72
72
  }
@@ -100,14 +100,14 @@ var LocalStorageProvider = class {
100
100
  try {
101
101
  const fullPath = this.getFullPath(path2);
102
102
  if (!fs.existsSync(fullPath)) {
103
- throw new chunkKH6RQ4J5_js.StorageProviderError("\u6587\u4EF6\u4E0D\u5B58\u5728: " + path2);
103
+ throw new chunkZ2SNB5LJ_js.StorageProviderError("\u6587\u4EF6\u4E0D\u5B58\u5728: " + path2);
104
104
  }
105
105
  const buffer = await fs.promises.readFile(fullPath);
106
106
  logger.info("\u2705 [LocalStorageProvider] \u6587\u4EF6\u4E0B\u8F7D\u5B8C\u6210: " + path2 + ", \u5927\u5C0F: " + buffer.length);
107
107
  return buffer;
108
108
  } catch (error) {
109
109
  logger.error("\u274C [LocalStorageProvider] \u6587\u4EF6\u4E0B\u8F7D\u5931\u8D25: " + path2 + ":", error);
110
- throw new chunkKH6RQ4J5_js.StorageProviderError(
110
+ throw new chunkZ2SNB5LJ_js.StorageProviderError(
111
111
  "\u6587\u4EF6\u4E0B\u8F7D\u5931\u8D25: " + (error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF")
112
112
  );
113
113
  }
@@ -231,7 +231,7 @@ var LocalStorageProvider = class {
231
231
  */
232
232
  ensureInitialized() {
233
233
  if (!this.isInitialized || !this.config) {
234
- throw new chunkKH6RQ4J5_js.StorageProviderError("\u5B58\u50A8\u63D0\u4F9B\u8005\u672A\u521D\u59CB\u5316");
234
+ throw new chunkZ2SNB5LJ_js.StorageProviderError("\u5B58\u50A8\u63D0\u4F9B\u8005\u672A\u521D\u59CB\u5316");
235
235
  }
236
236
  }
237
237
  /**
@@ -239,11 +239,11 @@ var LocalStorageProvider = class {
239
239
  */
240
240
  getFullPath(relativePath) {
241
241
  if (!this.config) {
242
- throw new chunkKH6RQ4J5_js.StorageProviderError("\u5B58\u50A8\u63D0\u4F9B\u8005\u672A\u521D\u59CB\u5316");
242
+ throw new chunkZ2SNB5LJ_js.StorageProviderError("\u5B58\u50A8\u63D0\u4F9B\u8005\u672A\u521D\u59CB\u5316");
243
243
  }
244
244
  const normalizedPath = path__namespace.normalize(relativePath);
245
245
  if (normalizedPath.includes("..")) {
246
- throw new chunkKH6RQ4J5_js.StorageProviderError("\u975E\u6CD5\u8DEF\u5F84\uFF1A\u4E0D\u5141\u8BB8\u4F7F\u7528\u7236\u76EE\u5F55\u5F15\u7528");
246
+ throw new chunkZ2SNB5LJ_js.StorageProviderError("\u975E\u6CD5\u8DEF\u5F84\uFF1A\u4E0D\u5141\u8BB8\u4F7F\u7528\u7236\u76EE\u5F55\u5F15\u7528");
247
247
  }
248
248
  return path__namespace.join(this.config.rootPath, normalizedPath);
249
249
  }
@@ -252,7 +252,7 @@ var LocalStorageProvider = class {
252
252
  */
253
253
  generateAccessUrl(relativePath) {
254
254
  if (!this.config) {
255
- throw new chunkKH6RQ4J5_js.StorageProviderError("\u5B58\u50A8\u63D0\u4F9B\u8005\u672A\u521D\u59CB\u5316");
255
+ throw new chunkZ2SNB5LJ_js.StorageProviderError("\u5B58\u50A8\u63D0\u4F9B\u8005\u672A\u521D\u59CB\u5316");
256
256
  }
257
257
  const urlPath = relativePath.replace(/\\/g, "/");
258
258
  const normalizedUrlPath = urlPath.startsWith("/") ? urlPath : "/" + urlPath;
@@ -277,7 +277,7 @@ var LocalStorageProvider = class {
277
277
  try {
278
278
  await fs.promises.access(dirPath, fs.promises.constants.R_OK | fs.promises.constants.W_OK);
279
279
  } catch (error) {
280
- throw new chunkKH6RQ4J5_js.StorageProviderError(
280
+ throw new chunkZ2SNB5LJ_js.StorageProviderError(
281
281
  "\u76EE\u5F55\u8BBF\u95EE\u6743\u9650\u4E0D\u8DB3: " + dirPath + ", " + (error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF")
282
282
  );
283
283
  }
@@ -325,12 +325,12 @@ var LocalStorageProvider = class {
325
325
  this.ensureInitialized();
326
326
  const fullPath = this.getFullPath(path2);
327
327
  if (!fs.existsSync(fullPath)) {
328
- throw new chunkKH6RQ4J5_js.StorageProviderError("\u6587\u4EF6\u4E0D\u5B58\u5728: " + path2);
328
+ throw new chunkZ2SNB5LJ_js.StorageProviderError("\u6587\u4EF6\u4E0D\u5B58\u5728: " + path2);
329
329
  }
330
330
  return fs.createReadStream(fullPath);
331
331
  }
332
332
  };
333
333
 
334
334
  exports.LocalStorageProvider = LocalStorageProvider;
335
- //# sourceMappingURL=chunk-Q5EDCKQA.js.map
336
- //# sourceMappingURL=chunk-Q5EDCKQA.js.map
335
+ //# sourceMappingURL=chunk-6HL54I2B.js.map
336
+ //# sourceMappingURL=chunk-6HL54I2B.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/universalFile/server/providers/LocalStorageProvider.ts"],"names":["createLogger","StorageProviderError","path","fs","existsSync","createWriteStream","pipeline","createReadStream"],"mappings":"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","file":"chunk-6HL54I2B.js","sourcesContent":["/**\n * 本地存储提供者实现\n */\n\nimport { promises as fs } from 'fs';\nimport { existsSync, createReadStream, createWriteStream } from 'fs';\nimport * as path from 'path';\nimport { pipeline } from 'stream/promises';\nimport { createLogger } from '../../../logger';\n\nimport type {\n IStorageProvider,\n StorageConfig,\n LocalStorageConfig,\n StorageResult,\n UploadFileInfo,\n StorageType,\n} from '../types';\n\nimport { StorageProviderError } from '../types';\n\nconst logger = createLogger('LocalStorageProvider');\n\n/**\n * 本地文件系统存储提供者\n */\nexport class LocalStorageProvider implements IStorageProvider {\n readonly type: StorageType = 'local';\n\n private config: LocalStorageConfig | null = null;\n private isInitialized = false;\n\n /**\n * 初始化存储提供者\n */\n async initialize(config: StorageConfig): Promise<void> {\n if (config.type !== 'local') {\n throw new StorageProviderError('配置类型不匹配:期望 local');\n }\n\n this.config = config as LocalStorageConfig;\n\n logger.info('📂 [LocalStorageProvider] 初始化本地存储,根目录: ' + (this.config.rootPath));\n\n try {\n // 确保根目录存在\n await this.ensureDirectoryExists(this.config.rootPath);\n\n // 验证目录访问权限\n await this.validateDirectoryAccess(this.config.rootPath);\n\n this.isInitialized = true;\n logger.info('✅ [LocalStorageProvider] 本地存储初始化完成');\n } catch (error) {\n logger.error('❌ [LocalStorageProvider] 本地存储初始化失败:', error);\n throw new StorageProviderError(`本地存储初始化失败`);\n }\n }\n\n /**\n * 上传文件\n */\n async upload(fileInfo: UploadFileInfo, filePath: string): Promise<StorageResult> {\n this.ensureInitialized();\n\n const startTime = Date.now();\n logger.info('📤 [LocalStorageProvider] 开始上传文件: ' + (filePath));\n\n try {\n // 生成完整文件路径\n const fullPath = this.getFullPath(filePath);\n\n // 确保父目录存在\n await this.ensureDirectoryExists(path.dirname(fullPath));\n\n // 将File对象转换为Buffer\n const buffer = Buffer.from(await fileInfo.file.arrayBuffer());\n\n // 写入文件\n await fs.writeFile(fullPath, buffer);\n\n // 验证文件写入\n const stats = await fs.stat(fullPath);\n\n if (stats.size !== fileInfo.file.size) {\n throw new StorageProviderError(\n '文件大小不匹配: 期望 ' + (fileInfo.file.size) + ', 实际 ' + (stats.size)\n );\n }\n\n // 生成访问URL\n const accessUrl = this.generateAccessUrl(filePath);\n\n const uploadTime = Date.now() - startTime;\n logger.info('✅ [LocalStorageProvider] 文件上传完成: ' + (filePath) + ', 耗时: ' + (uploadTime) + 'ms');\n\n return {\n success: true,\n path: filePath,\n url: accessUrl,\n size: stats.size,\n data: {\n fullPath,\n uploadTime,\n },\n };\n } catch (error) {\n logger.error('❌ [LocalStorageProvider] 文件上传失败: ' + (filePath) + ':', error);\n\n return {\n success: false,\n error: error instanceof Error ? error.message : '上传失败',\n };\n }\n }\n\n /**\n * 下载文件\n */\n async download(path: string): Promise<Buffer> {\n this.ensureInitialized();\n\n logger.info('📥 [LocalStorageProvider] 开始下载文件: ' + (path));\n\n try {\n const fullPath = this.getFullPath(path);\n\n // 检查文件是否存在\n if (!existsSync(fullPath)) {\n throw new StorageProviderError('文件不存在: ' + (path));\n }\n\n // 读取文件\n const buffer = await fs.readFile(fullPath);\n\n logger.info('✅ [LocalStorageProvider] 文件下载完成: ' + (path) + ', 大小: ' + (buffer.length));\n\n return buffer;\n } catch (error) {\n logger.error('❌ [LocalStorageProvider] 文件下载失败: ' + (path) + ':', error);\n throw new StorageProviderError(\n '文件下载失败: ' + (error instanceof Error ? error.message : '未知错误')\n );\n }\n }\n\n /**\n * 删除文件\n */\n async delete(path: string): Promise<StorageResult> {\n this.ensureInitialized();\n\n logger.info('🗑️ [LocalStorageProvider] 开始删除文件: ' + (path));\n\n try {\n const fullPath = this.getFullPath(path);\n\n // 检查文件是否存在\n if (!existsSync(fullPath)) {\n logger.warn('⚠️ [LocalStorageProvider] 文件不存在: ' + (path));\n return {\n success: true, // 文件不存在也视为删除成功\n data: { reason: 'file_not_exists' },\n };\n }\n\n // 删除文件\n await fs.unlink(fullPath);\n\n logger.info('✅ [LocalStorageProvider] 文件删除完成: ' + (path));\n\n return {\n success: true,\n data: { deletedPath: fullPath },\n };\n } catch (error) {\n logger.error('❌ [LocalStorageProvider] 文件删除失败: ' + (path) + ':', error);\n\n return {\n success: false,\n error: error instanceof Error ? error.message : '删除失败',\n };\n }\n }\n\n /**\n * 获取文件信息\n */\n async getFileInfo(path: string): Promise<StorageResult> {\n this.ensureInitialized();\n\n try {\n const fullPath = this.getFullPath(path);\n\n if (!existsSync(fullPath)) {\n return {\n success: false,\n error: '文件不存在',\n };\n }\n\n const stats = await fs.stat(fullPath);\n\n return {\n success: true,\n size: stats.size,\n data: {\n fullPath,\n size: stats.size,\n mtime: stats.mtime,\n ctime: stats.ctime,\n isFile: stats.isFile(),\n isDirectory: stats.isDirectory(),\n },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : '获取文件信息失败',\n };\n }\n }\n\n /**\n * 生成访问URL\n */\n async getAccessUrl(path: string, _expiresIn?: number): Promise<string> {\n this.ensureInitialized();\n\n // 本地存储不支持过期时间,忽略expiresIn参数\n return this.generateAccessUrl(path);\n }\n\n /**\n * 生成预签名上传URL\n */\n async getUploadUrl(path: string, _expiresIn?: number): Promise<string> {\n this.ensureInitialized();\n\n // 本地存储不支持预签名上传,返回普通访问URL\n logger.warn(`⚠️ [LocalStorageProvider] 本地存储不支持预签名上传URL`);\n return this.generateAccessUrl(path);\n }\n\n /**\n * 检查文件是否存在\n */\n async exists(path: string): Promise<boolean> {\n this.ensureInitialized();\n\n try {\n const fullPath = this.getFullPath(path);\n return existsSync(fullPath);\n } catch {\n return false;\n }\n }\n\n /**\n * 列出文件\n */\n async list(prefix: string, maxKeys?: number): Promise<string[]> {\n this.ensureInitialized();\n\n try {\n const fullPrefix = this.getFullPath(prefix);\n const baseDir = path.dirname(fullPrefix);\n const filePattern = path.basename(fullPrefix);\n\n if (!existsSync(baseDir)) {\n return [];\n }\n\n const entries = await fs.readdir(baseDir, { withFileTypes: true });\n let files = entries\n .filter((entry) => entry.isFile())\n .map((entry) => entry.name)\n .filter((name) => name.startsWith(filePattern))\n .map((name) => path.join(path.dirname(prefix), name));\n\n // 限制返回数量\n if (maxKeys && maxKeys > 0) {\n files = files.slice(0, maxKeys);\n }\n\n return files;\n } catch (error) {\n logger.error('❌ [LocalStorageProvider] 列出文件失败: ' + (prefix) + ':', error);\n return [];\n }\n }\n\n // ============= 私有方法 =============\n\n /**\n * 确保已初始化\n */\n private ensureInitialized(): void {\n if (!this.isInitialized || !this.config) {\n throw new StorageProviderError('存储提供者未初始化');\n }\n }\n\n /**\n * 获取完整文件路径\n */\n private getFullPath(relativePath: string): string {\n if (!this.config) {\n throw new StorageProviderError('存储提供者未初始化');\n }\n\n // 防止路径遍历攻击\n const normalizedPath = path.normalize(relativePath);\n if (normalizedPath.includes('..')) {\n throw new StorageProviderError('非法路径:不允许使用父目录引用');\n }\n\n return path.join(this.config.rootPath, normalizedPath);\n }\n\n /**\n * 生成访问URL\n */\n private generateAccessUrl(relativePath: string): string {\n if (!this.config) {\n throw new StorageProviderError('存储提供者未初始化');\n }\n\n // 规范化路径分隔符为URL格式\n const urlPath = relativePath.replace(/\\\\/g, '/');\n\n // 确保URL路径以/开头\n const normalizedUrlPath = urlPath.startsWith('/') ? urlPath : '/' + (urlPath);\n\n return (this.config.baseUrl) + (normalizedUrlPath);\n }\n\n /**\n * 确保目录存在\n */\n private async ensureDirectoryExists(dirPath: string): Promise<void> {\n try {\n await fs.mkdir(dirPath, { recursive: true });\n } catch (error) {\n // 如果目录已存在,忽略错误\n if (error instanceof Error && 'code' in error && error.code !== 'EEXIST') {\n throw error;\n }\n }\n }\n\n /**\n * 验证目录访问权限\n */\n private async validateDirectoryAccess(dirPath: string): Promise<void> {\n try {\n // 检查读写权限\n await fs.access(dirPath, fs.constants.R_OK | fs.constants.W_OK);\n } catch (error) {\n throw new StorageProviderError(\n '目录访问权限不足: ' + (dirPath) + ', ' + (error instanceof Error ? error.message : '未知错误')\n );\n }\n }\n\n /**\n * 流式上传大文件(可选实现)\n */\n async uploadStream(\n readableStream: NodeJS.ReadableStream,\n filePath: string\n ): Promise<StorageResult> {\n this.ensureInitialized();\n\n const startTime = Date.now();\n logger.info('📤 [LocalStorageProvider] 开始流式上传文件: ' + (filePath));\n\n try {\n const fullPath = this.getFullPath(filePath);\n\n // 确保父目录存在\n await this.ensureDirectoryExists(path.dirname(fullPath));\n\n // 创建写入流\n const writeStream = createWriteStream(fullPath);\n\n // 使用pipeline进行流式传输\n await pipeline(readableStream, writeStream);\n\n // 获取文件信息\n const stats = await fs.stat(fullPath);\n\n // 生成访问URL\n const accessUrl = this.generateAccessUrl(filePath);\n\n const uploadTime = Date.now() - startTime;\n logger.info(\n '✅ [LocalStorageProvider] 流式上传完成: ' + (filePath) + ', 大小: ' + (stats.size) + ', 耗时: ' + (uploadTime) + 'ms'\n );\n\n return {\n success: true,\n path: filePath,\n url: accessUrl,\n size: stats.size,\n data: {\n fullPath,\n uploadTime,\n },\n };\n } catch (error) {\n logger.error('❌ [LocalStorageProvider] 流式上传失败: ' + (filePath) + ':', error);\n\n return {\n success: false,\n error: error instanceof Error ? error.message : '流式上传失败',\n };\n }\n }\n\n /**\n * 流式下载大文件(可选实现)\n */\n createDownloadStream(path: string): NodeJS.ReadableStream {\n this.ensureInitialized();\n\n const fullPath = this.getFullPath(path);\n\n if (!existsSync(fullPath)) {\n throw new StorageProviderError('文件不存在: ' + (path));\n }\n\n return createReadStream(fullPath);\n }\n}\n\n"]}