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.
- package/README.md +5 -5
- package/dist/AliyunOSSProvider-7IOT5U6M.js +15 -0
- package/dist/{AliyunOSSProvider-4GRL2FJB.js.map → AliyunOSSProvider-7IOT5U6M.js.map} +1 -1
- package/dist/AliyunOSSProvider-ZXZM7OQA.mjs +6 -0
- package/dist/{AliyunOSSProvider-QNVFIZ7Q.mjs.map → AliyunOSSProvider-ZXZM7OQA.mjs.map} +1 -1
- package/dist/LocalStorageProvider-KJKRCKBS.js +15 -0
- package/dist/{LocalStorageProvider-PFA2DMIJ.js.map → LocalStorageProvider-KJKRCKBS.js.map} +1 -1
- package/dist/LocalStorageProvider-O22465NY.mjs +6 -0
- package/dist/{LocalStorageProvider-J5RHV37G.mjs.map → LocalStorageProvider-O22465NY.mjs.map} +1 -1
- package/dist/{chunk-SLKOEYFH.js → chunk-2234T4A6.js} +5 -5
- package/dist/chunk-2234T4A6.js.map +1 -0
- package/dist/{chunk-HQLKOXG7.js → chunk-36KGNXKW.js} +3 -3
- package/dist/{chunk-HQLKOXG7.js.map → chunk-36KGNXKW.js.map} +1 -1
- package/dist/{chunk-BCE6RUZV.js → chunk-375C7WL7.js} +19 -19
- package/dist/chunk-375C7WL7.js.map +1 -0
- package/dist/{chunk-VMTEDX5H.js → chunk-3J24Z4MB.js} +34 -318
- package/dist/chunk-3J24Z4MB.js.map +1 -0
- package/dist/{chunk-PBI7FKMB.js → chunk-3QCATFQV.js} +3 -3
- package/dist/chunk-3QCATFQV.js.map +1 -0
- package/dist/{chunk-FXQOXLDE.js → chunk-3R6JHA6D.js} +4 -4
- package/dist/chunk-3R6JHA6D.js.map +1 -0
- package/dist/{chunk-ZRAW3HXA.js → chunk-4OXKHV7J.js} +3 -3
- package/dist/chunk-4OXKHV7J.js.map +1 -0
- package/dist/chunk-4PJM4752.js +4 -0
- package/dist/{chunk-5USIS3UM.js.map → chunk-4PJM4752.js.map} +1 -1
- package/dist/{chunk-3Z43XGA4.mjs → chunk-65JRVC3F.mjs} +4 -4
- package/dist/{chunk-3Z43XGA4.mjs.map → chunk-65JRVC3F.mjs.map} +1 -1
- package/dist/{chunk-Q5EDCKQA.js → chunk-6HL54I2B.js} +16 -16
- package/dist/chunk-6HL54I2B.js.map +1 -0
- package/dist/chunk-6V2MIQPF.mjs +77 -0
- package/dist/chunk-6V2MIQPF.mjs.map +1 -0
- package/dist/{chunk-C6KV7VTZ.mjs → chunk-7CRU2Y5X.mjs} +5 -5
- package/dist/chunk-7CRU2Y5X.mjs.map +1 -0
- package/dist/chunk-7PMT4L4I.js +324 -0
- package/dist/chunk-7PMT4L4I.js.map +1 -0
- package/dist/{chunk-XJ7ZAGC5.js → chunk-7VVZHFEM.js} +3 -3
- package/dist/chunk-7VVZHFEM.js.map +1 -0
- package/dist/chunk-AWHGIKTQ.js +56 -0
- package/dist/{chunk-FHLTPXAR.js.map → chunk-AWHGIKTQ.js.map} +1 -1
- package/dist/chunk-B3GYF6TY.js +37 -0
- package/dist/{chunk-2Y7BKFKZ.js.map → chunk-B3GYF6TY.js.map} +1 -1
- package/dist/{chunk-5FUAQLGC.mjs → chunk-BDBJFOXM.mjs} +3 -3
- package/dist/{chunk-5FUAQLGC.mjs.map → chunk-BDBJFOXM.mjs.map} +1 -1
- package/dist/{chunk-ZGVB35L2.mjs → chunk-BTW3SWQN.mjs} +3 -3
- package/dist/chunk-BTW3SWQN.mjs.map +1 -0
- package/dist/{chunk-I5ZPEDNR.mjs → chunk-CHYSSZ4E.mjs} +10 -10
- package/dist/chunk-CHYSSZ4E.mjs.map +1 -0
- package/dist/{chunk-FIUBFREP.mjs → chunk-DO6QYAZV.mjs} +5 -5
- package/dist/chunk-DO6QYAZV.mjs.map +1 -0
- package/dist/{chunk-MBANGIG3.mjs → chunk-DTR53LQO.mjs} +6 -6
- package/dist/chunk-DTR53LQO.mjs.map +1 -0
- package/dist/{chunk-EQXPL7TN.mjs → chunk-EI2S4XDG.mjs} +16 -5
- package/dist/chunk-EI2S4XDG.mjs.map +1 -0
- package/dist/{chunk-GSNGCENJ.js → chunk-EOZHUI46.js} +16 -4
- package/dist/chunk-EOZHUI46.js.map +1 -0
- package/dist/{chunk-25OFOKNF.js → chunk-F2BZIU67.js} +18 -5
- package/dist/chunk-F2BZIU67.js.map +1 -0
- package/dist/{chunk-AQPU2AXH.js → chunk-F2TEJSCP.js} +10 -10
- package/dist/chunk-F2TEJSCP.js.map +1 -0
- package/dist/{chunk-UCOE6SET.js → chunk-FCLS5R24.js} +3 -3
- package/dist/chunk-FCLS5R24.js.map +1 -0
- package/dist/{chunk-3NHAT7D4.mjs → chunk-FUA6ZGMI.mjs} +27 -12
- package/dist/chunk-FUA6ZGMI.mjs.map +1 -0
- package/dist/chunk-FY2X3LYR.mjs +3 -0
- package/dist/{chunk-VRN76M56.mjs.map → chunk-FY2X3LYR.mjs.map} +1 -1
- package/dist/{chunk-V7EVKD5G.mjs → chunk-GS4SAW25.mjs} +4 -4
- package/dist/chunk-GS4SAW25.mjs.map +1 -0
- package/dist/chunk-H56ICWUO.js +321 -0
- package/dist/chunk-H56ICWUO.js.map +1 -0
- package/dist/{chunk-HDMIOOZY.mjs → chunk-HG34SGMN.mjs} +4 -4
- package/dist/chunk-HG34SGMN.mjs.map +1 -0
- package/dist/chunk-HL4H2HF6.js +279 -0
- package/dist/chunk-HL4H2HF6.js.map +1 -0
- package/dist/chunk-IJIQUMAK.mjs +272 -0
- package/dist/chunk-IJIQUMAK.mjs.map +1 -0
- package/dist/{imageCrop/index.mjs → chunk-KEZFTDZT.mjs} +24 -6
- package/dist/chunk-KEZFTDZT.mjs.map +1 -0
- package/dist/{chunk-KQ643L7Z.js → chunk-KHOVC2KL.js} +3 -3
- package/dist/chunk-KHOVC2KL.js.map +1 -0
- package/dist/{chunk-6PMXAK7F.js → chunk-KRBSTLKC.js} +57 -57
- package/dist/chunk-KRBSTLKC.js.map +1 -0
- package/dist/chunk-KVYHCGRY.js +2011 -0
- package/dist/chunk-KVYHCGRY.js.map +1 -0
- package/dist/{chunk-G7UBMCUT.mjs → chunk-LZ5YTMMP.mjs} +3 -3
- package/dist/chunk-LZ5YTMMP.mjs.map +1 -0
- package/dist/{chunk-WW4GE6CZ.js → chunk-MJ6XJGAL.js} +23 -119
- package/dist/chunk-MJ6XJGAL.js.map +1 -0
- package/dist/{chunk-NCRP2YHY.mjs → chunk-MKLXCV4Z.mjs} +8 -96
- package/dist/chunk-MKLXCV4Z.mjs.map +1 -0
- package/dist/chunk-MMDSZIXD.mjs +286 -0
- package/dist/chunk-MMDSZIXD.mjs.map +1 -0
- package/dist/{chunk-TC5YU6A4.mjs → chunk-N2O3OX5Y.mjs} +3 -3
- package/dist/chunk-N2O3OX5Y.mjs.map +1 -0
- package/dist/{chunk-3FRAIS4T.mjs → chunk-O6NNSPWD.mjs} +5 -5
- package/dist/{chunk-3FRAIS4T.mjs.map → chunk-O6NNSPWD.mjs.map} +1 -1
- package/dist/chunk-OIRZXSYM.js +80 -0
- package/dist/chunk-OIRZXSYM.js.map +1 -0
- package/dist/{chunk-Q5VFBPMG.mjs → chunk-P7JQRNBJ.mjs} +3 -3
- package/dist/chunk-P7JQRNBJ.mjs.map +1 -0
- package/dist/{chunk-BIHYZA67.mjs → chunk-PLIG5257.mjs} +18 -18
- package/dist/chunk-PLIG5257.mjs.map +1 -0
- package/dist/chunk-QIF4MG5V.mjs +283 -0
- package/dist/chunk-QIF4MG5V.mjs.map +1 -0
- package/dist/{chunk-4OOANEJV.mjs → chunk-RHECN4E2.mjs} +21 -21
- package/dist/chunk-RHECN4E2.mjs.map +1 -0
- package/dist/{chunk-YOTQG4NP.mjs → chunk-RHHTZTIN.mjs} +4 -4
- package/dist/chunk-RHHTZTIN.mjs.map +1 -0
- package/dist/{chunk-G6NSKJMH.js → chunk-RRQ2X26Z.js} +4 -4
- package/dist/chunk-RRQ2X26Z.js.map +1 -0
- package/dist/{chunk-4WBCWJSN.js → chunk-RST2T54Y.js} +7 -7
- package/dist/chunk-RST2T54Y.js.map +1 -0
- package/dist/{chunk-R2DXTE2L.js → chunk-RVNQI6BI.js} +4 -4
- package/dist/chunk-RVNQI6BI.js.map +1 -0
- package/dist/{chunk-SKFEJPMJ.mjs → chunk-S3K4LTRI.mjs} +6 -6
- package/dist/chunk-S3K4LTRI.mjs.map +1 -0
- package/dist/{chunk-ZM2SZJTZ.js → chunk-SWZ5XNF6.js} +9 -9
- package/dist/chunk-SWZ5XNF6.js.map +1 -0
- package/dist/{chunk-QSKLQX6H.js → chunk-U7HNBCBS.js} +16 -16
- package/dist/chunk-U7HNBCBS.js.map +1 -0
- package/dist/{chunk-CIVO4R6N.mjs → chunk-UJS3YSD3.mjs} +3 -3
- package/dist/chunk-UJS3YSD3.mjs.map +1 -0
- package/dist/{chunk-G6HXNQ2U.mjs → chunk-UJUWDF7M.mjs} +8 -8
- package/dist/chunk-UJUWDF7M.mjs.map +1 -0
- package/dist/{chunk-CAYOQDBR.js → chunk-UR5NENGE.js} +3 -3
- package/dist/chunk-UR5NENGE.js.map +1 -0
- package/dist/{chunk-QXAOXBVB.mjs → chunk-V7HGBDCB.mjs} +3 -3
- package/dist/chunk-V7HGBDCB.mjs.map +1 -0
- package/dist/{chunk-ATUCZXJY.js → chunk-V7RLIZMN.js} +14 -4
- package/dist/chunk-V7RLIZMN.js.map +1 -0
- package/dist/{chunk-ACUFEDVQ.js → chunk-VCKXK6V5.js} +9 -9
- package/dist/chunk-VCKXK6V5.js.map +1 -0
- package/dist/{chunk-XUS5ACKR.mjs → chunk-VIEXDTNF.mjs} +3 -3
- package/dist/chunk-VIEXDTNF.mjs.map +1 -0
- package/dist/{imageCrop/index.js → chunk-VN2DULIA.js} +24 -5
- package/dist/chunk-VN2DULIA.js.map +1 -0
- package/dist/{chunk-S6YSGVWD.js → chunk-VNWMRUY6.js} +31 -87
- package/dist/chunk-VNWMRUY6.js.map +1 -0
- package/dist/{chunk-3DXPQ4YV.mjs → chunk-VYK4M2D6.mjs} +18 -6
- package/dist/chunk-VYK4M2D6.mjs.map +1 -0
- package/dist/{chunk-WEEXCPSE.mjs → chunk-WB4H6ZUW.mjs} +3 -3
- package/dist/chunk-WB4H6ZUW.mjs.map +1 -0
- package/dist/{chunk-GWNBVGDT.mjs → chunk-WM3AEJ2E.mjs} +6 -257
- package/dist/chunk-WM3AEJ2E.mjs.map +1 -0
- package/dist/{chunk-CX2GHCAI.mjs → chunk-X5GINUGI.mjs} +26 -81
- package/dist/chunk-X5GINUGI.mjs.map +1 -0
- package/dist/{chunk-DIF5VRL3.mjs → chunk-XB7GUEHZ.mjs} +14 -5
- package/dist/chunk-XB7GUEHZ.mjs.map +1 -0
- package/dist/{chunk-ZLYPALF3.js → chunk-XE5RGZ3B.js} +11 -11
- package/dist/chunk-XE5RGZ3B.js.map +1 -0
- package/dist/{chunk-WJ7IMUEJ.mjs → chunk-XNTIMVSL.mjs} +7 -7
- package/dist/chunk-XNTIMVSL.mjs.map +1 -0
- package/dist/{chunk-ZWQJSZEY.js → chunk-Y7WHUKJF.js} +28 -12
- package/dist/chunk-Y7WHUKJF.js.map +1 -0
- package/dist/{components/index.mjs → chunk-YIRPPMCN.mjs} +305 -785
- package/dist/chunk-YIRPPMCN.mjs.map +1 -0
- package/dist/{chunk-KH6RQ4J5.js → chunk-Z2SNB5LJ.js} +3 -3
- package/dist/chunk-Z2SNB5LJ.js.map +1 -0
- package/dist/{chunk-HJ6MH7J7.js → chunk-ZOP7YIVX.js} +17 -17
- package/dist/chunk-ZOP7YIVX.js.map +1 -0
- package/dist/{chunk-HJZHQW5R.mjs → chunk-ZUZLWHH5.mjs} +3 -3
- package/dist/chunk-ZUZLWHH5.mjs.map +1 -0
- package/dist/{ai → common/ai}/llm/core/index.d.mts +3 -3
- package/dist/{ai → common/ai}/llm/core/index.d.ts +3 -3
- package/dist/{ai/llm → common/ai/llm/core}/index.js +14 -14
- package/dist/{ai/llm → common/ai/llm/core}/index.mjs +3 -3
- package/dist/{ai → common/ai}/llm/electron/index.d.mts +3 -3
- package/dist/{ai/llm/web → common/ai/llm/electron}/index.d.ts +3 -3
- package/dist/common/ai/llm/electron/index.js +67 -0
- package/dist/common/ai/llm/electron/index.mjs +10 -0
- package/dist/{ai → common/ai}/llm/index.d.mts +2 -2
- package/dist/{ai → common/ai}/llm/index.d.ts +2 -2
- package/dist/{ai/llm/core → common/ai/llm}/index.js +13 -13
- package/dist/{ai/llm/core → common/ai/llm}/index.mjs +2 -2
- package/dist/{ai → common/ai}/llm/miniapp/index.d.mts +3 -3
- package/dist/{ai → common/ai}/llm/miniapp/index.d.ts +3 -3
- package/dist/{ai/llm/rn → common/ai/llm/miniapp}/index.js +16 -16
- package/dist/{ai/llm/rn → common/ai/llm/miniapp}/index.mjs +4 -4
- package/dist/{ai → common/ai}/llm/rn/index.d.mts +3 -3
- package/dist/{ai → common/ai}/llm/rn/index.d.ts +3 -3
- package/dist/{ai/llm/miniapp → common/ai/llm/rn}/index.js +16 -16
- package/dist/{ai/llm/miniapp → common/ai/llm/rn}/index.mjs +4 -4
- package/dist/common/ai/llm/ui/electron/index.d.mts +5 -0
- package/dist/common/ai/llm/ui/electron/index.d.ts +5 -0
- package/dist/common/ai/llm/ui/electron/index.js +22 -0
- package/dist/common/ai/llm/ui/electron/index.mjs +9 -0
- package/dist/common/ai/llm/ui/miniapp/index.d.mts +9 -0
- package/dist/common/ai/llm/ui/miniapp/index.d.ts +9 -0
- package/dist/common/ai/llm/ui/miniapp/index.js +14 -0
- package/dist/common/ai/llm/ui/miniapp/index.mjs +5 -0
- package/dist/common/ai/llm/ui/rn/index.d.mts +9 -0
- package/dist/common/ai/llm/ui/rn/index.d.ts +9 -0
- package/dist/common/ai/llm/ui/rn/index.js +14 -0
- package/dist/common/ai/llm/ui/rn/index.mjs +5 -0
- package/dist/{ai → common/ai}/llm/ui/web/index.d.mts +7 -7
- package/dist/{ai → common/ai}/llm/ui/web/index.d.ts +7 -7
- package/dist/common/ai/llm/ui/web/index.js +21 -0
- package/dist/common/ai/llm/ui/web/index.mjs +8 -0
- package/dist/{ai → common/ai}/llm/web/index.d.mts +3 -3
- package/dist/{ai/llm/electron → common/ai/llm/web}/index.d.ts +3 -3
- package/dist/common/ai/llm/web/index.js +66 -0
- package/dist/common/ai/llm/web/index.mjs +9 -0
- package/dist/{analytics → common/analytics}/index.d.mts +1 -1
- package/dist/{analytics → common/analytics}/index.d.ts +1 -1
- package/dist/{analytics → common/analytics}/index.js +79 -79
- package/dist/{analytics → common/analytics}/index.mjs +3 -3
- package/dist/{analytics → common/analytics}/server/index.js +2 -2
- package/dist/common/analytics/server/index.js.map +1 -0
- package/dist/{analytics → common/analytics}/server/index.mjs +2 -2
- package/dist/common/analytics/server/index.mjs.map +1 -0
- package/dist/{api → common/api}/index.d.mts +3 -3
- package/dist/{api → common/api}/index.d.ts +3 -3
- package/dist/common/api/index.js +21 -0
- package/dist/common/api/index.mjs +4 -0
- package/dist/common/auth/components/index.d.mts +9 -9
- package/dist/common/auth/components/index.d.ts +9 -9
- package/dist/common/auth/index.js +6 -6
- package/dist/common/auth/index.mjs +2 -2
- package/dist/common/auth/react/index.d.mts +3 -3
- package/dist/common/auth/react/index.d.ts +3 -3
- package/dist/common/auth/rn/index.d.mts +2 -2
- package/dist/common/auth/rn/index.d.ts +2 -2
- package/dist/common/auth/rn/index.js +2 -2
- package/dist/common/auth/rn/index.js.map +1 -1
- package/dist/common/auth/rn/index.mjs +1 -1
- package/dist/common/auth/rn/index.mjs.map +1 -1
- package/dist/common/components/index.d.mts +4 -0
- package/dist/common/components/index.d.ts +4 -0
- package/dist/common/components/index.js +414 -0
- package/dist/common/components/index.mjs +9 -0
- package/dist/{config → common/config}/index.d.mts +1 -1
- package/dist/{config → common/config}/index.d.ts +1 -1
- package/dist/common/config/index.js +21 -0
- package/dist/common/config/index.mjs +4 -0
- package/dist/{config → common/config}/server/index.js +5 -5
- package/dist/common/config/server/index.js.map +1 -0
- package/dist/{config → common/config}/server/index.mjs +5 -5
- package/dist/common/config/server/index.mjs.map +1 -0
- package/dist/common/export/index.d.mts +2 -2
- package/dist/common/export/index.d.ts +2 -2
- package/dist/common/export/index.js +67 -67
- package/dist/common/export/index.mjs +3 -3
- package/dist/common/export/server/index.d.mts +2 -2
- package/dist/common/export/server/index.d.ts +2 -2
- package/dist/common/export/server/index.js +76 -48
- package/dist/common/export/server/index.mjs +3 -3
- package/dist/common/file/index.d.mts +2 -2
- package/dist/common/file/index.d.ts +2 -2
- package/dist/common/file/index.js +27 -27
- package/dist/common/file/index.mjs +5 -5
- package/dist/common/file/server/index.d.mts +2 -2
- package/dist/common/file/server/index.d.ts +2 -2
- package/dist/common/file/server/index.js +58 -50
- package/dist/common/file/server/index.mjs +8 -8
- package/dist/{i18n → common/i18n}/index.d.mts +1 -1
- package/dist/{i18n → common/i18n}/index.d.ts +1 -1
- package/dist/{i18n → common/i18n}/index.js +18 -18
- package/dist/{i18n → common/i18n}/index.mjs +2 -2
- package/dist/common/imageCrop/index.d.mts +2 -0
- package/dist/common/imageCrop/index.d.ts +2 -0
- package/dist/common/imageCrop/index.js +61 -0
- package/dist/common/imageCrop/index.mjs +4 -0
- package/dist/common/index.d.mts +16 -16
- package/dist/common/index.d.ts +16 -16
- package/dist/common/index.js +75 -67
- package/dist/common/index.mjs +26 -26
- package/dist/common/logger/index.d.mts +1 -1
- package/dist/common/logger/index.d.ts +1 -1
- package/dist/common/logger/index.js +6 -7
- package/dist/common/logger/index.mjs +1 -2
- package/dist/{ossFile → common/ossFile}/index.d.mts +6 -6
- package/dist/{ossFile → common/ossFile}/index.d.ts +6 -6
- package/dist/{ossFile → common/ossFile}/index.js +26 -26
- package/dist/{ossFile → common/ossFile}/index.mjs +5 -5
- package/dist/{ossFile/server/index.d.ts → common/ossFile/server/index.d.mts} +7 -7
- package/dist/{ossFile/server/index.d.mts → common/ossFile/server/index.d.ts} +7 -7
- package/dist/{ossFile → common/ossFile}/server/index.js +60 -52
- package/dist/{ossFile → common/ossFile}/server/index.mjs +10 -10
- package/dist/common/platform/index.js +8 -8
- package/dist/common/platform/index.mjs +4 -4
- package/dist/common/request/index.d.mts +1 -1
- package/dist/common/request/index.d.ts +1 -1
- package/dist/common/request/index.js +5 -6
- package/dist/common/request/index.mjs +2 -3
- package/dist/common/storage/index.d.mts +1 -1
- package/dist/common/storage/index.d.ts +1 -1
- package/dist/common/storage/index.js +17 -17
- package/dist/common/storage/index.mjs +5 -5
- package/dist/{universalExport → common/universalExport}/index.d.mts +6 -86
- package/dist/{universalExport → common/universalExport}/index.d.ts +6 -86
- package/dist/{universalExport → common/universalExport}/index.js +67 -67
- package/dist/common/universalExport/index.mjs +5 -0
- package/dist/{universalExport → common/universalExport}/server/index.d.mts +3 -84
- package/dist/{universalExport → common/universalExport}/server/index.d.ts +3 -84
- package/dist/common/universalExport/server/index.js +151 -0
- package/dist/common/universalExport/server/index.mjs +6 -0
- package/dist/{universalFile/index.d.ts → common/universalFile/index.d.mts} +9 -9
- package/dist/{universalFile/index.d.mts → common/universalFile/index.d.ts} +9 -9
- package/dist/{universalFile → common/universalFile}/index.js +63 -63
- package/dist/common/universalFile/index.js.map +1 -0
- package/dist/{universalFile → common/universalFile}/index.mjs +4 -4
- package/dist/common/universalFile/index.mjs.map +1 -0
- package/dist/{universalFile → common/universalFile}/server/index.d.mts +5 -5
- package/dist/{universalFile → common/universalFile}/server/index.d.ts +5 -5
- package/dist/{universalFile → common/universalFile}/server/index.js +68 -68
- package/dist/{universalFile → common/universalFile}/server/index.mjs +8 -8
- package/dist/common/utils/index.d.mts +1 -1
- package/dist/common/utils/index.d.ts +1 -1
- package/dist/common/utils/index.js +11 -12
- package/dist/common/utils/index.mjs +2 -3
- package/dist/{index-WrR57hKT.d.ts → index-BRLygK4h.d.ts} +2 -2
- package/dist/{request/index.d.mts → index-BWNK5mH2.d.ts} +19 -2
- package/dist/{utils/index.d.mts → index-BiCK6gg6.d.mts} +19 -1
- package/dist/{utils/index.d.ts → index-BiCK6gg6.d.ts} +19 -1
- package/dist/{index-DoUo8IrU.d.mts → index-BxZauNN_.d.mts} +8 -8
- package/dist/{index-DoUo8IrU.d.ts → index-BxZauNN_.d.ts} +8 -8
- package/dist/{request/index.d.ts → index-C-P2yBTH.d.mts} +19 -2
- package/dist/{index-D0cqaQEH.d.mts → index-CLB80GCP.d.mts} +5 -5
- package/dist/{index-D0cqaQEH.d.ts → index-CLB80GCP.d.ts} +5 -5
- package/dist/{index-2G9Dxjvt.d.ts → index-CT4K2z-O.d.ts} +2 -2
- package/dist/{index-qcOvRVuN.d.mts → index-D6RJTGce.d.mts} +2 -2
- package/dist/{storage/index.d.ts → index-DA7L9JlE.d.mts} +26 -3
- package/dist/{imageCrop/index.d.mts → index-DXVph21C.d.mts} +40 -4
- package/dist/{imageCrop/index.d.ts → index-DXVph21C.d.ts} +40 -4
- package/dist/{index-CYuUB8aF.d.mts → index-DzyK789B.d.mts} +2 -2
- package/dist/{logger/index.d.mts → index-FVJZCEtm.d.mts} +21 -1
- package/dist/{logger/index.d.ts → index-FVJZCEtm.d.ts} +21 -1
- package/dist/{storage/index.d.mts → index-nD9vPCZT.d.ts} +26 -3
- package/dist/{components/index.d.mts → index-nOmIv2BG.d.mts} +159 -5
- package/dist/{components/index.d.ts → index-nOmIv2BG.d.ts} +159 -5
- package/dist/{path-qjVnH8qU.d.ts → path-Bzc7hj1N.d.ts} +5 -1
- package/dist/{path-DkaHQSyW.d.mts → path-DN_65vhO.d.mts} +5 -1
- package/dist/{types-3ujSNAXb.d.mts → utils-Dm3O1rAa.d.mts} +81 -1
- package/dist/{types-3ujSNAXb.d.ts → utils-Dm3O1rAa.d.ts} +81 -1
- package/package.json +292 -312
- package/dist/AliyunOSSProvider-4GRL2FJB.js +0 -15
- package/dist/AliyunOSSProvider-QNVFIZ7Q.mjs +0 -6
- package/dist/CollisionBalls-BpHufX3H.d.mts +0 -41
- package/dist/CollisionBalls-BpHufX3H.d.ts +0 -41
- package/dist/ConfigService-BxK06xP6.d.mts +0 -262
- package/dist/ConfigService-BxK06xP6.d.ts +0 -262
- package/dist/LocalStorageProvider-J5RHV37G.mjs +0 -6
- package/dist/LocalStorageProvider-PFA2DMIJ.js +0 -15
- package/dist/UniversalFileService-CC4d3wkc.d.ts +0 -139
- package/dist/UniversalFileService-CzAE_G4V.d.mts +0 -139
- package/dist/ai/llm/electron/index.js +0 -66
- package/dist/ai/llm/electron/index.mjs +0 -9
- package/dist/ai/llm/ui/electron/index.d.mts +0 -5
- package/dist/ai/llm/ui/electron/index.d.ts +0 -5
- package/dist/ai/llm/ui/electron/index.js +0 -21
- package/dist/ai/llm/ui/electron/index.mjs +0 -8
- package/dist/ai/llm/ui/miniapp/index.d.mts +0 -9
- package/dist/ai/llm/ui/miniapp/index.d.ts +0 -9
- package/dist/ai/llm/ui/miniapp/index.js +0 -14
- package/dist/ai/llm/ui/miniapp/index.mjs +0 -5
- package/dist/ai/llm/ui/rn/index.d.mts +0 -9
- package/dist/ai/llm/ui/rn/index.d.ts +0 -9
- package/dist/ai/llm/ui/rn/index.js +0 -14
- package/dist/ai/llm/ui/rn/index.mjs +0 -5
- package/dist/ai/llm/ui/web/index.js +0 -20
- package/dist/ai/llm/ui/web/index.mjs +0 -7
- package/dist/ai/llm/web/index.js +0 -65
- package/dist/ai/llm/web/index.mjs +0 -8
- package/dist/analytics/server/index.js.map +0 -1
- package/dist/analytics/server/index.mjs.map +0 -1
- package/dist/api/index.js +0 -21
- package/dist/api/index.mjs +0 -4
- package/dist/audioDetection/index.d.mts +0 -449
- package/dist/audioDetection/index.d.ts +0 -449
- package/dist/audioDetection/index.js +0 -1244
- package/dist/audioDetection/index.js.map +0 -1
- package/dist/audioDetection/index.mjs +0 -1227
- package/dist/audioDetection/index.mjs.map +0 -1
- package/dist/boothVaultService-Cn4WPhjg.d.mts +0 -83
- package/dist/boothVaultService-Cn4WPhjg.d.ts +0 -83
- package/dist/business/index.d.mts +0 -2
- package/dist/business/index.d.ts +0 -2
- package/dist/business/index.js +0 -581
- package/dist/business/index.js.map +0 -1
- package/dist/business/index.mjs +0 -575
- package/dist/business/index.mjs.map +0 -1
- package/dist/calendar/index.d.mts +0 -1325
- package/dist/calendar/index.d.ts +0 -1325
- package/dist/calendar/index.js +0 -5964
- package/dist/calendar/index.js.map +0 -1
- package/dist/calendar/index.mjs +0 -5878
- package/dist/calendar/index.mjs.map +0 -1
- package/dist/calendar/routes/index.d.mts +0 -191
- package/dist/calendar/routes/index.d.ts +0 -191
- package/dist/calendar/routes/index.js +0 -844
- package/dist/calendar/routes/index.js.map +0 -1
- package/dist/calendar/routes/index.mjs +0 -826
- package/dist/calendar/routes/index.mjs.map +0 -1
- package/dist/chunk-25OFOKNF.js.map +0 -1
- package/dist/chunk-2Y7BKFKZ.js +0 -37
- package/dist/chunk-3CSCIRQY.js +0 -17
- package/dist/chunk-3CSCIRQY.js.map +0 -1
- package/dist/chunk-3DXPQ4YV.mjs.map +0 -1
- package/dist/chunk-3NHAT7D4.mjs.map +0 -1
- package/dist/chunk-4FDUURSD.js +0 -22
- package/dist/chunk-4FDUURSD.js.map +0 -1
- package/dist/chunk-4OOANEJV.mjs.map +0 -1
- package/dist/chunk-4WBCWJSN.js.map +0 -1
- package/dist/chunk-5GBDDXYL.mjs +0 -23
- package/dist/chunk-5GBDDXYL.mjs.map +0 -1
- package/dist/chunk-5USIS3UM.js +0 -4
- package/dist/chunk-6PMXAK7F.js.map +0 -1
- package/dist/chunk-7B5SI4OF.mjs +0 -15
- package/dist/chunk-7B5SI4OF.mjs.map +0 -1
- package/dist/chunk-ACUFEDVQ.js.map +0 -1
- package/dist/chunk-AQPU2AXH.js.map +0 -1
- package/dist/chunk-ATUCZXJY.js.map +0 -1
- package/dist/chunk-BCE6RUZV.js.map +0 -1
- package/dist/chunk-BIHYZA67.mjs.map +0 -1
- package/dist/chunk-C6KV7VTZ.mjs.map +0 -1
- package/dist/chunk-CAYOQDBR.js.map +0 -1
- package/dist/chunk-CIVO4R6N.mjs.map +0 -1
- package/dist/chunk-CX2GHCAI.mjs.map +0 -1
- package/dist/chunk-DIF5VRL3.mjs.map +0 -1
- package/dist/chunk-EQXPL7TN.mjs.map +0 -1
- package/dist/chunk-FCEBAWN6.js +0 -18
- package/dist/chunk-FCEBAWN6.js.map +0 -1
- package/dist/chunk-FHIE5MTC.mjs +0 -541
- package/dist/chunk-FHIE5MTC.mjs.map +0 -1
- package/dist/chunk-FHLTPXAR.js +0 -56
- package/dist/chunk-FIUBFREP.mjs.map +0 -1
- package/dist/chunk-FXQOXLDE.js.map +0 -1
- package/dist/chunk-G6HXNQ2U.mjs.map +0 -1
- package/dist/chunk-G6NSKJMH.js.map +0 -1
- package/dist/chunk-G7UBMCUT.mjs.map +0 -1
- package/dist/chunk-GSNGCENJ.js.map +0 -1
- package/dist/chunk-GWNBVGDT.mjs.map +0 -1
- package/dist/chunk-HDMIOOZY.mjs.map +0 -1
- package/dist/chunk-HJ6MH7J7.js.map +0 -1
- package/dist/chunk-HJZHQW5R.mjs.map +0 -1
- package/dist/chunk-I5ZPEDNR.mjs.map +0 -1
- package/dist/chunk-KH6RQ4J5.js.map +0 -1
- package/dist/chunk-KQ643L7Z.js.map +0 -1
- package/dist/chunk-LFB5EIIM.mjs +0 -31
- package/dist/chunk-LFB5EIIM.mjs.map +0 -1
- package/dist/chunk-MBANGIG3.mjs.map +0 -1
- package/dist/chunk-NCRP2YHY.mjs.map +0 -1
- package/dist/chunk-NDGHXVGS.js +0 -25
- package/dist/chunk-NDGHXVGS.js.map +0 -1
- package/dist/chunk-NDPO5OMC.js +0 -563
- package/dist/chunk-NDPO5OMC.js.map +0 -1
- package/dist/chunk-PBI7FKMB.js.map +0 -1
- package/dist/chunk-Q5EDCKQA.js.map +0 -1
- package/dist/chunk-Q5VFBPMG.mjs.map +0 -1
- package/dist/chunk-QSKLQX6H.js.map +0 -1
- package/dist/chunk-QXAOXBVB.mjs.map +0 -1
- package/dist/chunk-R2DXTE2L.js.map +0 -1
- package/dist/chunk-RTD2WHQQ.mjs +0 -16
- package/dist/chunk-RTD2WHQQ.mjs.map +0 -1
- package/dist/chunk-S6YSGVWD.js.map +0 -1
- package/dist/chunk-SKFEJPMJ.mjs.map +0 -1
- package/dist/chunk-SLKOEYFH.js.map +0 -1
- package/dist/chunk-TC5YU6A4.mjs.map +0 -1
- package/dist/chunk-UCOE6SET.js.map +0 -1
- package/dist/chunk-UIYKZ73N.js +0 -36
- package/dist/chunk-UIYKZ73N.js.map +0 -1
- package/dist/chunk-V7EVKD5G.mjs.map +0 -1
- package/dist/chunk-VMTEDX5H.js.map +0 -1
- package/dist/chunk-VRN76M56.mjs +0 -3
- package/dist/chunk-VXFUXZN5.mjs +0 -20
- package/dist/chunk-VXFUXZN5.mjs.map +0 -1
- package/dist/chunk-WEEXCPSE.mjs.map +0 -1
- package/dist/chunk-WJ7IMUEJ.mjs.map +0 -1
- package/dist/chunk-WW4GE6CZ.js.map +0 -1
- package/dist/chunk-XJ7ZAGC5.js.map +0 -1
- package/dist/chunk-XUS5ACKR.mjs.map +0 -1
- package/dist/chunk-YOTQG4NP.mjs.map +0 -1
- package/dist/chunk-ZGVB35L2.mjs.map +0 -1
- package/dist/chunk-ZLYPALF3.js.map +0 -1
- package/dist/chunk-ZM2SZJTZ.js.map +0 -1
- package/dist/chunk-ZRAW3HXA.js.map +0 -1
- package/dist/chunk-ZWQJSZEY.js.map +0 -1
- package/dist/components/index.js +0 -2516
- package/dist/components/index.js.map +0 -1
- package/dist/components/index.mjs.map +0 -1
- package/dist/config/index.js +0 -21
- package/dist/config/index.mjs +0 -4
- package/dist/config/server/index.js.map +0 -1
- package/dist/config/server/index.mjs.map +0 -1
- package/dist/drizzle-schema-BNhqj2AZ.d.mts +0 -1114
- package/dist/drizzle-schema-BNhqj2AZ.d.ts +0 -1114
- package/dist/festivalCard/index.d.mts +0 -76
- package/dist/festivalCard/index.d.ts +0 -76
- package/dist/festivalCard/index.js +0 -1492
- package/dist/festivalCard/index.js.map +0 -1
- package/dist/festivalCard/index.mjs +0 -1475
- package/dist/festivalCard/index.mjs.map +0 -1
- package/dist/festivalCard/routes/index.d.mts +0 -42
- package/dist/festivalCard/routes/index.d.ts +0 -42
- package/dist/festivalCard/routes/index.js +0 -361
- package/dist/festivalCard/routes/index.js.map +0 -1
- package/dist/festivalCard/routes/index.mjs +0 -356
- package/dist/festivalCard/routes/index.mjs.map +0 -1
- package/dist/festivalCard/server/index.d.mts +0 -120
- package/dist/festivalCard/server/index.d.ts +0 -120
- package/dist/festivalCard/server/index.js +0 -272
- package/dist/festivalCard/server/index.js.map +0 -1
- package/dist/festivalCard/server/index.mjs +0 -265
- package/dist/festivalCard/server/index.mjs.map +0 -1
- package/dist/festivalCardService-B3GsnNpV.d.ts +0 -13
- package/dist/festivalCardService-CWhrLNE9.d.mts +0 -13
- package/dist/imageCrop/index.js.map +0 -1
- package/dist/imageCrop/index.mjs.map +0 -1
- package/dist/index-Bjem5rWn.d.mts +0 -17
- package/dist/index-C5U-2hJq.d.ts +0 -23
- package/dist/index-CifSBBP2.d.ts +0 -17
- package/dist/index-D0K4ehme.d.mts +0 -20
- package/dist/index-DLnfKN-a.d.mts +0 -23
- package/dist/index-DSel44Ke.d.mts +0 -93
- package/dist/index-DSel44Ke.d.ts +0 -93
- package/dist/index-DZ5iJtNO.d.mts +0 -102
- package/dist/index-DZ5iJtNO.d.ts +0 -102
- package/dist/index-Da7qdkgW.d.ts +0 -20
- package/dist/index-DrPcMJPc.d.mts +0 -250
- package/dist/index-DrPcMJPc.d.ts +0 -250
- package/dist/index-oLUvfqT8.d.ts +0 -20
- package/dist/index-pe38RDgC.d.mts +0 -20
- package/dist/index.d.mts +0 -11611
- package/dist/index.d.ts +0 -11611
- package/dist/index.js +0 -17230
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -16954
- package/dist/index.mjs.map +0 -1
- package/dist/logger/index.js +0 -29
- package/dist/logger/index.mjs +0 -4
- package/dist/mikuContest/ui/web/index.d.mts +0 -2
- package/dist/mikuContest/ui/web/index.d.ts +0 -2
- package/dist/mikuContest/ui/web/index.js +0 -353
- package/dist/mikuContest/ui/web/index.js.map +0 -1
- package/dist/mikuContest/ui/web/index.mjs +0 -343
- package/dist/mikuContest/ui/web/index.mjs.map +0 -1
- package/dist/mikuFireworks3D/index.d.mts +0 -268
- package/dist/mikuFireworks3D/index.d.ts +0 -268
- package/dist/mikuFireworks3D/index.js +0 -1267
- package/dist/mikuFireworks3D/index.js.map +0 -1
- package/dist/mikuFireworks3D/index.mjs +0 -1228
- package/dist/mikuFireworks3D/index.mjs.map +0 -1
- package/dist/mikuFusionGame/index.d.mts +0 -117
- package/dist/mikuFusionGame/index.d.ts +0 -117
- package/dist/mikuFusionGame/index.js +0 -1208
- package/dist/mikuFusionGame/index.js.map +0 -1
- package/dist/mikuFusionGame/index.mjs +0 -1195
- package/dist/mikuFusionGame/index.mjs.map +0 -1
- package/dist/mmd/admin/index.d.mts +0 -487
- package/dist/mmd/admin/index.d.ts +0 -487
- package/dist/mmd/admin/index.js +0 -1058
- package/dist/mmd/admin/index.js.map +0 -1
- package/dist/mmd/admin/index.mjs +0 -1027
- package/dist/mmd/admin/index.mjs.map +0 -1
- package/dist/mmd/index.d.mts +0 -2467
- package/dist/mmd/index.d.ts +0 -2467
- package/dist/mmd/index.js +0 -10119
- package/dist/mmd/index.js.map +0 -1
- package/dist/mmd/index.mjs +0 -10028
- package/dist/mmd/index.mjs.map +0 -1
- package/dist/mmd/server/index.d.mts +0 -139
- package/dist/mmd/server/index.d.ts +0 -139
- package/dist/mmd/server/index.js +0 -424
- package/dist/mmd/server/index.js.map +0 -1
- package/dist/mmd/server/index.mjs +0 -404
- package/dist/mmd/server/index.mjs.map +0 -1
- package/dist/music/index.d.mts +0 -74
- package/dist/music/index.d.ts +0 -74
- package/dist/music/index.js +0 -830
- package/dist/music/index.js.map +0 -1
- package/dist/music/index.mjs +0 -809
- package/dist/music/index.mjs.map +0 -1
- package/dist/music/server/index.d.mts +0 -1
- package/dist/music/server/index.d.ts +0 -1
- package/dist/music/server/index.js +0 -194
- package/dist/music/server/index.js.map +0 -1
- package/dist/music/server/index.mjs +0 -182
- package/dist/music/server/index.mjs.map +0 -1
- package/dist/navigation/index.d.mts +0 -93
- package/dist/navigation/index.d.ts +0 -93
- package/dist/navigation/index.js +0 -453
- package/dist/navigation/index.js.map +0 -1
- package/dist/navigation/index.mjs +0 -443
- package/dist/navigation/index.mjs.map +0 -1
- package/dist/portfolio/index.d.mts +0 -66
- package/dist/portfolio/index.d.ts +0 -66
- package/dist/portfolio/index.js +0 -736
- package/dist/portfolio/index.js.map +0 -1
- package/dist/portfolio/index.mjs +0 -724
- package/dist/portfolio/index.mjs.map +0 -1
- package/dist/qqbot/server/index.d.mts +0 -216
- package/dist/qqbot/server/index.d.ts +0 -216
- package/dist/qqbot/server/index.js +0 -394
- package/dist/qqbot/server/index.js.map +0 -1
- package/dist/qqbot/server/index.mjs +0 -385
- package/dist/qqbot/server/index.mjs.map +0 -1
- package/dist/qqbot/ui/web/index.d.mts +0 -10
- package/dist/qqbot/ui/web/index.d.ts +0 -10
- package/dist/qqbot/ui/web/index.js +0 -105
- package/dist/qqbot/ui/web/index.js.map +0 -1
- package/dist/qqbot/ui/web/index.mjs +0 -99
- package/dist/qqbot/ui/web/index.mjs.map +0 -1
- package/dist/request/index.js +0 -22
- package/dist/request/index.mjs +0 -5
- package/dist/screenReceiver/index.d.mts +0 -86
- package/dist/screenReceiver/index.d.ts +0 -86
- package/dist/screenReceiver/index.js +0 -281
- package/dist/screenReceiver/index.js.map +0 -1
- package/dist/screenReceiver/index.mjs +0 -273
- package/dist/screenReceiver/index.mjs.map +0 -1
- package/dist/storage/index.js +0 -48
- package/dist/storage/index.mjs +0 -7
- package/dist/testYourself/admin/index.d.mts +0 -58
- package/dist/testYourself/admin/index.d.ts +0 -58
- package/dist/testYourself/admin/index.js +0 -1009
- package/dist/testYourself/admin/index.js.map +0 -1
- package/dist/testYourself/admin/index.mjs +0 -1002
- package/dist/testYourself/admin/index.mjs.map +0 -1
- package/dist/testYourself/index.d.mts +0 -53
- package/dist/testYourself/index.d.ts +0 -53
- package/dist/testYourself/index.js +0 -2551
- package/dist/testYourself/index.js.map +0 -1
- package/dist/testYourself/index.mjs +0 -2531
- package/dist/testYourself/index.mjs.map +0 -1
- package/dist/testYourself/server/index.d.mts +0 -1029
- package/dist/testYourself/server/index.d.ts +0 -1029
- package/dist/testYourself/server/index.js +0 -825
- package/dist/testYourself/server/index.js.map +0 -1
- package/dist/testYourself/server/index.mjs +0 -816
- package/dist/testYourself/server/index.mjs.map +0 -1
- package/dist/types-B6B210gX.d.mts +0 -270
- package/dist/types-B6B210gX.d.ts +0 -270
- package/dist/types-Bdnte5EN.d.mts +0 -292
- package/dist/types-Cs0CLvrH.d.mts +0 -70
- package/dist/types-Cs0CLvrH.d.ts +0 -70
- package/dist/types-HorDyIRv.d.mts +0 -303
- package/dist/types-HorDyIRv.d.ts +0 -303
- package/dist/types-_rFX1atk.d.ts +0 -292
- package/dist/universalExport/index.mjs +0 -5
- package/dist/universalExport/server/index.js +0 -123
- package/dist/universalExport/server/index.mjs +0 -6
- package/dist/universalFile/index.js.map +0 -1
- package/dist/universalFile/index.mjs.map +0 -1
- package/dist/universalFile/server/index.js.map +0 -1
- package/dist/universalFile/server/index.mjs.map +0 -1
- package/dist/utils/index.js +0 -46
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/index.mjs +0 -5
- package/dist/utils/index.mjs.map +0 -1
- package/dist/vocaloidBooth/index.d.mts +0 -64
- package/dist/vocaloidBooth/index.d.ts +0 -64
- package/dist/vocaloidBooth/index.js +0 -376
- package/dist/vocaloidBooth/index.js.map +0 -1
- package/dist/vocaloidBooth/index.mjs +0 -362
- package/dist/vocaloidBooth/index.mjs.map +0 -1
- package/dist/vocaloidBooth/server/index.d.mts +0 -111
- package/dist/vocaloidBooth/server/index.d.ts +0 -111
- package/dist/vocaloidBooth/server/index.js +0 -247
- package/dist/vocaloidBooth/server/index.js.map +0 -1
- package/dist/vocaloidBooth/server/index.mjs +0 -237
- package/dist/vocaloidBooth/server/index.mjs.map +0 -1
- package/dist/vocaloidBooth/web/index.d.mts +0 -3
- package/dist/vocaloidBooth/web/index.d.ts +0 -3
- package/dist/vocaloidBooth/web/index.js +0 -376
- package/dist/vocaloidBooth/web/index.js.map +0 -1
- package/dist/vocaloidBooth/web/index.mjs +0 -362
- package/dist/vocaloidBooth/web/index.mjs.map +0 -1
- /package/dist/{ai → common/ai}/llm/core/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/core/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/electron/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/electron/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/miniapp/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/miniapp/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/rn/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/rn/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/electron/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/electron/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/miniapp/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/miniapp/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/rn/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/rn/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/web/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/web/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/web/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/web/index.mjs.map +0 -0
- /package/dist/{analytics → common/analytics}/index.js.map +0 -0
- /package/dist/{analytics → common/analytics}/index.mjs.map +0 -0
- /package/dist/{analytics → common/analytics}/server/index.d.mts +0 -0
- /package/dist/{analytics → common/analytics}/server/index.d.ts +0 -0
- /package/dist/{api → common/api}/index.js.map +0 -0
- /package/dist/{api → common/api}/index.mjs.map +0 -0
- /package/dist/{config → common/components}/index.js.map +0 -0
- /package/dist/{config → common/components}/index.mjs.map +0 -0
- /package/dist/{i18n → common/config}/index.js.map +0 -0
- /package/dist/{i18n → common/config}/index.mjs.map +0 -0
- /package/dist/{config → common/config}/server/index.d.mts +0 -0
- /package/dist/{config → common/config}/server/index.d.ts +0 -0
- /package/dist/{logger → common/i18n}/index.js.map +0 -0
- /package/dist/{logger → common/i18n}/index.mjs.map +0 -0
- /package/dist/{ossFile → common/imageCrop}/index.js.map +0 -0
- /package/dist/{ossFile → common/imageCrop}/index.mjs.map +0 -0
- /package/dist/{ossFile/server → common/ossFile}/index.js.map +0 -0
- /package/dist/{ossFile/server → common/ossFile}/index.mjs.map +0 -0
- /package/dist/{request → common/ossFile/server}/index.js.map +0 -0
- /package/dist/{request → common/ossFile/server}/index.mjs.map +0 -0
- /package/dist/{storage → common/universalExport}/index.js.map +0 -0
- /package/dist/{storage → common/universalExport}/index.mjs.map +0 -0
- /package/dist/{universalExport → common/universalExport/server}/index.js.map +0 -0
- /package/dist/{universalExport → common/universalExport/server}/index.mjs.map +0 -0
- /package/dist/{universalExport → common/universalFile}/server/index.js.map +0 -0
- /package/dist/{universalExport → common/universalFile}/server/index.mjs.map +0 -0
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/common/universalExport/types.ts
|
|
4
|
+
var ExportServiceError = class extends Error {
|
|
5
|
+
constructor(message, code, details) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.code = code;
|
|
8
|
+
this.details = details;
|
|
9
|
+
this.name = "ExportServiceError";
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
var ExportConfigError = class extends ExportServiceError {
|
|
13
|
+
constructor(message, details) {
|
|
14
|
+
super(message, "EXPORT_CONFIG_ERROR", details);
|
|
15
|
+
this.name = "ExportConfigError";
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
var ExportDataError = class extends ExportServiceError {
|
|
19
|
+
constructor(message, details) {
|
|
20
|
+
super(message, "EXPORT_DATA_ERROR", details);
|
|
21
|
+
this.name = "ExportDataError";
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
var ExportFileError = class extends ExportServiceError {
|
|
25
|
+
constructor(message, details) {
|
|
26
|
+
super(message, "EXPORT_FILE_ERROR", details);
|
|
27
|
+
this.name = "ExportFileError";
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
// src/common/universalExport/constants.ts
|
|
32
|
+
var UNIVERSAL_EXPORT_VERSION = "1.0.0";
|
|
33
|
+
var UNIVERSAL_EXPORT_NAME = "@lyricnote/universal-export";
|
|
34
|
+
var DEFAULT_EXPORT_FORMAT = "csv";
|
|
35
|
+
var DEFAULT_CSV_DELIMITER = ",";
|
|
36
|
+
var DEFAULT_ENCODING = "utf-8";
|
|
37
|
+
var DEFAULT_ADD_BOM = true;
|
|
38
|
+
var DEFAULT_MAX_FILE_SIZE = 100 * 1024 * 1024;
|
|
39
|
+
var DEFAULT_MAX_ROWS = 1e5;
|
|
40
|
+
var DEFAULT_MAX_CONCURRENT_EXPORTS = 5;
|
|
41
|
+
var DEFAULT_EXPORT_TIMEOUT = 3e5;
|
|
42
|
+
var DEFAULT_CONFIG_CACHE_TTL = 3600;
|
|
43
|
+
var DEFAULT_RESULT_CACHE_TTL = 1800;
|
|
44
|
+
var EXPORT_FORMAT_EXTENSIONS = {
|
|
45
|
+
csv: "csv",
|
|
46
|
+
excel: "xlsx",
|
|
47
|
+
json: "json"
|
|
48
|
+
};
|
|
49
|
+
var EXPORT_FORMAT_MIME_TYPES = {
|
|
50
|
+
csv: "text/csv; charset=utf-8",
|
|
51
|
+
excel: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
52
|
+
json: "application/json; charset=utf-8"
|
|
53
|
+
};
|
|
54
|
+
var API_BASE_PATH = "/api/universal-export";
|
|
55
|
+
var API_ENDPOINTS = {
|
|
56
|
+
/** 获取配置列表 */
|
|
57
|
+
GET_CONFIGS: API_BASE_PATH + "/configs",
|
|
58
|
+
/** 创建配置 */
|
|
59
|
+
CREATE_CONFIG: API_BASE_PATH + "/configs",
|
|
60
|
+
/** 更新配置 */
|
|
61
|
+
UPDATE_CONFIG: (configId) => API_BASE_PATH + "/configs/" + configId,
|
|
62
|
+
/** 删除配置 */
|
|
63
|
+
DELETE_CONFIG: (configId) => API_BASE_PATH + "/configs/" + configId,
|
|
64
|
+
/** 触发导出 */
|
|
65
|
+
EXPORT_DATA: API_BASE_PATH + "/export",
|
|
66
|
+
/** 查询导出进度 */
|
|
67
|
+
GET_PROGRESS: (exportId) => API_BASE_PATH + "/export/" + exportId + "/progress",
|
|
68
|
+
/** 下载导出文件 */
|
|
69
|
+
DOWNLOAD_FILE: (exportId) => API_BASE_PATH + "/export/" + exportId + "/download"
|
|
70
|
+
};
|
|
71
|
+
var ERROR_CODES = {
|
|
72
|
+
/** 导出配置错误 */
|
|
73
|
+
EXPORT_CONFIG_ERROR: "EXPORT_CONFIG_ERROR",
|
|
74
|
+
/** 导出数据错误 */
|
|
75
|
+
EXPORT_DATA_ERROR: "EXPORT_DATA_ERROR",
|
|
76
|
+
/** 导出文件错误 */
|
|
77
|
+
EXPORT_FILE_ERROR: "EXPORT_FILE_ERROR",
|
|
78
|
+
/** 网络错误 */
|
|
79
|
+
NETWORK_ERROR: "NETWORK_ERROR",
|
|
80
|
+
/** 超时错误 */
|
|
81
|
+
TIMEOUT_ERROR: "TIMEOUT_ERROR",
|
|
82
|
+
/** 未授权 */
|
|
83
|
+
UNAUTHORIZED: "UNAUTHORIZED",
|
|
84
|
+
/** 服务器错误 */
|
|
85
|
+
SERVER_ERROR: "SERVER_ERROR"
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
// src/common/universalExport/utils.ts
|
|
89
|
+
function generateExportFileName(template, format) {
|
|
90
|
+
const now = /* @__PURE__ */ new Date();
|
|
91
|
+
const dateStr = now.toISOString().split("T")[0] || "";
|
|
92
|
+
const timeStr = (now.toTimeString().split(" ")[0] || "").replace(/:/g, "-");
|
|
93
|
+
const extension = EXPORT_FORMAT_EXTENSIONS[format];
|
|
94
|
+
return template.replace("{date}", dateStr).replace("{time}", timeStr).replace("{timestamp}", now.getTime().toString()) + "." + extension;
|
|
95
|
+
}
|
|
96
|
+
function validateFileName(fileName) {
|
|
97
|
+
const invalidChars = /[<>:"|?*\/\\]/;
|
|
98
|
+
if (invalidChars.test(fileName)) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
if (fileName.length === 0 || fileName.length > 255) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
function sanitizeFileName(fileName) {
|
|
107
|
+
return fileName.replace(/[<>:"|?*\/\\]/g, "_").substring(0, 255);
|
|
108
|
+
}
|
|
109
|
+
function escapeCSVField(value, delimiter = ",") {
|
|
110
|
+
const valueStr = String(value || "");
|
|
111
|
+
if (valueStr.includes(delimiter) || valueStr.includes('"') || valueStr.includes("\n")) {
|
|
112
|
+
return '"' + valueStr.replace(/"/g, '""') + '"';
|
|
113
|
+
}
|
|
114
|
+
return valueStr;
|
|
115
|
+
}
|
|
116
|
+
function parseCSVField(field) {
|
|
117
|
+
if (field.startsWith('"') && field.endsWith('"')) {
|
|
118
|
+
return field.slice(1, -1).replace(/""/g, '"');
|
|
119
|
+
}
|
|
120
|
+
return field;
|
|
121
|
+
}
|
|
122
|
+
var DEFAULT_FORMATTERS = {
|
|
123
|
+
// 日期格式化
|
|
124
|
+
date: (value) => {
|
|
125
|
+
if (!value) return "";
|
|
126
|
+
const date = new Date(value);
|
|
127
|
+
if (isNaN(date.getTime())) return String(value);
|
|
128
|
+
return date.toISOString().split("T")[0] || "";
|
|
129
|
+
},
|
|
130
|
+
// 时间格式化
|
|
131
|
+
datetime: (value) => {
|
|
132
|
+
if (!value) return "";
|
|
133
|
+
const date = new Date(value);
|
|
134
|
+
if (isNaN(date.getTime())) return String(value);
|
|
135
|
+
return date.toLocaleString("zh-CN");
|
|
136
|
+
},
|
|
137
|
+
// 数字格式化
|
|
138
|
+
number: (value) => {
|
|
139
|
+
if (value === null || value === void 0) return "";
|
|
140
|
+
return String(value);
|
|
141
|
+
},
|
|
142
|
+
// 货币格式化
|
|
143
|
+
currency: (value) => {
|
|
144
|
+
if (value === null || value === void 0) return "";
|
|
145
|
+
return "\xA5" + Number(value).toFixed(2);
|
|
146
|
+
},
|
|
147
|
+
// 百分比格式化
|
|
148
|
+
percentage: (value) => {
|
|
149
|
+
if (value === null || value === void 0) return "";
|
|
150
|
+
return (Number(value) * 100).toFixed(2) + "%";
|
|
151
|
+
},
|
|
152
|
+
// 布尔值格式化
|
|
153
|
+
boolean: (value) => {
|
|
154
|
+
if (value === null || value === void 0) return "";
|
|
155
|
+
return value ? "\u662F" : "\u5426";
|
|
156
|
+
},
|
|
157
|
+
// 数组格式化
|
|
158
|
+
array: (value) => {
|
|
159
|
+
if (!Array.isArray(value)) return "";
|
|
160
|
+
return value.join(", ");
|
|
161
|
+
},
|
|
162
|
+
// 对象格式化
|
|
163
|
+
object: (value) => {
|
|
164
|
+
if (!value || typeof value !== "object") return "";
|
|
165
|
+
return JSON.stringify(value);
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
function applyFormatter(value, formatter, type) {
|
|
169
|
+
if (formatter) {
|
|
170
|
+
return formatter(value);
|
|
171
|
+
}
|
|
172
|
+
if (type && DEFAULT_FORMATTERS[type]) {
|
|
173
|
+
return DEFAULT_FORMATTERS[type](value);
|
|
174
|
+
}
|
|
175
|
+
return String(value || "");
|
|
176
|
+
}
|
|
177
|
+
function validateExportConfig(config) {
|
|
178
|
+
const errors = [];
|
|
179
|
+
if (!config.name || config.name.trim() === "") {
|
|
180
|
+
errors.push("\u914D\u7F6E\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");
|
|
181
|
+
}
|
|
182
|
+
if (!config.fields || !Array.isArray(config.fields) || config.fields.length === 0) {
|
|
183
|
+
errors.push("\u81F3\u5C11\u9700\u8981\u5B9A\u4E49\u4E00\u4E2A\u5B57\u6BB5");
|
|
184
|
+
}
|
|
185
|
+
if (config.fields) {
|
|
186
|
+
const enabledFields = config.fields.filter((f) => f.enabled);
|
|
187
|
+
if (enabledFields.length === 0) {
|
|
188
|
+
errors.push("\u81F3\u5C11\u9700\u8981\u542F\u7528\u4E00\u4E2A\u5B57\u6BB5");
|
|
189
|
+
}
|
|
190
|
+
const keys = config.fields.map((f) => f.key);
|
|
191
|
+
const uniqueKeys = new Set(keys);
|
|
192
|
+
if (keys.length !== uniqueKeys.size) {
|
|
193
|
+
errors.push("\u5B57\u6BB5\u952E\u540D\u5FC5\u987B\u552F\u4E00");
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
valid: errors.length === 0,
|
|
198
|
+
errors
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
function validateExportRequest(request) {
|
|
202
|
+
const errors = [];
|
|
203
|
+
if (!request.configId) {
|
|
204
|
+
errors.push("\u5BFC\u51FA\u914D\u7F6EID\u4E0D\u80FD\u4E3A\u7A7A");
|
|
205
|
+
}
|
|
206
|
+
if (!request.dataSource) {
|
|
207
|
+
errors.push("\u6570\u636E\u6E90\u4E0D\u80FD\u4E3A\u7A7A");
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
valid: errors.length === 0,
|
|
211
|
+
errors
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
function formatFileSize(bytes) {
|
|
215
|
+
if (bytes === 0) return "0 B";
|
|
216
|
+
const units = ["B", "KB", "MB", "GB", "TB"];
|
|
217
|
+
const k = 1024;
|
|
218
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
219
|
+
return (bytes / Math.pow(k, i)).toFixed(2) + " " + units[i];
|
|
220
|
+
}
|
|
221
|
+
function formatDuration(milliseconds) {
|
|
222
|
+
if (milliseconds < 1e3) {
|
|
223
|
+
return milliseconds + "ms";
|
|
224
|
+
}
|
|
225
|
+
const seconds = Math.floor(milliseconds / 1e3);
|
|
226
|
+
if (seconds < 60) {
|
|
227
|
+
return seconds + "\u79D2";
|
|
228
|
+
}
|
|
229
|
+
const minutes = Math.floor(seconds / 60);
|
|
230
|
+
const remainingSeconds = seconds % 60;
|
|
231
|
+
if (minutes < 60) {
|
|
232
|
+
return remainingSeconds > 0 ? minutes + "\u5206" + remainingSeconds + "\u79D2" : minutes + "\u5206\u949F";
|
|
233
|
+
}
|
|
234
|
+
const hours = Math.floor(minutes / 60);
|
|
235
|
+
const remainingMinutes = minutes % 60;
|
|
236
|
+
return remainingMinutes > 0 ? hours + "\u5C0F\u65F6" + remainingMinutes + "\u5206\u949F" : hours + "\u5C0F\u65F6";
|
|
237
|
+
}
|
|
238
|
+
function estimateEndTime(startTime, processedRows, totalRows) {
|
|
239
|
+
if (processedRows === 0 || totalRows === 0) {
|
|
240
|
+
return void 0;
|
|
241
|
+
}
|
|
242
|
+
const elapsed = Date.now() - startTime.getTime();
|
|
243
|
+
const avgTimePerRow = elapsed / processedRows;
|
|
244
|
+
const remainingRows = totalRows - processedRows;
|
|
245
|
+
const remainingTime = avgTimePerRow * remainingRows;
|
|
246
|
+
return new Date(Date.now() + remainingTime);
|
|
247
|
+
}
|
|
248
|
+
function getNestedValue(obj, path) {
|
|
249
|
+
return path.split(".").reduce((current, key) => {
|
|
250
|
+
return current && current[key] !== void 0 ? current[key] : null;
|
|
251
|
+
}, obj);
|
|
252
|
+
}
|
|
253
|
+
function setNestedValue(obj, path, value) {
|
|
254
|
+
const keys = path.split(".");
|
|
255
|
+
const lastKey = keys.pop();
|
|
256
|
+
if (!lastKey) return;
|
|
257
|
+
const target = keys.reduce((current, key) => {
|
|
258
|
+
if (!current[key] || typeof current[key] !== "object") {
|
|
259
|
+
current[key] = {};
|
|
260
|
+
}
|
|
261
|
+
return current[key];
|
|
262
|
+
}, obj);
|
|
263
|
+
target[lastKey] = value;
|
|
264
|
+
}
|
|
265
|
+
function createExportError(code, message, details) {
|
|
266
|
+
return {
|
|
267
|
+
code,
|
|
268
|
+
message,
|
|
269
|
+
details,
|
|
270
|
+
timestamp: /* @__PURE__ */ new Date()
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
function formatErrorMessage(error) {
|
|
274
|
+
if (error instanceof Error) {
|
|
275
|
+
return error.message;
|
|
276
|
+
}
|
|
277
|
+
if (typeof error === "string") {
|
|
278
|
+
return error;
|
|
279
|
+
}
|
|
280
|
+
return "\u672A\u77E5\u9519\u8BEF";
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
exports.API_BASE_PATH = API_BASE_PATH;
|
|
284
|
+
exports.API_ENDPOINTS = API_ENDPOINTS;
|
|
285
|
+
exports.DEFAULT_ADD_BOM = DEFAULT_ADD_BOM;
|
|
286
|
+
exports.DEFAULT_CONFIG_CACHE_TTL = DEFAULT_CONFIG_CACHE_TTL;
|
|
287
|
+
exports.DEFAULT_CSV_DELIMITER = DEFAULT_CSV_DELIMITER;
|
|
288
|
+
exports.DEFAULT_ENCODING = DEFAULT_ENCODING;
|
|
289
|
+
exports.DEFAULT_EXPORT_FORMAT = DEFAULT_EXPORT_FORMAT;
|
|
290
|
+
exports.DEFAULT_EXPORT_TIMEOUT = DEFAULT_EXPORT_TIMEOUT;
|
|
291
|
+
exports.DEFAULT_FORMATTERS = DEFAULT_FORMATTERS;
|
|
292
|
+
exports.DEFAULT_MAX_CONCURRENT_EXPORTS = DEFAULT_MAX_CONCURRENT_EXPORTS;
|
|
293
|
+
exports.DEFAULT_MAX_FILE_SIZE = DEFAULT_MAX_FILE_SIZE;
|
|
294
|
+
exports.DEFAULT_MAX_ROWS = DEFAULT_MAX_ROWS;
|
|
295
|
+
exports.DEFAULT_RESULT_CACHE_TTL = DEFAULT_RESULT_CACHE_TTL;
|
|
296
|
+
exports.ERROR_CODES = ERROR_CODES;
|
|
297
|
+
exports.EXPORT_FORMAT_EXTENSIONS = EXPORT_FORMAT_EXTENSIONS;
|
|
298
|
+
exports.EXPORT_FORMAT_MIME_TYPES = EXPORT_FORMAT_MIME_TYPES;
|
|
299
|
+
exports.ExportConfigError = ExportConfigError;
|
|
300
|
+
exports.ExportDataError = ExportDataError;
|
|
301
|
+
exports.ExportFileError = ExportFileError;
|
|
302
|
+
exports.ExportServiceError = ExportServiceError;
|
|
303
|
+
exports.UNIVERSAL_EXPORT_NAME = UNIVERSAL_EXPORT_NAME;
|
|
304
|
+
exports.UNIVERSAL_EXPORT_VERSION = UNIVERSAL_EXPORT_VERSION;
|
|
305
|
+
exports.applyFormatter = applyFormatter;
|
|
306
|
+
exports.createExportError = createExportError;
|
|
307
|
+
exports.escapeCSVField = escapeCSVField;
|
|
308
|
+
exports.estimateEndTime = estimateEndTime;
|
|
309
|
+
exports.formatDuration = formatDuration;
|
|
310
|
+
exports.formatErrorMessage = formatErrorMessage;
|
|
311
|
+
exports.formatFileSize = formatFileSize;
|
|
312
|
+
exports.generateExportFileName = generateExportFileName;
|
|
313
|
+
exports.getNestedValue = getNestedValue;
|
|
314
|
+
exports.parseCSVField = parseCSVField;
|
|
315
|
+
exports.sanitizeFileName = sanitizeFileName;
|
|
316
|
+
exports.setNestedValue = setNestedValue;
|
|
317
|
+
exports.validateExportConfig = validateExportConfig;
|
|
318
|
+
exports.validateExportRequest = validateExportRequest;
|
|
319
|
+
exports.validateFileName = validateFileName;
|
|
320
|
+
//# sourceMappingURL=chunk-H56ICWUO.js.map
|
|
321
|
+
//# sourceMappingURL=chunk-H56ICWUO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/universalExport/types.ts","../src/common/universalExport/constants.ts","../src/common/universalExport/utils.ts"],"names":[],"mappings":"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","file":"chunk-H56ICWUO.js","sourcesContent":["/**\n * 通用导出服务类型定义\n *\n * 定义了导出功能的核心接口和类型\n */\n\n// ============= 基础类型定义 =============\n\n/** 导出格式类型 */\nexport type ExportFormat = 'csv' | 'excel' | 'json';\n\n/** 字段类型 */\nexport type FieldType = 'string' | 'number' | 'date' | 'boolean' | 'array' | 'object';\n\n/** 字段对齐方式 */\nexport type FieldAlignment = 'left' | 'center' | 'right';\n\n/** 导出状态 */\nexport type ExportStatus = 'pending' | 'processing' | 'completed' | 'failed' | 'cancelled';\n\n/** 分组模式 */\nexport type GroupingMode = 'merge' | 'separate' | 'nested';\n\n/** 分组处理类型 */\nexport type GroupValueProcessing = 'first' | 'last' | 'concat' | 'sum' | 'count' | 'custom';\n\n// ============= 字段定义接口 =============\n\n/** 导出字段定义 */\nexport interface ExportField {\n /** 字段键名 */\n key: string;\n /** 字段显示名称 */\n label: string;\n /** 字段类型 */\n type: FieldType;\n /** 是否启用 */\n enabled: boolean;\n /** 字段宽度 */\n width?: number;\n /** 对齐方式 */\n alignment?: FieldAlignment;\n /** 格式化函数 */\n formatter?: (value: any) => string;\n /** 排序权重 */\n sortOrder?: number;\n /** 是否必填 */\n required?: boolean;\n /** 字段描述 */\n description?: string;\n /** 自定义样式 */\n style?: Record<string, any>;\n}\n\n/** 分组字段配置 */\nexport interface GroupingField {\n /** 分组字段键名 */\n key: string;\n /** 分组字段显示名称 */\n label: string;\n /** 分组模式 */\n mode: GroupingMode;\n /** 其他字段的值处理方式 */\n valueProcessing: GroupValueProcessing;\n /** 自定义处理函数 */\n customProcessor?: (values: any[]) => any;\n /** 是否显示分组行 */\n showGroupHeader: boolean;\n /** 分组行模板 */\n groupHeaderTemplate?: string;\n /** 是否合并单元格(仅Excel格式支持) */\n mergeCells: boolean;\n}\n\n/** 分组配置 */\nexport interface GroupingConfig {\n /** 是否启用分组 */\n enabled: boolean;\n /** 分组字段列表(支持多级分组) */\n fields: GroupingField[];\n /** 分组后是否保持原始顺序 */\n preserveOrder: boolean;\n /** 空值处理方式 */\n nullValueHandling: 'skip' | 'group' | 'separate';\n /** 空值分组名称 */\n nullGroupName?: string;\n}\n\n/** 导出配置 */\nexport interface ExportConfig {\n /** 配置ID */\n id: string;\n /** 配置名称 */\n name: string;\n /** 配置描述 */\n description?: string;\n /** 导出格式 */\n format: ExportFormat;\n /** 字段定义 */\n fields: ExportField[];\n /** 分组配置 */\n grouping?: GroupingConfig;\n /** 文件名模板 */\n fileNameTemplate: string;\n /** 是否包含表头 */\n includeHeader: boolean;\n /** 分隔符 */\n delimiter: string;\n /** 编码格式 */\n encoding: string;\n /** 是否添加BOM */\n addBOM: boolean;\n /** 最大行数限制 */\n maxRows?: number;\n /** 创建时间 */\n createdAt: Date;\n /** 更新时间 */\n updatedAt: Date;\n /** 模块标识 */\n moduleId: string;\n /** 业务标识 */\n businessId?: string;\n /** 创建者ID */\n createdBy?: string;\n}\n\n/** 导出请求 */\nexport interface ExportRequest {\n /** 导出配置ID或配置对象 */\n configId: string | ExportConfig;\n /** 数据源 */\n dataSource: string | (() => Promise<any[]>) | any[];\n /** 查询参数 */\n queryParams?: Record<string, any>;\n /** 自定义字段映射 */\n fieldMapping?: Record<string, string>;\n /** 过滤条件 */\n filters?: ExportFilter[];\n /** 排序条件 */\n sortBy?: ExportSort[];\n /** 分页参数 */\n pagination?: {\n page: number;\n pageSize: number;\n };\n /** 自定义文件名 */\n customFileName?: string;\n /** 回调函数 */\n callbacks?: {\n onProgress?: (progress: ExportProgress) => void;\n onSuccess?: (result: ExportResult) => void;\n onError?: (error: ExportError) => void;\n };\n}\n\n/** 导出过滤器 */\nexport interface ExportFilter {\n /** 字段名 */\n field: string;\n /** 操作符 */\n operator:\n | 'eq'\n | 'ne'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'contains'\n | 'startsWith'\n | 'endsWith'\n | 'in'\n | 'notIn';\n /** 值 */\n value: any;\n}\n\n/** 导出排序 */\nexport interface ExportSort {\n /** 字段名 */\n field: string;\n /** 排序方向 */\n direction: 'asc' | 'desc';\n}\n\n/** 导出进度 */\nexport interface ExportProgress {\n /** 导出ID */\n exportId: string;\n /** 状态 */\n status: ExportStatus;\n /** 进度百分比 */\n progress: number;\n /** 已处理行数 */\n processedRows: number;\n /** 总行数 */\n totalRows: number;\n /** 开始时间 */\n startTime: Date;\n /** 预计完成时间 */\n estimatedEndTime?: Date;\n /** 当前处理的数据 */\n currentData?: any;\n /** 错误信息 */\n error?: string;\n}\n\n/** 导出结果 */\nexport interface ExportResult {\n /** 导出ID */\n exportId: string;\n /** 文件名 */\n fileName: string;\n /** 文件大小 */\n fileSize: number;\n /** 文件URL */\n fileUrl?: string;\n /** 文件Blob */\n fileBlob?: Blob;\n /** 导出行数 */\n exportedRows: number;\n /** 开始时间 */\n startTime: Date;\n /** 完成时间 */\n endTime: Date;\n /** 耗时(毫秒) */\n duration: number;\n /** 统计信息 */\n statistics?: {\n totalRows: number;\n filteredRows: number;\n exportedRows: number;\n skippedRows: number;\n };\n}\n\n/** 导出错误 */\nexport interface ExportError {\n /** 错误代码 */\n code: string;\n /** 错误消息 */\n message: string;\n /** 错误详情 */\n details?: Record<string, any>;\n /** 错误时间 */\n timestamp: Date;\n}\n\n// ============= 服务配置接口 =============\n\n/** 通用导出服务配置 */\nexport interface UniversalExportServiceConfig {\n /** 默认导出格式 */\n defaultFormat: ExportFormat;\n /** 默认分隔符 */\n defaultDelimiter: string;\n /** 默认编码 */\n defaultEncoding: string;\n /** 是否默认添加BOM */\n defaultAddBOM: boolean;\n /** 最大文件大小限制(字节) */\n maxFileSize: number;\n /** 最大行数限制 */\n maxRowsLimit: number;\n /** 并发导出数量限制 */\n maxConcurrentExports: number;\n /** 导出超时时间(毫秒) */\n exportTimeout: number;\n /** 缓存配置 */\n cache: {\n /** 配置缓存TTL(秒) */\n configTTL: number;\n /** 结果缓存TTL(秒) */\n resultTTL: number;\n };\n}\n\n// ============= 异常类定义 =============\n\n/** 导出服务基础异常 */\nexport class ExportServiceError 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 = 'ExportServiceError';\n }\n}\n\n/** 导出配置错误 */\nexport class ExportConfigError extends ExportServiceError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'EXPORT_CONFIG_ERROR', details);\n this.name = 'ExportConfigError';\n }\n}\n\n/** 导出数据处理错误 */\nexport class ExportDataError extends ExportServiceError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'EXPORT_DATA_ERROR', details);\n this.name = 'ExportDataError';\n }\n}\n\n/** 导出文件生成错误 */\nexport class ExportFileError extends ExportServiceError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'EXPORT_FILE_ERROR', details);\n this.name = 'ExportFileError';\n }\n}\n\n// ============= 事件类型定义 =============\n\n/** 导出事件类型 */\nexport type ExportEventType =\n | 'export:start'\n | 'export:progress'\n | 'export:complete'\n | 'export:error'\n | 'export:cancel'\n | 'config:save'\n | 'config:delete';\n\n/** 导出事件 */\nexport interface ExportEvent {\n /** 事件类型 */\n type: ExportEventType;\n /** 导出ID */\n exportId: string;\n /** 事件时间 */\n timestamp: Date;\n /** 事件数据 */\n data?: Record<string, any>;\n /** 错误信息 */\n error?: string;\n}\n\n/** 导出事件监听器 */\nexport type ExportEventListener = (event: ExportEvent) => void | Promise<void>;\n\n// ============= 工具类型 =============\n\n/** 字段映射函数 */\nexport type FieldMapper<T = any> = (item: T, index: number) => Record<string, any>;\n\n/** 数据转换函数 */\nexport type DataTransformer<T = any, R = any> = (data: T[]) => R[];\n\n/** 验证函数 */\nexport type Validator<T = any> = (data: T) => boolean | string;\n\n/** 格式化函数 */\nexport type Formatter<T = any> = (value: T) => string;\n","/**\n * 通用导出服务常量定义\n */\n\nimport type { ExportFormat } from './types';\n\n// ============= 版本信息 =============\n\n/** 模块版本 */\nexport const UNIVERSAL_EXPORT_VERSION = '1.0.0';\n\n/** 模块名称 */\nexport const UNIVERSAL_EXPORT_NAME = '@lyricnote/universal-export';\n\n// ============= 默认配置 =============\n\n/** 默认导出格式 */\nexport const DEFAULT_EXPORT_FORMAT: ExportFormat = 'csv';\n\n/** 默认CSV分隔符 */\nexport const DEFAULT_CSV_DELIMITER = ',';\n\n/** 默认编码格式 */\nexport const DEFAULT_ENCODING = 'utf-8';\n\n/** 默认是否添加BOM */\nexport const DEFAULT_ADD_BOM = true;\n\n/** 默认最大文件大小(字节) - 100MB */\nexport const DEFAULT_MAX_FILE_SIZE = 100 * 1024 * 1024;\n\n/** 默认最大行数限制 */\nexport const DEFAULT_MAX_ROWS = 100000;\n\n/** 默认并发导出数量 */\nexport const DEFAULT_MAX_CONCURRENT_EXPORTS = 5;\n\n/** 默认导出超时时间(毫秒) - 5分钟 */\nexport const DEFAULT_EXPORT_TIMEOUT = 300000;\n\n/** 默认配置缓存TTL(秒) - 1小时 */\nexport const DEFAULT_CONFIG_CACHE_TTL = 3600;\n\n/** 默认结果缓存TTL(秒) - 30分钟 */\nexport const DEFAULT_RESULT_CACHE_TTL = 1800;\n\n// ============= 文件扩展名 =============\n\n/** 导出格式对应的文件扩展名 */\nexport const EXPORT_FORMAT_EXTENSIONS: Record<ExportFormat, string> = {\n csv: 'csv',\n excel: 'xlsx',\n json: 'json',\n};\n\n/** 导出格式对应的MIME类型 */\nexport const EXPORT_FORMAT_MIME_TYPES: Record<ExportFormat, string> = {\n csv: 'text/csv; charset=utf-8',\n excel: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n json: 'application/json; charset=utf-8',\n};\n\n// ============= API端点 =============\n\n/** API基础路径 */\nexport const API_BASE_PATH = '/api/universal-export';\n\n/** API端点 */\nexport const API_ENDPOINTS = {\n /** 获取配置列表 */\n GET_CONFIGS: (API_BASE_PATH) + '/configs',\n /** 创建配置 */\n CREATE_CONFIG: (API_BASE_PATH) + '/configs',\n /** 更新配置 */\n UPDATE_CONFIG: (configId: string) => (API_BASE_PATH) + '/configs/' + (configId),\n /** 删除配置 */\n DELETE_CONFIG: (configId: string) => (API_BASE_PATH) + '/configs/' + (configId),\n /** 触发导出 */\n EXPORT_DATA: (API_BASE_PATH) + '/export',\n /** 查询导出进度 */\n GET_PROGRESS: (exportId: string) => (API_BASE_PATH) + '/export/' + (exportId) + '/progress',\n /** 下载导出文件 */\n DOWNLOAD_FILE: (exportId: string) => (API_BASE_PATH) + '/export/' + (exportId) + '/download',\n} as const;\n\n// ============= 错误代码 =============\n\n/** 错误代码 */\nexport const ERROR_CODES = {\n /** 导出配置错误 */\n EXPORT_CONFIG_ERROR: 'EXPORT_CONFIG_ERROR',\n /** 导出数据错误 */\n EXPORT_DATA_ERROR: 'EXPORT_DATA_ERROR',\n /** 导出文件错误 */\n EXPORT_FILE_ERROR: 'EXPORT_FILE_ERROR',\n /** 网络错误 */\n NETWORK_ERROR: 'NETWORK_ERROR',\n /** 超时错误 */\n TIMEOUT_ERROR: 'TIMEOUT_ERROR',\n /** 未授权 */\n UNAUTHORIZED: 'UNAUTHORIZED',\n /** 服务器错误 */\n SERVER_ERROR: 'SERVER_ERROR',\n} as const;\n","/**\n * 通用导出服务工具函数\n */\n\nimport type { ExportFormat, Formatter } from './types';\nimport { EXPORT_FORMAT_EXTENSIONS } from './constants';\n\n// ============= 文件名处理 =============\n\n/**\n * 生成导出文件名\n */\nexport function generateExportFileName(template: string, format: ExportFormat): string {\n const now = new Date();\n const dateStr = now.toISOString().split('T')[0] || '';\n const timeStr = (now.toTimeString().split(' ')[0] || '').replace(/:/g, '-');\n const extension = EXPORT_FORMAT_EXTENSIONS[format];\n\n return (\n template\n .replace('{date}', dateStr)\n .replace('{time}', timeStr)\n .replace('{timestamp}', now.getTime().toString()) + '.' + (extension)\n );\n}\n\n/**\n * 验证文件名是否合法\n */\nexport function validateFileName(fileName: string): boolean {\n // 检查是否包含非法字符\n const invalidChars = /[<>:\"|?*\\/\\\\]/;\n if (invalidChars.test(fileName)) {\n return false;\n }\n\n // 检查长度\n if (fileName.length === 0 || fileName.length > 255) {\n return false;\n }\n\n return true;\n}\n\n/**\n * 清理文件名,移除非法字符\n */\nexport function sanitizeFileName(fileName: string): string {\n return fileName.replace(/[<>:\"|?*\\/\\\\]/g, '_').substring(0, 255);\n}\n\n// ============= CSV处理 =============\n\n/**\n * 转义CSV字段\n */\nexport function escapeCSVField(value: string, delimiter: string = ','): string {\n const valueStr = String(value || '');\n\n // 如果包含分隔符、双引号或换行符,需要用双引号包裹并转义内部的双引号\n if (valueStr.includes(delimiter) || valueStr.includes('\"') || valueStr.includes('\\n')) {\n return '\"' + (valueStr.replace(/\"/g, '\"\"')) + '\"';\n }\n\n return valueStr;\n}\n\n/**\n * 解析CSV字段\n */\nexport function parseCSVField(field: string): string {\n // 如果字段被双引号包裹,移除双引号并还原转义的双引号\n if (field.startsWith('\"') && field.endsWith('\"')) {\n return field.slice(1, -1).replace(/\"\"/g, '\"');\n }\n\n return field;\n}\n\n// ============= 数据格式化 =============\n\n/**\n * 内置格式化器集合\n */\nexport const DEFAULT_FORMATTERS: Record<string, Formatter> = {\n // 日期格式化\n date: (value: any) => {\n if (!value) return '';\n const date = new Date(value);\n if (isNaN(date.getTime())) return String(value);\n return date.toISOString().split('T')[0] || '';\n },\n\n // 时间格式化\n datetime: (value: any) => {\n if (!value) return '';\n const date = new Date(value);\n if (isNaN(date.getTime())) return String(value);\n return date.toLocaleString('zh-CN');\n },\n\n // 数字格式化\n number: (value: any) => {\n if (value === null || value === undefined) return '';\n return String(value);\n },\n\n // 货币格式化\n currency: (value: any) => {\n if (value === null || value === undefined) return '';\n return '¥' + (Number(value).toFixed(2));\n },\n\n // 百分比格式化\n percentage: (value: any) => {\n if (value === null || value === undefined) return '';\n return ((Number(value) * 100).toFixed(2)) + '%';\n },\n\n // 布尔值格式化\n boolean: (value: any) => {\n if (value === null || value === undefined) return '';\n return value ? '是' : '否';\n },\n\n // 数组格式化\n array: (value: any) => {\n if (!Array.isArray(value)) return '';\n return value.join(', ');\n },\n\n // 对象格式化\n object: (value: any) => {\n if (!value || typeof value !== 'object') return '';\n return JSON.stringify(value);\n },\n};\n\n/**\n * 应用格式化器\n */\nexport function applyFormatter(value: any, formatter?: Formatter, type?: string): string {\n // 优先使用自定义格式化器\n if (formatter) {\n return formatter(value);\n }\n\n // 使用类型对应的默认格式化器\n if (type && DEFAULT_FORMATTERS[type]) {\n return DEFAULT_FORMATTERS[type](value);\n }\n\n // 默认转字符串\n return String(value || '');\n}\n\n// ============= 数据验证 =============\n\n/**\n * 验证导出配置\n */\nexport function validateExportConfig(config: any): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n // 检查必填字段\n if (!config.name || config.name.trim() === '') {\n errors.push('配置名称不能为空');\n }\n\n if (!config.fields || !Array.isArray(config.fields) || config.fields.length === 0) {\n errors.push('至少需要定义一个字段');\n }\n\n if (config.fields) {\n const enabledFields = config.fields.filter((f: any) => f.enabled);\n if (enabledFields.length === 0) {\n errors.push('至少需要启用一个字段');\n }\n\n // 检查字段键名唯一性\n const keys = config.fields.map((f: any) => f.key);\n const uniqueKeys = new Set(keys);\n if (keys.length !== uniqueKeys.size) {\n errors.push('字段键名必须唯一');\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n/**\n * 验证导出请求\n */\nexport function validateExportRequest(request: any): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n if (!request.configId) {\n errors.push('导出配置ID不能为空');\n }\n\n if (!request.dataSource) {\n errors.push('数据源不能为空');\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n// ============= 文件大小格式化 =============\n\n/**\n * 格式化文件大小\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 B';\n\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n const k = 1024;\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return ((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + (units[i]);\n}\n\n// ============= 时间处理 =============\n\n/**\n * 格式化持续时间\n */\nexport function formatDuration(milliseconds: number): string {\n if (milliseconds < 1000) {\n return (milliseconds) + 'ms';\n }\n\n const seconds = Math.floor(milliseconds / 1000);\n\n if (seconds < 60) {\n return (seconds) + '秒';\n }\n\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n\n if (minutes < 60) {\n return remainingSeconds > 0 ? (minutes) + '分' + (remainingSeconds) + '秒' : (minutes) + '分钟';\n }\n\n const hours = Math.floor(minutes / 60);\n const remainingMinutes = minutes % 60;\n\n return remainingMinutes > 0 ? (hours) + '小时' + (remainingMinutes) + '分钟' : (hours) + '小时';\n}\n\n/**\n * 计算预计完成时间\n */\nexport function estimateEndTime(\n startTime: Date,\n processedRows: number,\n totalRows: number\n): Date | undefined {\n if (processedRows === 0 || totalRows === 0) {\n return undefined;\n }\n\n const elapsed = Date.now() - startTime.getTime();\n const avgTimePerRow = elapsed / processedRows;\n const remainingRows = totalRows - processedRows;\n const remainingTime = avgTimePerRow * remainingRows;\n\n return new Date(Date.now() + remainingTime);\n}\n\n// ============= 数据处理 =============\n\n/**\n * 获取嵌套对象的值\n */\nexport function getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n return current && current[key] !== undefined ? current[key] : null;\n }, obj);\n}\n\n/**\n * 设置嵌套对象的值\n */\nexport function setNestedValue(obj: any, path: string, value: any): void {\n const keys = path.split('.');\n const lastKey = keys.pop();\n\n if (!lastKey) return;\n\n const target = keys.reduce((current, key) => {\n if (!current[key] || typeof current[key] !== 'object') {\n current[key] = {};\n }\n return current[key];\n }, obj);\n\n target[lastKey] = value;\n}\n\n// ============= 错误处理 =============\n\n/**\n * 创建导出错误对象\n */\nexport function createExportError(\n code: string,\n message: string,\n details?: Record<string, any>\n): { code: string; message: string; details?: Record<string, any>; timestamp: Date } {\n return {\n code,\n message,\n details,\n timestamp: new Date(),\n };\n}\n\n/**\n * 格式化错误消息\n */\nexport function formatErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n\n if (typeof error === 'string') {\n return error;\n }\n\n return '未知错误';\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { StorageProviderError } from './chunk-
|
|
2
|
-
import { createLogger } from './chunk-
|
|
1
|
+
import { StorageProviderError } from './chunk-BTW3SWQN.mjs';
|
|
2
|
+
import { createLogger } from './chunk-VYK4M2D6.mjs';
|
|
3
3
|
import OSS from 'ali-oss';
|
|
4
4
|
|
|
5
5
|
var logger = createLogger("AliyunOSSProvider");
|
|
@@ -542,5 +542,5 @@ var AliyunOSSProvider = class {
|
|
|
542
542
|
};
|
|
543
543
|
|
|
544
544
|
export { AliyunOSSProvider };
|
|
545
|
-
//# sourceMappingURL=chunk-
|
|
546
|
-
//# sourceMappingURL=chunk-
|
|
545
|
+
//# sourceMappingURL=chunk-HG34SGMN.mjs.map
|
|
546
|
+
//# sourceMappingURL=chunk-HG34SGMN.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/universalFile/server/providers/AliyunOSSProvider.ts"],"names":[],"mappings":"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","file":"chunk-HG34SGMN.mjs","sourcesContent":["/**\n * 阿里云OSS存储提供者实现\n */\n\nimport OSS from 'ali-oss';\nimport { createLogger } from '../../../logger';\n\nimport type {\n IStorageProvider,\n StorageConfig,\n AliyunOSSConfig,\n StorageResult,\n UploadFileInfo,\n StorageType,\n} from '../types';\n\nimport { StorageProviderError } from '../types';\n\nconst logger = createLogger('AliyunOSSProvider');\n\n/**\n * 阿里云OSS存储提供者\n */\nexport class AliyunOSSProvider implements IStorageProvider {\n readonly type: StorageType = 'aliyun-oss';\n\n private config: AliyunOSSConfig | null = null;\n private client: OSS | null = null;\n private isInitialized = false;\n\n /**\n * 初始化存储提供者\n */\n async initialize(config: StorageConfig): Promise<void> {\n return this.reinitialize(config);\n }\n\n /**\n * 重新初始化存储提供者(支持配置热更新)\n */\n async reinitialize(config: StorageConfig): Promise<void> {\n logger.info('🔄 [AliyunOSSProvider] 重新初始化OSS客户端', config);\n if (config.type !== 'aliyun-oss') {\n throw new StorageProviderError('配置类型不匹配:期望 aliyun-oss');\n }\n\n const newConfig = config as AliyunOSSConfig;\n\n // 检查配置是否发生变化\n const configChanged =\n !this.config ||\n this.config.region !== newConfig.region ||\n this.config.bucket !== newConfig.bucket ||\n this.config.accessKeyId !== newConfig.accessKeyId ||\n this.config.accessKeySecret !== newConfig.accessKeySecret ||\n this.config.customDomain !== newConfig.customDomain ||\n this.config.secure !== newConfig.secure ||\n this.config.internal !== newConfig.internal;\n\n if (configChanged) {\n logger.info('🔄 [AliyunOSSProvider] 检测到配置变化,重新初始化OSS客户端');\n logger.info(\n '☁️ [AliyunOSSProvider] 新配置: bucket=' + (newConfig.bucket) + ', region=' + (newConfig.region)\n );\n } else if (this.isInitialized) {\n logger.info('ℹ️ [AliyunOSSProvider] 配置未变化,跳过重新初始化');\n return;\n }\n\n this.config = newConfig;\n\n logger.info('☁️ [AliyunOSSProvider] ' + (this.isInitialized ? '重新' : '') + '初始化阿里云OSS');\n logger.info('☁️ [AliyunOSSProvider] ' + (this.config ? JSON.stringify(this.config) : ''));\n\n try {\n // 验证必需的配置项\n this.validateConfig();\n\n // 确保配置值是有效的字符串\n if (!this.config.region || typeof this.config.region !== 'string') {\n throw new Error('OSS region 必须是有效的字符串');\n }\n if (!this.config.bucket || typeof this.config.bucket !== 'string') {\n throw new Error('OSS bucket 必须是有效的字符串');\n }\n if (!this.config.accessKeyId || typeof this.config.accessKeyId !== 'string') {\n throw new Error('OSS accessKeyId 必须是有效的字符串');\n }\n if (!this.config.accessKeySecret || typeof this.config.accessKeySecret !== 'string') {\n throw new Error('OSS accessKeySecret 必须是有效的字符串');\n }\n\n logger.info(`☁️ [AliyunOSSProvider] 创建OSS客户端配置:`, {\n region: this.config.region,\n bucket: this.config.bucket,\n hasAccessKeyId: !!this.config.accessKeyId,\n hasAccessKeySecret: !!this.config.accessKeySecret,\n secure: this.config.secure !== false,\n internal: this.config.internal || false,\n cname: !!this.config.customDomain,\n endpoint: this.config.customDomain || '默认端点',\n });\n\n // 创建OSS客户端\n this.client = new OSS({\n region: this.config.region,\n bucket: this.config.bucket,\n accessKeyId: this.config.accessKeyId,\n accessKeySecret: this.config.accessKeySecret,\n secure: this.config.secure !== false, // 默认使用HTTPS\n internal: this.config.internal || false, // 默认使用公网\n timeout: 300000, // 5分钟超时\n cname: !!this.config.customDomain, // 是否使用自定义域名\n endpoint: this.config.customDomain || undefined,\n });\n\n if (!this.client) {\n throw new Error('OSS客户端创建失败');\n }\n logger.info(`☁️ [AliyunOSSProvider] OSS客户端创建成功`);\n this.isInitialized = true;\n logger.info('✅ [AliyunOSSProvider] 阿里云OSS' + (configChanged ? '重新' : '') + '初始化完成');\n } catch (error) {\n logger.error('❌ [AliyunOSSProvider] 阿里云OSS初始化失败:', error);\n throw new StorageProviderError(`阿里云OSS初始化失败`);\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('📤 [AliyunOSSProvider] 开始上传文件到OSS: ' + (filePath));\n\n try {\n // 将File对象转换为Buffer\n const buffer = Buffer.from(await fileInfo.file.arrayBuffer());\n\n // 构建上传选项\n const options: any = {\n headers: {\n 'Content-Type': fileInfo.file.type || 'application/octet-stream',\n 'Content-Length': fileInfo.file.size.toString(),\n },\n meta: {\n uid: 0, // 必需字段\n pid: 0, // 必需字段\n originalName: encodeURIComponent(fileInfo.file.name),\n moduleId: fileInfo.moduleId,\n businessId: fileInfo.businessId || '',\n uploadTime: new Date().toISOString(),\n // 对元数据进行编码处理,避免中文字符问题\n ...this.encodeMetadata(fileInfo.metadata || {}),\n },\n };\n\n // 根据文件大小选择上传方式\n let result: any;\n\n if (fileInfo.file.size > 100 * 1024 * 1024) {\n // 大于100MB使用分片上传\n logger.info(\n '📦 [AliyunOSSProvider] 使用分片上传大文件: ' + (filePath) + ', 大小: ' + (fileInfo.file.size)\n );\n result = await this.multipartUpload(filePath, buffer, options);\n } else {\n logger.info(\n '📤 [AliyunOSSProvider] 使用普通上传: ' + (filePath) + ', 大小: ' + (fileInfo.file.size)\n );\n result = await this.client?.put(filePath, buffer, options);\n }\n\n // 生成访问URL\n const accessUrl = this.generateAccessUrl(filePath);\n\n const uploadTime = Date.now() - startTime;\n logger.info('✅ [AliyunOSSProvider] 文件上传完成: ' + (filePath) + ', 耗时: ' + (uploadTime) + 'ms');\n\n return {\n success: true,\n path: filePath,\n url: accessUrl,\n size: fileInfo.file.size,\n data: {\n etag: result.data ? JSON.stringify(result.data) : '',\n requestId: result.res?.rt || 0,\n uploadTime,\n ossUrl: result.url || result.name,\n },\n };\n } catch (error) {\n logger.error('❌ [AliyunOSSProvider] 文件上传失败: ' + (filePath) + ':', error);\n\n return {\n success: false,\n error: this.formatOSSError(error),\n };\n }\n }\n\n /**\n * 下载文件\n */\n async download(filePath: string): Promise<Buffer> {\n this.ensureInitialized();\n\n logger.info('📥 [AliyunOSSProvider] 开始从OSS下载文件: ' + (filePath));\n\n try {\n const result = await this.client?.get(filePath) as any;\n\n if (!result.content || !Buffer.isBuffer(result.content)) {\n throw new StorageProviderError('下载的文件内容格式错误');\n }\n\n logger.info(\n '✅ [AliyunOSSProvider] 文件下载完成: ' + (filePath) + ', 大小: ' + (result.content.length)\n );\n\n return result.content;\n } catch (error) {\n logger.error('❌ [AliyunOSSProvider] 文件下载失败: ' + (filePath) + ':', error);\n\n if (this.isOSSError(error) && error.code === 'NoSuchKey') {\n throw new StorageProviderError(`文件不存在`);\n }\n\n throw new StorageProviderError(`文件下载失败`);\n }\n }\n\n /**\n * 删除文件\n */\n async delete(filePath: string): Promise<StorageResult> {\n this.ensureInitialized();\n\n logger.info('🗑️ [AliyunOSSProvider] 开始从OSS删除文件: ' + (filePath));\n\n try {\n const result = await this.client?.delete(filePath) as any;\n\n logger.info('✅ [AliyunOSSProvider] 文件删除完成: ' + (filePath));\n\n return {\n success: true,\n data: {\n requestId: result?.res?.rt || 0,\n deletedPath: filePath,\n },\n };\n } catch (error) {\n logger.error('❌ [AliyunOSSProvider] 文件删除失败: ' + (filePath) + ':', error);\n\n // OSS中删除不存在的文件不会报错,但我们统一处理\n if (this.isOSSError(error) && error.code === 'NoSuchKey') {\n logger.warn('⚠️ [AliyunOSSProvider] 文件不存在: ' + (filePath));\n return {\n success: true,\n data: { reason: 'file_not_exists' },\n };\n }\n\n return {\n success: false,\n error: this.formatOSSError(error),\n };\n }\n }\n\n /**\n * 获取文件信息\n */\n async getFileInfo(filePath: string): Promise<StorageResult> {\n this.ensureInitialized();\n\n try {\n const result = await this.client?.head(filePath) as any;\n\n return {\n success: true,\n size: parseInt(String(result.meta['content-length'] || '0')),\n data: {\n etag: result.meta.etag || '',\n lastModified: result.meta['last-modified'] || '',\n contentType: result.meta['content-type'],\n meta: result.meta,\n size: parseInt(String(result.meta['content-length'] || '0')),\n },\n };\n } catch (error) {\n if (this.isOSSError(error) && error.code === 'NoSuchKey') {\n return {\n success: false,\n error: '文件不存在',\n };\n }\n\n return {\n success: false,\n error: this.formatOSSError(error),\n };\n }\n }\n\n /**\n * 生成访问URL\n */\n async getAccessUrl(filePath: string, expiresIn?: number): Promise<string> {\n this.ensureInitialized();\n\n try {\n // 对于图片文件,直接返回公开URL,避免CORS问题\n // 对于其他文件,使用签名URL\n const isImage = /\\.(jpg|jpeg|png|gif|webp|svg|bmp|ico)$/i.test(filePath);\n\n if (isImage) {\n // 图片文件使用公开URL\n return this.generateAccessUrl(filePath);\n } else {\n // 其他文件使用签名URL\n const expires = expiresIn || 3600; // 默认1小时\n const signedUrl = this.client?.signatureUrl(filePath, {\n expires,\n method: 'GET',\n });\n\n return signedUrl || '' ;\n }\n } catch (error) {\n logger.error('❌ [AliyunOSSProvider] 生成访问URL失败: ' + (filePath) + ':', error);\n throw new StorageProviderError(`生成访问URL失败`);\n }\n }\n\n /**\n * 生成预签名上传URL\n */\n async getUploadUrl(filePath: string, expiresIn?: number): Promise<string> {\n this.ensureInitialized();\n\n try {\n const expires = expiresIn || 3600; // 默认1小时\n const signedUrl = this.client?.signatureUrl(filePath, {\n expires,\n method: 'PUT',\n });\n\n return signedUrl || '' ;\n } catch (error) {\n logger.error('❌ [AliyunOSSProvider] 生成上传URL失败: ' + (filePath) + ':', error);\n throw new StorageProviderError(`生成上传URL失败`);\n }\n }\n\n /**\n * 检查文件是否存在\n */\n async exists(filePath: string): Promise<boolean> {\n this.ensureInitialized();\n\n try {\n await this.client?.head(filePath);\n return true;\n } catch (error) {\n if (this.isOSSError(error) && error.code === 'NoSuchKey') {\n return false;\n }\n // 其他错误也视为文件不存在\n logger.warn('⚠️ [AliyunOSSProvider] 检查文件存在性时出错: ' + (filePath) + ':', error);\n return false;\n }\n }\n\n /**\n * 列出文件(详细信息)\n */\n async listFiles(prefix: string, delimiter: string = '/', maxKeys: number = 1000): Promise<{\n files: Array<{\n name: string;\n url: string;\n size: number;\n lastModified: string;\n etag: string;\n type: string;\n }>;\n folders: string[];\n nextMarker?: string;\n }> {\n this.ensureInitialized();\n\n try {\n const options: any = {\n prefix,\n delimiter,\n 'max-keys': String(maxKeys),\n };\n\n const result = await this.client?.list(options, {}) as any;\n\n const files = (result.objects || []).map((obj: any) => ({\n name: obj.name,\n url: this.generateAccessUrl(obj.name),\n size: obj.size,\n lastModified: obj.lastModified,\n etag: obj.etag,\n type: 'file',\n }));\n\n const folders = result.prefixes || [];\n\n return {\n files,\n folders,\n nextMarker: result.nextMarker,\n };\n } catch (error) {\n logger.error('❌ [AliyunOSSProvider] 列出文件失败: ' + (prefix) + ':', error);\n throw new StorageProviderError(`列出文件失败`);\n }\n }\n\n /**\n * 列出文件\n */\n async list(prefix: string, maxKeys?: number): Promise<string[]> {\n this.ensureInitialized();\n\n try {\n const options: any = {\n prefix,\n 'max-keys': String(maxKeys || 1000),\n };\n\n const result = await this.client?.list(options, {}) as any;\n\n return result.objects?.map((obj: any) => obj.name) || [];\n } catch (error) {\n logger.error('❌ [AliyunOSSProvider] 列出文件失败: ' + (prefix) + ':', error);\n return [];\n }\n }\n\n // ============= 私有方法 =============\n\n /**\n * 确保已初始化\n */\n private ensureInitialized(): void {\n if (!this.isInitialized || !this.client || !this.config) {\n throw new StorageProviderError('OSS存储提供者未初始化');\n }\n }\n\n /**\n * 验证配置\n */\n private validateConfig(): void {\n if (!this.config) {\n throw new StorageProviderError('OSS配置为空');\n }\n\n const required = ['region', 'bucket', 'accessKeyId', 'accessKeySecret'];\n const missing = required.filter((key) => !this.config![key as keyof AliyunOSSConfig]);\n\n if (missing.length > 0) {\n throw new StorageProviderError(`OSS配置缺少必需项`);\n }\n }\n\n /**\n * 测试连接\n */\n private async testConnection(): Promise<void> {\n \n }\n\n /**\n * 分片上传大文件\n */\n private async multipartUpload(filePath: string, buffer: Buffer, options: any): Promise<any> {\n logger.info(`📦 [AliyunOSSProvider] 使用多分片上传`);\n\n // 使用OSS的multipartUpload方法\n const result = await this.client?.multipartUpload(filePath, buffer, {\n partSize: 10 * 1024 * 1024, // 10MB per chunk\n parallel: 4, // 并发数\n progress: (p: number) => {\n if (p % 0.1 < 0.01) {\n // 每10%显示一次进度\n logger.info('📦 [AliyunOSSProvider] 上传进度: ' + ((p * 100).toFixed(1)) + '%');\n }\n },\n meta: options.meta,\n headers: options.headers,\n });\n\n return {\n name: result?.name || '',\n url: result?.name || '', // OSS返回的是object名称\n data: result?.data || {},\n res: result?.res || {},\n };\n }\n\n /**\n * 生成公开访问URL\n */\n private generateAccessUrl(filePath: string): string {\n if (!this.config) {\n throw new StorageProviderError('OSS配置为空');\n }\n\n // 确保文件路径不以斜杠开头\n const normalizedPath = filePath.startsWith('/') ? filePath.substring(1) : filePath;\n\n if (this.config.customDomain) {\n // 使用自定义域名\n const protocol = this.config.secure !== false ? 'https' : 'http';\n const url = (protocol) + '://' + (this.config.customDomain) + '/' + (normalizedPath);\n logger.info('🔗 [AliyunOSSProvider] 使用自定义域名: ' + (url));\n return url;\n } else {\n // 使用默认OSS域名\n const protocol = this.config.secure !== false ? 'https' : 'http';\n const url = (protocol) + '://' + (this.config.bucket) + '.' + (this.config.region) + '.aliyuncs.com/' + (normalizedPath);\n logger.info('🔗 [AliyunOSSProvider] 使用默认OSS域名: ' + (url));\n return url;\n }\n }\n\n /**\n * 判断是否为OSS错误\n */\n private isOSSError(\n error: any\n ): error is { code: string; name: string; message: string; requestId?: string } {\n // 安全地检查错误属性,避免生产环境中的压缩问题\n if (!error || typeof error !== 'object') {\n return false;\n }\n\n return typeof error.code === 'string' &&\n typeof (error.name || '') === 'string' &&\n typeof (error.message || '') === 'string';\n }\n\n /**\n * 格式化OSS错误信息\n */\n private formatOSSError(error: any): string {\n // if (this.isOSSError(error)) {\n // const requestId = error.requestId ? ' (RequestId: ' + (error.requestId) + ')' : '';\n // return (error.code) + ': ' + (error.message) + (requestId);\n // }\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === 'string') {\n return error;\n }\n return '未知错误';\n }\n\n /**\n * 流式上传(可选实现)\n */\n async uploadStream(\n readableStream: NodeJS.ReadableStream,\n filePath: string,\n contentType?: string,\n contentLength?: number\n ): Promise<StorageResult> {\n this.ensureInitialized();\n\n const startTime = Date.now();\n logger.info('📤 [AliyunOSSProvider] 开始流式上传文件到OSS: ' + (filePath));\n\n try {\n const options: any = {\n timeout: 300000,\n mime: contentType || 'application/octet-stream',\n meta: { uid: 0, pid: 0 },\n callback: { url: '', body: '' },\n headers: {} as any,\n };\n\n if (contentLength) {\n options.headers['Content-Length'] = contentLength.toString();\n }\n\n const result = await this.client?.putStream(filePath, readableStream, options) as any;\n\n const accessUrl = this.generateAccessUrl(filePath);\n\n const uploadTime = Date.now() - startTime;\n logger.info('✅ [AliyunOSSProvider] 流式上传完成: ' + (filePath) + ', 耗时: ' + (uploadTime) + 'ms');\n\n return {\n success: true,\n path: filePath,\n url: accessUrl,\n size: contentLength,\n data: {\n name: result.name,\n requestId: result.res?.rt || 0,\n uploadTime,\n ossUrl: result.url || result.name,\n },\n };\n } catch (error) {\n logger.error('❌ [AliyunOSSProvider] 流式上传失败: ' + (filePath) + ':', error);\n\n return {\n success: false,\n error: this.formatOSSError(error),\n };\n }\n }\n\n /**\n * 批量删除文件\n */\n async batchDelete(filePaths: string[]): Promise<StorageResult> {\n this.ensureInitialized();\n\n logger.info('🗑️ [AliyunOSSProvider] 开始批量删除文件,数量: ' + (filePaths.length));\n\n try {\n const result = await this.client?.deleteMulti(filePaths, {\n quiet: false, // 返回删除结果\n }) as any;\n\n logger.info('✅ [AliyunOSSProvider] 批量删除完成,成功: ' + (result.deleted?.length || 0));\n\n return {\n success: true,\n data: {\n deleted: result.deleted,\n requestId: result.res?.rt || 0,\n },\n };\n } catch (error) {\n logger.error(`❌ [AliyunOSSProvider] 批量删除失败:`, error);\n\n return {\n success: false,\n error: this.formatOSSError(error),\n };\n }\n }\n\n /**\n * 复制文件\n */\n async copy(sourcePath: string, targetPath: string): Promise<StorageResult> {\n this.ensureInitialized();\n\n logger.info('📋 [AliyunOSSProvider] 开始复制文件: ' + (sourcePath) + ' -> ' + (targetPath));\n\n try {\n const result = await this.client?.copy(targetPath, sourcePath) as any;\n\n logger.info('✅ [AliyunOSSProvider] 文件复制完成: ' + (sourcePath) + ' -> ' + (targetPath));\n\n return {\n success: true,\n data: {\n etag: result.data?.etag,\n lastModified: result.data?.lastModified,\n requestId: result.res?.rt || 0,\n },\n };\n } catch (error) {\n logger.error('❌ [AliyunOSSProvider] 文件复制失败: ' + (sourcePath) + ' -> ' + (targetPath) + ':', error);\n\n return {\n success: false,\n error: this.formatOSSError(error),\n };\n }\n }\n\n /**\n * 编码元数据,避免中文字符在HTTP头部中的问题\n */\n private encodeMetadata(metadata: Record<string, any>): Record<string, string> {\n const encoded: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(metadata)) {\n if (value !== null && value !== undefined) {\n // 将值转换为字符串并进行URL编码\n const stringValue = String(value);\n encoded[key] = encodeURIComponent(stringValue);\n }\n }\n\n return encoded;\n }\n}\n\n"]}
|