sa2kit 3.0.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-7IOT5U6M.js.map +1 -0
- package/dist/AliyunOSSProvider-ZXZM7OQA.mjs +6 -0
- package/dist/AliyunOSSProvider-ZXZM7OQA.mjs.map +1 -0
- package/dist/LocalStorageProvider-KJKRCKBS.js +15 -0
- package/dist/LocalStorageProvider-KJKRCKBS.js.map +1 -0
- package/dist/LocalStorageProvider-O22465NY.mjs +6 -0
- package/dist/LocalStorageProvider-O22465NY.mjs.map +1 -0
- package/dist/chunk-2234T4A6.js +303 -0
- package/dist/chunk-2234T4A6.js.map +1 -0
- package/dist/chunk-36KGNXKW.js +16 -0
- package/dist/chunk-36KGNXKW.js.map +1 -0
- package/dist/chunk-375C7WL7.js +2695 -0
- package/dist/chunk-375C7WL7.js.map +1 -0
- package/dist/chunk-3J24Z4MB.js +991 -0
- package/dist/chunk-3J24Z4MB.js.map +1 -0
- package/dist/chunk-3QCATFQV.js +43 -0
- package/dist/chunk-3QCATFQV.js.map +1 -0
- package/dist/chunk-3R6JHA6D.js +120 -0
- package/dist/chunk-3R6JHA6D.js.map +1 -0
- package/dist/chunk-4OXKHV7J.js +43 -0
- package/dist/chunk-4OXKHV7J.js.map +1 -0
- package/dist/chunk-4PJM4752.js +4 -0
- package/dist/chunk-4PJM4752.js.map +1 -0
- package/dist/chunk-65JRVC3F.mjs +54 -0
- package/dist/chunk-65JRVC3F.mjs.map +1 -0
- package/dist/chunk-6HL54I2B.js +336 -0
- 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-6YLCRWKM.mjs +8 -0
- package/dist/chunk-6YLCRWKM.mjs.map +1 -0
- package/dist/chunk-7CRU2Y5X.mjs +152 -0
- 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-7VVZHFEM.js +88 -0
- package/dist/chunk-7VVZHFEM.js.map +1 -0
- package/dist/chunk-AWHGIKTQ.js +56 -0
- package/dist/chunk-AWHGIKTQ.js.map +1 -0
- package/dist/chunk-B3GYF6TY.js +37 -0
- package/dist/chunk-B3GYF6TY.js.map +1 -0
- package/dist/chunk-BDBJFOXM.mjs +14 -0
- package/dist/chunk-BDBJFOXM.mjs.map +1 -0
- package/dist/chunk-BTW3SWQN.mjs +25 -0
- package/dist/chunk-BTW3SWQN.mjs.map +1 -0
- package/dist/chunk-CHYSSZ4E.mjs +734 -0
- package/dist/chunk-CHYSSZ4E.mjs.map +1 -0
- package/dist/chunk-DO6QYAZV.mjs +298 -0
- package/dist/chunk-DO6QYAZV.mjs.map +1 -0
- package/dist/chunk-DTR53LQO.mjs +781 -0
- package/dist/chunk-DTR53LQO.mjs.map +1 -0
- package/dist/chunk-EI2S4XDG.mjs +89 -0
- package/dist/chunk-EI2S4XDG.mjs.map +1 -0
- package/dist/chunk-EOZHUI46.js +93 -0
- package/dist/chunk-EOZHUI46.js.map +1 -0
- package/dist/chunk-F2BZIU67.js +184 -0
- package/dist/chunk-F2BZIU67.js.map +1 -0
- package/dist/chunk-F2TEJSCP.js +756 -0
- package/dist/chunk-F2TEJSCP.js.map +1 -0
- package/dist/chunk-FCLS5R24.js +148 -0
- package/dist/chunk-FCLS5R24.js.map +1 -0
- package/dist/chunk-FUA6ZGMI.mjs +376 -0
- package/dist/chunk-FUA6ZGMI.mjs.map +1 -0
- package/dist/chunk-FY2X3LYR.mjs +3 -0
- package/dist/chunk-FY2X3LYR.mjs.map +1 -0
- package/dist/chunk-GS4SAW25.mjs +116 -0
- 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-HG34SGMN.mjs +546 -0
- 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/chunk-KEZFTDZT.mjs +559 -0
- package/dist/chunk-KEZFTDZT.mjs.map +1 -0
- package/dist/chunk-KHOVC2KL.js +144 -0
- package/dist/chunk-KHOVC2KL.js.map +1 -0
- package/dist/chunk-KRBSTLKC.js +6154 -0
- 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-LZ5YTMMP.mjs +41 -0
- package/dist/chunk-LZ5YTMMP.mjs.map +1 -0
- package/dist/chunk-MJ6XJGAL.js +1551 -0
- package/dist/chunk-MJ6XJGAL.js.map +1 -0
- package/dist/chunk-MKLXCV4Z.mjs +1510 -0
- 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-N2O3OX5Y.mjs +243 -0
- package/dist/chunk-N2O3OX5Y.mjs.map +1 -0
- package/dist/chunk-O6NNSPWD.mjs +35 -0
- package/dist/chunk-O6NNSPWD.mjs.map +1 -0
- package/dist/chunk-OIRZXSYM.js +80 -0
- package/dist/chunk-OIRZXSYM.js.map +1 -0
- package/dist/chunk-P7JQRNBJ.mjs +76 -0
- package/dist/chunk-P7JQRNBJ.mjs.map +1 -0
- package/dist/chunk-PA4ELVGI.js +20 -0
- package/dist/chunk-PA4ELVGI.js.map +1 -0
- package/dist/chunk-PLIG5257.mjs +2613 -0
- 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-RHECN4E2.mjs +6077 -0
- package/dist/chunk-RHECN4E2.mjs.map +1 -0
- package/dist/chunk-RHHTZTIN.mjs +314 -0
- package/dist/chunk-RHHTZTIN.mjs.map +1 -0
- package/dist/chunk-RRQ2X26Z.js +106 -0
- package/dist/chunk-RRQ2X26Z.js.map +1 -0
- package/dist/chunk-RST2T54Y.js +836 -0
- package/dist/chunk-RST2T54Y.js.map +1 -0
- package/dist/chunk-RVNQI6BI.js +249 -0
- package/dist/chunk-RVNQI6BI.js.map +1 -0
- package/dist/chunk-S3K4LTRI.mjs +226 -0
- package/dist/chunk-S3K4LTRI.mjs.map +1 -0
- package/dist/chunk-SWZ5XNF6.js +158 -0
- package/dist/chunk-SWZ5XNF6.js.map +1 -0
- package/dist/chunk-TNJ6LYX7.mjs +18 -0
- package/dist/chunk-TNJ6LYX7.mjs.map +1 -0
- package/dist/chunk-U7HNBCBS.js +207 -0
- package/dist/chunk-U7HNBCBS.js.map +1 -0
- package/dist/chunk-UJS3YSD3.mjs +37 -0
- package/dist/chunk-UJS3YSD3.mjs.map +1 -0
- package/dist/chunk-UJUWDF7M.mjs +336 -0
- package/dist/chunk-UJUWDF7M.mjs.map +1 -0
- package/dist/chunk-UR5NENGE.js +78 -0
- package/dist/chunk-UR5NENGE.js.map +1 -0
- package/dist/chunk-V7HGBDCB.mjs +135 -0
- package/dist/chunk-V7HGBDCB.mjs.map +1 -0
- package/dist/chunk-V7RLIZMN.js +90 -0
- package/dist/chunk-V7RLIZMN.js.map +1 -0
- package/dist/chunk-VCKXK6V5.js +345 -0
- package/dist/chunk-VCKXK6V5.js.map +1 -0
- package/dist/chunk-VIEXDTNF.mjs +100 -0
- package/dist/chunk-VIEXDTNF.mjs.map +1 -0
- package/dist/chunk-VN2DULIA.js +579 -0
- package/dist/chunk-VN2DULIA.js.map +1 -0
- package/dist/chunk-VNWMRUY6.js +168 -0
- package/dist/chunk-VNWMRUY6.js.map +1 -0
- package/dist/chunk-VYK4M2D6.mjs +177 -0
- package/dist/chunk-VYK4M2D6.mjs.map +1 -0
- package/dist/chunk-WB4H6ZUW.mjs +86 -0
- package/dist/chunk-WB4H6ZUW.mjs.map +1 -0
- package/dist/chunk-WM3AEJ2E.mjs +981 -0
- package/dist/chunk-WM3AEJ2E.mjs.map +1 -0
- package/dist/chunk-X5GINUGI.mjs +162 -0
- package/dist/chunk-X5GINUGI.mjs.map +1 -0
- package/dist/chunk-XB7GUEHZ.mjs +82 -0
- package/dist/chunk-XB7GUEHZ.mjs.map +1 -0
- package/dist/chunk-XE5RGZ3B.js +242 -0
- package/dist/chunk-XE5RGZ3B.js.map +1 -0
- package/dist/chunk-XNTIMVSL.mjs +193 -0
- package/dist/chunk-XNTIMVSL.mjs.map +1 -0
- package/dist/chunk-Y7WHUKJF.js +387 -0
- package/dist/chunk-Y7WHUKJF.js.map +1 -0
- package/dist/chunk-YIRPPMCN.mjs +1916 -0
- package/dist/chunk-YIRPPMCN.mjs.map +1 -0
- package/dist/chunk-YTGUIRRH.js +10 -0
- package/dist/chunk-YTGUIRRH.js.map +1 -0
- package/dist/chunk-Z2SNB5LJ.js +28 -0
- package/dist/chunk-Z2SNB5LJ.js.map +1 -0
- package/dist/chunk-ZOP7YIVX.js +552 -0
- package/dist/chunk-ZOP7YIVX.js.map +1 -0
- package/dist/chunk-ZUZLWHH5.mjs +146 -0
- package/dist/chunk-ZUZLWHH5.mjs.map +1 -0
- package/dist/common/ai/llm/core/index.d.mts +70 -0
- package/dist/common/ai/llm/core/index.d.ts +70 -0
- package/dist/common/ai/llm/core/index.js +54 -0
- package/dist/common/ai/llm/core/index.mjs +5 -0
- package/dist/common/ai/llm/electron/index.d.mts +6 -0
- package/dist/common/ai/llm/electron/index.d.ts +6 -0
- package/dist/common/ai/llm/electron/index.js +67 -0
- package/dist/common/ai/llm/electron/index.mjs +10 -0
- package/dist/common/ai/llm/index.d.mts +3 -0
- package/dist/common/ai/llm/index.d.ts +3 -0
- package/dist/common/ai/llm/index.js +54 -0
- package/dist/common/ai/llm/index.mjs +5 -0
- package/dist/common/ai/llm/miniapp/index.d.mts +6 -0
- package/dist/common/ai/llm/miniapp/index.d.ts +6 -0
- package/dist/common/ai/llm/miniapp/index.js +59 -0
- package/dist/common/ai/llm/miniapp/index.mjs +6 -0
- package/dist/common/ai/llm/rn/index.d.mts +6 -0
- package/dist/common/ai/llm/rn/index.d.ts +6 -0
- package/dist/common/ai/llm/rn/index.js +59 -0
- package/dist/common/ai/llm/rn/index.mjs +6 -0
- 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/common/ai/llm/ui/web/index.d.mts +15 -0
- package/dist/common/ai/llm/ui/web/index.d.ts +15 -0
- package/dist/common/ai/llm/ui/web/index.js +21 -0
- package/dist/common/ai/llm/ui/web/index.mjs +8 -0
- package/dist/common/ai/llm/web/index.d.mts +6 -0
- package/dist/common/ai/llm/web/index.d.ts +6 -0
- package/dist/common/ai/llm/web/index.js +66 -0
- package/dist/common/ai/llm/web/index.mjs +9 -0
- package/dist/common/analytics/index.d.mts +2 -0
- package/dist/common/analytics/index.d.ts +2 -0
- package/dist/common/analytics/index.js +314 -0
- package/dist/common/analytics/index.mjs +5 -0
- package/dist/common/analytics/server/index.js +529 -0
- package/dist/common/analytics/server/index.js.map +1 -0
- package/dist/common/analytics/server/index.mjs +525 -0
- package/dist/common/analytics/server/index.mjs.map +1 -0
- package/dist/common/api/index.d.mts +3 -0
- package/dist/common/api/index.d.ts +3 -0
- package/dist/common/api/index.js +21 -0
- package/dist/common/api/index.mjs +4 -0
- package/dist/common/auth/client/index.d.mts +1 -31
- package/dist/common/auth/client/index.d.ts +1 -31
- package/dist/common/auth/client/index.js +2 -15
- package/dist/common/auth/client/index.mjs +1 -2
- package/dist/common/auth/components/index.d.mts +5 -239
- package/dist/common/auth/components/index.d.ts +5 -239
- package/dist/common/auth/components/index.js +878 -49
- package/dist/common/auth/components/index.js.map +1 -1
- package/dist/common/auth/components/index.mjs +871 -5
- package/dist/common/auth/components/index.mjs.map +1 -1
- package/dist/common/auth/hooks/index.d.mts +2 -29
- package/dist/common/auth/hooks/index.d.ts +2 -29
- package/dist/common/auth/hooks/index.js +2 -11
- package/dist/common/auth/hooks/index.mjs +1 -2
- package/dist/common/auth/index.d.mts +5 -9
- package/dist/common/auth/index.d.ts +5 -9
- package/dist/common/auth/index.js +5 -26
- package/dist/common/auth/index.mjs +3 -4
- package/dist/common/auth/rn/index.d.mts +1 -17
- package/dist/common/auth/rn/index.d.ts +1 -17
- package/dist/common/auth/rn/index.js +2 -34
- package/dist/common/auth/rn/index.js.map +1 -1
- package/dist/common/auth/rn/index.mjs +2 -31
- package/dist/common/auth/rn/index.mjs.map +1 -1
- package/dist/common/auth/server/index.d.mts +81 -2
- package/dist/common/auth/server/index.d.ts +81 -2
- package/dist/common/auth/server/index.js +128 -37
- package/dist/common/auth/server/index.js.map +1 -1
- package/dist/common/auth/server/index.mjs +124 -1
- package/dist/common/auth/server/index.mjs.map +1 -1
- package/dist/common/auth/services/index.js +12 -9
- package/dist/common/auth/services/index.js.map +1 -1
- package/dist/common/auth/services/index.mjs +10 -1
- package/dist/common/auth/services/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/common/config/index.d.mts +1 -0
- package/dist/common/config/index.d.ts +1 -0
- package/dist/common/config/index.js +21 -0
- package/dist/common/config/index.mjs +4 -0
- package/dist/common/config/server/index.js +1177 -0
- package/dist/common/config/server/index.js.map +1 -0
- package/dist/common/config/server/index.mjs +1138 -0
- 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/common/i18n/index.d.mts +2 -0
- package/dist/common/i18n/index.d.ts +2 -0
- package/dist/common/i18n/index.js +73 -0
- package/dist/common/i18n/index.mjs +4 -0
- 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 +17 -20
- package/dist/common/index.d.ts +17 -20
- package/dist/common/index.js +76 -70
- package/dist/common/index.mjs +27 -29
- 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/common/ossFile/index.d.mts +61 -0
- package/dist/common/ossFile/index.d.ts +61 -0
- package/dist/common/ossFile/index.js +96 -0
- package/dist/common/ossFile/index.mjs +7 -0
- package/dist/common/ossFile/server/index.d.mts +94 -0
- package/dist/common/ossFile/server/index.d.ts +94 -0
- package/dist/common/ossFile/server/index.js +221 -0
- package/dist/common/ossFile/server/index.mjs +12 -0
- 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 -7
- package/dist/common/request/index.mjs +2 -4
- 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/common/universalExport/index.d.mts +232 -0
- package/dist/common/universalExport/index.d.ts +232 -0
- package/dist/common/universalExport/index.js +178 -0
- package/dist/common/universalExport/index.mjs +5 -0
- package/dist/common/universalExport/server/index.d.mts +1189 -0
- package/dist/common/universalExport/server/index.d.ts +1189 -0
- package/dist/common/universalExport/server/index.js +151 -0
- package/dist/common/universalExport/server/index.mjs +6 -0
- package/dist/common/universalFile/index.d.mts +409 -0
- package/dist/common/universalFile/index.d.ts +409 -0
- package/dist/common/universalFile/index.js +1742 -0
- package/dist/common/universalFile/index.js.map +1 -0
- package/dist/common/universalFile/index.mjs +1497 -0
- package/dist/common/universalFile/index.mjs.map +1 -0
- package/dist/common/universalFile/server/index.d.mts +1064 -0
- package/dist/common/universalFile/server/index.d.ts +1064 -0
- package/dist/common/universalFile/server/index.js +311 -0
- package/dist/common/universalFile/server/index.mjs +10 -0
- 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-BRLygK4h.d.ts +67 -0
- package/dist/index-BWNK5mH2.d.ts +76 -0
- package/dist/index-Bd7cKF1j.d.mts +50 -0
- package/dist/index-BiCK6gg6.d.mts +210 -0
- package/dist/index-BiCK6gg6.d.ts +210 -0
- package/dist/index-C-P2yBTH.d.mts +76 -0
- package/dist/index-CT4K2z-O.d.ts +81 -0
- package/dist/index-D6RJTGce.d.mts +81 -0
- package/dist/index-DA7L9JlE.d.mts +159 -0
- package/dist/index-DRQxtCDw.d.ts +50 -0
- package/dist/index-DXVph21C.d.mts +201 -0
- package/dist/index-DXVph21C.d.ts +201 -0
- package/dist/index-DzyK789B.d.mts +67 -0
- package/dist/index-FVJZCEtm.d.mts +145 -0
- package/dist/index-FVJZCEtm.d.ts +145 -0
- package/dist/index-nD9vPCZT.d.ts +159 -0
- package/dist/index-nOmIv2BG.d.mts +559 -0
- package/dist/index-nOmIv2BG.d.ts +559 -0
- package/dist/path-Bzc7hj1N.d.ts +45 -0
- package/dist/path-DN_65vhO.d.mts +45 -0
- package/dist/utils-Dm3O1rAa.d.mts +366 -0
- package/dist/utils-Dm3O1rAa.d.ts +366 -0
- package/package.json +293 -348
- package/dist/AliyunOSSProvider-4GRL2FJB.js +0 -15
- package/dist/AliyunOSSProvider-4GRL2FJB.js.map +0 -1
- package/dist/AliyunOSSProvider-QNVFIZ7Q.mjs +0 -6
- package/dist/AliyunOSSProvider-QNVFIZ7Q.mjs.map +0 -1
- 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-J5RHV37G.mjs.map +0 -1
- package/dist/LocalStorageProvider-PFA2DMIJ.js +0 -15
- package/dist/LocalStorageProvider-PFA2DMIJ.js.map +0 -1
- package/dist/UniversalFileService-CC4d3wkc.d.ts +0 -139
- package/dist/UniversalFileService-CzAE_G4V.d.mts +0 -139
- package/dist/ai/llm/core/index.d.mts +0 -70
- package/dist/ai/llm/core/index.d.ts +0 -70
- package/dist/ai/llm/core/index.js +0 -54
- package/dist/ai/llm/core/index.mjs +0 -5
- package/dist/ai/llm/electron/index.d.mts +0 -6
- package/dist/ai/llm/electron/index.d.ts +0 -6
- package/dist/ai/llm/electron/index.js +0 -66
- package/dist/ai/llm/electron/index.mjs +0 -9
- package/dist/ai/llm/index.d.mts +0 -3
- package/dist/ai/llm/index.d.ts +0 -3
- package/dist/ai/llm/index.js +0 -54
- package/dist/ai/llm/index.mjs +0 -5
- package/dist/ai/llm/miniapp/index.d.mts +0 -6
- package/dist/ai/llm/miniapp/index.d.ts +0 -6
- package/dist/ai/llm/miniapp/index.js +0 -59
- package/dist/ai/llm/miniapp/index.mjs +0 -6
- package/dist/ai/llm/rn/index.d.mts +0 -6
- package/dist/ai/llm/rn/index.d.ts +0 -6
- package/dist/ai/llm/rn/index.js +0 -59
- package/dist/ai/llm/rn/index.mjs +0 -6
- 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.d.mts +0 -15
- package/dist/ai/llm/ui/web/index.d.ts +0 -15
- 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.d.mts +0 -6
- package/dist/ai/llm/web/index.d.ts +0 -6
- package/dist/ai/llm/web/index.js +0 -65
- package/dist/ai/llm/web/index.mjs +0 -8
- package/dist/analytics/index.d.mts +0 -2
- package/dist/analytics/index.d.ts +0 -2
- package/dist/analytics/index.js +0 -314
- package/dist/analytics/index.mjs +0 -5
- package/dist/analytics/server/index.js +0 -529
- package/dist/analytics/server/index.js.map +0 -1
- package/dist/analytics/server/index.mjs +0 -525
- package/dist/analytics/server/index.mjs.map +0 -1
- package/dist/api/index.d.mts +0 -3
- package/dist/api/index.d.ts +0 -3
- 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/auth/client/index.d.mts +0 -13
- package/dist/auth/client/index.d.ts +0 -13
- package/dist/auth/client/index.js +0 -26
- package/dist/auth/client/index.mjs +0 -5
- package/dist/auth/components/index.d.mts +0 -10
- package/dist/auth/components/index.d.ts +0 -10
- package/dist/auth/components/index.js +0 -70
- package/dist/auth/components/index.mjs +0 -9
- package/dist/auth/hooks/index.d.mts +0 -13
- package/dist/auth/hooks/index.d.ts +0 -13
- package/dist/auth/hooks/index.js +0 -28
- package/dist/auth/hooks/index.mjs +0 -7
- package/dist/auth/index.d.mts +0 -21
- package/dist/auth/index.d.ts +0 -21
- package/dist/auth/index.js +0 -112
- package/dist/auth/index.mjs +0 -11
- package/dist/auth/rn/index.d.mts +0 -3133
- package/dist/auth/rn/index.d.ts +0 -3133
- package/dist/auth/rn/index.js +0 -684
- package/dist/auth/rn/index.js.map +0 -1
- package/dist/auth/rn/index.mjs +0 -663
- package/dist/auth/rn/index.mjs.map +0 -1
- package/dist/auth/schema/index.d.mts +0 -4
- package/dist/auth/schema/index.d.ts +0 -4
- package/dist/auth/schema/index.js +0 -49
- package/dist/auth/schema/index.mjs +0 -4
- package/dist/auth/services/index.d.mts +0 -1
- package/dist/auth/services/index.d.ts +0 -1
- package/dist/auth/services/index.js +0 -17
- package/dist/auth/services/index.mjs +0 -4
- package/dist/base-api-client-BpmcQt4Q.d.ts +0 -103
- package/dist/base-api-client-CFIhZK4C.d.mts +0 -277
- package/dist/base-api-client-CFIhZK4C.d.ts +0 -277
- package/dist/base-api-client-DXLsq2yz.d.mts +0 -103
- 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 +0 -171
- package/dist/chunk-25OFOKNF.js.map +0 -1
- package/dist/chunk-2Y7BKFKZ.js +0 -37
- package/dist/chunk-2Y7BKFKZ.js.map +0 -1
- package/dist/chunk-3DXPQ4YV.mjs +0 -165
- package/dist/chunk-3DXPQ4YV.mjs.map +0 -1
- package/dist/chunk-3FRAIS4T.mjs +0 -35
- package/dist/chunk-3FRAIS4T.mjs.map +0 -1
- package/dist/chunk-3NHAT7D4.mjs +0 -361
- package/dist/chunk-3NHAT7D4.mjs.map +0 -1
- package/dist/chunk-3Z43XGA4.mjs +0 -54
- package/dist/chunk-3Z43XGA4.mjs.map +0 -1
- package/dist/chunk-4FDUURSD.js +0 -22
- package/dist/chunk-4FDUURSD.js.map +0 -1
- package/dist/chunk-4WBCWJSN.js +0 -836
- 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-5USIS3UM.js.map +0 -1
- package/dist/chunk-7E3J7VAD.mjs +0 -3
- package/dist/chunk-7E3J7VAD.mjs.map +0 -1
- package/dist/chunk-ACUFEDVQ.js +0 -345
- package/dist/chunk-ACUFEDVQ.js.map +0 -1
- package/dist/chunk-AQPU2AXH.js +0 -756
- package/dist/chunk-AQPU2AXH.js.map +0 -1
- package/dist/chunk-ATUCZXJY.js +0 -80
- package/dist/chunk-ATUCZXJY.js.map +0 -1
- package/dist/chunk-B3CZ3HXJ.mjs +0 -126
- package/dist/chunk-B3CZ3HXJ.mjs.map +0 -1
- package/dist/chunk-BCE6RUZV.js +0 -2695
- package/dist/chunk-BCE6RUZV.js.map +0 -1
- package/dist/chunk-BIHYZA67.mjs +0 -2613
- package/dist/chunk-BIHYZA67.mjs.map +0 -1
- package/dist/chunk-C6KV7VTZ.mjs +0 -152
- package/dist/chunk-C6KV7VTZ.mjs.map +0 -1
- package/dist/chunk-CAYOQDBR.js +0 -78
- package/dist/chunk-CAYOQDBR.js.map +0 -1
- package/dist/chunk-CIVO4R6N.mjs +0 -37
- package/dist/chunk-CIVO4R6N.mjs.map +0 -1
- package/dist/chunk-CX2GHCAI.mjs +0 -217
- package/dist/chunk-CX2GHCAI.mjs.map +0 -1
- package/dist/chunk-DIF5VRL3.mjs +0 -73
- package/dist/chunk-DIF5VRL3.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-FHLTPXAR.js.map +0 -1
- package/dist/chunk-FIUBFREP.mjs +0 -298
- package/dist/chunk-FIUBFREP.mjs.map +0 -1
- package/dist/chunk-FOQEQWX5.js +0 -4
- package/dist/chunk-FOQEQWX5.js.map +0 -1
- package/dist/chunk-FXQOXLDE.js +0 -120
- package/dist/chunk-FXQOXLDE.js.map +0 -1
- package/dist/chunk-G4NFB2QA.mjs +0 -212
- package/dist/chunk-G4NFB2QA.mjs.map +0 -1
- package/dist/chunk-G5HJGXGC.mjs +0 -39
- package/dist/chunk-G5HJGXGC.mjs.map +0 -1
- package/dist/chunk-G6HXNQ2U.mjs +0 -336
- package/dist/chunk-G6HXNQ2U.mjs.map +0 -1
- package/dist/chunk-G6NSKJMH.js +0 -106
- package/dist/chunk-G6NSKJMH.js.map +0 -1
- package/dist/chunk-G7UBMCUT.mjs +0 -41
- package/dist/chunk-G7UBMCUT.mjs.map +0 -1
- package/dist/chunk-GQZHGSRR.js +0 -44
- package/dist/chunk-GQZHGSRR.js.map +0 -1
- package/dist/chunk-GS7XLKET.js +0 -41
- package/dist/chunk-GS7XLKET.js.map +0 -1
- package/dist/chunk-GWNBVGDT.mjs +0 -1232
- package/dist/chunk-GWNBVGDT.mjs.map +0 -1
- package/dist/chunk-HDMIOOZY.mjs +0 -546
- package/dist/chunk-HDMIOOZY.mjs.map +0 -1
- package/dist/chunk-HJ6MH7J7.js +0 -552
- package/dist/chunk-HJ6MH7J7.js.map +0 -1
- package/dist/chunk-HJZHQW5R.mjs +0 -146
- package/dist/chunk-HJZHQW5R.mjs.map +0 -1
- package/dist/chunk-I5ZPEDNR.mjs +0 -734
- package/dist/chunk-I5ZPEDNR.mjs.map +0 -1
- package/dist/chunk-IBWDBBX5.mjs +0 -16
- package/dist/chunk-IBWDBBX5.mjs.map +0 -1
- package/dist/chunk-J77KR2EV.mjs +0 -193
- package/dist/chunk-J77KR2EV.mjs.map +0 -1
- package/dist/chunk-KH6RQ4J5.js +0 -28
- package/dist/chunk-KH6RQ4J5.js.map +0 -1
- package/dist/chunk-KQ643L7Z.js +0 -144
- 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-LHJKLUM7.mjs +0 -18
- package/dist/chunk-LHJKLUM7.mjs.map +0 -1
- package/dist/chunk-MBANGIG3.mjs +0 -781
- package/dist/chunk-MBANGIG3.mjs.map +0 -1
- package/dist/chunk-MWSAH7ZG.mjs +0 -42
- package/dist/chunk-MWSAH7ZG.mjs.map +0 -1
- package/dist/chunk-MZOGYD4N.mjs +0 -186
- package/dist/chunk-MZOGYD4N.mjs.map +0 -1
- package/dist/chunk-NCRP2YHY.mjs +0 -1598
- 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 +0 -43
- package/dist/chunk-PBI7FKMB.js.map +0 -1
- package/dist/chunk-Q5EDCKQA.js +0 -336
- package/dist/chunk-Q5EDCKQA.js.map +0 -1
- package/dist/chunk-Q5VFBPMG.mjs +0 -76
- package/dist/chunk-Q5VFBPMG.mjs.map +0 -1
- package/dist/chunk-QDUBO567.js +0 -1148
- package/dist/chunk-QDUBO567.js.map +0 -1
- package/dist/chunk-QP5N3ER6.js +0 -18
- package/dist/chunk-QP5N3ER6.js.map +0 -1
- package/dist/chunk-QXAOXBVB.mjs +0 -135
- package/dist/chunk-QXAOXBVB.mjs.map +0 -1
- package/dist/chunk-R2DXTE2L.js +0 -249
- package/dist/chunk-R2DXTE2L.js.map +0 -1
- package/dist/chunk-RJP2BRJD.mjs +0 -6077
- package/dist/chunk-RJP2BRJD.mjs.map +0 -1
- package/dist/chunk-RTD2WHQQ.mjs +0 -16
- package/dist/chunk-RTD2WHQQ.mjs.map +0 -1
- package/dist/chunk-RWCD2CAD.mjs +0 -1132
- package/dist/chunk-RWCD2CAD.mjs.map +0 -1
- package/dist/chunk-S37OK2QG.js +0 -216
- package/dist/chunk-S37OK2QG.js.map +0 -1
- package/dist/chunk-S3PUP7N4.js +0 -20
- package/dist/chunk-S3PUP7N4.js.map +0 -1
- package/dist/chunk-S6YSGVWD.js +0 -224
- package/dist/chunk-S6YSGVWD.js.map +0 -1
- package/dist/chunk-S732H246.js +0 -6154
- package/dist/chunk-S732H246.js.map +0 -1
- package/dist/chunk-SFDJNKWC.js +0 -22
- package/dist/chunk-SFDJNKWC.js.map +0 -1
- package/dist/chunk-SKFEJPMJ.mjs +0 -226
- package/dist/chunk-SKFEJPMJ.mjs.map +0 -1
- package/dist/chunk-SLKOEYFH.js +0 -303
- package/dist/chunk-SLKOEYFH.js.map +0 -1
- package/dist/chunk-TC5YU6A4.mjs +0 -243
- package/dist/chunk-TC5YU6A4.mjs.map +0 -1
- package/dist/chunk-TXMX6PZR.js +0 -190
- package/dist/chunk-TXMX6PZR.js.map +0 -1
- package/dist/chunk-UCOE6SET.js +0 -148
- 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 +0 -116
- package/dist/chunk-V7EVKD5G.mjs.map +0 -1
- package/dist/chunk-VHN7PF5I.js +0 -20
- package/dist/chunk-VHN7PF5I.js.map +0 -1
- package/dist/chunk-VMTEDX5H.js +0 -1275
- package/dist/chunk-VMTEDX5H.js.map +0 -1
- package/dist/chunk-VRN76M56.mjs +0 -3
- package/dist/chunk-VRN76M56.mjs.map +0 -1
- package/dist/chunk-VXFUXZN5.mjs +0 -20
- package/dist/chunk-VXFUXZN5.mjs.map +0 -1
- package/dist/chunk-WEEXCPSE.mjs +0 -86
- package/dist/chunk-WEEXCPSE.mjs.map +0 -1
- package/dist/chunk-WW4GE6CZ.js +0 -1647
- package/dist/chunk-WW4GE6CZ.js.map +0 -1
- package/dist/chunk-WZDTNDYR.js +0 -207
- package/dist/chunk-WZDTNDYR.js.map +0 -1
- package/dist/chunk-XBZIS3MV.mjs +0 -13
- package/dist/chunk-XBZIS3MV.mjs.map +0 -1
- package/dist/chunk-XFOZ56FB.mjs +0 -20
- package/dist/chunk-XFOZ56FB.mjs.map +0 -1
- package/dist/chunk-XJ7ZAGC5.js +0 -88
- package/dist/chunk-XJ7ZAGC5.js.map +0 -1
- package/dist/chunk-XUS5ACKR.mjs +0 -100
- package/dist/chunk-XUS5ACKR.mjs.map +0 -1
- package/dist/chunk-YOTQG4NP.mjs +0 -314
- package/dist/chunk-YOTQG4NP.mjs.map +0 -1
- package/dist/chunk-Z23HAXHL.js +0 -136
- package/dist/chunk-Z23HAXHL.js.map +0 -1
- package/dist/chunk-ZGVB35L2.mjs +0 -25
- package/dist/chunk-ZGVB35L2.mjs.map +0 -1
- package/dist/chunk-ZLYPALF3.js +0 -242
- package/dist/chunk-ZLYPALF3.js.map +0 -1
- package/dist/chunk-ZM2SZJTZ.js +0 -158
- package/dist/chunk-ZM2SZJTZ.js.map +0 -1
- package/dist/chunk-ZRAW3HXA.js +0 -43
- package/dist/chunk-ZRAW3HXA.js.map +0 -1
- package/dist/chunk-ZWQJSZEY.js +0 -371
- package/dist/chunk-ZWQJSZEY.js.map +0 -1
- package/dist/components/index.d.mts +0 -405
- package/dist/components/index.d.ts +0 -405
- package/dist/components/index.js +0 -2516
- package/dist/components/index.js.map +0 -1
- package/dist/components/index.mjs +0 -2396
- package/dist/components/index.mjs.map +0 -1
- package/dist/config/index.d.mts +0 -1
- package/dist/config/index.d.ts +0 -1
- package/dist/config/index.js +0 -21
- package/dist/config/index.mjs +0 -4
- package/dist/config/server/index.js +0 -1177
- package/dist/config/server/index.js.map +0 -1
- package/dist/config/server/index.mjs +0 -1138
- 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/i18n/index.d.mts +0 -2
- package/dist/i18n/index.d.ts +0 -2
- package/dist/i18n/index.js +0 -73
- package/dist/i18n/index.mjs +0 -4
- package/dist/imageCrop/index.d.mts +0 -165
- package/dist/imageCrop/index.d.ts +0 -165
- package/dist/imageCrop/index.js +0 -560
- package/dist/imageCrop/index.js.map +0 -1
- package/dist/imageCrop/index.mjs +0 -541
- package/dist/imageCrop/index.mjs.map +0 -1
- package/dist/index-2G9Dxjvt.d.ts +0 -81
- package/dist/index-BcjDRcKp.d.mts +0 -40
- package/dist/index-Bjem5rWn.d.mts +0 -17
- package/dist/index-BlpXrrTy.d.ts +0 -40
- package/dist/index-C5U-2hJq.d.ts +0 -23
- package/dist/index-CYuUB8aF.d.mts +0 -67
- 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-WrR57hKT.d.ts +0 -67
- package/dist/index-oLUvfqT8.d.ts +0 -20
- package/dist/index-pe38RDgC.d.mts +0 -20
- package/dist/index-qcOvRVuN.d.mts +0 -81
- package/dist/index.d.mts +0 -11590
- package/dist/index.d.ts +0 -11590
- package/dist/index.js +0 -17679
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -17403
- package/dist/index.mjs.map +0 -1
- package/dist/logger/index.d.mts +0 -125
- package/dist/logger/index.d.ts +0 -125
- 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/ossFile/index.d.mts +0 -61
- package/dist/ossFile/index.d.ts +0 -61
- package/dist/ossFile/index.js +0 -96
- package/dist/ossFile/index.js.map +0 -1
- package/dist/ossFile/index.mjs +0 -7
- package/dist/ossFile/index.mjs.map +0 -1
- package/dist/ossFile/server/index.d.mts +0 -94
- package/dist/ossFile/server/index.d.ts +0 -94
- package/dist/ossFile/server/index.js +0 -213
- package/dist/ossFile/server/index.js.map +0 -1
- package/dist/ossFile/server/index.mjs +0 -12
- package/dist/ossFile/server/index.mjs.map +0 -1
- package/dist/path-DkaHQSyW.d.mts +0 -41
- package/dist/path-qjVnH8qU.d.ts +0 -41
- 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.d.mts +0 -59
- package/dist/request/index.d.ts +0 -59
- package/dist/request/index.js +0 -23
- package/dist/request/index.js.map +0 -1
- package/dist/request/index.mjs +0 -6
- package/dist/request/index.mjs.map +0 -1
- 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/session-BCXvGCnm.d.mts +0 -81
- package/dist/session-BCXvGCnm.d.ts +0 -81
- package/dist/storage/index.d.mts +0 -136
- package/dist/storage/index.d.ts +0 -136
- package/dist/storage/index.js +0 -48
- package/dist/storage/index.js.map +0 -1
- package/dist/storage/index.mjs +0 -7
- package/dist/storage/index.mjs.map +0 -1
- 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-3ujSNAXb.d.mts +0 -286
- package/dist/types-3ujSNAXb.d.ts +0 -286
- 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-C_W_CoUD.d.ts +0 -99
- package/dist/types-Cs0CLvrH.d.mts +0 -70
- package/dist/types-Cs0CLvrH.d.ts +0 -70
- package/dist/types-DCRvasyH.d.mts +0 -99
- 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/types.legacy-J-j-_ig_.d.mts +0 -25
- package/dist/types.legacy-J-j-_ig_.d.ts +0 -25
- package/dist/universalExport/index.d.mts +0 -312
- package/dist/universalExport/index.d.ts +0 -312
- package/dist/universalExport/index.js +0 -178
- package/dist/universalExport/index.js.map +0 -1
- package/dist/universalExport/index.mjs +0 -5
- package/dist/universalExport/index.mjs.map +0 -1
- package/dist/universalExport/server/index.d.mts +0 -1270
- package/dist/universalExport/server/index.d.ts +0 -1270
- package/dist/universalExport/server/index.js +0 -123
- package/dist/universalExport/server/index.js.map +0 -1
- package/dist/universalExport/server/index.mjs +0 -6
- package/dist/universalExport/server/index.mjs.map +0 -1
- package/dist/universalFile/index.d.mts +0 -409
- package/dist/universalFile/index.d.ts +0 -409
- package/dist/universalFile/index.js +0 -1742
- package/dist/universalFile/index.js.map +0 -1
- package/dist/universalFile/index.mjs +0 -1497
- package/dist/universalFile/index.mjs.map +0 -1
- package/dist/universalFile/server/index.d.mts +0 -1064
- package/dist/universalFile/server/index.d.ts +0 -1064
- package/dist/universalFile/server/index.js +0 -311
- package/dist/universalFile/server/index.js.map +0 -1
- package/dist/universalFile/server/index.mjs +0 -10
- package/dist/universalFile/server/index.mjs.map +0 -1
- package/dist/utils/index.d.mts +0 -192
- package/dist/utils/index.d.ts +0 -192
- 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/{auth/client → common/components}/index.js.map +0 -0
- /package/dist/{auth/client → common/components}/index.mjs.map +0 -0
- /package/dist/{auth/components → common/config}/index.js.map +0 -0
- /package/dist/{auth/components → 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/{auth/hooks → common/i18n}/index.js.map +0 -0
- /package/dist/{auth/hooks → common/i18n}/index.mjs.map +0 -0
- /package/dist/{auth → common/imageCrop}/index.js.map +0 -0
- /package/dist/{auth → common/imageCrop}/index.mjs.map +0 -0
- /package/dist/{auth/schema → common/ossFile}/index.js.map +0 -0
- /package/dist/{auth/schema → common/ossFile}/index.mjs.map +0 -0
- /package/dist/{auth/services → common/ossFile/server}/index.js.map +0 -0
- /package/dist/{auth/services → common/ossFile/server}/index.mjs.map +0 -0
- /package/dist/{config → common/universalExport}/index.js.map +0 -0
- /package/dist/{config → common/universalExport}/index.mjs.map +0 -0
- /package/dist/{i18n → common/universalExport/server}/index.js.map +0 -0
- /package/dist/{i18n → common/universalExport/server}/index.mjs.map +0 -0
- /package/dist/{logger → common/universalFile/server}/index.js.map +0 -0
- /package/dist/{logger → common/universalFile/server}/index.mjs.map +0 -0
package/dist/chunk-NCRP2YHY.mjs
DELETED
|
@@ -1,1598 +0,0 @@
|
|
|
1
|
-
import { ExportConfigError, ExportDataError, ExportFileError } from './chunk-LFB5EIIM.mjs';
|
|
2
|
-
import { createLogger } from './chunk-3DXPQ4YV.mjs';
|
|
3
|
-
import * as XLSX from 'xlsx';
|
|
4
|
-
import { pgTable, timestamp, text, integer, boolean, jsonb } from 'drizzle-orm/pg-core';
|
|
5
|
-
import { sql, relations, eq, and, desc } from 'drizzle-orm';
|
|
6
|
-
|
|
7
|
-
var logger = createLogger("UniversalExportService");
|
|
8
|
-
var DEFAULT_CONFIG = {
|
|
9
|
-
defaultFormat: "csv",
|
|
10
|
-
defaultDelimiter: ",",
|
|
11
|
-
defaultEncoding: "utf-8",
|
|
12
|
-
defaultAddBOM: true,
|
|
13
|
-
maxFileSize: 100 * 1024 * 1024,
|
|
14
|
-
// 100MB
|
|
15
|
-
maxRowsLimit: 1e5,
|
|
16
|
-
maxConcurrentExports: 5,
|
|
17
|
-
exportTimeout: 3e5,
|
|
18
|
-
// 5分钟
|
|
19
|
-
cache: {
|
|
20
|
-
configTTL: 3600,
|
|
21
|
-
// 1小时
|
|
22
|
-
resultTTL: 1800
|
|
23
|
-
// 30分钟
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
var DEFAULT_FORMATTERS = {
|
|
27
|
-
// 日期格式化
|
|
28
|
-
date: (value) => {
|
|
29
|
-
if (!value) return "";
|
|
30
|
-
const date = new Date(value);
|
|
31
|
-
return date.toISOString().split("T")[0];
|
|
32
|
-
},
|
|
33
|
-
// 时间格式化
|
|
34
|
-
datetime: (value) => {
|
|
35
|
-
if (!value) return "";
|
|
36
|
-
const date = new Date(value);
|
|
37
|
-
return date.toLocaleString("zh-CN");
|
|
38
|
-
},
|
|
39
|
-
// 数字格式化
|
|
40
|
-
number: (value) => {
|
|
41
|
-
if (value === null || value === void 0) return "";
|
|
42
|
-
return String(value);
|
|
43
|
-
},
|
|
44
|
-
// 货币格式化
|
|
45
|
-
currency: (value) => {
|
|
46
|
-
if (value === null || value === void 0) return "";
|
|
47
|
-
return "\xA5" + Number(value).toFixed(2);
|
|
48
|
-
},
|
|
49
|
-
// 百分比格式化
|
|
50
|
-
percentage: (value) => {
|
|
51
|
-
if (value === null || value === void 0) return "";
|
|
52
|
-
return (Number(value) * 100).toFixed(2) + "%";
|
|
53
|
-
},
|
|
54
|
-
// 布尔值格式化
|
|
55
|
-
boolean: (value) => {
|
|
56
|
-
if (value === null || value === void 0) return "";
|
|
57
|
-
return value ? "\u662F" : "\u5426";
|
|
58
|
-
},
|
|
59
|
-
// 数组格式化
|
|
60
|
-
array: (value) => {
|
|
61
|
-
if (!Array.isArray(value)) return "";
|
|
62
|
-
return value.join(", ");
|
|
63
|
-
},
|
|
64
|
-
// 对象格式化
|
|
65
|
-
object: (value) => {
|
|
66
|
-
if (!value || typeof value !== "object") return "";
|
|
67
|
-
return JSON.stringify(value);
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
var UniversalExportService = class {
|
|
71
|
-
constructor(config, client) {
|
|
72
|
-
this.eventListeners = /* @__PURE__ */ new Map();
|
|
73
|
-
this.activeExports = /* @__PURE__ */ new Map();
|
|
74
|
-
this.configCache = /* @__PURE__ */ new Map();
|
|
75
|
-
this.resultCache = /* @__PURE__ */ new Map();
|
|
76
|
-
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
77
|
-
this.client = client;
|
|
78
|
-
}
|
|
79
|
-
// ============= 配置管理 =============
|
|
80
|
-
/**
|
|
81
|
-
* 创建导出配置
|
|
82
|
-
*/
|
|
83
|
-
async createConfig(config) {
|
|
84
|
-
try {
|
|
85
|
-
this.validateConfig({
|
|
86
|
-
...config,
|
|
87
|
-
id: "temp",
|
|
88
|
-
createdAt: /* @__PURE__ */ new Date(),
|
|
89
|
-
updatedAt: /* @__PURE__ */ new Date()
|
|
90
|
-
});
|
|
91
|
-
if (!this.client) {
|
|
92
|
-
throw new ExportConfigError("\u672A\u63D0\u4F9B\u5BFC\u51FA\u5BA2\u6237\u7AEF\u670D\u52A1", config);
|
|
93
|
-
}
|
|
94
|
-
const newConfig = await this.client.createConfig(config);
|
|
95
|
-
this.configCache.set(newConfig.id, {
|
|
96
|
-
config: newConfig,
|
|
97
|
-
timestamp: Date.now()
|
|
98
|
-
});
|
|
99
|
-
this.emitEvent({
|
|
100
|
-
type: "config:save",
|
|
101
|
-
exportId: newConfig.id,
|
|
102
|
-
timestamp: /* @__PURE__ */ new Date(),
|
|
103
|
-
data: { config: newConfig }
|
|
104
|
-
});
|
|
105
|
-
return newConfig;
|
|
106
|
-
} catch (error) {
|
|
107
|
-
throw new ExportConfigError(
|
|
108
|
-
"\u521B\u5EFA\u5BFC\u51FA\u914D\u7F6E\u5931\u8D25: " + (error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"),
|
|
109
|
-
{ originalError: error }
|
|
110
|
-
);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* 获取导出配置
|
|
115
|
-
*/
|
|
116
|
-
async getConfig(configId) {
|
|
117
|
-
const cached = this.configCache.get(configId);
|
|
118
|
-
if (cached && Date.now() - cached.timestamp < this.config.cache.configTTL * 1e3) {
|
|
119
|
-
return cached.config;
|
|
120
|
-
}
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* 更新导出配置
|
|
125
|
-
*/
|
|
126
|
-
async updateConfig(configId, updates) {
|
|
127
|
-
const existing = await this.getConfig(configId);
|
|
128
|
-
if (!existing) {
|
|
129
|
-
throw new ExportConfigError("\u914D\u7F6E\u4E0D\u5B58\u5728: " + configId);
|
|
130
|
-
}
|
|
131
|
-
const updatedConfig = {
|
|
132
|
-
...existing,
|
|
133
|
-
...updates,
|
|
134
|
-
updatedAt: /* @__PURE__ */ new Date()
|
|
135
|
-
};
|
|
136
|
-
this.validateConfig(updatedConfig);
|
|
137
|
-
this.configCache.set(configId, {
|
|
138
|
-
config: updatedConfig,
|
|
139
|
-
timestamp: Date.now()
|
|
140
|
-
});
|
|
141
|
-
this.emitEvent({
|
|
142
|
-
type: "config:save",
|
|
143
|
-
exportId: configId,
|
|
144
|
-
timestamp: /* @__PURE__ */ new Date(),
|
|
145
|
-
data: { config: updatedConfig }
|
|
146
|
-
});
|
|
147
|
-
return updatedConfig;
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* 删除导出配置
|
|
151
|
-
*/
|
|
152
|
-
async deleteConfig(configId) {
|
|
153
|
-
const existing = await this.getConfig(configId);
|
|
154
|
-
if (!existing) {
|
|
155
|
-
throw new ExportConfigError("\u914D\u7F6E\u4E0D\u5B58\u5728: " + configId);
|
|
156
|
-
}
|
|
157
|
-
this.configCache.delete(configId);
|
|
158
|
-
this.emitEvent({
|
|
159
|
-
type: "config:delete",
|
|
160
|
-
exportId: configId,
|
|
161
|
-
timestamp: /* @__PURE__ */ new Date(),
|
|
162
|
-
data: { configId }
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* 获取模块的配置列表
|
|
167
|
-
*/
|
|
168
|
-
async getConfigsByModule(moduleId, businessId) {
|
|
169
|
-
if (!this.client) {
|
|
170
|
-
throw new ExportConfigError("\u672A\u63D0\u4F9B\u5BFC\u51FA\u5BA2\u6237\u7AEF\u670D\u52A1", { moduleId, businessId });
|
|
171
|
-
}
|
|
172
|
-
return await this.client.getConfigsByModule(moduleId, businessId);
|
|
173
|
-
}
|
|
174
|
-
// ============= 导出执行 =============
|
|
175
|
-
/**
|
|
176
|
-
* 执行导出
|
|
177
|
-
*/
|
|
178
|
-
async export(request) {
|
|
179
|
-
const exportId = this.generateId();
|
|
180
|
-
const startTime = /* @__PURE__ */ new Date();
|
|
181
|
-
logger.info("\u{1F680} [UniversalExportService] \u5F00\u59CB\u5BFC\u51FA:", {
|
|
182
|
-
exportId,
|
|
183
|
-
configId: request.configId,
|
|
184
|
-
hasDataSource: !!request.dataSource,
|
|
185
|
-
hasCallbacks: !!request.callbacks
|
|
186
|
-
});
|
|
187
|
-
try {
|
|
188
|
-
let config;
|
|
189
|
-
if (typeof request.configId === "object" && request.configId !== null) {
|
|
190
|
-
config = request.configId;
|
|
191
|
-
logger.info("\u{1F4CB} [UniversalExportService] \u4F7F\u7528\u76F4\u63A5\u4F20\u5165\u7684\u914D\u7F6E:", {
|
|
192
|
-
configId: config.id,
|
|
193
|
-
configName: config.name,
|
|
194
|
-
format: config.format,
|
|
195
|
-
fieldsCount: config.fields.length,
|
|
196
|
-
hasGrouping: !!config.grouping,
|
|
197
|
-
groupingEnabled: config.grouping?.enabled,
|
|
198
|
-
groupingFieldsCount: config.grouping?.fields?.length || 0,
|
|
199
|
-
groupingFields: config.grouping?.fields?.map((f) => ({ key: f.key, mergeCells: f.mergeCells })) || []
|
|
200
|
-
});
|
|
201
|
-
} else {
|
|
202
|
-
logger.info("\u{1F50D} [UniversalExportService] \u4ECE\u7F13\u5B58\u83B7\u53D6\u914D\u7F6E:", request.configId);
|
|
203
|
-
const cachedConfig = await this.getConfig(request.configId);
|
|
204
|
-
if (!cachedConfig) {
|
|
205
|
-
throw new ExportConfigError("\u5BFC\u51FA\u914D\u7F6E\u4E0D\u5B58\u5728: " + request.configId);
|
|
206
|
-
}
|
|
207
|
-
config = cachedConfig;
|
|
208
|
-
logger.info("\u2705 [UniversalExportService] \u6210\u529F\u83B7\u53D6\u7F13\u5B58\u914D\u7F6E:", {
|
|
209
|
-
configId: config.id,
|
|
210
|
-
configName: config.name
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
const progress = {
|
|
214
|
-
exportId,
|
|
215
|
-
status: "pending",
|
|
216
|
-
progress: 0,
|
|
217
|
-
processedRows: 0,
|
|
218
|
-
totalRows: 0,
|
|
219
|
-
startTime
|
|
220
|
-
};
|
|
221
|
-
this.activeExports.set(exportId, progress);
|
|
222
|
-
this.emitEvent({
|
|
223
|
-
type: "export:start",
|
|
224
|
-
exportId,
|
|
225
|
-
timestamp: startTime,
|
|
226
|
-
data: { config, request }
|
|
227
|
-
});
|
|
228
|
-
if (request.callbacks?.onProgress) {
|
|
229
|
-
logger.info("\u{1F4DE} [UniversalExportService] \u8C03\u7528 onProgress \u56DE\u8C03 - \u5F00\u59CB");
|
|
230
|
-
request.callbacks.onProgress(progress);
|
|
231
|
-
}
|
|
232
|
-
logger.info("\u{1F4CA} [UniversalExportService] \u5F00\u59CB\u83B7\u53D6\u6570\u636E...");
|
|
233
|
-
const data = await this.getData(request);
|
|
234
|
-
logger.info("\u2705 [UniversalExportService] \u6570\u636E\u83B7\u53D6\u6210\u529F:", {
|
|
235
|
-
dataLength: data.length,
|
|
236
|
-
firstItem: data[0] ? Object.keys(data[0]) : [],
|
|
237
|
-
sampleData: data.slice(0, 2)
|
|
238
|
-
});
|
|
239
|
-
progress.totalRows = data.length;
|
|
240
|
-
progress.status = "processing";
|
|
241
|
-
if (request.callbacks?.onProgress) {
|
|
242
|
-
logger.info("\u{1F4DE} [UniversalExportService] \u8C03\u7528 onProgress \u56DE\u8C03 - \u6570\u636E\u5904\u7406");
|
|
243
|
-
progress.progress = 30;
|
|
244
|
-
request.callbacks.onProgress(progress);
|
|
245
|
-
}
|
|
246
|
-
logger.info("\u{1F504} [UniversalExportService] \u5F00\u59CB\u5904\u7406\u6570\u636E...");
|
|
247
|
-
const processedData = await this.processData(data, request, config);
|
|
248
|
-
logger.info("\u2705 [UniversalExportService] \u6570\u636E\u5904\u7406\u5B8C\u6210:", {
|
|
249
|
-
originalLength: data.length,
|
|
250
|
-
processedLength: processedData.length
|
|
251
|
-
});
|
|
252
|
-
if (request.callbacks?.onProgress) {
|
|
253
|
-
logger.info("\u{1F4DE} [UniversalExportService] \u8C03\u7528 onProgress \u56DE\u8C03 - \u6570\u636E\u5B8C\u6210");
|
|
254
|
-
progress.progress = 60;
|
|
255
|
-
request.callbacks.onProgress(progress);
|
|
256
|
-
}
|
|
257
|
-
logger.info("\u{1F4C4} [UniversalExportService] \u5F00\u59CB\u751F\u6210\u6587\u4EF6...");
|
|
258
|
-
const result = await this.generateFile(processedData, config, request, exportId);
|
|
259
|
-
logger.info("\u2705 [UniversalExportService] \u6587\u4EF6\u751F\u6210\u6210\u529F:", {
|
|
260
|
-
fileName: result.fileName,
|
|
261
|
-
fileSize: result.fileSize,
|
|
262
|
-
exportedRows: result.exportedRows
|
|
263
|
-
});
|
|
264
|
-
progress.status = "completed";
|
|
265
|
-
progress.progress = 100;
|
|
266
|
-
progress.processedRows = data.length;
|
|
267
|
-
if (request.callbacks?.onSuccess) {
|
|
268
|
-
logger.info("\u{1F4DE} [UniversalExportService] \u8C03\u7528 onSuccess \u56DE\u8C03");
|
|
269
|
-
request.callbacks.onSuccess(result);
|
|
270
|
-
}
|
|
271
|
-
this.emitEvent({
|
|
272
|
-
type: "export:complete",
|
|
273
|
-
exportId,
|
|
274
|
-
timestamp: /* @__PURE__ */ new Date(),
|
|
275
|
-
data: { result }
|
|
276
|
-
});
|
|
277
|
-
this.resultCache.set(exportId, {
|
|
278
|
-
result,
|
|
279
|
-
timestamp: Date.now()
|
|
280
|
-
});
|
|
281
|
-
this.activeExports.delete(exportId);
|
|
282
|
-
return result;
|
|
283
|
-
} catch (error) {
|
|
284
|
-
const errorObj = {
|
|
285
|
-
code: "EXPORT_FAILED",
|
|
286
|
-
message: error instanceof Error ? error.message : "\u5BFC\u51FA\u5931\u8D25",
|
|
287
|
-
details: { originalError: error },
|
|
288
|
-
timestamp: /* @__PURE__ */ new Date()
|
|
289
|
-
};
|
|
290
|
-
const progress = this.activeExports.get(exportId);
|
|
291
|
-
if (progress) {
|
|
292
|
-
progress.status = "failed";
|
|
293
|
-
progress.error = errorObj.message;
|
|
294
|
-
this.activeExports.delete(exportId);
|
|
295
|
-
}
|
|
296
|
-
if (request.callbacks?.onError) {
|
|
297
|
-
logger.info("\u{1F4DE} [UniversalExportService] \u8C03\u7528 onError \u56DE\u8C03");
|
|
298
|
-
request.callbacks.onError(errorObj);
|
|
299
|
-
}
|
|
300
|
-
this.emitEvent({
|
|
301
|
-
type: "export:error",
|
|
302
|
-
exportId,
|
|
303
|
-
timestamp: /* @__PURE__ */ new Date(),
|
|
304
|
-
error: errorObj.message,
|
|
305
|
-
data: { error: errorObj }
|
|
306
|
-
});
|
|
307
|
-
throw error;
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* 获取导出进度
|
|
312
|
-
*/
|
|
313
|
-
getExportProgress(exportId) {
|
|
314
|
-
return this.activeExports.get(exportId) || null;
|
|
315
|
-
}
|
|
316
|
-
/**
|
|
317
|
-
* 取消导出
|
|
318
|
-
*/
|
|
319
|
-
cancelExport(exportId) {
|
|
320
|
-
const progress = this.activeExports.get(exportId);
|
|
321
|
-
if (!progress) {
|
|
322
|
-
return false;
|
|
323
|
-
}
|
|
324
|
-
progress.status = "cancelled";
|
|
325
|
-
this.activeExports.delete(exportId);
|
|
326
|
-
this.emitEvent({
|
|
327
|
-
type: "export:cancel",
|
|
328
|
-
exportId,
|
|
329
|
-
timestamp: /* @__PURE__ */ new Date(),
|
|
330
|
-
data: { progress }
|
|
331
|
-
});
|
|
332
|
-
return true;
|
|
333
|
-
}
|
|
334
|
-
// ============= 事件管理 =============
|
|
335
|
-
/**
|
|
336
|
-
* 添加事件监听器
|
|
337
|
-
*/
|
|
338
|
-
addEventListener(type, listener) {
|
|
339
|
-
if (!this.eventListeners.has(type)) {
|
|
340
|
-
this.eventListeners.set(type, []);
|
|
341
|
-
}
|
|
342
|
-
this.eventListeners.get(type).push(listener);
|
|
343
|
-
}
|
|
344
|
-
/**
|
|
345
|
-
* 移除事件监听器
|
|
346
|
-
*/
|
|
347
|
-
removeEventListener(type, listener) {
|
|
348
|
-
const listeners = this.eventListeners.get(type);
|
|
349
|
-
if (listeners) {
|
|
350
|
-
const index = listeners.indexOf(listener);
|
|
351
|
-
if (index > -1) {
|
|
352
|
-
listeners.splice(index, 1);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
// ============= 私有方法 =============
|
|
357
|
-
/**
|
|
358
|
-
* 生成唯一ID
|
|
359
|
-
*/
|
|
360
|
-
generateId() {
|
|
361
|
-
return "export_" + Date.now() + "_" + Math.random().toString(36).substr(2, 9);
|
|
362
|
-
}
|
|
363
|
-
/**
|
|
364
|
-
* 验证配置
|
|
365
|
-
*/
|
|
366
|
-
validateConfig(config) {
|
|
367
|
-
if (!config.name || config.name.trim() === "") {
|
|
368
|
-
throw new ExportConfigError("\u914D\u7F6E\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");
|
|
369
|
-
}
|
|
370
|
-
if (!config.fields || config.fields.length === 0) {
|
|
371
|
-
throw new ExportConfigError("\u81F3\u5C11\u9700\u8981\u5B9A\u4E49\u4E00\u4E2A\u5B57\u6BB5");
|
|
372
|
-
}
|
|
373
|
-
const enabledFields = config.fields.filter((f) => f.enabled);
|
|
374
|
-
if (enabledFields.length === 0) {
|
|
375
|
-
throw new ExportConfigError("\u81F3\u5C11\u9700\u8981\u542F\u7528\u4E00\u4E2A\u5B57\u6BB5");
|
|
376
|
-
}
|
|
377
|
-
const keys = config.fields.map((f) => f.key);
|
|
378
|
-
const uniqueKeys = new Set(keys);
|
|
379
|
-
if (keys.length !== uniqueKeys.size) {
|
|
380
|
-
throw new ExportConfigError("\u5B57\u6BB5\u952E\u540D\u5FC5\u987B\u552F\u4E00");
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
/**
|
|
384
|
-
* 获取数据
|
|
385
|
-
*/
|
|
386
|
-
async getData(request) {
|
|
387
|
-
logger.info("\u{1F50D} [UniversalExportService] getData \u5F00\u59CB\u6267\u884C...");
|
|
388
|
-
try {
|
|
389
|
-
if (Array.isArray(request.dataSource)) {
|
|
390
|
-
logger.info("\u{1F4E6} [UniversalExportService] \u4F7F\u7528\u76F4\u63A5\u4F20\u9012\u7684\u6570\u636E\u6570\u7EC4:", {
|
|
391
|
-
length: request.dataSource.length
|
|
392
|
-
});
|
|
393
|
-
return request.dataSource;
|
|
394
|
-
}
|
|
395
|
-
if (typeof request.dataSource === "function") {
|
|
396
|
-
logger.info("\u{1F4DE} [UniversalExportService] \u8C03\u7528\u6570\u636E\u6E90\u51FD\u6570...");
|
|
397
|
-
const data = await request.dataSource();
|
|
398
|
-
logger.info("\u2705 [UniversalExportService] \u6570\u636E\u6E90\u51FD\u6570\u6267\u884C\u6210\u529F:", {
|
|
399
|
-
dataType: typeof data,
|
|
400
|
-
isArray: Array.isArray(data),
|
|
401
|
-
length: Array.isArray(data) ? data.length : "N/A"
|
|
402
|
-
});
|
|
403
|
-
return data;
|
|
404
|
-
}
|
|
405
|
-
console.error("\u274C [UniversalExportService] \u6570\u636E\u6E90\u7C7B\u578B\u4E0D\u652F\u6301:", typeof request.dataSource);
|
|
406
|
-
throw new ExportDataError("\u4E0D\u652F\u6301\u7684\u6570\u636E\u6E90\u7C7B\u578B");
|
|
407
|
-
} catch (error) {
|
|
408
|
-
console.error("\u274C [UniversalExportService] \u83B7\u53D6\u6570\u636E\u5931\u8D25:", error);
|
|
409
|
-
throw new ExportDataError(
|
|
410
|
-
"\u83B7\u53D6\u6570\u636E\u5931\u8D25: " + (error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"),
|
|
411
|
-
{ originalError: error }
|
|
412
|
-
);
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
/**
|
|
416
|
-
* 处理数据
|
|
417
|
-
*/
|
|
418
|
-
async processData(data, request, config) {
|
|
419
|
-
logger.info("\u{1F504} [UniversalExportService] processData \u5F00\u59CB\u6267\u884C:", {
|
|
420
|
-
dataLength: data.length,
|
|
421
|
-
hasFilters: !!(request.filters && request.filters.length > 0),
|
|
422
|
-
hasSortBy: !!(request.sortBy && request.sortBy.length > 0),
|
|
423
|
-
hasPagination: !!request.pagination,
|
|
424
|
-
hasGrouping: !!(config.grouping && config.grouping.enabled),
|
|
425
|
-
maxRows: config.maxRows
|
|
426
|
-
});
|
|
427
|
-
logger.info("\u{1F50D} [UniversalExportService] \u8BE6\u7EC6\u5206\u7EC4\u914D\u7F6E\u68C0\u67E5:", {
|
|
428
|
-
configGrouping: config.grouping,
|
|
429
|
-
groupingExists: !!config.grouping,
|
|
430
|
-
groupingEnabled: config.grouping?.enabled,
|
|
431
|
-
groupingFields: config.grouping?.fields,
|
|
432
|
-
groupingFieldsLength: config.grouping?.fields?.length
|
|
433
|
-
});
|
|
434
|
-
let processedData = [...data];
|
|
435
|
-
if (request.filters && request.filters.length > 0) {
|
|
436
|
-
logger.info("\u{1F50D} [UniversalExportService] \u5E94\u7528\u8FC7\u6EE4\u5668...");
|
|
437
|
-
processedData = this.applyFilters(processedData, request.filters);
|
|
438
|
-
logger.info("\u2705 [UniversalExportService] \u8FC7\u6EE4\u5668\u5E94\u7528\u5B8C\u6210:", {
|
|
439
|
-
beforeLength: data.length,
|
|
440
|
-
afterLength: processedData.length
|
|
441
|
-
});
|
|
442
|
-
}
|
|
443
|
-
if (request.sortBy && request.sortBy.length > 0) {
|
|
444
|
-
logger.info("\u{1F4CA} [UniversalExportService] \u5E94\u7528\u6392\u5E8F...");
|
|
445
|
-
processedData = this.applySorting(processedData, request.sortBy);
|
|
446
|
-
logger.info("\u2705 [UniversalExportService] \u6392\u5E8F\u5E94\u7528\u5B8C\u6210");
|
|
447
|
-
}
|
|
448
|
-
if (config.grouping && config.grouping.enabled) {
|
|
449
|
-
logger.info("\u{1F4CA} [UniversalExportService] \u5E94\u7528\u5206\u7EC4...");
|
|
450
|
-
processedData = this.applyGrouping(processedData, config.grouping);
|
|
451
|
-
logger.info("\u2705 [UniversalExportService] \u5206\u7EC4\u5E94\u7528\u5B8C\u6210:", {
|
|
452
|
-
groupsCount: this.countGroups(processedData),
|
|
453
|
-
resultLength: processedData.length
|
|
454
|
-
});
|
|
455
|
-
}
|
|
456
|
-
if (request.pagination) {
|
|
457
|
-
logger.info("\u{1F4C4} [UniversalExportService] \u5E94\u7528\u5206\u9875...");
|
|
458
|
-
const { page, pageSize } = request.pagination;
|
|
459
|
-
const start = (page - 1) * pageSize;
|
|
460
|
-
const end = start + pageSize;
|
|
461
|
-
processedData = processedData.slice(start, end);
|
|
462
|
-
logger.info("\u2705 [UniversalExportService] \u5206\u9875\u5E94\u7528\u5B8C\u6210:", {
|
|
463
|
-
page,
|
|
464
|
-
pageSize,
|
|
465
|
-
start,
|
|
466
|
-
end,
|
|
467
|
-
resultLength: processedData.length
|
|
468
|
-
});
|
|
469
|
-
}
|
|
470
|
-
if (config.maxRows && processedData.length > config.maxRows) {
|
|
471
|
-
logger.info("\u{1F4CF} [UniversalExportService] \u5E94\u7528\u884C\u6570\u9650\u5236...");
|
|
472
|
-
processedData = processedData.slice(0, config.maxRows);
|
|
473
|
-
logger.info("\u2705 [UniversalExportService] \u884C\u6570\u9650\u5236\u5E94\u7528\u5B8C\u6210:", {
|
|
474
|
-
maxRows: config.maxRows,
|
|
475
|
-
resultLength: processedData.length
|
|
476
|
-
});
|
|
477
|
-
}
|
|
478
|
-
logger.info("\u2705 [UniversalExportService] processData \u6267\u884C\u5B8C\u6210:", {
|
|
479
|
-
originalLength: data.length,
|
|
480
|
-
finalLength: processedData.length
|
|
481
|
-
});
|
|
482
|
-
return processedData;
|
|
483
|
-
}
|
|
484
|
-
/**
|
|
485
|
-
* 应用过滤器
|
|
486
|
-
*/
|
|
487
|
-
applyFilters(data, filters) {
|
|
488
|
-
return data.filter((item) => {
|
|
489
|
-
return filters.every((filter) => {
|
|
490
|
-
const value = this.getNestedValue(item, filter.field);
|
|
491
|
-
switch (filter.operator) {
|
|
492
|
-
case "eq":
|
|
493
|
-
return value === filter.value;
|
|
494
|
-
case "ne":
|
|
495
|
-
return value !== filter.value;
|
|
496
|
-
case "gt":
|
|
497
|
-
return value > filter.value;
|
|
498
|
-
case "gte":
|
|
499
|
-
return value >= filter.value;
|
|
500
|
-
case "lt":
|
|
501
|
-
return value < filter.value;
|
|
502
|
-
case "lte":
|
|
503
|
-
return value <= filter.value;
|
|
504
|
-
case "contains":
|
|
505
|
-
return String(value).includes(String(filter.value));
|
|
506
|
-
case "startsWith":
|
|
507
|
-
return String(value).startsWith(String(filter.value));
|
|
508
|
-
case "endsWith":
|
|
509
|
-
return String(value).endsWith(String(filter.value));
|
|
510
|
-
case "in":
|
|
511
|
-
return Array.isArray(filter.value) && filter.value.includes(value);
|
|
512
|
-
case "notIn":
|
|
513
|
-
return Array.isArray(filter.value) && !filter.value.includes(value);
|
|
514
|
-
default:
|
|
515
|
-
return true;
|
|
516
|
-
}
|
|
517
|
-
});
|
|
518
|
-
});
|
|
519
|
-
}
|
|
520
|
-
/**
|
|
521
|
-
* 应用排序
|
|
522
|
-
*/
|
|
523
|
-
applySorting(data, sortBy) {
|
|
524
|
-
return data.sort((a, b) => {
|
|
525
|
-
for (const sort of sortBy) {
|
|
526
|
-
const aValue = this.getNestedValue(a, sort.field);
|
|
527
|
-
const bValue = this.getNestedValue(b, sort.field);
|
|
528
|
-
if (aValue < bValue) {
|
|
529
|
-
return sort.direction === "asc" ? -1 : 1;
|
|
530
|
-
}
|
|
531
|
-
if (aValue > bValue) {
|
|
532
|
-
return sort.direction === "asc" ? 1 : -1;
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
return 0;
|
|
536
|
-
});
|
|
537
|
-
}
|
|
538
|
-
/**
|
|
539
|
-
* 获取嵌套值
|
|
540
|
-
*/
|
|
541
|
-
getNestedValue(obj, path) {
|
|
542
|
-
return path.split(".").reduce((current, key) => {
|
|
543
|
-
return current && current[key] !== void 0 ? current[key] : null;
|
|
544
|
-
}, obj);
|
|
545
|
-
}
|
|
546
|
-
/**
|
|
547
|
-
* 过滤掉所有行都为空值的字段
|
|
548
|
-
*/
|
|
549
|
-
filterEmptyFields(data, fields) {
|
|
550
|
-
const filteredFields = fields.filter((field) => {
|
|
551
|
-
const forceKeepFields = ["pickupMethod", "notes", "adminNotes"];
|
|
552
|
-
if (forceKeepFields.includes(field.key)) {
|
|
553
|
-
logger.info('\u{1F527} [UniversalExportService] \u5F3A\u5236\u4FDD\u7559\u5B57\u6BB5 "' + field.key + '" (' + field.label + ")");
|
|
554
|
-
return true;
|
|
555
|
-
}
|
|
556
|
-
const hasValue = data.some((item) => {
|
|
557
|
-
const value = this.getNestedValue(item, field.key);
|
|
558
|
-
return value !== null && value !== void 0 && value !== "";
|
|
559
|
-
});
|
|
560
|
-
if (!hasValue) {
|
|
561
|
-
logger.info(
|
|
562
|
-
'\u{1F50D} [UniversalExportService] \u5B57\u6BB5 "' + field.key + '" (' + field.label + ") \u88AB\u8FC7\u6EE4\u6389 - \u6240\u6709\u884C\u90FD\u4E3A\u7A7A\u503C"
|
|
563
|
-
);
|
|
564
|
-
}
|
|
565
|
-
return hasValue;
|
|
566
|
-
});
|
|
567
|
-
logger.info("\u{1F4CA} [UniversalExportService] \u5B57\u6BB5\u8FC7\u6EE4\u7ED3\u679C:", {
|
|
568
|
-
\u539F\u59CB\u5B57\u6BB5\u6570: fields.length,
|
|
569
|
-
\u8FC7\u6EE4\u540E\u5B57\u6BB5\u6570: filteredFields.length,
|
|
570
|
-
\u88AB\u8FC7\u6EE4\u7684\u5B57\u6BB5: fields.filter((f) => !filteredFields.includes(f)).map((f) => f.key),
|
|
571
|
-
\u4FDD\u7559\u7684\u5B57\u6BB5: filteredFields.map((f) => f.key)
|
|
572
|
-
});
|
|
573
|
-
return filteredFields;
|
|
574
|
-
}
|
|
575
|
-
/**
|
|
576
|
-
* 生成文件
|
|
577
|
-
*/
|
|
578
|
-
async generateFile(data, config, request, exportId) {
|
|
579
|
-
const startTime = /* @__PURE__ */ new Date();
|
|
580
|
-
const enabledFields = config.fields.filter((f) => f.enabled);
|
|
581
|
-
logger.info("\u{1F4C4} [UniversalExportService] generateFile \u5F00\u59CB\u6267\u884C:", {
|
|
582
|
-
dataLength: data.length,
|
|
583
|
-
enabledFieldsCount: enabledFields.length,
|
|
584
|
-
format: config.format,
|
|
585
|
-
enabledFields: enabledFields.map((f) => ({ key: f.key, label: f.label }))
|
|
586
|
-
});
|
|
587
|
-
try {
|
|
588
|
-
let content;
|
|
589
|
-
let fileName;
|
|
590
|
-
switch (config.format) {
|
|
591
|
-
case "csv":
|
|
592
|
-
logger.info("\u{1F4CA} [UniversalExportService] \u751F\u6210CSV\u683C\u5F0F...");
|
|
593
|
-
content = this.generateCSV(data, enabledFields, config);
|
|
594
|
-
fileName = this.generateFileName(
|
|
595
|
-
request.customFileName || config.fileNameTemplate,
|
|
596
|
-
"csv"
|
|
597
|
-
);
|
|
598
|
-
logger.info("\u2705 [UniversalExportService] CSV\u751F\u6210\u5B8C\u6210:", {
|
|
599
|
-
contentLength: content.length,
|
|
600
|
-
fileName
|
|
601
|
-
});
|
|
602
|
-
break;
|
|
603
|
-
case "excel":
|
|
604
|
-
logger.info("\u{1F4CA} [UniversalExportService] \u751F\u6210Excel\u683C\u5F0F...");
|
|
605
|
-
const excelBuffer = this.generateExcel(data, enabledFields, config);
|
|
606
|
-
fileName = this.generateFileName(
|
|
607
|
-
request.customFileName || config.fileNameTemplate,
|
|
608
|
-
"xlsx"
|
|
609
|
-
);
|
|
610
|
-
logger.info("\u2705 [UniversalExportService] Excel\u751F\u6210\u5B8C\u6210:", {
|
|
611
|
-
bufferLength: excelBuffer.byteLength,
|
|
612
|
-
fileName
|
|
613
|
-
});
|
|
614
|
-
const excelBlob = new Blob([excelBuffer], { type: this.getMimeType(config.format) });
|
|
615
|
-
const endTime2 = /* @__PURE__ */ new Date();
|
|
616
|
-
const duration2 = endTime2.getTime() - startTime.getTime();
|
|
617
|
-
return {
|
|
618
|
-
exportId,
|
|
619
|
-
fileName,
|
|
620
|
-
fileSize: excelBlob.size,
|
|
621
|
-
fileBlob: excelBlob,
|
|
622
|
-
exportedRows: data.length,
|
|
623
|
-
startTime,
|
|
624
|
-
endTime: endTime2,
|
|
625
|
-
duration: duration2,
|
|
626
|
-
statistics: {
|
|
627
|
-
totalRows: data.length,
|
|
628
|
-
filteredRows: data.length,
|
|
629
|
-
exportedRows: data.length,
|
|
630
|
-
skippedRows: 0
|
|
631
|
-
}
|
|
632
|
-
};
|
|
633
|
-
case "json":
|
|
634
|
-
logger.info("\u{1F4C4} [UniversalExportService] \u751F\u6210JSON\u683C\u5F0F...");
|
|
635
|
-
content = this.generateJSON(data, enabledFields);
|
|
636
|
-
fileName = this.generateFileName(
|
|
637
|
-
request.customFileName || config.fileNameTemplate,
|
|
638
|
-
"json"
|
|
639
|
-
);
|
|
640
|
-
logger.info("\u2705 [UniversalExportService] JSON\u751F\u6210\u5B8C\u6210:", {
|
|
641
|
-
contentLength: content.length,
|
|
642
|
-
fileName
|
|
643
|
-
});
|
|
644
|
-
break;
|
|
645
|
-
default:
|
|
646
|
-
console.error("\u274C [UniversalExportService] \u4E0D\u652F\u6301\u7684\u683C\u5F0F:", config.format);
|
|
647
|
-
throw new ExportFileError("\u4E0D\u652F\u6301\u7684\u5BFC\u51FA\u683C\u5F0F: " + config.format);
|
|
648
|
-
}
|
|
649
|
-
const blob = new Blob([content], { type: this.getMimeType(config.format) });
|
|
650
|
-
if (blob.size > this.config.maxFileSize) {
|
|
651
|
-
throw new ExportFileError("\u6587\u4EF6\u5927\u5C0F\u8D85\u8FC7\u9650\u5236: " + blob.size + " > " + this.config.maxFileSize);
|
|
652
|
-
}
|
|
653
|
-
const endTime = /* @__PURE__ */ new Date();
|
|
654
|
-
const duration = endTime.getTime() - startTime.getTime();
|
|
655
|
-
return {
|
|
656
|
-
exportId,
|
|
657
|
-
fileName,
|
|
658
|
-
fileSize: blob.size,
|
|
659
|
-
fileBlob: blob,
|
|
660
|
-
exportedRows: data.length,
|
|
661
|
-
startTime,
|
|
662
|
-
endTime,
|
|
663
|
-
duration,
|
|
664
|
-
statistics: {
|
|
665
|
-
totalRows: data.length,
|
|
666
|
-
filteredRows: data.length,
|
|
667
|
-
exportedRows: data.length,
|
|
668
|
-
skippedRows: 0
|
|
669
|
-
}
|
|
670
|
-
};
|
|
671
|
-
} catch (error) {
|
|
672
|
-
throw new ExportFileError(
|
|
673
|
-
"\u751F\u6210\u6587\u4EF6\u5931\u8D25: " + (error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"),
|
|
674
|
-
{ originalError: error }
|
|
675
|
-
);
|
|
676
|
-
}
|
|
677
|
-
}
|
|
678
|
-
/**
|
|
679
|
-
* 生成CSV内容
|
|
680
|
-
*/
|
|
681
|
-
generateCSV(data, fields, config) {
|
|
682
|
-
logger.info("\u{1F4CA} [UniversalExportService] generateCSV \u5F00\u59CB\u6267\u884C:", {
|
|
683
|
-
dataLength: data.length,
|
|
684
|
-
fieldsCount: fields.length,
|
|
685
|
-
includeHeader: config.includeHeader,
|
|
686
|
-
delimiter: config.delimiter,
|
|
687
|
-
addBOM: config.addBOM
|
|
688
|
-
});
|
|
689
|
-
const lines = [];
|
|
690
|
-
if (config.addBOM) {
|
|
691
|
-
lines.push("\uFEFF");
|
|
692
|
-
logger.info("\u{1F4DD} [UniversalExportService] \u6DFB\u52A0BOM");
|
|
693
|
-
}
|
|
694
|
-
const nonEmptyFields = this.filterEmptyFields(data, fields);
|
|
695
|
-
logger.info("\u{1F4CA} [UniversalExportService] \u8FC7\u6EE4\u7A7A\u5B57\u6BB5:", {
|
|
696
|
-
originalFieldsCount: fields.length,
|
|
697
|
-
nonEmptyFieldsCount: nonEmptyFields.length,
|
|
698
|
-
removedFields: fields.filter((f) => !nonEmptyFields.includes(f)).map((f) => f.key)
|
|
699
|
-
});
|
|
700
|
-
if (config.includeHeader) {
|
|
701
|
-
const headers = nonEmptyFields.map((f) => this.escapeCSVField(f.label));
|
|
702
|
-
lines.push(headers.join(config.delimiter));
|
|
703
|
-
logger.info("\u{1F4CB} [UniversalExportService] \u6DFB\u52A0\u8868\u5934:", headers);
|
|
704
|
-
}
|
|
705
|
-
logger.info("\u{1F4CA} [UniversalExportService] \u5F00\u59CB\u5904\u7406\u6570\u636E\u884C...");
|
|
706
|
-
for (let i = 0; i < data.length; i++) {
|
|
707
|
-
const item = data[i];
|
|
708
|
-
if (i === 0) {
|
|
709
|
-
logger.info("\u{1F4CA} [UniversalExportService] \u7B2C\u4E00\u884C\u6570\u636E\u793A\u4F8B:", item);
|
|
710
|
-
}
|
|
711
|
-
const row = nonEmptyFields.map((field) => {
|
|
712
|
-
if (item.__isGroupHeader) {
|
|
713
|
-
return this.escapeCSVField(item[field.key] || "");
|
|
714
|
-
}
|
|
715
|
-
let value = this.getNestedValue(item, field.key);
|
|
716
|
-
if (field.formatter) {
|
|
717
|
-
value = field.formatter(value);
|
|
718
|
-
} else if (DEFAULT_FORMATTERS[field.type]) {
|
|
719
|
-
value = DEFAULT_FORMATTERS[field.type](value);
|
|
720
|
-
} else {
|
|
721
|
-
value = String(value || "");
|
|
722
|
-
}
|
|
723
|
-
return this.escapeCSVField(value);
|
|
724
|
-
});
|
|
725
|
-
lines.push(row.join(config.delimiter));
|
|
726
|
-
if (i === 0) {
|
|
727
|
-
logger.info("\u{1F4CA} [UniversalExportService] \u7B2C\u4E00\u884C\u5904\u7406\u7ED3\u679C:", row);
|
|
728
|
-
}
|
|
729
|
-
}
|
|
730
|
-
const result = lines.join("\n");
|
|
731
|
-
logger.info("\u2705 [UniversalExportService] CSV\u751F\u6210\u5B8C\u6210:", {
|
|
732
|
-
totalLines: lines.length,
|
|
733
|
-
resultLength: result.length
|
|
734
|
-
});
|
|
735
|
-
return result;
|
|
736
|
-
}
|
|
737
|
-
/**
|
|
738
|
-
* 生成JSON内容
|
|
739
|
-
*/
|
|
740
|
-
generateJSON(data, fields) {
|
|
741
|
-
const processedData = data.map((item) => {
|
|
742
|
-
const processed = {};
|
|
743
|
-
for (const field of fields) {
|
|
744
|
-
let value = this.getNestedValue(item, field.key);
|
|
745
|
-
if (field.formatter) {
|
|
746
|
-
value = field.formatter(value);
|
|
747
|
-
} else if (DEFAULT_FORMATTERS[field.type]) {
|
|
748
|
-
value = DEFAULT_FORMATTERS[field.type](value);
|
|
749
|
-
}
|
|
750
|
-
processed[field.key] = value;
|
|
751
|
-
}
|
|
752
|
-
return processed;
|
|
753
|
-
});
|
|
754
|
-
return JSON.stringify(processedData, null, 2);
|
|
755
|
-
}
|
|
756
|
-
/**
|
|
757
|
-
* 转义CSV字段
|
|
758
|
-
*/
|
|
759
|
-
escapeCSVField(value) {
|
|
760
|
-
if (value.includes(",") || value.includes('"') || value.includes("\n")) {
|
|
761
|
-
return '"' + value.replace(/"/g, '""') + '"';
|
|
762
|
-
}
|
|
763
|
-
return value;
|
|
764
|
-
}
|
|
765
|
-
/**
|
|
766
|
-
* 生成文件名
|
|
767
|
-
*/
|
|
768
|
-
generateFileName(template, extension) {
|
|
769
|
-
const now = /* @__PURE__ */ new Date();
|
|
770
|
-
const dateStr = now.toISOString().split("T")[0];
|
|
771
|
-
const timeStr = now.toTimeString().split(" ")[0].replace(/:/g, "-");
|
|
772
|
-
return template.replace("{date}", dateStr).replace("{time}", timeStr).replace("{timestamp}", now.getTime().toString()) + "." + extension;
|
|
773
|
-
}
|
|
774
|
-
/**
|
|
775
|
-
* 获取MIME类型
|
|
776
|
-
*/
|
|
777
|
-
getMimeType(format) {
|
|
778
|
-
switch (format) {
|
|
779
|
-
case "csv":
|
|
780
|
-
return "text/csv; charset=utf-8";
|
|
781
|
-
case "json":
|
|
782
|
-
return "application/json; charset=utf-8";
|
|
783
|
-
case "excel":
|
|
784
|
-
return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
|
785
|
-
default:
|
|
786
|
-
return "application/octet-stream";
|
|
787
|
-
}
|
|
788
|
-
}
|
|
789
|
-
/**
|
|
790
|
-
* 触发事件
|
|
791
|
-
*/
|
|
792
|
-
emitEvent(event) {
|
|
793
|
-
const listeners = this.eventListeners.get(event.type);
|
|
794
|
-
if (listeners) {
|
|
795
|
-
listeners.forEach((listener) => {
|
|
796
|
-
try {
|
|
797
|
-
listener(event);
|
|
798
|
-
} catch (error) {
|
|
799
|
-
console.error("\u4E8B\u4EF6\u76D1\u542C\u5668\u6267\u884C\u5931\u8D25:", error);
|
|
800
|
-
}
|
|
801
|
-
});
|
|
802
|
-
}
|
|
803
|
-
}
|
|
804
|
-
// ============= 分组相关方法 =============
|
|
805
|
-
/**
|
|
806
|
-
* 应用分组
|
|
807
|
-
*/
|
|
808
|
-
applyGrouping(data, groupingConfig) {
|
|
809
|
-
logger.info("\u{1F4CA} [UniversalExportService] applyGrouping \u5F00\u59CB\u6267\u884C:", {
|
|
810
|
-
dataLength: data.length,
|
|
811
|
-
groupingFields: groupingConfig.fields.map((f) => f.key),
|
|
812
|
-
preserveOrder: groupingConfig.preserveOrder
|
|
813
|
-
});
|
|
814
|
-
if (!groupingConfig.fields || groupingConfig.fields.length === 0) {
|
|
815
|
-
return data;
|
|
816
|
-
}
|
|
817
|
-
const grouped = this.groupDataByFields(data, groupingConfig);
|
|
818
|
-
const result = this.processGroupedData(grouped, groupingConfig);
|
|
819
|
-
logger.info("\u2705 [UniversalExportService] applyGrouping \u6267\u884C\u5B8C\u6210:", {
|
|
820
|
-
originalLength: data.length,
|
|
821
|
-
groupedLength: result.length
|
|
822
|
-
});
|
|
823
|
-
return result;
|
|
824
|
-
}
|
|
825
|
-
/**
|
|
826
|
-
* 按字段分组数据
|
|
827
|
-
*/
|
|
828
|
-
groupDataByFields(data, groupingConfig) {
|
|
829
|
-
const groups = /* @__PURE__ */ new Map();
|
|
830
|
-
for (const item of data) {
|
|
831
|
-
const groupKey = this.generateGroupKey(item, groupingConfig.fields);
|
|
832
|
-
if (!groups.has(groupKey)) {
|
|
833
|
-
groups.set(groupKey, []);
|
|
834
|
-
}
|
|
835
|
-
groups.get(groupKey).push(item);
|
|
836
|
-
}
|
|
837
|
-
return groups;
|
|
838
|
-
}
|
|
839
|
-
/**
|
|
840
|
-
* 生成分组键
|
|
841
|
-
*/
|
|
842
|
-
generateGroupKey(item, groupingFields) {
|
|
843
|
-
const keyParts = groupingFields.map((field) => {
|
|
844
|
-
const value = this.getNestedValue(item, field.key);
|
|
845
|
-
if (value === null || value === void 0 || value === "") {
|
|
846
|
-
return "__NULL__";
|
|
847
|
-
}
|
|
848
|
-
return String(value);
|
|
849
|
-
});
|
|
850
|
-
return keyParts.join("|");
|
|
851
|
-
}
|
|
852
|
-
/**
|
|
853
|
-
* 处理分组后的数据
|
|
854
|
-
*/
|
|
855
|
-
processGroupedData(groups, groupingConfig) {
|
|
856
|
-
const result = [];
|
|
857
|
-
for (const [groupKey, groupItems] of groups) {
|
|
858
|
-
if (groupItems.length === 0) continue;
|
|
859
|
-
const groupValues = groupKey.split("|");
|
|
860
|
-
const processedGroup = this.processGroup(groupItems, groupingConfig, groupValues);
|
|
861
|
-
result.push(...processedGroup);
|
|
862
|
-
}
|
|
863
|
-
return result;
|
|
864
|
-
}
|
|
865
|
-
/**
|
|
866
|
-
* 处理单个分组
|
|
867
|
-
*/
|
|
868
|
-
processGroup(groupItems, groupingConfig, groupValues) {
|
|
869
|
-
const result = [];
|
|
870
|
-
const showGroupHeader = groupingConfig.fields.some((f) => f.showGroupHeader);
|
|
871
|
-
if (showGroupHeader) {
|
|
872
|
-
const groupHeader = this.createGroupHeader(groupValues, groupingConfig.fields);
|
|
873
|
-
result.push(groupHeader);
|
|
874
|
-
}
|
|
875
|
-
if (groupingConfig.fields.length > 1) {
|
|
876
|
-
result.push(...this.processMultiFieldMergeMode(groupItems, groupingConfig.fields));
|
|
877
|
-
} else {
|
|
878
|
-
const primaryGroupField = groupingConfig.fields[0];
|
|
879
|
-
switch (primaryGroupField.mode) {
|
|
880
|
-
case "merge":
|
|
881
|
-
result.push(...this.processMergeMode(groupItems, primaryGroupField));
|
|
882
|
-
break;
|
|
883
|
-
case "separate":
|
|
884
|
-
result.push(...groupItems);
|
|
885
|
-
break;
|
|
886
|
-
case "nested":
|
|
887
|
-
result.push(...this.processNestedMode(groupItems, groupingConfig));
|
|
888
|
-
break;
|
|
889
|
-
default:
|
|
890
|
-
result.push(...groupItems);
|
|
891
|
-
}
|
|
892
|
-
}
|
|
893
|
-
return result;
|
|
894
|
-
}
|
|
895
|
-
/**
|
|
896
|
-
* 创建分组头行
|
|
897
|
-
*/
|
|
898
|
-
createGroupHeader(groupValues, groupingFields) {
|
|
899
|
-
const header = { __isGroupHeader: true };
|
|
900
|
-
groupingFields.forEach((field, index) => {
|
|
901
|
-
const value = groupValues[index] === "__NULL__" ? "" : groupValues[index];
|
|
902
|
-
const template = field.groupHeaderTemplate || field.label + ": {value}";
|
|
903
|
-
header[field.key] = template.replace("{value}", value);
|
|
904
|
-
});
|
|
905
|
-
return header;
|
|
906
|
-
}
|
|
907
|
-
/**
|
|
908
|
-
* 处理合并模式
|
|
909
|
-
*/
|
|
910
|
-
processMergeMode(groupItems, groupField) {
|
|
911
|
-
if (groupItems.length === 0) return [];
|
|
912
|
-
const result = [];
|
|
913
|
-
const firstItem = { ...groupItems[0] };
|
|
914
|
-
firstItem.__groupSize = groupItems.length;
|
|
915
|
-
firstItem.__isGroupFirst = true;
|
|
916
|
-
result.push(firstItem);
|
|
917
|
-
for (let i = 1; i < groupItems.length; i++) {
|
|
918
|
-
const item = { ...groupItems[i] };
|
|
919
|
-
item[groupField.key] = "";
|
|
920
|
-
item.__isGroupChild = true;
|
|
921
|
-
item.__groupIndex = i;
|
|
922
|
-
result.push(item);
|
|
923
|
-
}
|
|
924
|
-
return result;
|
|
925
|
-
}
|
|
926
|
-
/**
|
|
927
|
-
* 处理多字段合并模式
|
|
928
|
-
*/
|
|
929
|
-
processMultiFieldMergeMode(groupItems, groupFields) {
|
|
930
|
-
if (groupItems.length === 0) return [];
|
|
931
|
-
const result = [];
|
|
932
|
-
const firstItem = { ...groupItems[0] };
|
|
933
|
-
firstItem.__groupSize = groupItems.length;
|
|
934
|
-
firstItem.__isGroupFirst = true;
|
|
935
|
-
groupFields.forEach((field) => {
|
|
936
|
-
firstItem["__" + field.key + "_groupSize"] = groupItems.length;
|
|
937
|
-
firstItem["__" + field.key + "_isGroupFirst"] = true;
|
|
938
|
-
});
|
|
939
|
-
result.push(firstItem);
|
|
940
|
-
logger.info("\u{1F517} [UniversalExportService] \u5904\u7406\u591A\u5B57\u6BB5\u5408\u5E76\u6A21\u5F0F:", {
|
|
941
|
-
groupItemsLength: groupItems.length,
|
|
942
|
-
groupFields: groupFields.map((f) => f.key),
|
|
943
|
-
firstItem
|
|
944
|
-
});
|
|
945
|
-
for (let i = 1; i < groupItems.length; i++) {
|
|
946
|
-
const item = { ...groupItems[i] };
|
|
947
|
-
groupFields.forEach((field) => {
|
|
948
|
-
item[field.key] = "";
|
|
949
|
-
});
|
|
950
|
-
item.__isGroupChild = true;
|
|
951
|
-
item.__groupIndex = i;
|
|
952
|
-
result.push(item);
|
|
953
|
-
}
|
|
954
|
-
return result;
|
|
955
|
-
}
|
|
956
|
-
/**
|
|
957
|
-
* 处理嵌套模式
|
|
958
|
-
*/
|
|
959
|
-
processNestedMode(groupItems, groupingConfig) {
|
|
960
|
-
if (groupingConfig.fields.length === 1) {
|
|
961
|
-
return this.processMergeMode(groupItems, groupingConfig.fields[0]);
|
|
962
|
-
}
|
|
963
|
-
const subGroupingConfig = {
|
|
964
|
-
...groupingConfig,
|
|
965
|
-
fields: groupingConfig.fields.slice(1)
|
|
966
|
-
};
|
|
967
|
-
return this.applyGrouping(groupItems, subGroupingConfig);
|
|
968
|
-
}
|
|
969
|
-
/**
|
|
970
|
-
* 统计分组数量
|
|
971
|
-
*/
|
|
972
|
-
countGroups(data) {
|
|
973
|
-
const groupHeaders = data.filter((item) => item.__isGroupHeader);
|
|
974
|
-
const groupFirsts = data.filter((item) => item.__isGroupFirst);
|
|
975
|
-
return Math.max(groupHeaders.length, groupFirsts.length);
|
|
976
|
-
}
|
|
977
|
-
/**
|
|
978
|
-
* 生成Excel文件
|
|
979
|
-
*/
|
|
980
|
-
generateExcel(data, fields, config) {
|
|
981
|
-
logger.info("\u{1F4CA} [UniversalExportService] generateExcel \u5F00\u59CB\u6267\u884C:", {
|
|
982
|
-
dataLength: data.length,
|
|
983
|
-
fieldsCount: fields.length,
|
|
984
|
-
hasGrouping: !!(config.grouping && config.grouping.enabled)
|
|
985
|
-
});
|
|
986
|
-
const workbook = XLSX.utils.book_new();
|
|
987
|
-
const nonEmptyFields = this.filterEmptyFields(data, fields);
|
|
988
|
-
const worksheetData = this.prepareExcelData(data, nonEmptyFields, config);
|
|
989
|
-
const worksheet = XLSX.utils.aoa_to_sheet(worksheetData);
|
|
990
|
-
if (config.grouping && config.grouping.enabled) {
|
|
991
|
-
this.applyExcelGrouping(
|
|
992
|
-
worksheet,
|
|
993
|
-
data,
|
|
994
|
-
nonEmptyFields,
|
|
995
|
-
config.grouping,
|
|
996
|
-
config.includeHeader
|
|
997
|
-
);
|
|
998
|
-
}
|
|
999
|
-
this.setExcelColumnWidths(worksheet, nonEmptyFields);
|
|
1000
|
-
this.applyExcelDataStyles(worksheet, config.includeHeader);
|
|
1001
|
-
XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1");
|
|
1002
|
-
const excelBuffer = XLSX.write(workbook, {
|
|
1003
|
-
bookType: "xlsx",
|
|
1004
|
-
type: "array",
|
|
1005
|
-
cellStyles: true
|
|
1006
|
-
});
|
|
1007
|
-
logger.info("\u2705 [UniversalExportService] generateExcel \u6267\u884C\u5B8C\u6210");
|
|
1008
|
-
return excelBuffer;
|
|
1009
|
-
}
|
|
1010
|
-
/**
|
|
1011
|
-
* 准备Excel数据
|
|
1012
|
-
*/
|
|
1013
|
-
prepareExcelData(data, fields, config) {
|
|
1014
|
-
const result = [];
|
|
1015
|
-
logger.info("\u{1F4CA} [UniversalExportService] \u51C6\u5907Excel\u6570\u636E:", {
|
|
1016
|
-
dataLength: data.length,
|
|
1017
|
-
fieldsCount: fields.length,
|
|
1018
|
-
includeHeader: config.includeHeader,
|
|
1019
|
-
hasGrouping: !!(config.grouping && config.grouping.enabled)
|
|
1020
|
-
});
|
|
1021
|
-
if (config.includeHeader) {
|
|
1022
|
-
const headers = fields.map((field) => field.label);
|
|
1023
|
-
result.push(headers);
|
|
1024
|
-
logger.info("\u{1F4CB} [UniversalExportService] \u6DFB\u52A0\u8868\u5934:", headers);
|
|
1025
|
-
}
|
|
1026
|
-
for (let i = 0; i < data.length; i++) {
|
|
1027
|
-
const item = data[i];
|
|
1028
|
-
const row = fields.map((field) => {
|
|
1029
|
-
if (item.__isGroupHeader) {
|
|
1030
|
-
return item[field.key] || "";
|
|
1031
|
-
}
|
|
1032
|
-
let value = this.getNestedValue(item, field.key);
|
|
1033
|
-
if (field.formatter) {
|
|
1034
|
-
value = field.formatter(value);
|
|
1035
|
-
} else if (DEFAULT_FORMATTERS[field.type]) {
|
|
1036
|
-
value = DEFAULT_FORMATTERS[field.type](value);
|
|
1037
|
-
} else {
|
|
1038
|
-
value = String(value || "");
|
|
1039
|
-
}
|
|
1040
|
-
return value;
|
|
1041
|
-
});
|
|
1042
|
-
result.push(row);
|
|
1043
|
-
if (i === 0) {
|
|
1044
|
-
logger.info("\u{1F4CA} [UniversalExportService] \u7B2C\u4E00\u884C\u6570\u636E\u793A\u4F8B:", row);
|
|
1045
|
-
}
|
|
1046
|
-
}
|
|
1047
|
-
logger.info("\u2705 [UniversalExportService] Excel\u6570\u636E\u51C6\u5907\u5B8C\u6210:", {
|
|
1048
|
-
totalRows: result.length,
|
|
1049
|
-
headerRows: config.includeHeader ? 1 : 0,
|
|
1050
|
-
dataRows: result.length - (config.includeHeader ? 1 : 0)
|
|
1051
|
-
});
|
|
1052
|
-
return result;
|
|
1053
|
-
}
|
|
1054
|
-
/**
|
|
1055
|
-
* 应用Excel分组和合并单元格
|
|
1056
|
-
*/
|
|
1057
|
-
applyExcelGrouping(worksheet, data, fields, groupingConfig, includeHeader = true) {
|
|
1058
|
-
if (!worksheet["!merges"]) {
|
|
1059
|
-
worksheet["!merges"] = [];
|
|
1060
|
-
}
|
|
1061
|
-
const headerOffset = includeHeader ? 1 : 0;
|
|
1062
|
-
let currentRow = headerOffset;
|
|
1063
|
-
logger.info("\u{1F4CA} [UniversalExportService] \u5F00\u59CB\u5904\u7406Excel\u5206\u7EC4\u548C\u5408\u5E76\u5355\u5143\u683C:", {
|
|
1064
|
-
dataLength: data.length,
|
|
1065
|
-
headerOffset,
|
|
1066
|
-
groupingFields: groupingConfig.fields.map((f) => ({ key: f.key, mergeCells: f.mergeCells }))
|
|
1067
|
-
});
|
|
1068
|
-
for (let i = 0; i < data.length; i++) {
|
|
1069
|
-
const item = data[i];
|
|
1070
|
-
if (item.__isGroupFirst && item.__groupSize > 1) {
|
|
1071
|
-
logger.info("\u{1F517} [UniversalExportService] \u5904\u7406\u5206\u7EC4\u5408\u5E76:", {
|
|
1072
|
-
row: currentRow,
|
|
1073
|
-
groupSize: item.__groupSize,
|
|
1074
|
-
item
|
|
1075
|
-
});
|
|
1076
|
-
groupingConfig.fields.forEach((groupField) => {
|
|
1077
|
-
if (groupField.mergeCells) {
|
|
1078
|
-
const fieldIndex = fields.findIndex((f) => f.key === groupField.key);
|
|
1079
|
-
if (fieldIndex >= 0) {
|
|
1080
|
-
const groupSize = item["__" + groupField.key + "_groupSize"] || item.__groupSize;
|
|
1081
|
-
const mergeRange = {
|
|
1082
|
-
s: { r: currentRow, c: fieldIndex },
|
|
1083
|
-
// 开始行列
|
|
1084
|
-
e: { r: currentRow + groupSize - 1, c: fieldIndex }
|
|
1085
|
-
// 结束行列
|
|
1086
|
-
};
|
|
1087
|
-
logger.info("\u{1F4CA} [UniversalExportService] \u6DFB\u52A0\u5408\u5E76\u533A\u57DF:", {
|
|
1088
|
-
field: groupField.key,
|
|
1089
|
-
fieldIndex,
|
|
1090
|
-
groupSize,
|
|
1091
|
-
mergeRange
|
|
1092
|
-
});
|
|
1093
|
-
worksheet["!merges"].push(mergeRange);
|
|
1094
|
-
const startCellAddress = XLSX.utils.encode_cell(mergeRange.s);
|
|
1095
|
-
if (worksheet[startCellAddress]) {
|
|
1096
|
-
worksheet[startCellAddress].s = {
|
|
1097
|
-
...worksheet[startCellAddress].s,
|
|
1098
|
-
alignment: { horizontal: "center", vertical: "middle" },
|
|
1099
|
-
fill: { fgColor: { rgb: "F2F2F2" } },
|
|
1100
|
-
border: {
|
|
1101
|
-
top: { style: "thin", color: { rgb: "000000" } },
|
|
1102
|
-
bottom: { style: "thin", color: { rgb: "000000" } },
|
|
1103
|
-
left: { style: "thin", color: { rgb: "000000" } },
|
|
1104
|
-
right: { style: "thin", color: { rgb: "000000" } }
|
|
1105
|
-
}
|
|
1106
|
-
};
|
|
1107
|
-
}
|
|
1108
|
-
}
|
|
1109
|
-
}
|
|
1110
|
-
});
|
|
1111
|
-
}
|
|
1112
|
-
currentRow++;
|
|
1113
|
-
}
|
|
1114
|
-
logger.info("\u2705 [UniversalExportService] Excel\u5206\u7EC4\u548C\u5408\u5E76\u5355\u5143\u683C\u5904\u7406\u5B8C\u6210:", {
|
|
1115
|
-
totalMerges: worksheet["!merges"]?.length || 0
|
|
1116
|
-
});
|
|
1117
|
-
}
|
|
1118
|
-
/**
|
|
1119
|
-
* 设置Excel列宽和样式
|
|
1120
|
-
*/
|
|
1121
|
-
setExcelColumnWidths(worksheet, fields) {
|
|
1122
|
-
const colWidths = fields.map((field) => ({
|
|
1123
|
-
wch: field.width || 15
|
|
1124
|
-
// 默认宽度15字符
|
|
1125
|
-
}));
|
|
1126
|
-
worksheet["!cols"] = colWidths;
|
|
1127
|
-
if (worksheet["!ref"]) {
|
|
1128
|
-
const range = XLSX.utils.decode_range(worksheet["!ref"]);
|
|
1129
|
-
for (let col = range.s.c; col <= range.e.c; col++) {
|
|
1130
|
-
const cellAddress = XLSX.utils.encode_cell({ r: 0, c: col });
|
|
1131
|
-
if (worksheet[cellAddress]) {
|
|
1132
|
-
worksheet[cellAddress].s = {
|
|
1133
|
-
font: { bold: true, color: { rgb: "FFFFFF" } },
|
|
1134
|
-
fill: { fgColor: { rgb: "4472C4" } },
|
|
1135
|
-
alignment: { horizontal: "center", vertical: "center" },
|
|
1136
|
-
border: {
|
|
1137
|
-
top: { style: "thin", color: { rgb: "000000" } },
|
|
1138
|
-
bottom: { style: "thin", color: { rgb: "000000" } },
|
|
1139
|
-
left: { style: "thin", color: { rgb: "000000" } },
|
|
1140
|
-
right: { style: "thin", color: { rgb: "000000" } }
|
|
1141
|
-
}
|
|
1142
|
-
};
|
|
1143
|
-
}
|
|
1144
|
-
}
|
|
1145
|
-
}
|
|
1146
|
-
logger.info("\u2705 [UniversalExportService] Excel\u5217\u5BBD\u548C\u6837\u5F0F\u8BBE\u7F6E\u5B8C\u6210:", {
|
|
1147
|
-
columnsCount: colWidths.length,
|
|
1148
|
-
columnWidths: colWidths.map((col, index) => ({ field: fields[index]?.key, width: col.wch }))
|
|
1149
|
-
});
|
|
1150
|
-
}
|
|
1151
|
-
/**
|
|
1152
|
-
* 为Excel数据单元格应用样式
|
|
1153
|
-
*/
|
|
1154
|
-
applyExcelDataStyles(worksheet, includeHeader = true) {
|
|
1155
|
-
if (!worksheet["!ref"]) return;
|
|
1156
|
-
const range = XLSX.utils.decode_range(worksheet["!ref"]);
|
|
1157
|
-
const startRow = includeHeader ? 1 : 0;
|
|
1158
|
-
logger.info("\u{1F3A8} [UniversalExportService] \u5F00\u59CB\u5E94\u7528Excel\u6570\u636E\u6837\u5F0F:", {
|
|
1159
|
-
totalRows: range.e.r + 1,
|
|
1160
|
-
totalCols: range.e.c + 1,
|
|
1161
|
-
startRow
|
|
1162
|
-
});
|
|
1163
|
-
for (let row = startRow; row <= range.e.r; row++) {
|
|
1164
|
-
for (let col = range.s.c; col <= range.e.c; col++) {
|
|
1165
|
-
const cellAddress = XLSX.utils.encode_cell({ r: row, c: col });
|
|
1166
|
-
if (worksheet[cellAddress]) {
|
|
1167
|
-
const existingStyle = worksheet[cellAddress].s || {};
|
|
1168
|
-
worksheet[cellAddress].s = {
|
|
1169
|
-
...existingStyle,
|
|
1170
|
-
border: {
|
|
1171
|
-
top: { style: "thin", color: { rgb: "CCCCCC" } },
|
|
1172
|
-
bottom: { style: "thin", color: { rgb: "CCCCCC" } },
|
|
1173
|
-
left: { style: "thin", color: { rgb: "CCCCCC" } },
|
|
1174
|
-
right: { style: "thin", color: { rgb: "CCCCCC" } }
|
|
1175
|
-
},
|
|
1176
|
-
alignment: {
|
|
1177
|
-
...existingStyle.alignment,
|
|
1178
|
-
vertical: "center"
|
|
1179
|
-
}
|
|
1180
|
-
};
|
|
1181
|
-
}
|
|
1182
|
-
}
|
|
1183
|
-
}
|
|
1184
|
-
logger.info("\u2705 [UniversalExportService] Excel\u6570\u636E\u6837\u5F0F\u5E94\u7528\u5B8C\u6210");
|
|
1185
|
-
}
|
|
1186
|
-
};
|
|
1187
|
-
|
|
1188
|
-
// src/universalExport/server/factory.ts
|
|
1189
|
-
function createExportServiceConfig(options = {}) {
|
|
1190
|
-
return {
|
|
1191
|
-
db: options.db,
|
|
1192
|
-
exportDir: options.exportDir || process.env.EXPORT_DIR || "./exports",
|
|
1193
|
-
tempDir: options.tempDir || process.env.TEMP_DIR || "./temp",
|
|
1194
|
-
maxRows: options.maxRows || 1e5,
|
|
1195
|
-
// 默认最多导出 10 万行
|
|
1196
|
-
enableStreaming: options.enableStreaming !== false,
|
|
1197
|
-
// 默认启用流式导出
|
|
1198
|
-
timeout: options.timeout || 3e5
|
|
1199
|
-
// 默认超时 5 分钟
|
|
1200
|
-
};
|
|
1201
|
-
}
|
|
1202
|
-
function createUniversalExportService(options = {}) {
|
|
1203
|
-
const config = createExportServiceConfig(options);
|
|
1204
|
-
console.warn(
|
|
1205
|
-
"\u26A0\uFE0F UniversalExportService \u7684\u5B8C\u6574\u5B9E\u73B0\u5C06\u5728\u540E\u7EED Phase \u4E2D\u8FC1\u79FB\u5230 Sa2kit\u3002\n \u5F53\u524D\u7248\u672C\u4EC5\u5305\u542B\u7C7B\u578B\u5B9A\u4E49\u548C\u914D\u7F6E\u5DE5\u5382\u51FD\u6570\u3002\n \u8BF7\u6682\u65F6\u7EE7\u7EED\u4ECE LyricNote \u7684 lib/universalExport \u5BFC\u5165\u670D\u52A1\u7C7B\u3002"
|
|
1206
|
-
);
|
|
1207
|
-
return {
|
|
1208
|
-
config,
|
|
1209
|
-
// 占位方法
|
|
1210
|
-
async export() {
|
|
1211
|
-
throw new Error("UniversalExportService \u5C1A\u672A\u5B8C\u5168\u8FC1\u79FB\uFF0C\u8BF7\u4ECE LyricNote \u5BFC\u5165");
|
|
1212
|
-
},
|
|
1213
|
-
async createTask() {
|
|
1214
|
-
throw new Error("UniversalExportService \u5C1A\u672A\u5B8C\u5168\u8FC1\u79FB\uFF0C\u8BF7\u4ECE LyricNote \u5BFC\u5165");
|
|
1215
|
-
}
|
|
1216
|
-
};
|
|
1217
|
-
}
|
|
1218
|
-
function createExportServiceFromEnv(db) {
|
|
1219
|
-
return createUniversalExportService({
|
|
1220
|
-
db,
|
|
1221
|
-
exportDir: process.env.EXPORT_DIR,
|
|
1222
|
-
tempDir: process.env.TEMP_DIR,
|
|
1223
|
-
maxRows: process.env.EXPORT_MAX_ROWS ? parseInt(process.env.EXPORT_MAX_ROWS) : void 0
|
|
1224
|
-
});
|
|
1225
|
-
}
|
|
1226
|
-
|
|
1227
|
-
// src/universalExport/server/presets.ts
|
|
1228
|
-
function createSmallAppPreset() {
|
|
1229
|
-
return {
|
|
1230
|
-
maxRows: 1e4,
|
|
1231
|
-
// 1万行
|
|
1232
|
-
timeout: 6e4,
|
|
1233
|
-
// 1分钟
|
|
1234
|
-
enableStreaming: false
|
|
1235
|
-
// 小数据量不需要流式导出
|
|
1236
|
-
};
|
|
1237
|
-
}
|
|
1238
|
-
function createMediumAppPreset() {
|
|
1239
|
-
return {
|
|
1240
|
-
maxRows: 1e5,
|
|
1241
|
-
// 10万行
|
|
1242
|
-
timeout: 3e5,
|
|
1243
|
-
// 5分钟
|
|
1244
|
-
enableStreaming: true
|
|
1245
|
-
};
|
|
1246
|
-
}
|
|
1247
|
-
function createLargeAppPreset() {
|
|
1248
|
-
return {
|
|
1249
|
-
maxRows: 1e6,
|
|
1250
|
-
// 100万行
|
|
1251
|
-
timeout: 6e5,
|
|
1252
|
-
// 10分钟
|
|
1253
|
-
enableStreaming: true
|
|
1254
|
-
};
|
|
1255
|
-
}
|
|
1256
|
-
function createRealtimeExportPreset() {
|
|
1257
|
-
return {
|
|
1258
|
-
maxRows: 5e3,
|
|
1259
|
-
// 5千行
|
|
1260
|
-
timeout: 3e4,
|
|
1261
|
-
// 30秒
|
|
1262
|
-
enableStreaming: false
|
|
1263
|
-
};
|
|
1264
|
-
}
|
|
1265
|
-
function createBatchExportPreset() {
|
|
1266
|
-
return {
|
|
1267
|
-
maxRows: Number.MAX_SAFE_INTEGER,
|
|
1268
|
-
// 不限制
|
|
1269
|
-
timeout: 18e5,
|
|
1270
|
-
// 30分钟
|
|
1271
|
-
enableStreaming: true
|
|
1272
|
-
};
|
|
1273
|
-
}
|
|
1274
|
-
function createSmartExportPreset() {
|
|
1275
|
-
const envMaxRows = process.env.EXPORT_MAX_ROWS;
|
|
1276
|
-
if (envMaxRows) {
|
|
1277
|
-
const maxRows = parseInt(envMaxRows);
|
|
1278
|
-
if (maxRows <= 1e4) {
|
|
1279
|
-
return createSmallAppPreset();
|
|
1280
|
-
} else if (maxRows <= 1e5) {
|
|
1281
|
-
return createMediumAppPreset();
|
|
1282
|
-
} else {
|
|
1283
|
-
return createLargeAppPreset();
|
|
1284
|
-
}
|
|
1285
|
-
}
|
|
1286
|
-
return createMediumAppPreset();
|
|
1287
|
-
}
|
|
1288
|
-
|
|
1289
|
-
// src/universalExport/server/validation.ts
|
|
1290
|
-
var ConfigValidationError = class extends Error {
|
|
1291
|
-
constructor(message, field) {
|
|
1292
|
-
super(message);
|
|
1293
|
-
this.field = field;
|
|
1294
|
-
this.name = "ConfigValidationError";
|
|
1295
|
-
}
|
|
1296
|
-
};
|
|
1297
|
-
function validateExportConfig(config) {
|
|
1298
|
-
if (!config.exportDir) {
|
|
1299
|
-
throw new ConfigValidationError("exportDir is required", "exportDir");
|
|
1300
|
-
}
|
|
1301
|
-
if (!config.tempDir) {
|
|
1302
|
-
throw new ConfigValidationError("tempDir is required", "tempDir");
|
|
1303
|
-
}
|
|
1304
|
-
if (config.maxRows && config.maxRows <= 0) {
|
|
1305
|
-
throw new ConfigValidationError(
|
|
1306
|
-
"maxRows must be greater than 0",
|
|
1307
|
-
"maxRows"
|
|
1308
|
-
);
|
|
1309
|
-
}
|
|
1310
|
-
if (config.timeout && config.timeout <= 0) {
|
|
1311
|
-
throw new ConfigValidationError(
|
|
1312
|
-
"timeout must be greater than 0",
|
|
1313
|
-
"timeout"
|
|
1314
|
-
);
|
|
1315
|
-
}
|
|
1316
|
-
if (config.maxRows && config.maxRows > 1e6) {
|
|
1317
|
-
console.warn(
|
|
1318
|
-
"\u26A0\uFE0F Warning: maxRows (" + config.maxRows + `) is very large. Consider using pagination or streaming for better performance.`
|
|
1319
|
-
);
|
|
1320
|
-
}
|
|
1321
|
-
}
|
|
1322
|
-
function validateEnvironment(requiredVars) {
|
|
1323
|
-
const missing = [];
|
|
1324
|
-
for (const varName of requiredVars) {
|
|
1325
|
-
if (!process.env[varName]) {
|
|
1326
|
-
missing.push(varName);
|
|
1327
|
-
}
|
|
1328
|
-
}
|
|
1329
|
-
if (missing.length > 0) {
|
|
1330
|
-
throw new ConfigValidationError(
|
|
1331
|
-
"Missing required environment variables: " + missing.join(", "),
|
|
1332
|
-
"environment"
|
|
1333
|
-
);
|
|
1334
|
-
}
|
|
1335
|
-
}
|
|
1336
|
-
|
|
1337
|
-
// src/universalExport/server/utils/index.ts
|
|
1338
|
-
function formatFieldValue(value, field) {
|
|
1339
|
-
if (field.formatter) {
|
|
1340
|
-
return field.formatter(value);
|
|
1341
|
-
}
|
|
1342
|
-
if (value === null || value === void 0) {
|
|
1343
|
-
return "";
|
|
1344
|
-
}
|
|
1345
|
-
switch (field.type) {
|
|
1346
|
-
case "date":
|
|
1347
|
-
return value instanceof Date ? value.toISOString().split("T")[0] || "" : String(value);
|
|
1348
|
-
case "boolean":
|
|
1349
|
-
return value ? "\u662F" : "\u5426";
|
|
1350
|
-
case "array":
|
|
1351
|
-
return Array.isArray(value) ? value.join(", ") : String(value);
|
|
1352
|
-
case "object":
|
|
1353
|
-
return typeof value === "object" ? JSON.stringify(value) : String(value);
|
|
1354
|
-
case "number":
|
|
1355
|
-
return typeof value === "number" ? value.toLocaleString() : String(value);
|
|
1356
|
-
default:
|
|
1357
|
-
return String(value);
|
|
1358
|
-
}
|
|
1359
|
-
}
|
|
1360
|
-
function validateFieldValue(value, field) {
|
|
1361
|
-
if (field.required && (value === null || value === void 0 || value === "")) {
|
|
1362
|
-
return false;
|
|
1363
|
-
}
|
|
1364
|
-
switch (field.type) {
|
|
1365
|
-
case "number":
|
|
1366
|
-
return typeof value === "number" || !isNaN(Number(value));
|
|
1367
|
-
case "boolean":
|
|
1368
|
-
return typeof value === "boolean";
|
|
1369
|
-
case "array":
|
|
1370
|
-
return Array.isArray(value);
|
|
1371
|
-
case "object":
|
|
1372
|
-
return typeof value === "object";
|
|
1373
|
-
case "date":
|
|
1374
|
-
return value instanceof Date || !isNaN(Date.parse(value));
|
|
1375
|
-
default:
|
|
1376
|
-
return true;
|
|
1377
|
-
}
|
|
1378
|
-
}
|
|
1379
|
-
function convertFieldType(value, targetType) {
|
|
1380
|
-
if (value === null || value === void 0) {
|
|
1381
|
-
return value;
|
|
1382
|
-
}
|
|
1383
|
-
switch (targetType) {
|
|
1384
|
-
case "string":
|
|
1385
|
-
return String(value);
|
|
1386
|
-
case "number":
|
|
1387
|
-
return Number(value);
|
|
1388
|
-
case "boolean":
|
|
1389
|
-
return Boolean(value);
|
|
1390
|
-
case "date":
|
|
1391
|
-
return value instanceof Date ? value : new Date(value);
|
|
1392
|
-
case "array":
|
|
1393
|
-
return Array.isArray(value) ? value : [value];
|
|
1394
|
-
case "object":
|
|
1395
|
-
return typeof value === "object" ? value : { value };
|
|
1396
|
-
default:
|
|
1397
|
-
return value;
|
|
1398
|
-
}
|
|
1399
|
-
}
|
|
1400
|
-
function getNestedValue(obj, path) {
|
|
1401
|
-
return path.split(".").reduce((current, key) => current?.[key], obj);
|
|
1402
|
-
}
|
|
1403
|
-
function escapeCsvValue(value) {
|
|
1404
|
-
if (value.includes(",") || value.includes('"') || value.includes("\n")) {
|
|
1405
|
-
return '"' + value.replace(/"/g, '""') + '"';
|
|
1406
|
-
}
|
|
1407
|
-
return value;
|
|
1408
|
-
}
|
|
1409
|
-
function generateUniqueFilename(prefix, extension) {
|
|
1410
|
-
const timestamp2 = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").slice(0, -5);
|
|
1411
|
-
const random = Math.random().toString(36).substring(2, 8);
|
|
1412
|
-
return prefix + "_" + timestamp2 + "_" + random + "." + extension;
|
|
1413
|
-
}
|
|
1414
|
-
function calculateProgress(processed, total) {
|
|
1415
|
-
if (total === 0) return 0;
|
|
1416
|
-
return Math.min(Math.round(processed / total * 100), 100);
|
|
1417
|
-
}
|
|
1418
|
-
function estimateRemainingTime(processed, total, elapsedMs) {
|
|
1419
|
-
if (processed === 0) return 0;
|
|
1420
|
-
const avgTimePerRow = elapsedMs / processed;
|
|
1421
|
-
const remainingRows = total - processed;
|
|
1422
|
-
return Math.round(remainingRows * avgTimePerRow / 1e3);
|
|
1423
|
-
}
|
|
1424
|
-
var exportConfigs = pgTable("ExportConfig", {
|
|
1425
|
-
/** 主键ID */
|
|
1426
|
-
id: text("id").primaryKey().$defaultFn(() => "export_config_" + Date.now() + "_" + Math.random().toString(36).substr(2, 9)),
|
|
1427
|
-
/** 配置名称 */
|
|
1428
|
-
name: text("name").notNull(),
|
|
1429
|
-
/** 配置描述 */
|
|
1430
|
-
description: text("description"),
|
|
1431
|
-
/** 导出格式:'csv' | 'excel' | 'json' */
|
|
1432
|
-
format: text("format").notNull(),
|
|
1433
|
-
/** 导出字段配置(JSON数组) */
|
|
1434
|
-
fields: jsonb("fields").notNull(),
|
|
1435
|
-
// ExportField[]
|
|
1436
|
-
/** 分组配置 */
|
|
1437
|
-
grouping: jsonb("grouping"),
|
|
1438
|
-
// GroupingConfig
|
|
1439
|
-
/** 文件名模板 */
|
|
1440
|
-
fileNameTemplate: text("fileNameTemplate").notNull(),
|
|
1441
|
-
/** 是否包含表头 */
|
|
1442
|
-
includeHeader: boolean("includeHeader").default(true).notNull(),
|
|
1443
|
-
/** 分隔符(用于CSV格式) */
|
|
1444
|
-
delimiter: text("delimiter").default(",").notNull(),
|
|
1445
|
-
/** 编码格式 */
|
|
1446
|
-
encoding: text("encoding").default("utf-8").notNull(),
|
|
1447
|
-
/** 是否添加BOM(用于Excel打开UTF-8 CSV) */
|
|
1448
|
-
addBOM: boolean("addBOM").default(true).notNull(),
|
|
1449
|
-
/** 最大导出行数 */
|
|
1450
|
-
maxRows: integer("maxRows"),
|
|
1451
|
-
/** 模块ID */
|
|
1452
|
-
moduleId: text("moduleId").notNull(),
|
|
1453
|
-
/** 业务ID */
|
|
1454
|
-
businessId: text("businessId"),
|
|
1455
|
-
/** 创建者ID */
|
|
1456
|
-
createdBy: text("createdBy"),
|
|
1457
|
-
/** 创建时间 */
|
|
1458
|
-
createdAt: timestamp("createdAt", { precision: 3, mode: "date" }).default(sql`CURRENT_TIMESTAMP`).notNull(),
|
|
1459
|
-
/** 更新时间 */
|
|
1460
|
-
updatedAt: timestamp("updatedAt", { precision: 3, mode: "date" }).default(sql`CURRENT_TIMESTAMP`).notNull()
|
|
1461
|
-
});
|
|
1462
|
-
var exportHistory = pgTable("ExportHistory", {
|
|
1463
|
-
/** 主键ID */
|
|
1464
|
-
id: text("id").primaryKey().$defaultFn(() => "export_history_" + Date.now() + "_" + Math.random().toString(36).substr(2, 9)),
|
|
1465
|
-
/** 关联的配置ID */
|
|
1466
|
-
configId: text("configId").notNull(),
|
|
1467
|
-
/** 导出的文件名 */
|
|
1468
|
-
fileName: text("fileName").notNull(),
|
|
1469
|
-
/** 文件大小(字节) */
|
|
1470
|
-
fileSize: integer("fileSize").notNull(),
|
|
1471
|
-
/** 导出的行数 */
|
|
1472
|
-
exportedRows: integer("exportedRows").notNull(),
|
|
1473
|
-
/** 导出状态:'pending' | 'processing' | 'completed' | 'failed' */
|
|
1474
|
-
status: text("status").notNull(),
|
|
1475
|
-
/** 错误信息(如果失败) */
|
|
1476
|
-
error: text("error"),
|
|
1477
|
-
/** 导出耗时(毫秒) */
|
|
1478
|
-
duration: integer("duration"),
|
|
1479
|
-
/** 开始时间 */
|
|
1480
|
-
startTime: timestamp("startTime", { precision: 3, mode: "date" }).notNull(),
|
|
1481
|
-
/** 结束时间 */
|
|
1482
|
-
endTime: timestamp("endTime", { precision: 3, mode: "date" }),
|
|
1483
|
-
/** 创建者ID */
|
|
1484
|
-
createdBy: text("createdBy"),
|
|
1485
|
-
/** 创建时间 */
|
|
1486
|
-
createdAt: timestamp("createdAt", { precision: 3, mode: "date" }).default(sql`CURRENT_TIMESTAMP`).notNull()
|
|
1487
|
-
});
|
|
1488
|
-
var exportConfigsRelations = relations(exportConfigs, ({ many }) => ({
|
|
1489
|
-
history: many(exportHistory)
|
|
1490
|
-
}));
|
|
1491
|
-
var exportHistoryRelations = relations(exportHistory, ({ one }) => ({
|
|
1492
|
-
config: one(exportConfigs, {
|
|
1493
|
-
fields: [exportHistory.configId],
|
|
1494
|
-
references: [exportConfigs.id]
|
|
1495
|
-
})
|
|
1496
|
-
}));
|
|
1497
|
-
var ExportConfigDatabaseService = class {
|
|
1498
|
-
constructor(db) {
|
|
1499
|
-
this.db = db;
|
|
1500
|
-
}
|
|
1501
|
-
/**
|
|
1502
|
-
* 创建导出配置
|
|
1503
|
-
*/
|
|
1504
|
-
async createConfig(config) {
|
|
1505
|
-
const id = "export_config_" + Date.now() + "_" + Math.random().toString(36).substr(2, 9);
|
|
1506
|
-
const now = /* @__PURE__ */ new Date();
|
|
1507
|
-
const [newConfig] = await this.db.insert(exportConfigs).values({
|
|
1508
|
-
id,
|
|
1509
|
-
...config,
|
|
1510
|
-
createdAt: now,
|
|
1511
|
-
updatedAt: now
|
|
1512
|
-
}).returning();
|
|
1513
|
-
return newConfig;
|
|
1514
|
-
}
|
|
1515
|
-
/**
|
|
1516
|
-
* 根据ID获取配置
|
|
1517
|
-
*/
|
|
1518
|
-
async getConfigById(id) {
|
|
1519
|
-
const [config] = await this.db.select().from(exportConfigs).where(eq(exportConfigs.id, id)).limit(1);
|
|
1520
|
-
return config || null;
|
|
1521
|
-
}
|
|
1522
|
-
/**
|
|
1523
|
-
* 根据模块和业务ID获取配置列表
|
|
1524
|
-
*/
|
|
1525
|
-
async getConfigsByModule(moduleId, businessId) {
|
|
1526
|
-
const whereConditions = businessId ? and(eq(exportConfigs.moduleId, moduleId), eq(exportConfigs.businessId, businessId)) : eq(exportConfigs.moduleId, moduleId);
|
|
1527
|
-
return await this.db.select().from(exportConfigs).where(whereConditions).orderBy(desc(exportConfigs.updatedAt));
|
|
1528
|
-
}
|
|
1529
|
-
/**
|
|
1530
|
-
* 更新配置
|
|
1531
|
-
*/
|
|
1532
|
-
async updateConfig(id, updates) {
|
|
1533
|
-
const [updatedConfig] = await this.db.update(exportConfigs).set({
|
|
1534
|
-
...updates,
|
|
1535
|
-
updatedAt: /* @__PURE__ */ new Date()
|
|
1536
|
-
}).where(eq(exportConfigs.id, id)).returning();
|
|
1537
|
-
return updatedConfig || null;
|
|
1538
|
-
}
|
|
1539
|
-
/**
|
|
1540
|
-
* 删除配置
|
|
1541
|
-
*/
|
|
1542
|
-
async deleteConfig(id) {
|
|
1543
|
-
await this.db.delete(exportConfigs).where(eq(exportConfigs.id, id));
|
|
1544
|
-
return true;
|
|
1545
|
-
}
|
|
1546
|
-
/**
|
|
1547
|
-
* 根据用户ID获取配置列表
|
|
1548
|
-
*/
|
|
1549
|
-
async getConfigsByUser(userId) {
|
|
1550
|
-
return await this.db.select().from(exportConfigs).where(eq(exportConfigs.createdBy, userId)).orderBy(desc(exportConfigs.updatedAt));
|
|
1551
|
-
}
|
|
1552
|
-
};
|
|
1553
|
-
var ExportHistoryDatabaseService = class {
|
|
1554
|
-
constructor(db) {
|
|
1555
|
-
this.db = db;
|
|
1556
|
-
}
|
|
1557
|
-
/**
|
|
1558
|
-
* 创建导出历史记录
|
|
1559
|
-
*/
|
|
1560
|
-
async createHistory(history) {
|
|
1561
|
-
const id = "export_history_" + Date.now() + "_" + Math.random().toString(36).substr(2, 9);
|
|
1562
|
-
const [newHistory] = await this.db.insert(exportHistory).values({
|
|
1563
|
-
id,
|
|
1564
|
-
...history,
|
|
1565
|
-
createdAt: /* @__PURE__ */ new Date()
|
|
1566
|
-
}).returning();
|
|
1567
|
-
return newHistory;
|
|
1568
|
-
}
|
|
1569
|
-
/**
|
|
1570
|
-
* 根据配置ID获取历史记录
|
|
1571
|
-
*/
|
|
1572
|
-
async getHistoryByConfigId(configId) {
|
|
1573
|
-
return await this.db.select().from(exportHistory).where(eq(exportHistory.configId, configId)).orderBy(desc(exportHistory.createdAt));
|
|
1574
|
-
}
|
|
1575
|
-
/**
|
|
1576
|
-
* 根据用户ID获取历史记录
|
|
1577
|
-
*/
|
|
1578
|
-
async getHistoryByUser(userId) {
|
|
1579
|
-
return await this.db.select().from(exportHistory).where(eq(exportHistory.createdBy, userId)).orderBy(desc(exportHistory.createdAt));
|
|
1580
|
-
}
|
|
1581
|
-
/**
|
|
1582
|
-
* 获取最近的导出历史记录
|
|
1583
|
-
*/
|
|
1584
|
-
async getRecentHistory(limit = 10) {
|
|
1585
|
-
return await this.db.select().from(exportHistory).orderBy(desc(exportHistory.createdAt)).limit(limit);
|
|
1586
|
-
}
|
|
1587
|
-
};
|
|
1588
|
-
function createExportDatabaseServices(options) {
|
|
1589
|
-
const { db } = options;
|
|
1590
|
-
return {
|
|
1591
|
-
configDB: new ExportConfigDatabaseService(db),
|
|
1592
|
-
historyDB: new ExportHistoryDatabaseService(db)
|
|
1593
|
-
};
|
|
1594
|
-
}
|
|
1595
|
-
|
|
1596
|
-
export { ConfigValidationError, ExportConfigDatabaseService, ExportHistoryDatabaseService, UniversalExportService, calculateProgress, convertFieldType, createBatchExportPreset, createExportDatabaseServices, createExportServiceConfig, createExportServiceFromEnv, createLargeAppPreset, createMediumAppPreset, createRealtimeExportPreset, createSmallAppPreset, createSmartExportPreset, createUniversalExportService, escapeCsvValue, estimateRemainingTime, exportConfigs, exportConfigsRelations, exportHistory, exportHistoryRelations, formatFieldValue, generateUniqueFilename, getNestedValue, validateEnvironment, validateExportConfig, validateFieldValue };
|
|
1597
|
-
//# sourceMappingURL=chunk-NCRP2YHY.mjs.map
|
|
1598
|
-
//# sourceMappingURL=chunk-NCRP2YHY.mjs.map
|