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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/universalExport/server/UniversalExportService.ts","../src/universalExport/server/factory.ts","../src/universalExport/server/presets.ts","../src/universalExport/server/validation.ts","../src/universalExport/server/utils/index.ts","../src/universalExport/server/drizzle-schemas/postgres.ts","../src/universalExport/server/drizzle-database.ts"],"names":["createLogger","ExportConfigError","ExportDataError","endTime","duration","ExportFileError","XLSX","timestamp","pgTable","text","jsonb","boolean","integer","sql","relations","eq","and","desc"],"mappings":"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","file":"chunk-WW4GE6CZ.js","sourcesContent":["// @ts-nocheck\n\n/**\n * 通用导出服务\n *\n * 提供统一的导出功能,支持配置化字段选择、格式化和分组\n */\n\nimport type {\n ExportConfig,\n ExportRequest,\n ExportResult,\n ExportProgress,\n ExportError,\n ExportField,\n ExportFormat,\n UniversalExportServiceConfig,\n ExportEvent,\n ExportEventListener,\n FieldMapper,\n DataTransformer,\n Validator,\n Formatter,\n GroupingConfig,\n GroupingField,\n GroupingMode,\n GroupValueProcessing,\n} from '../types';\n\n// Excel导出依赖\nimport * as XLSX from 'xlsx';\n\n// 日志\nimport { createLogger } from '../../logger';\nconst logger = createLogger('UniversalExportService');\n\n// 客户端服务(可选依赖,通过构造函数注入)\n// import { universalExportClient } from './client';\n\nimport {\n ExportServiceError,\n ExportConfigError,\n ExportDataError,\n ExportFileError,\n} from '../types';\n\n// ============= 默认配置 =============\n\nconst DEFAULT_CONFIG: UniversalExportServiceConfig = {\n defaultFormat: 'csv',\n defaultDelimiter: ',',\n defaultEncoding: 'utf-8',\n defaultAddBOM: true,\n maxFileSize: 100 * 1024 * 1024, // 100MB\n maxRowsLimit: 100000,\n maxConcurrentExports: 5,\n exportTimeout: 300000, // 5分钟\n cache: {\n configTTL: 3600, // 1小时\n resultTTL: 1800, // 30分钟\n },\n};\n\n// ============= 内置格式化器 =============\n\nconst DEFAULT_FORMATTERS: Record<string, Formatter> = {\n // 日期格式化\n date: (value: any) => {\n if (!value) return '';\n const date = new Date(value);\n return date.toISOString().split('T')[0];\n },\n\n // 时间格式化\n datetime: (value: any) => {\n if (!value) return '';\n const date = new Date(value);\n return date.toLocaleString('zh-CN');\n },\n\n // 数字格式化\n number: (value: any) => {\n if (value === null || value === undefined) return '';\n return String(value);\n },\n\n // 货币格式化\n currency: (value: any) => {\n if (value === null || value === undefined) return '';\n return '¥' + (Number(value).toFixed(2));\n },\n\n // 百分比格式化\n percentage: (value: any) => {\n if (value === null || value === undefined) return '';\n return ((Number(value) * 100).toFixed(2)) + '%';\n },\n\n // 布尔值格式化\n boolean: (value: any) => {\n if (value === null || value === undefined) return '';\n return value ? '是' : '否';\n },\n\n // 数组格式化\n array: (value: any) => {\n if (!Array.isArray(value)) return '';\n return value.join(', ');\n },\n\n // 对象格式化\n object: (value: any) => {\n if (!value || typeof value !== 'object') return '';\n return JSON.stringify(value);\n },\n};\n\n// ============= 主服务类 =============\n\n/**\n * 导出客户端接口(用于依赖注入)\n */\nexport interface IExportClient {\n createConfig(config: Omit<ExportConfig, 'id' | 'createdAt' | 'updatedAt'>): Promise<ExportConfig>;\n getConfigsByModule(moduleId: string, businessId?: string): Promise<ExportConfig[]>;\n}\n\nexport class UniversalExportService {\n private config: UniversalExportServiceConfig;\n private eventListeners: Map<string, ExportEventListener[]> = new Map();\n private activeExports: Map<string, ExportProgress> = new Map();\n private configCache: Map<string, { config: ExportConfig; timestamp: number }> = new Map();\n private resultCache: Map<string, { result: ExportResult; timestamp: number }> = new Map();\n private client?: IExportClient;\n\n constructor(\n config?: Partial<UniversalExportServiceConfig>,\n client?: IExportClient\n ) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n this.client = client;\n }\n\n // ============= 配置管理 =============\n\n /**\n * 创建导出配置\n */\n async createConfig(\n config: Omit<ExportConfig, 'id' | 'createdAt' | 'updatedAt'>\n ): Promise<ExportConfig> {\n try {\n // 验证配置\n this.validateConfig({\n ...config,\n id: 'temp',\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n\n // 通过客户端API保存到数据库(如果提供了client)\n if (!this.client) {\n throw new ExportConfigError('未提供导出客户端服务', config);\n }\n const newConfig = await this.client.createConfig(config);\n\n // 保存到缓存\n this.configCache.set(newConfig.id, {\n config: newConfig,\n timestamp: Date.now(),\n });\n\n // 触发事件\n this.emitEvent({\n type: 'config:save',\n exportId: newConfig.id,\n timestamp: new Date(),\n data: { config: newConfig },\n });\n\n return newConfig;\n } catch (error) {\n throw new ExportConfigError(\n '创建导出配置失败: ' + (error instanceof Error ? error.message : '未知错误'),\n { originalError: error }\n );\n }\n }\n\n /**\n * 获取导出配置\n */\n async getConfig(configId: string): Promise<ExportConfig | null> {\n // 先从缓存获取\n const cached = this.configCache.get(configId);\n if (cached && Date.now() - cached.timestamp < this.config.cache.configTTL * 1000) {\n return cached.config;\n }\n\n // 从缓存中获取(暂时不支持从数据库获取单个配置)\n return null;\n }\n\n /**\n * 更新导出配置\n */\n async updateConfig(configId: string, updates: Partial<ExportConfig>): Promise<ExportConfig> {\n const existing = await this.getConfig(configId);\n if (!existing) {\n throw new ExportConfigError('配置不存在: ' + (configId));\n }\n\n const updatedConfig: ExportConfig = {\n ...existing,\n ...updates,\n updatedAt: new Date(),\n };\n\n // 验证配置\n this.validateConfig(updatedConfig);\n\n // 更新缓存\n this.configCache.set(configId, {\n config: updatedConfig,\n timestamp: Date.now(),\n });\n\n // 触发事件\n this.emitEvent({\n type: 'config:save',\n exportId: configId,\n timestamp: new Date(),\n data: { config: updatedConfig },\n });\n\n return updatedConfig;\n }\n\n /**\n * 删除导出配置\n */\n async deleteConfig(configId: string): Promise<void> {\n const existing = await this.getConfig(configId);\n if (!existing) {\n throw new ExportConfigError('配置不存在: ' + (configId));\n }\n\n // 从缓存删除\n this.configCache.delete(configId);\n\n // 触发事件\n this.emitEvent({\n type: 'config:delete',\n exportId: configId,\n timestamp: new Date(),\n data: { configId },\n });\n }\n\n /**\n * 获取模块的配置列表\n */\n async getConfigsByModule(moduleId: string, businessId?: string): Promise<ExportConfig[]> {\n if (!this.client) {\n throw new ExportConfigError('未提供导出客户端服务', { moduleId, businessId });\n }\n return await this.client.getConfigsByModule(moduleId, businessId);\n }\n\n // ============= 导出执行 =============\n\n /**\n * 执行导出\n */\n async export(request: ExportRequest): Promise<ExportResult> {\n const exportId = this.generateId();\n const startTime = new Date();\n\n logger.info('🚀 [UniversalExportService] 开始导出:', {\n exportId,\n configId: request.configId,\n hasDataSource: !!request.dataSource,\n hasCallbacks: !!request.callbacks,\n });\n\n try {\n // 获取配置 - 支持直接传入配置对象或从缓存获取\n let config: ExportConfig;\n if (typeof request.configId === 'object' && request.configId !== null) {\n // 直接传入配置对象\n config = request.configId as ExportConfig;\n logger.info('📋 [UniversalExportService] 使用直接传入的配置:', {\n configId: config.id,\n configName: config.name,\n format: config.format,\n fieldsCount: config.fields.length,\n hasGrouping: !!config.grouping,\n groupingEnabled: config.grouping?.enabled,\n groupingFieldsCount: config.grouping?.fields?.length || 0,\n groupingFields:\n config.grouping?.fields?.map((f) => ({ key: f.key, mergeCells: f.mergeCells })) || [],\n });\n } else {\n // 从缓存获取配置\n logger.info('🔍 [UniversalExportService] 从缓存获取配置:', request.configId);\n const cachedConfig = await this.getConfig(request.configId as string);\n if (!cachedConfig) {\n throw new ExportConfigError('导出配置不存在: ' + (request.configId));\n }\n config = cachedConfig;\n logger.info('✅ [UniversalExportService] 成功获取缓存配置:', {\n configId: config.id,\n configName: config.name,\n });\n }\n\n // 创建进度对象\n const progress: ExportProgress = {\n exportId,\n status: 'pending',\n progress: 0,\n processedRows: 0,\n totalRows: 0,\n startTime,\n };\n\n this.activeExports.set(exportId, progress);\n\n // 触发开始事件\n this.emitEvent({\n type: 'export:start',\n exportId,\n timestamp: startTime,\n data: { config, request },\n });\n\n // 调用进度回调\n if (request.callbacks?.onProgress) {\n logger.info('📞 [UniversalExportService] 调用 onProgress 回调 - 开始');\n request.callbacks.onProgress(progress);\n }\n\n logger.info('📊 [UniversalExportService] 开始获取数据...');\n\n // 获取数据\n const data = await this.getData(request);\n logger.info('✅ [UniversalExportService] 数据获取成功:', {\n dataLength: data.length,\n firstItem: data[0] ? Object.keys(data[0]) : [],\n sampleData: data.slice(0, 2),\n });\n\n progress.totalRows = data.length;\n progress.status = 'processing';\n\n // 更新进度回调\n if (request.callbacks?.onProgress) {\n logger.info('📞 [UniversalExportService] 调用 onProgress 回调 - 数据处理');\n progress.progress = 30;\n request.callbacks.onProgress(progress);\n }\n\n // 过滤和排序数据\n logger.info('🔄 [UniversalExportService] 开始处理数据...');\n const processedData = await this.processData(data, request, config);\n logger.info('✅ [UniversalExportService] 数据处理完成:', {\n originalLength: data.length,\n processedLength: processedData.length,\n });\n\n // 更新进度回调\n if (request.callbacks?.onProgress) {\n logger.info('📞 [UniversalExportService] 调用 onProgress 回调 - 数据完成');\n progress.progress = 60;\n request.callbacks.onProgress(progress);\n }\n\n // 生成文件\n logger.info('📄 [UniversalExportService] 开始生成文件...');\n const result = await this.generateFile(processedData, config, request, exportId);\n logger.info('✅ [UniversalExportService] 文件生成成功:', {\n fileName: result.fileName,\n fileSize: result.fileSize,\n exportedRows: result.exportedRows,\n });\n\n // 更新进度\n progress.status = 'completed';\n progress.progress = 100;\n progress.processedRows = data.length;\n\n // 调用成功回调\n if (request.callbacks?.onSuccess) {\n logger.info('📞 [UniversalExportService] 调用 onSuccess 回调');\n request.callbacks.onSuccess(result);\n }\n\n // 触发完成事件\n this.emitEvent({\n type: 'export:complete',\n exportId,\n timestamp: new Date(),\n data: { result },\n });\n\n // 缓存结果\n this.resultCache.set(exportId, {\n result,\n timestamp: Date.now(),\n });\n\n // 清理进度\n this.activeExports.delete(exportId);\n\n return result;\n } catch (error) {\n const errorObj: ExportError = {\n code: 'EXPORT_FAILED',\n message: error instanceof Error ? error.message : '导出失败',\n details: { originalError: error },\n timestamp: new Date(),\n };\n\n // 更新进度\n const progress = this.activeExports.get(exportId);\n if (progress) {\n progress.status = 'failed';\n progress.error = errorObj.message;\n this.activeExports.delete(exportId);\n }\n\n // 调用错误回调\n if (request.callbacks?.onError) {\n logger.info('📞 [UniversalExportService] 调用 onError 回调');\n request.callbacks.onError(errorObj);\n }\n\n // 触发错误事件\n this.emitEvent({\n type: 'export:error',\n exportId,\n timestamp: new Date(),\n error: errorObj.message,\n data: { error: errorObj },\n });\n\n throw error;\n }\n }\n\n /**\n * 获取导出进度\n */\n getExportProgress(exportId: string): ExportProgress | null {\n return this.activeExports.get(exportId) || null;\n }\n\n /**\n * 取消导出\n */\n cancelExport(exportId: string): boolean {\n const progress = this.activeExports.get(exportId);\n if (!progress) {\n return false;\n }\n\n progress.status = 'cancelled';\n this.activeExports.delete(exportId);\n\n // 触发取消事件\n this.emitEvent({\n type: 'export:cancel',\n exportId,\n timestamp: new Date(),\n data: { progress },\n });\n\n return true;\n }\n\n // ============= 事件管理 =============\n\n /**\n * 添加事件监听器\n */\n addEventListener(type: string, listener: ExportEventListener): void {\n if (!this.eventListeners.has(type)) {\n this.eventListeners.set(type, []);\n }\n this.eventListeners.get(type)!.push(listener);\n }\n\n /**\n * 移除事件监听器\n */\n removeEventListener(type: string, listener: ExportEventListener): void {\n const listeners = this.eventListeners.get(type);\n if (listeners) {\n const index = listeners.indexOf(listener);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n }\n }\n\n // ============= 私有方法 =============\n\n /**\n * 生成唯一ID\n */\n private generateId(): string {\n return 'export_' + (Date.now()) + '_' + (Math.random().toString(36).substr(2, 9));\n }\n\n /**\n * 验证配置\n */\n private validateConfig(config: ExportConfig): void {\n if (!config.name || config.name.trim() === '') {\n throw new ExportConfigError('配置名称不能为空');\n }\n\n if (!config.fields || config.fields.length === 0) {\n throw new ExportConfigError('至少需要定义一个字段');\n }\n\n const enabledFields = config.fields.filter((f) => f.enabled);\n if (enabledFields.length === 0) {\n throw new ExportConfigError('至少需要启用一个字段');\n }\n\n // 检查字段键名唯一性\n const keys = config.fields.map((f) => f.key);\n const uniqueKeys = new Set(keys);\n if (keys.length !== uniqueKeys.size) {\n throw new ExportConfigError('字段键名必须唯一');\n }\n }\n\n /**\n * 获取数据\n */\n private async getData(request: ExportRequest): Promise<any[]> {\n logger.info('🔍 [UniversalExportService] getData 开始执行...');\n try {\n // 支持直接传递数据数组(用于客户端直接导出)\n if (Array.isArray(request.dataSource)) {\n logger.info('📦 [UniversalExportService] 使用直接传递的数据数组:', {\n length: request.dataSource.length,\n });\n return request.dataSource;\n }\n\n // 支持数据源函数(用于服务端导出)\n if (typeof request.dataSource === 'function') {\n logger.info('📞 [UniversalExportService] 调用数据源函数...');\n const data = await request.dataSource();\n logger.info('✅ [UniversalExportService] 数据源函数执行成功:', {\n dataType: typeof data,\n isArray: Array.isArray(data),\n length: Array.isArray(data) ? data.length : 'N/A',\n });\n return data;\n }\n\n // 这里可以扩展支持从API获取数据\n console.error('❌ [UniversalExportService] 数据源类型不支持:', typeof request.dataSource);\n throw new ExportDataError('不支持的数据源类型');\n } catch (error) {\n console.error('❌ [UniversalExportService] 获取数据失败:', error);\n throw new ExportDataError(\n '获取数据失败: ' + (error instanceof Error ? error.message : '未知错误'),\n { originalError: error }\n );\n }\n }\n\n /**\n * 处理数据\n */\n private async processData(\n data: any[],\n request: ExportRequest,\n config: ExportConfig\n ): Promise<any[]> {\n logger.info('🔄 [UniversalExportService] processData 开始执行:', {\n dataLength: data.length,\n hasFilters: !!(request.filters && request.filters.length > 0),\n hasSortBy: !!(request.sortBy && request.sortBy.length > 0),\n hasPagination: !!request.pagination,\n hasGrouping: !!(config.grouping && config.grouping.enabled),\n maxRows: config.maxRows,\n });\n\n // 🔍 详细调试分组配置\n logger.info('🔍 [UniversalExportService] 详细分组配置检查:', {\n configGrouping: config.grouping,\n groupingExists: !!config.grouping,\n groupingEnabled: config.grouping?.enabled,\n groupingFields: config.grouping?.fields,\n groupingFieldsLength: config.grouping?.fields?.length,\n });\n\n let processedData = [...data];\n\n // 应用过滤器\n if (request.filters && request.filters.length > 0) {\n logger.info('🔍 [UniversalExportService] 应用过滤器...');\n processedData = this.applyFilters(processedData, request.filters);\n logger.info('✅ [UniversalExportService] 过滤器应用完成:', {\n beforeLength: data.length,\n afterLength: processedData.length,\n });\n }\n\n // 应用排序\n if (request.sortBy && request.sortBy.length > 0) {\n logger.info('📊 [UniversalExportService] 应用排序...');\n processedData = this.applySorting(processedData, request.sortBy);\n logger.info('✅ [UniversalExportService] 排序应用完成');\n }\n\n // 应用分组\n if (config.grouping && config.grouping.enabled) {\n logger.info('📊 [UniversalExportService] 应用分组...');\n processedData = this.applyGrouping(processedData, config.grouping);\n logger.info('✅ [UniversalExportService] 分组应用完成:', {\n groupsCount: this.countGroups(processedData),\n resultLength: processedData.length,\n });\n }\n\n // 应用分页\n if (request.pagination) {\n logger.info('📄 [UniversalExportService] 应用分页...');\n const { page, pageSize } = request.pagination;\n const start = (page - 1) * pageSize;\n const end = start + pageSize;\n processedData = processedData.slice(start, end);\n logger.info('✅ [UniversalExportService] 分页应用完成:', {\n page,\n pageSize,\n start,\n end,\n resultLength: processedData.length,\n });\n }\n\n // 限制行数\n if (config.maxRows && processedData.length > config.maxRows) {\n logger.info('📏 [UniversalExportService] 应用行数限制...');\n processedData = processedData.slice(0, config.maxRows);\n logger.info('✅ [UniversalExportService] 行数限制应用完成:', {\n maxRows: config.maxRows,\n resultLength: processedData.length,\n });\n }\n\n logger.info('✅ [UniversalExportService] processData 执行完成:', {\n originalLength: data.length,\n finalLength: processedData.length,\n });\n\n return processedData;\n }\n\n /**\n * 应用过滤器\n */\n private applyFilters(data: any[], filters: any[]): any[] {\n return data.filter((item) => {\n return filters.every((filter) => {\n const value = this.getNestedValue(item, filter.field);\n\n switch (filter.operator) {\n case 'eq':\n return value === filter.value;\n case 'ne':\n return value !== filter.value;\n case 'gt':\n return value > filter.value;\n case 'gte':\n return value >= filter.value;\n case 'lt':\n return value < filter.value;\n case 'lte':\n return value <= filter.value;\n case 'contains':\n return String(value).includes(String(filter.value));\n case 'startsWith':\n return String(value).startsWith(String(filter.value));\n case 'endsWith':\n return String(value).endsWith(String(filter.value));\n case 'in':\n return Array.isArray(filter.value) && filter.value.includes(value);\n case 'notIn':\n return Array.isArray(filter.value) && !filter.value.includes(value);\n default:\n return true;\n }\n });\n });\n }\n\n /**\n * 应用排序\n */\n private applySorting(data: any[], sortBy: any[]): any[] {\n return data.sort((a, b) => {\n for (const sort of sortBy) {\n const aValue = this.getNestedValue(a, sort.field);\n const bValue = this.getNestedValue(b, sort.field);\n\n if (aValue < bValue) {\n return sort.direction === 'asc' ? -1 : 1;\n }\n if (aValue > bValue) {\n return sort.direction === 'asc' ? 1 : -1;\n }\n }\n return 0;\n });\n }\n\n /**\n * 获取嵌套值\n */\n private getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n return current && current[key] !== undefined ? current[key] : null;\n }, obj);\n }\n\n /**\n * 过滤掉所有行都为空值的字段\n */\n private filterEmptyFields(data: any[], fields: ExportField[]): ExportField[] {\n const filteredFields = fields.filter((field) => {\n // 特殊处理:强制保留某些重要字段,即使所有行都为空值\n const forceKeepFields = ['pickupMethod', 'notes', 'adminNotes'];\n if (forceKeepFields.includes(field.key)) {\n logger.info('🔧 [UniversalExportService] 强制保留字段 \"' + (field.key) + '\" (' + (field.label) + ')');\n return true;\n }\n\n // 检查所有数据行,如果至少有一行该字段有值,则保留该字段\n const hasValue = data.some((item) => {\n const value = this.getNestedValue(item, field.key);\n return value !== null && value !== undefined && value !== '';\n });\n\n if (!hasValue) {\n logger.info(\n '🔍 [UniversalExportService] 字段 \"' + (field.key) + '\" (' + (field.label) + ') 被过滤掉 - 所有行都为空值'\n );\n }\n\n return hasValue;\n });\n\n logger.info('📊 [UniversalExportService] 字段过滤结果:', {\n 原始字段数: fields.length,\n 过滤后字段数: filteredFields.length,\n 被过滤的字段: fields.filter((f) => !filteredFields.includes(f)).map((f) => f.key),\n 保留的字段: filteredFields.map((f) => f.key),\n });\n\n return filteredFields;\n }\n\n /**\n * 生成文件\n */\n private async generateFile(\n data: any[],\n config: ExportConfig,\n request: ExportRequest,\n exportId: string\n ): Promise<ExportResult> {\n const startTime = new Date();\n const enabledFields = config.fields.filter((f) => f.enabled);\n\n logger.info('📄 [UniversalExportService] generateFile 开始执行:', {\n dataLength: data.length,\n enabledFieldsCount: enabledFields.length,\n format: config.format,\n enabledFields: enabledFields.map((f) => ({ key: f.key, label: f.label })),\n });\n\n try {\n let content: string;\n let fileName: string;\n\n switch (config.format) {\n case 'csv':\n logger.info('📊 [UniversalExportService] 生成CSV格式...');\n content = this.generateCSV(data, enabledFields, config);\n fileName = this.generateFileName(\n request.customFileName || config.fileNameTemplate,\n 'csv'\n );\n logger.info('✅ [UniversalExportService] CSV生成完成:', {\n contentLength: content.length,\n fileName,\n });\n break;\n case 'excel':\n logger.info('📊 [UniversalExportService] 生成Excel格式...');\n const excelBuffer = this.generateExcel(data, enabledFields, config);\n fileName = this.generateFileName(\n request.customFileName || config.fileNameTemplate,\n 'xlsx'\n );\n logger.info('✅ [UniversalExportService] Excel生成完成:', {\n bufferLength: excelBuffer.byteLength,\n fileName,\n });\n // 创建Excel Blob\n const excelBlob = new Blob([excelBuffer], { type: this.getMimeType(config.format) });\n const endTime = new Date();\n const duration = endTime.getTime() - startTime.getTime();\n return {\n exportId,\n fileName,\n fileSize: excelBlob.size,\n fileBlob: excelBlob,\n exportedRows: data.length,\n startTime,\n endTime,\n duration,\n statistics: {\n totalRows: data.length,\n filteredRows: data.length,\n exportedRows: data.length,\n skippedRows: 0,\n },\n };\n case 'json':\n logger.info('📄 [UniversalExportService] 生成JSON格式...');\n content = this.generateJSON(data, enabledFields);\n fileName = this.generateFileName(\n request.customFileName || config.fileNameTemplate,\n 'json'\n );\n logger.info('✅ [UniversalExportService] JSON生成完成:', {\n contentLength: content.length,\n fileName,\n });\n break;\n default:\n console.error('❌ [UniversalExportService] 不支持的格式:', config.format);\n throw new ExportFileError('不支持的导出格式: ' + (config.format));\n }\n\n // 创建Blob\n const blob = new Blob([content], { type: this.getMimeType(config.format) });\n\n // 检查文件大小\n if (blob.size > this.config.maxFileSize) {\n throw new ExportFileError('文件大小超过限制: ' + (blob.size) + ' > ' + (this.config.maxFileSize));\n }\n\n const endTime = new Date();\n const duration = endTime.getTime() - startTime.getTime();\n\n return {\n exportId,\n fileName,\n fileSize: blob.size,\n fileBlob: blob,\n exportedRows: data.length,\n startTime,\n endTime,\n duration,\n statistics: {\n totalRows: data.length,\n filteredRows: data.length,\n exportedRows: data.length,\n skippedRows: 0,\n },\n };\n } catch (error) {\n throw new ExportFileError(\n '生成文件失败: ' + (error instanceof Error ? error.message : '未知错误'),\n { originalError: error }\n );\n }\n }\n\n /**\n * 生成CSV内容\n */\n private generateCSV(data: any[], fields: ExportField[], config: ExportConfig): string {\n logger.info('📊 [UniversalExportService] generateCSV 开始执行:', {\n dataLength: data.length,\n fieldsCount: fields.length,\n includeHeader: config.includeHeader,\n delimiter: config.delimiter,\n addBOM: config.addBOM,\n });\n\n const lines: string[] = [];\n\n // 添加BOM\n if (config.addBOM) {\n lines.push('\\uFEFF');\n logger.info('📝 [UniversalExportService] 添加BOM');\n }\n\n // 过滤掉所有行都为空值的字段\n const nonEmptyFields = this.filterEmptyFields(data, fields);\n logger.info('📊 [UniversalExportService] 过滤空字段:', {\n originalFieldsCount: fields.length,\n nonEmptyFieldsCount: nonEmptyFields.length,\n removedFields: fields\n .filter((f: ExportField) => !nonEmptyFields.includes(f))\n .map((f: ExportField) => f.key),\n });\n\n // 添加表头\n if (config.includeHeader) {\n const headers = nonEmptyFields.map((f) => this.escapeCSVField(f.label));\n lines.push(headers.join(config.delimiter));\n logger.info('📋 [UniversalExportService] 添加表头:', headers);\n }\n\n // 添加数据行\n logger.info('📊 [UniversalExportService] 开始处理数据行...');\n for (let i = 0; i < data.length; i++) {\n const item = data[i];\n if (i === 0) {\n logger.info('📊 [UniversalExportService] 第一行数据示例:', item);\n }\n\n const row = nonEmptyFields.map((field) => {\n // 处理分组头行\n if (item.__isGroupHeader) {\n return this.escapeCSVField(item[field.key] || '');\n }\n\n let value = this.getNestedValue(item, field.key);\n\n // 应用格式化器\n if (field.formatter) {\n value = field.formatter(value);\n } else if (DEFAULT_FORMATTERS[field.type]) {\n value = DEFAULT_FORMATTERS[field.type](value);\n } else {\n value = String(value || '');\n }\n\n return this.escapeCSVField(value);\n });\n\n lines.push(row.join(config.delimiter));\n\n if (i === 0) {\n logger.info('📊 [UniversalExportService] 第一行处理结果:', row);\n }\n }\n\n const result = lines.join('\\n');\n logger.info('✅ [UniversalExportService] CSV生成完成:', {\n totalLines: lines.length,\n resultLength: result.length,\n });\n return result;\n }\n\n /**\n * 生成JSON内容\n */\n private generateJSON(data: any[], fields: ExportField[]): string {\n const processedData = data.map((item) => {\n const processed: Record<string, any> = {};\n\n for (const field of fields) {\n let value = this.getNestedValue(item, field.key);\n\n // 应用格式化器\n if (field.formatter) {\n value = field.formatter(value);\n } else if (DEFAULT_FORMATTERS[field.type]) {\n value = DEFAULT_FORMATTERS[field.type](value);\n }\n\n processed[field.key] = value;\n }\n\n return processed;\n });\n\n return JSON.stringify(processedData, null, 2);\n }\n\n /**\n * 转义CSV字段\n */\n private escapeCSVField(value: string): string {\n if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\n return '\"' + (value.replace(/\"/g, '\"\"')) + '\"';\n }\n return value;\n }\n\n /**\n * 生成文件名\n */\n private generateFileName(template: string, extension: string): string {\n const now = new Date();\n const dateStr = now.toISOString().split('T')[0];\n const timeStr = now.toTimeString().split(' ')[0].replace(/:/g, '-');\n\n return (\n template\n .replace('{date}', dateStr)\n .replace('{time}', timeStr)\n .replace('{timestamp}', now.getTime().toString()) + '.' + (extension)\n );\n }\n\n /**\n * 获取MIME类型\n */\n private getMimeType(format: ExportFormat): string {\n switch (format) {\n case 'csv':\n return 'text/csv; charset=utf-8';\n case 'json':\n return 'application/json; charset=utf-8';\n case 'excel':\n return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n default:\n return 'application/octet-stream';\n }\n }\n\n /**\n * 触发事件\n */\n private emitEvent(event: ExportEvent): void {\n const listeners = this.eventListeners.get(event.type);\n if (listeners) {\n listeners.forEach((listener) => {\n try {\n listener(event);\n } catch (error) {\n console.error('事件监听器执行失败:', error);\n }\n });\n }\n }\n\n // ============= 分组相关方法 =============\n\n /**\n * 应用分组\n */\n private applyGrouping(data: any[], groupingConfig: GroupingConfig): any[] {\n logger.info('📊 [UniversalExportService] applyGrouping 开始执行:', {\n dataLength: data.length,\n groupingFields: groupingConfig.fields.map((f) => f.key),\n preserveOrder: groupingConfig.preserveOrder,\n });\n\n if (!groupingConfig.fields || groupingConfig.fields.length === 0) {\n return data;\n }\n\n // 按分组字段对数据进行分组\n const grouped = this.groupDataByFields(data, groupingConfig);\n\n // 处理分组后的数据\n const result = this.processGroupedData(grouped, groupingConfig);\n\n logger.info('✅ [UniversalExportService] applyGrouping 执行完成:', {\n originalLength: data.length,\n groupedLength: result.length,\n });\n\n return result;\n }\n\n /**\n * 按字段分组数据\n */\n private groupDataByFields(data: any[], groupingConfig: GroupingConfig): Map<string, any[]> {\n const groups = new Map<string, any[]>();\n\n for (const item of data) {\n // 生成分组键\n const groupKey = this.generateGroupKey(item, groupingConfig.fields);\n\n if (!groups.has(groupKey)) {\n groups.set(groupKey, []);\n }\n groups.get(groupKey)!.push(item);\n }\n\n return groups;\n }\n\n /**\n * 生成分组键\n */\n private generateGroupKey(item: any, groupingFields: GroupingField[]): string {\n const keyParts = groupingFields.map((field) => {\n const value = this.getNestedValue(item, field.key);\n\n // 处理空值\n if (value === null || value === undefined || value === '') {\n return '__NULL__';\n }\n\n return String(value);\n });\n\n return keyParts.join('|');\n }\n\n /**\n * 处理分组后的数据\n */\n private processGroupedData(groups: Map<string, any[]>, groupingConfig: GroupingConfig): any[] {\n const result: any[] = [];\n\n for (const [groupKey, groupItems] of groups) {\n if (groupItems.length === 0) continue;\n\n // 解析分组键\n const groupValues = groupKey.split('|');\n\n // 处理分组\n const processedGroup = this.processGroup(groupItems, groupingConfig, groupValues);\n result.push(...processedGroup);\n }\n\n return result;\n }\n\n /**\n * 处理单个分组\n */\n private processGroup(\n groupItems: any[],\n groupingConfig: GroupingConfig,\n groupValues: string[]\n ): any[] {\n const result: any[] = [];\n\n // 添加分组头行(如果需要)\n const showGroupHeader = groupingConfig.fields.some((f) => f.showGroupHeader);\n if (showGroupHeader) {\n const groupHeader = this.createGroupHeader(groupValues, groupingConfig.fields);\n result.push(groupHeader);\n }\n\n // 处理分组模式 - 对于多字段分组,使用特殊处理\n if (groupingConfig.fields.length > 1) {\n // 多字段合并模式\n result.push(...this.processMultiFieldMergeMode(groupItems, groupingConfig.fields));\n } else {\n // 单字段分组\n const primaryGroupField = groupingConfig.fields[0];\n\n switch (primaryGroupField.mode) {\n case 'merge':\n // 合并模式:第一行显示分组值,其他行为空\n result.push(...this.processMergeMode(groupItems, primaryGroupField));\n break;\n case 'separate':\n // 分离模式:每个分组独立显示\n result.push(...groupItems);\n break;\n case 'nested':\n // 嵌套模式:支持多级分组\n result.push(...this.processNestedMode(groupItems, groupingConfig));\n break;\n default:\n result.push(...groupItems);\n }\n }\n\n return result;\n }\n\n /**\n * 创建分组头行\n */\n private createGroupHeader(groupValues: string[], groupingFields: GroupingField[]): any {\n const header: any = { __isGroupHeader: true };\n\n groupingFields.forEach((field, index) => {\n const value = groupValues[index] === '__NULL__' ? '' : groupValues[index];\n const template = field.groupHeaderTemplate || (field.label) + ': {value}';\n header[field.key] = template.replace('{value}', value);\n });\n\n return header;\n }\n\n /**\n * 处理合并模式\n */\n private processMergeMode(groupItems: any[], groupField: GroupingField): any[] {\n if (groupItems.length === 0) return [];\n\n const result: any[] = [];\n\n // 第一行保持原样\n const firstItem = { ...groupItems[0] };\n firstItem.__groupSize = groupItems.length;\n firstItem.__isGroupFirst = true;\n result.push(firstItem);\n\n // 其他行的分组字段设置为空,用于合并单元格\n for (let i = 1; i < groupItems.length; i++) {\n const item = { ...groupItems[i] };\n item[groupField.key] = ''; // 空值表示需要合并\n item.__isGroupChild = true;\n item.__groupIndex = i;\n result.push(item);\n }\n\n return result;\n }\n\n /**\n * 处理多字段合并模式\n */\n private processMultiFieldMergeMode(groupItems: any[], groupFields: GroupingField[]): any[] {\n if (groupItems.length === 0) return [];\n\n const result: any[] = [];\n\n // 第一行保持原样,添加分组标记\n const firstItem = { ...groupItems[0] };\n firstItem.__groupSize = groupItems.length;\n firstItem.__isGroupFirst = true;\n\n // 为每个分组字段标记\n groupFields.forEach((field) => {\n firstItem['__' + (field.key) + '_groupSize'] = groupItems.length;\n firstItem['__' + (field.key) + '_isGroupFirst'] = true;\n });\n\n result.push(firstItem);\n\n logger.info('🔗 [UniversalExportService] 处理多字段合并模式:', {\n groupItemsLength: groupItems.length,\n groupFields: groupFields.map((f) => f.key),\n firstItem: firstItem,\n });\n\n // 其他行的所有分组字段设置为空,用于合并单元格\n for (let i = 1; i < groupItems.length; i++) {\n const item = { ...groupItems[i] };\n\n // 清空所有分组字段的值,用于单元格合并\n groupFields.forEach((field) => {\n item[field.key] = ''; // 空值表示需要合并\n });\n\n item.__isGroupChild = true;\n item.__groupIndex = i;\n result.push(item);\n }\n\n return result;\n }\n\n /**\n * 处理嵌套模式\n */\n private processNestedMode(groupItems: any[], groupingConfig: GroupingConfig): any[] {\n // 如果只有一个分组字段,按merge模式处理\n if (groupingConfig.fields.length === 1) {\n return this.processMergeMode(groupItems, groupingConfig.fields[0]);\n }\n\n // 多级分组:递归处理下一级\n const subGroupingConfig: GroupingConfig = {\n ...groupingConfig,\n fields: groupingConfig.fields.slice(1),\n };\n\n return this.applyGrouping(groupItems, subGroupingConfig);\n }\n\n /**\n * 统计分组数量\n */\n private countGroups(data: any[]): number {\n const groupHeaders = data.filter((item) => item.__isGroupHeader);\n const groupFirsts = data.filter((item) => item.__isGroupFirst);\n return Math.max(groupHeaders.length, groupFirsts.length);\n }\n\n /**\n * 生成Excel文件\n */\n private generateExcel(data: any[], fields: ExportField[], config: ExportConfig): ArrayBuffer {\n logger.info('📊 [UniversalExportService] generateExcel 开始执行:', {\n dataLength: data.length,\n fieldsCount: fields.length,\n hasGrouping: !!(config.grouping && config.grouping.enabled),\n });\n\n // 创建工作簿\n const workbook = XLSX.utils.book_new();\n\n // 过滤掉所有行都为空值的字段\n const nonEmptyFields = this.filterEmptyFields(data, fields);\n\n // 准备数据\n const worksheetData = this.prepareExcelData(data, nonEmptyFields, config);\n\n // 创建工作表\n const worksheet = XLSX.utils.aoa_to_sheet(worksheetData);\n\n // 应用分组和合并单元格\n if (config.grouping && config.grouping.enabled) {\n this.applyExcelGrouping(\n worksheet,\n data,\n nonEmptyFields,\n config.grouping,\n config.includeHeader\n );\n }\n\n // 设置列宽和样式\n this.setExcelColumnWidths(worksheet, nonEmptyFields);\n\n // 为所有数据单元格添加边框\n this.applyExcelDataStyles(worksheet, config.includeHeader);\n\n // 添加工作表到工作簿\n XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');\n\n // 生成文件\n const excelBuffer = XLSX.write(workbook, {\n bookType: 'xlsx',\n type: 'array',\n cellStyles: true,\n });\n\n logger.info('✅ [UniversalExportService] generateExcel 执行完成');\n return excelBuffer;\n }\n\n /**\n * 准备Excel数据\n */\n private prepareExcelData(data: any[], fields: ExportField[], config: ExportConfig): any[][] {\n const result: any[][] = [];\n\n logger.info('📊 [UniversalExportService] 准备Excel数据:', {\n dataLength: data.length,\n fieldsCount: fields.length,\n includeHeader: config.includeHeader,\n hasGrouping: !!(config.grouping && config.grouping.enabled),\n });\n\n // 添加表头\n if (config.includeHeader) {\n const headers = fields.map((field) => field.label);\n result.push(headers);\n logger.info('📋 [UniversalExportService] 添加表头:', headers);\n }\n\n // 添加数据行\n for (let i = 0; i < data.length; i++) {\n const item = data[i];\n\n const row = fields.map((field) => {\n // 跳过分组头行的处理\n if (item.__isGroupHeader) {\n return item[field.key] || '';\n }\n\n let value = this.getNestedValue(item, field.key);\n\n // 应用格式化器\n if (field.formatter) {\n value = field.formatter(value);\n } else if (DEFAULT_FORMATTERS[field.type]) {\n value = DEFAULT_FORMATTERS[field.type](value);\n } else {\n value = String(value || '');\n }\n\n return value;\n });\n\n result.push(row);\n\n if (i === 0) {\n logger.info('📊 [UniversalExportService] 第一行数据示例:', row);\n }\n }\n\n logger.info('✅ [UniversalExportService] Excel数据准备完成:', {\n totalRows: result.length,\n headerRows: config.includeHeader ? 1 : 0,\n dataRows: result.length - (config.includeHeader ? 1 : 0),\n });\n\n return result;\n }\n\n /**\n * 应用Excel分组和合并单元格\n */\n private applyExcelGrouping(\n worksheet: XLSX.WorkSheet,\n data: any[],\n fields: ExportField[],\n groupingConfig: GroupingConfig,\n includeHeader: boolean = true\n ): void {\n if (!worksheet['!merges']) {\n worksheet['!merges'] = [];\n }\n\n const headerOffset = includeHeader ? 1 : 0; // 是否有表头\n let currentRow = headerOffset;\n\n logger.info('📊 [UniversalExportService] 开始处理Excel分组和合并单元格:', {\n dataLength: data.length,\n headerOffset,\n groupingFields: groupingConfig.fields.map((f) => ({ key: f.key, mergeCells: f.mergeCells })),\n });\n\n for (let i = 0; i < data.length; i++) {\n const item = data[i];\n\n if (item.__isGroupFirst && item.__groupSize > 1) {\n logger.info('🔗 [UniversalExportService] 处理分组合并:', {\n row: currentRow,\n groupSize: item.__groupSize,\n item: item,\n });\n\n // 找到需要合并的分组字段\n groupingConfig.fields.forEach((groupField) => {\n if (groupField.mergeCells) {\n const fieldIndex = fields.findIndex((f) => f.key === groupField.key);\n if (fieldIndex >= 0) {\n // 获取分组大小 - 优先使用字段特定的分组大小\n const groupSize = item['__' + (groupField.key) + '_groupSize'] || item.__groupSize;\n\n // 创建合并区域\n const mergeRange = {\n s: { r: currentRow, c: fieldIndex }, // 开始行列\n e: { r: currentRow + groupSize - 1, c: fieldIndex }, // 结束行列\n };\n\n logger.info('📊 [UniversalExportService] 添加合并区域:', {\n field: groupField.key,\n fieldIndex,\n groupSize,\n mergeRange,\n });\n\n worksheet['!merges']!.push(mergeRange);\n\n // 为合并单元格添加样式\n const startCellAddress = XLSX.utils.encode_cell(mergeRange.s);\n if (worksheet[startCellAddress]) {\n worksheet[startCellAddress].s = {\n ...worksheet[startCellAddress].s,\n alignment: { horizontal: 'center', vertical: 'middle' },\n fill: { fgColor: { rgb: 'F2F2F2' } },\n border: {\n top: { style: 'thin', color: { rgb: '000000' } },\n bottom: { style: 'thin', color: { rgb: '000000' } },\n left: { style: 'thin', color: { rgb: '000000' } },\n right: { style: 'thin', color: { rgb: '000000' } },\n },\n };\n }\n }\n }\n });\n }\n\n currentRow++;\n }\n\n logger.info('✅ [UniversalExportService] Excel分组和合并单元格处理完成:', {\n totalMerges: worksheet['!merges']?.length || 0,\n });\n }\n\n /**\n * 设置Excel列宽和样式\n */\n private setExcelColumnWidths(worksheet: XLSX.WorkSheet, fields: ExportField[]): void {\n const colWidths = fields.map((field) => ({\n wch: field.width || 15, // 默认宽度15字符\n }));\n\n worksheet['!cols'] = colWidths;\n\n // 设置表头样式\n if (worksheet['!ref']) {\n const range = XLSX.utils.decode_range(worksheet['!ref']);\n for (let col = range.s.c; col <= range.e.c; col++) {\n const cellAddress = XLSX.utils.encode_cell({ r: 0, c: col });\n if (worksheet[cellAddress]) {\n // 为表头添加样式\n worksheet[cellAddress].s = {\n font: { bold: true, color: { rgb: 'FFFFFF' } },\n fill: { fgColor: { rgb: '4472C4' } },\n alignment: { horizontal: 'center', vertical: 'center' },\n border: {\n top: { style: 'thin', color: { rgb: '000000' } },\n bottom: { style: 'thin', color: { rgb: '000000' } },\n left: { style: 'thin', color: { rgb: '000000' } },\n right: { style: 'thin', color: { rgb: '000000' } },\n },\n };\n }\n }\n }\n\n logger.info('✅ [UniversalExportService] Excel列宽和样式设置完成:', {\n columnsCount: colWidths.length,\n columnWidths: colWidths.map((col, index) => ({ field: fields[index]?.key, width: col.wch })),\n });\n }\n\n /**\n * 为Excel数据单元格应用样式\n */\n private applyExcelDataStyles(worksheet: XLSX.WorkSheet, includeHeader: boolean = true): void {\n if (!worksheet['!ref']) return;\n\n const range = XLSX.utils.decode_range(worksheet['!ref']);\n const startRow = includeHeader ? 1 : 0; // 跳过表头\n\n logger.info('🎨 [UniversalExportService] 开始应用Excel数据样式:', {\n totalRows: range.e.r + 1,\n totalCols: range.e.c + 1,\n startRow,\n });\n\n // 为数据单元格添加边框和对齐\n for (let row = startRow; row <= range.e.r; row++) {\n for (let col = range.s.c; col <= range.e.c; col++) {\n const cellAddress = XLSX.utils.encode_cell({ r: row, c: col });\n if (worksheet[cellAddress]) {\n // 保留已有样式(如合并单元格的样式)\n const existingStyle = worksheet[cellAddress].s || {};\n\n worksheet[cellAddress].s = {\n ...existingStyle,\n border: {\n top: { style: 'thin', color: { rgb: 'CCCCCC' } },\n bottom: { style: 'thin', color: { rgb: 'CCCCCC' } },\n left: { style: 'thin', color: { rgb: 'CCCCCC' } },\n right: { style: 'thin', color: { rgb: 'CCCCCC' } },\n },\n alignment: {\n ...existingStyle.alignment,\n vertical: 'center',\n },\n };\n }\n }\n }\n\n logger.info('✅ [UniversalExportService] Excel数据样式应用完成');\n }\n}\n","/**\n * UniversalExport Service 工厂函数\n * 提供简化的服务初始化方式\n */\n\nimport type { UniversalExportServiceConfig } from './types';\n\n/**\n * 创建导出服务配置(带智能默认值)\n */\nexport function createExportServiceConfig(\n options: Partial<UniversalExportServiceConfig> = {}\n): UniversalExportServiceConfig {\n return {\n db: options.db,\n exportDir: options.exportDir || process.env.EXPORT_DIR || './exports',\n tempDir: options.tempDir || process.env.TEMP_DIR || './temp',\n maxRows: options.maxRows || 100000, // 默认最多导出 10 万行\n enableStreaming: options.enableStreaming !== false, // 默认启用流式导出\n timeout: options.timeout || 300000, // 默认超时 5 分钟\n };\n}\n\n/**\n * 创建导出服务实例(简化版)\n *\n * @example\n * ```typescript\n * // 最简配置\n * const service = createUniversalExportService();\n *\n * // 标准配置\n * const service = createUniversalExportService({\n * db: drizzleDb,\n * exportDir: './exports',\n * maxRows: 50000,\n * });\n * ```\n */\nexport function createUniversalExportService(\n options: Partial<UniversalExportServiceConfig> = {}\n) {\n const config = createExportServiceConfig(options);\n\n // 注意:实际的 UniversalExportService 将在后续 Phase 中迁移\n // 这里先返回一个占位对象,包含基本的类型信息\n console.warn(\n '⚠️ UniversalExportService 的完整实现将在后续 Phase 中迁移到 Sa2kit。\\n' +\n ' 当前版本仅包含类型定义和配置工厂函数。\\n' +\n ' 请暂时继续从 LyricNote 的 lib/universalExport 导入服务类。'\n );\n\n return {\n config,\n // 占位方法\n async export() {\n throw new Error('UniversalExportService 尚未完全迁移,请从 LyricNote 导入');\n },\n async createTask() {\n throw new Error('UniversalExportService 尚未完全迁移,请从 LyricNote 导入');\n },\n };\n}\n\n/**\n * 从环境变量创建配置(便利函数)\n *\n * @example\n * ```typescript\n * // .env\n * // EXPORT_DIR=./exports\n * // EXPORT_MAX_ROWS=50000\n *\n * const service = createExportServiceFromEnv();\n * ```\n */\nexport function createExportServiceFromEnv(db?: any) {\n return createUniversalExportService({\n db,\n exportDir: process.env.EXPORT_DIR,\n tempDir: process.env.TEMP_DIR,\n maxRows: process.env.EXPORT_MAX_ROWS\n ? parseInt(process.env.EXPORT_MAX_ROWS)\n : undefined,\n });\n}\n\n","/**\n * UniversalExport 预设配置\n * 提供常见场景的开箱即用配置\n */\n\nimport type { UniversalExportServiceConfig } from './types';\n\n/**\n * 小型应用预设(数据量小)\n */\nexport function createSmallAppPreset(): Partial<UniversalExportServiceConfig> {\n return {\n maxRows: 10000, // 1万行\n timeout: 60000, // 1分钟\n enableStreaming: false, // 小数据量不需要流式导出\n };\n}\n\n/**\n * 中型应用预设(默认配置)\n */\nexport function createMediumAppPreset(): Partial<UniversalExportServiceConfig> {\n return {\n maxRows: 100000, // 10万行\n timeout: 300000, // 5分钟\n enableStreaming: true,\n };\n}\n\n/**\n * 大型应用预设(数据量大)\n */\nexport function createLargeAppPreset(): Partial<UniversalExportServiceConfig> {\n return {\n maxRows: 1000000, // 100万行\n timeout: 600000, // 10分钟\n enableStreaming: true,\n };\n}\n\n/**\n * 实时导出预设(快速响应)\n */\nexport function createRealtimeExportPreset(): Partial<UniversalExportServiceConfig> {\n return {\n maxRows: 5000, // 5千行\n timeout: 30000, // 30秒\n enableStreaming: false,\n };\n}\n\n/**\n * 批量导出预设(大批量、离线处理)\n */\nexport function createBatchExportPreset(): Partial<UniversalExportServiceConfig> {\n return {\n maxRows: Number.MAX_SAFE_INTEGER, // 不限制\n timeout: 1800000, // 30分钟\n enableStreaming: true,\n };\n}\n\n/**\n * 智能预设:根据环境自动选择\n */\nexport function createSmartExportPreset(): Partial<UniversalExportServiceConfig> {\n const envMaxRows = process.env.EXPORT_MAX_ROWS;\n\n if (envMaxRows) {\n const maxRows = parseInt(envMaxRows);\n\n // 根据配置的最大行数自动选择合适的预设\n if (maxRows <= 10000) {\n return createSmallAppPreset();\n } else if (maxRows <= 100000) {\n return createMediumAppPreset();\n } else {\n return createLargeAppPreset();\n }\n }\n\n // 默认使用中型应用预设\n return createMediumAppPreset();\n}\n\n","/**\n * UniversalExport 配置验证\n */\n\nimport type { UniversalExportServiceConfig } from './types';\n\nexport class ConfigValidationError extends Error {\n constructor(message: string, public field: string) {\n super(message);\n this.name = 'ConfigValidationError';\n }\n}\n\n/**\n * 验证导出服务配置\n */\nexport function validateExportConfig(config: UniversalExportServiceConfig): void {\n // 验证导出目录\n if (!config.exportDir) {\n throw new ConfigValidationError('exportDir is required', 'exportDir');\n }\n\n // 验证临时目录\n if (!config.tempDir) {\n throw new ConfigValidationError('tempDir is required', 'tempDir');\n }\n\n // 验证最大行数\n if (config.maxRows && config.maxRows <= 0) {\n throw new ConfigValidationError(\n 'maxRows must be greater than 0',\n 'maxRows'\n );\n }\n\n // 验证超时时间\n if (config.timeout && config.timeout <= 0) {\n throw new ConfigValidationError(\n 'timeout must be greater than 0',\n 'timeout'\n );\n }\n\n // 安全建议\n if (config.maxRows && config.maxRows > 1000000) {\n console.warn(\n '⚠️ Warning: maxRows (' + (config.maxRows) + ') is very large. ' +\n `Consider using pagination or streaming for better performance.`\n );\n }\n}\n\n/**\n * 验证环境变量\n */\nexport function validateEnvironment(requiredVars: string[]): void {\n const missing: string[] = [];\n\n for (const varName of requiredVars) {\n if (!process.env[varName]) {\n missing.push(varName);\n }\n }\n\n if (missing.length > 0) {\n throw new ConfigValidationError(\n 'Missing required environment variables: ' + (missing.join(', ')),\n 'environment'\n );\n }\n}\n\n","/**\n * UniversalExport Server 工具函数\n */\n\nimport type { ExportField, FieldType } from '../../types';\n\n/**\n * 格式化字段值\n *\n * @param value 原始值\n * @param field 字段定义\n * @returns 格式化后的值\n */\nexport function formatFieldValue(value: any, field: ExportField): string {\n // 如果字段有自定义格式化函数,使用它\n if (field.formatter) {\n return field.formatter(value);\n }\n\n // 空值处理\n if (value === null || value === undefined) {\n return '';\n }\n\n // 根据字段类型进行默认格式化\n switch (field.type) {\n case 'date':\n return value instanceof Date\n ? (value.toISOString().split('T')[0] || '')\n : String(value);\n\n case 'boolean':\n return value ? '是' : '否';\n\n case 'array':\n return Array.isArray(value) ? value.join(', ') : String(value);\n\n case 'object':\n return typeof value === 'object'\n ? JSON.stringify(value)\n : String(value);\n\n case 'number':\n return typeof value === 'number'\n ? value.toLocaleString()\n : String(value);\n\n default:\n return String(value);\n }\n}\n\n/**\n * 验证字段值\n *\n * @param value 字段值\n * @param field 字段定义\n * @returns 是否有效\n */\nexport function validateFieldValue(value: any, field: ExportField): boolean {\n // 必填字段检查\n if (field.required && (value === null || value === undefined || value === '')) {\n return false;\n }\n\n // 类型检查\n switch (field.type) {\n case 'number':\n return typeof value === 'number' || !isNaN(Number(value));\n\n case 'boolean':\n return typeof value === 'boolean';\n\n case 'array':\n return Array.isArray(value);\n\n case 'object':\n return typeof value === 'object';\n\n case 'date':\n return value instanceof Date || !isNaN(Date.parse(value));\n\n default:\n return true;\n }\n}\n\n/**\n * 转换字段类型\n *\n * @param value 原始值\n * @param targetType 目标类型\n * @returns 转换后的值\n */\nexport function convertFieldType(value: any, targetType: FieldType): any {\n if (value === null || value === undefined) {\n return value;\n }\n\n switch (targetType) {\n case 'string':\n return String(value);\n\n case 'number':\n return Number(value);\n\n case 'boolean':\n return Boolean(value);\n\n case 'date':\n return value instanceof Date ? value : new Date(value);\n\n case 'array':\n return Array.isArray(value) ? value : [value];\n\n case 'object':\n return typeof value === 'object' ? value : { value };\n\n default:\n return value;\n }\n}\n\n/**\n * 安全获取嵌套属性值\n *\n * @param obj 对象\n * @param path 属性路径(支持点号分隔)\n * @returns 属性值\n *\n * @example\n * ```typescript\n * const obj = { user: { name: 'John', age: 30 } };\n * getNestedValue(obj, 'user.name') // 'John'\n * getNestedValue(obj, 'user.email') // undefined\n * ```\n */\nexport function getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n}\n\n/**\n * 转义 CSV 字段值\n *\n * @param value 字段值\n * @returns 转义后的值\n */\nexport function escapeCsvValue(value: string): string {\n // 如果包含逗号、引号或换行符,需要用引号包裹并转义引号\n if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\n return '\"' + (value.replace(/\"/g, '\"\"')) + '\"';\n }\n return value;\n}\n\n/**\n * 生成唯一的文件名\n *\n * @param prefix 前缀\n * @param extension 扩展名\n * @returns 唯一文件名\n *\n * @example\n * ```typescript\n * generateUniqueFilename('export', 'xlsx')\n * // 'export_20231111_123456_abc123.xlsx'\n * ```\n */\nexport function generateUniqueFilename(prefix: string, extension: string): string {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);\n const random = Math.random().toString(36).substring(2, 8);\n return (prefix) + '_' + (timestamp) + '_' + (random) + '.' + (extension);\n}\n\n/**\n * 计算导出进度百分比\n *\n * @param processed 已处理行数\n * @param total 总行数\n * @returns 百分比(0-100)\n */\nexport function calculateProgress(processed: number, total: number): number {\n if (total === 0) return 0;\n return Math.min(Math.round((processed / total) * 100), 100);\n}\n\n/**\n * 估算剩余时间(秒)\n *\n * @param processed 已处理行数\n * @param total 总行数\n * @param elapsedMs 已用时间(毫秒)\n * @returns 剩余时间(秒)\n */\nexport function estimateRemainingTime(\n processed: number,\n total: number,\n elapsedMs: number\n): number {\n if (processed === 0) return 0;\n const avgTimePerRow = elapsedMs / processed;\n const remainingRows = total - processed;\n return Math.round((remainingRows * avgTimePerRow) / 1000);\n}\n\n","/**\n * 通用导出服务 - PostgreSQL 数据库表结构定义\n *\n * 提供导出配置和历史记录的数据库表结构。\n *\n * 表结构概览:\n * - export_configs: 导出配置表\n * - export_history: 导出历史记录表\n *\n * 设计特点:\n * - 支持多种导出格式(CSV, Excel, JSON)\n * - 灵活的字段配置和分组\n * - 完整的历史记录追踪\n *\n * @fileoverview 数据库表结构 - 通用导出服务 (PostgreSQL)\n * @package sa2kit/universalExport/server\n */\n\nimport { pgTable, text, boolean, jsonb, timestamp, integer } from 'drizzle-orm/pg-core';\nimport { sql, relations } from 'drizzle-orm';\n\n/**\n * 导出配置表 (ExportConfig)\n *\n * 存储导出任务的配置信息,包括字段选择、格式化、分组等。\n */\nexport const exportConfigs = pgTable('ExportConfig', {\n /** 主键ID */\n id: text('id')\n .primaryKey()\n .$defaultFn(() => 'export_config_' + (Date.now()) + '_' + (Math.random().toString(36).substr(2, 9))),\n\n /** 配置名称 */\n name: text('name').notNull(),\n\n /** 配置描述 */\n description: text('description'),\n\n /** 导出格式:'csv' | 'excel' | 'json' */\n format: text('format').notNull(),\n\n /** 导出字段配置(JSON数组) */\n fields: jsonb('fields').notNull(), // ExportField[]\n\n /** 分组配置 */\n grouping: jsonb('grouping'), // GroupingConfig\n\n /** 文件名模板 */\n fileNameTemplate: text('fileNameTemplate').notNull(),\n\n /** 是否包含表头 */\n includeHeader: boolean('includeHeader').default(true).notNull(),\n\n /** 分隔符(用于CSV格式) */\n delimiter: text('delimiter').default(',').notNull(),\n\n /** 编码格式 */\n encoding: text('encoding').default('utf-8').notNull(),\n\n /** 是否添加BOM(用于Excel打开UTF-8 CSV) */\n addBOM: boolean('addBOM').default(true).notNull(),\n\n /** 最大导出行数 */\n maxRows: integer('maxRows'),\n\n /** 模块ID */\n moduleId: text('moduleId').notNull(),\n\n /** 业务ID */\n businessId: text('businessId'),\n\n /** 创建者ID */\n createdBy: text('createdBy'),\n\n /** 创建时间 */\n createdAt: timestamp('createdAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n\n /** 更新时间 */\n updatedAt: timestamp('updatedAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n});\n\n/**\n * 导出历史记录表 (ExportHistory)\n *\n * 记录每次导出任务的执行情况,包括状态、耗时、文件信息等。\n */\nexport const exportHistory = pgTable('ExportHistory', {\n /** 主键ID */\n id: text('id')\n .primaryKey()\n .$defaultFn(() => 'export_history_' + (Date.now()) + '_' + (Math.random().toString(36).substr(2, 9))),\n\n /** 关联的配置ID */\n configId: text('configId').notNull(),\n\n /** 导出的文件名 */\n fileName: text('fileName').notNull(),\n\n /** 文件大小(字节) */\n fileSize: integer('fileSize').notNull(),\n\n /** 导出的行数 */\n exportedRows: integer('exportedRows').notNull(),\n\n /** 导出状态:'pending' | 'processing' | 'completed' | 'failed' */\n status: text('status').notNull(),\n\n /** 错误信息(如果失败) */\n error: text('error'),\n\n /** 导出耗时(毫秒) */\n duration: integer('duration'),\n\n /** 开始时间 */\n startTime: timestamp('startTime', { precision: 3, mode: 'date' }).notNull(),\n\n /** 结束时间 */\n endTime: timestamp('endTime', { precision: 3, mode: 'date' }),\n\n /** 创建者ID */\n createdBy: text('createdBy'),\n\n /** 创建时间 */\n createdAt: timestamp('createdAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n});\n\n// ========== 关系定义 ==========\n\n/**\n * 导出配置表关系\n * 一个配置可以有多个导出历史记录\n */\nexport const exportConfigsRelations = relations(exportConfigs, ({ many }) => ({\n history: many(exportHistory),\n}));\n\n/**\n * 导出历史表关系\n * 每个历史记录关联一个配置\n */\nexport const exportHistoryRelations = relations(exportHistory, ({ one }) => ({\n config: one(exportConfigs, {\n fields: [exportHistory.configId],\n references: [exportConfigs.id],\n }),\n}));\n\n// ========== 导出类型 ==========\n\nexport type ExportConfig = typeof exportConfigs.$inferSelect;\nexport type NewExportConfig = typeof exportConfigs.$inferInsert;\n\nexport type ExportHistory = typeof exportHistory.$inferSelect;\nexport type NewExportHistory = typeof exportHistory.$inferInsert;\n\n","/**\n * 通用导出服务 - Drizzle 数据库操作层\n *\n * 提供导出配置和历史记录的数据库操作接口。\n * 支持任何 Drizzle 数据库实例。\n *\n * @package sa2kit/universalExport/server\n */\n\nimport { eq, and, desc } from 'drizzle-orm';\nimport type {\n ExportConfig,\n NewExportConfig,\n ExportHistory,\n NewExportHistory,\n} from './drizzle-schemas/postgres';\nimport { exportConfigs, exportHistory } from './drizzle-schemas/postgres';\n\n/**\n * Drizzle 数据库实例类型\n */\nexport type DrizzleDb = any; // 支持任何 Drizzle 数据库实例\n\n/**\n * 导出配置数据库服务工厂选项\n */\nexport interface ExportDatabaseServiceOptions {\n /**\n * Drizzle 数据库实例\n */\n db: DrizzleDb;\n}\n\n/**\n * 导出配置数据库服务\n *\n * 提供导出配置的 CRUD 操作\n */\nexport class ExportConfigDatabaseService {\n constructor(private readonly db: DrizzleDb) {}\n\n /**\n * 创建导出配置\n */\n async createConfig(\n config: Omit<NewExportConfig, 'id' | 'createdAt' | 'updatedAt'>\n ): Promise<ExportConfig> {\n const id = 'export_config_' + (Date.now()) + '_' + (Math.random().toString(36).substr(2, 9));\n const now = new Date();\n\n const [newConfig] = await this.db\n .insert(exportConfigs)\n .values({\n id,\n ...config,\n createdAt: now,\n updatedAt: now,\n })\n .returning();\n\n return newConfig;\n }\n\n /**\n * 根据ID获取配置\n */\n async getConfigById(id: string): Promise<ExportConfig | null> {\n const [config] = await this.db\n .select()\n .from(exportConfigs)\n .where(eq(exportConfigs.id, id))\n .limit(1);\n\n return config || null;\n }\n\n /**\n * 根据模块和业务ID获取配置列表\n */\n async getConfigsByModule(moduleId: string, businessId?: string): Promise<ExportConfig[]> {\n const whereConditions = businessId\n ? and(eq(exportConfigs.moduleId, moduleId), eq(exportConfigs.businessId, businessId))\n : eq(exportConfigs.moduleId, moduleId);\n\n return await this.db\n .select()\n .from(exportConfigs)\n .where(whereConditions)\n .orderBy(desc(exportConfigs.updatedAt));\n }\n\n /**\n * 更新配置\n */\n async updateConfig(\n id: string,\n updates: Partial<Omit<ExportConfig, 'id' | 'createdAt'>>\n ): Promise<ExportConfig | null> {\n const [updatedConfig] = await this.db\n .update(exportConfigs)\n .set({\n ...updates,\n updatedAt: new Date(),\n })\n .where(eq(exportConfigs.id, id))\n .returning();\n\n return updatedConfig || null;\n }\n\n /**\n * 删除配置\n */\n async deleteConfig(id: string): Promise<boolean> {\n await this.db.delete(exportConfigs).where(eq(exportConfigs.id, id));\n return true;\n }\n\n /**\n * 根据用户ID获取配置列表\n */\n async getConfigsByUser(userId: string): Promise<ExportConfig[]> {\n return await this.db\n .select()\n .from(exportConfigs)\n .where(eq(exportConfigs.createdBy, userId))\n .orderBy(desc(exportConfigs.updatedAt));\n }\n}\n\n/**\n * 导出历史记录数据库服务\n *\n * 提供导出历史记录的 CRUD 操作\n */\nexport class ExportHistoryDatabaseService {\n constructor(private readonly db: DrizzleDb) {}\n\n /**\n * 创建导出历史记录\n */\n async createHistory(history: Omit<NewExportHistory, 'id' | 'createdAt'>): Promise<ExportHistory> {\n const id = 'export_history_' + (Date.now()) + '_' + (Math.random().toString(36).substr(2, 9));\n\n const [newHistory] = await this.db\n .insert(exportHistory)\n .values({\n id,\n ...history,\n createdAt: new Date(),\n })\n .returning();\n\n return newHistory;\n }\n\n /**\n * 根据配置ID获取历史记录\n */\n async getHistoryByConfigId(configId: string): Promise<ExportHistory[]> {\n return await this.db\n .select()\n .from(exportHistory)\n .where(eq(exportHistory.configId, configId))\n .orderBy(desc(exportHistory.createdAt));\n }\n\n /**\n * 根据用户ID获取历史记录\n */\n async getHistoryByUser(userId: string): Promise<ExportHistory[]> {\n return await this.db\n .select()\n .from(exportHistory)\n .where(eq(exportHistory.createdBy, userId))\n .orderBy(desc(exportHistory.createdAt));\n }\n\n /**\n * 获取最近的导出历史记录\n */\n async getRecentHistory(limit: number = 10): Promise<ExportHistory[]> {\n return await this.db\n .select()\n .from(exportHistory)\n .orderBy(desc(exportHistory.createdAt))\n .limit(limit);\n }\n}\n\n/**\n * 创建导出数据库服务实例\n *\n * @param options - 数据库服务选项\n * @returns 导出配置和历史记录服务实例\n *\n * @example\n * ```typescript\n * import { createExportDatabaseServices } from 'sa2kit/universalExport/server';\n * import { db } from './db';\n *\n * const { configDB, historyDB } = createExportDatabaseServices({ db });\n *\n * // 使用服务\n * const config = await configDB.createConfig({ ... });\n * const history = await historyDB.createHistory({ ... });\n * ```\n */\nexport function createExportDatabaseServices(options: ExportDatabaseServiceOptions) {\n const { db } = options;\n\n return {\n configDB: new ExportConfigDatabaseService(db),\n historyDB: new ExportHistoryDatabaseService(db),\n };\n}\n\n"]}
|
package/dist/chunk-WZDTNDYR.js
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkS732H246_js = require('./chunk-S732H246.js');
|
|
4
|
-
var chunkATUCZXJY_js = require('./chunk-ATUCZXJY.js');
|
|
5
|
-
|
|
6
|
-
// src/ossFile/server/config.ts
|
|
7
|
-
function createOssFileConfigManager(options = {}) {
|
|
8
|
-
const { ossConfig, fallbackToLocal = true, customConfig } = options;
|
|
9
|
-
const manager = new chunkS732H246_js.FileServiceConfigManager(customConfig);
|
|
10
|
-
const resolvedOss = ossConfig ?? chunkS732H246_js.loadOSSConfigFromEnv();
|
|
11
|
-
if (chunkATUCZXJY_js.isCompleteOssConfig(resolvedOss)) {
|
|
12
|
-
manager.enableStorageProvider("aliyun-oss", resolvedOss);
|
|
13
|
-
manager.updateConfig({ defaultStorage: "aliyun-oss" });
|
|
14
|
-
return manager;
|
|
15
|
-
}
|
|
16
|
-
if (fallbackToLocal) {
|
|
17
|
-
manager.enableStorageProvider("local");
|
|
18
|
-
manager.updateConfig({ defaultStorage: "local" });
|
|
19
|
-
}
|
|
20
|
-
return manager;
|
|
21
|
-
}
|
|
22
|
-
async function createOssFileConfigManagerFromEnv(customConfig) {
|
|
23
|
-
return chunkS732H246_js.createFileServiceConfigWithConfigManager(customConfig);
|
|
24
|
-
}
|
|
25
|
-
function getOssStorageModeLabel(config) {
|
|
26
|
-
const oss = config.storageProviders["aliyun-oss"];
|
|
27
|
-
if (oss?.enabled) {
|
|
28
|
-
return oss.customDomain ? "\u963F\u91CC\u4E91 OSS + \u81EA\u5B9A\u4E49\u57DF\u540D" : "\u963F\u91CC\u4E91 OSS";
|
|
29
|
-
}
|
|
30
|
-
return "\u672C\u5730\u5B58\u50A8";
|
|
31
|
-
}
|
|
32
|
-
function isOssEnabledInConfig(config) {
|
|
33
|
-
const oss = config.storageProviders["aliyun-oss"];
|
|
34
|
-
return Boolean(oss?.enabled);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// src/ossFile/server/service.ts
|
|
38
|
-
async function createOssFileServiceWithDrizzlePersistence(options) {
|
|
39
|
-
const configManager = options.configManager ?? await createOssFileConfigManagerFromEnv();
|
|
40
|
-
const repository = chunkS732H246_js.createDrizzleFileRepository({
|
|
41
|
-
db: options.persistence.db,
|
|
42
|
-
fileMetadata: options.persistence.fileMetadata,
|
|
43
|
-
fileStorageProviders: options.persistence.fileStorageProviders
|
|
44
|
-
});
|
|
45
|
-
return createUniversalFileServiceFromConfigManager(configManager, repository);
|
|
46
|
-
}
|
|
47
|
-
async function resolveUploadAccessUrl(service, fileId, options) {
|
|
48
|
-
if (options?.cdnUrl) {
|
|
49
|
-
return options.cdnUrl;
|
|
50
|
-
}
|
|
51
|
-
try {
|
|
52
|
-
const url = await service.getFileUrl(fileId, options?.userId);
|
|
53
|
-
if (url) return url;
|
|
54
|
-
} catch {
|
|
55
|
-
}
|
|
56
|
-
return options?.fallbackPath ?? `/uploads/${fileId}`;
|
|
57
|
-
}
|
|
58
|
-
async function uploadFileAndResolveAccessUrl(service, uploadInfo, userId) {
|
|
59
|
-
const uploadResult = await service.uploadFile(uploadInfo);
|
|
60
|
-
const accessUrl = await resolveUploadAccessUrl(service, uploadResult.id, {
|
|
61
|
-
cdnUrl: uploadResult.cdnUrl,
|
|
62
|
-
userId,
|
|
63
|
-
fallbackPath: `/uploads/${uploadResult.storagePath}`
|
|
64
|
-
});
|
|
65
|
-
return {
|
|
66
|
-
fileId: uploadResult.id,
|
|
67
|
-
accessUrl,
|
|
68
|
-
uploadResult
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
async function createUniversalFileServiceFromConfigManager(configManager, repository) {
|
|
72
|
-
const config = configManager.getConfig();
|
|
73
|
-
const serviceConfig = {
|
|
74
|
-
storage: config.storageProviders[config.defaultStorage],
|
|
75
|
-
defaultStorage: config.defaultStorage,
|
|
76
|
-
defaultCDN: config.defaultCDN,
|
|
77
|
-
storageProviders: config.storageProviders,
|
|
78
|
-
cdnProviders: config.cdnProviders,
|
|
79
|
-
maxFileSize: config.maxFileSize,
|
|
80
|
-
allowedMimeTypes: config.allowedMimeTypes,
|
|
81
|
-
cache: {
|
|
82
|
-
enabled: true,
|
|
83
|
-
metadataTTL: config.cache.metadataTTL,
|
|
84
|
-
urlTTL: config.cache.urlTTL
|
|
85
|
-
},
|
|
86
|
-
...repository ? {
|
|
87
|
-
persistence: {
|
|
88
|
-
enabled: true,
|
|
89
|
-
repository,
|
|
90
|
-
autoPersist: true
|
|
91
|
-
}
|
|
92
|
-
} : {}
|
|
93
|
-
};
|
|
94
|
-
const service = new chunkS732H246_js.UniversalFileService(serviceConfig);
|
|
95
|
-
await service.initialize();
|
|
96
|
-
return service;
|
|
97
|
-
}
|
|
98
|
-
async function getFileUrlByFileId(fileId, options) {
|
|
99
|
-
try {
|
|
100
|
-
if (options?.service) {
|
|
101
|
-
return await options.service.getFileUrl(fileId, options.userId);
|
|
102
|
-
}
|
|
103
|
-
if (options?.configManager) {
|
|
104
|
-
const service2 = await createUniversalFileServiceFromConfigManager(
|
|
105
|
-
options.configManager
|
|
106
|
-
);
|
|
107
|
-
return await service2.getFileUrl(fileId, options.userId);
|
|
108
|
-
}
|
|
109
|
-
const service = await chunkS732H246_js.createUniversalFileServiceWithConfigManager();
|
|
110
|
-
return await service.getFileUrl(fileId, options?.userId);
|
|
111
|
-
} catch {
|
|
112
|
-
return null;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
async function resolveFileUrlMap(fileIds, options) {
|
|
116
|
-
const map = /* @__PURE__ */ new Map();
|
|
117
|
-
const uniqueIds = [...new Set(fileIds.filter(Boolean))];
|
|
118
|
-
await Promise.all(
|
|
119
|
-
uniqueIds.map(async (fileId) => {
|
|
120
|
-
let url;
|
|
121
|
-
if (options?.resolver) {
|
|
122
|
-
url = await options.resolver(fileId);
|
|
123
|
-
} else {
|
|
124
|
-
url = await getFileUrlByFileId(fileId, {
|
|
125
|
-
configManager: options?.configManager,
|
|
126
|
-
userId: options?.userId
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
if (url) {
|
|
130
|
-
map.set(fileId, url);
|
|
131
|
-
}
|
|
132
|
-
})
|
|
133
|
-
);
|
|
134
|
-
return map;
|
|
135
|
-
}
|
|
136
|
-
function createFileUrlResolver(options = {}) {
|
|
137
|
-
let configManagerPromise = null;
|
|
138
|
-
async function getConfigManager() {
|
|
139
|
-
if (options.configManager) {
|
|
140
|
-
return options.configManager;
|
|
141
|
-
}
|
|
142
|
-
if (options.loadConfigManager) {
|
|
143
|
-
configManagerPromise ?? (configManagerPromise = options.loadConfigManager());
|
|
144
|
-
return configManagerPromise;
|
|
145
|
-
}
|
|
146
|
-
configManagerPromise ?? (configManagerPromise = createOssFileConfigManagerFromEnv());
|
|
147
|
-
return configManagerPromise;
|
|
148
|
-
}
|
|
149
|
-
return async (fileId, userId) => getFileUrlByFileId(fileId, {
|
|
150
|
-
configManager: await getConfigManager(),
|
|
151
|
-
userId: userId ?? options.userId
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
async function createOssFileService(options = {}) {
|
|
155
|
-
return chunkS732H246_js.createFileServiceWithFactory({
|
|
156
|
-
configLoaders: [() => Promise.resolve(chunkS732H246_js.loadConfigFromEnv())],
|
|
157
|
-
autoInitialize: true,
|
|
158
|
-
...options
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
// src/ossFile/server/bootstrap.ts
|
|
163
|
-
function createOssFileBootstrap(options = {}) {
|
|
164
|
-
let configManagerPromise = null;
|
|
165
|
-
const getConfigManager = async () => {
|
|
166
|
-
configManagerPromise ?? (configManagerPromise = options.loadConfigManager?.() ?? createOssFileConfigManagerFromEnv());
|
|
167
|
-
return configManagerPromise;
|
|
168
|
-
};
|
|
169
|
-
return {
|
|
170
|
-
getConfigManager,
|
|
171
|
-
createFileService: async () => {
|
|
172
|
-
const configManager = await getConfigManager();
|
|
173
|
-
return createUniversalFileServiceFromConfigManager(configManager);
|
|
174
|
-
},
|
|
175
|
-
createPersistentFileService: async () => {
|
|
176
|
-
const configManager = await getConfigManager();
|
|
177
|
-
if (options.persistence) {
|
|
178
|
-
return createOssFileServiceWithDrizzlePersistence({
|
|
179
|
-
configManager,
|
|
180
|
-
persistence: options.persistence
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
return createUniversalFileServiceFromConfigManager(configManager);
|
|
184
|
-
},
|
|
185
|
-
createFileUrlResolver: () => createFileUrlResolver({ loadConfigManager: getConfigManager }),
|
|
186
|
-
getFileUrl: async (fileId, userId) => {
|
|
187
|
-
const configManager = await getConfigManager();
|
|
188
|
-
return getFileUrlByFileId(fileId, { configManager, userId });
|
|
189
|
-
}
|
|
190
|
-
};
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
exports.createFileUrlResolver = createFileUrlResolver;
|
|
194
|
-
exports.createOssFileBootstrap = createOssFileBootstrap;
|
|
195
|
-
exports.createOssFileConfigManager = createOssFileConfigManager;
|
|
196
|
-
exports.createOssFileConfigManagerFromEnv = createOssFileConfigManagerFromEnv;
|
|
197
|
-
exports.createOssFileService = createOssFileService;
|
|
198
|
-
exports.createOssFileServiceWithDrizzlePersistence = createOssFileServiceWithDrizzlePersistence;
|
|
199
|
-
exports.createUniversalFileServiceFromConfigManager = createUniversalFileServiceFromConfigManager;
|
|
200
|
-
exports.getFileUrlByFileId = getFileUrlByFileId;
|
|
201
|
-
exports.getOssStorageModeLabel = getOssStorageModeLabel;
|
|
202
|
-
exports.isOssEnabledInConfig = isOssEnabledInConfig;
|
|
203
|
-
exports.resolveFileUrlMap = resolveFileUrlMap;
|
|
204
|
-
exports.resolveUploadAccessUrl = resolveUploadAccessUrl;
|
|
205
|
-
exports.uploadFileAndResolveAccessUrl = uploadFileAndResolveAccessUrl;
|
|
206
|
-
//# sourceMappingURL=chunk-WZDTNDYR.js.map
|
|
207
|
-
//# sourceMappingURL=chunk-WZDTNDYR.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ossFile/server/config.ts","../src/ossFile/server/service.ts","../src/ossFile/server/bootstrap.ts"],"names":["FileServiceConfigManager","loadOSSConfigFromEnv","isCompleteOssConfig","createFileServiceConfigWithConfigManager","createDrizzleFileRepository","UniversalFileService","service","createUniversalFileServiceWithConfigManager","createFileServiceWithFactory","loadConfigFromEnv"],"mappings":"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","file":"chunk-WZDTNDYR.js","sourcesContent":["import type { AliyunOSSConfig } from '../../universalFile/server/types';\nimport type { FileServiceConfig } from '../../universalFile/server/config-manager';\nimport {\n FileServiceConfigManager,\n createFileServiceConfigWithConfigManager,\n} from '../../universalFile/server/config-manager';\nimport { loadOSSConfigFromEnv } from '../../universalFile/server/config-helpers';\nimport {\n parseAliyunOssConfigFromMap,\n isCompleteOssConfig,\n STANDARD_ALIYUN_OSS_KEYS,\n type OssConfigKeyMap,\n} from '../shared/ossConfig';\n\nexport {\n STANDARD_ALIYUN_OSS_KEYS,\n parseAliyunOssConfigFromMap,\n type OssConfigKeyMap,\n};\n\nexport interface CreateOssFileConfigManagerOptions {\n ossConfig?: AliyunOSSConfig | null;\n fallbackToLocal?: boolean;\n customConfig?: Partial<FileServiceConfig>;\n}\n\nexport function createOssFileConfigManager(\n options: CreateOssFileConfigManagerOptions = {},\n): FileServiceConfigManager {\n const { ossConfig, fallbackToLocal = true, customConfig } = options;\n const manager = new FileServiceConfigManager(customConfig);\n\n const resolvedOss = ossConfig ?? loadOSSConfigFromEnv();\n if (isCompleteOssConfig(resolvedOss)) {\n manager.enableStorageProvider('aliyun-oss', resolvedOss);\n manager.updateConfig({ defaultStorage: 'aliyun-oss' });\n return manager;\n }\n\n if (fallbackToLocal) {\n manager.enableStorageProvider('local');\n manager.updateConfig({ defaultStorage: 'local' });\n }\n\n return manager;\n}\n\nexport async function createOssFileConfigManagerFromEnv(\n customConfig?: Partial<FileServiceConfig>,\n): Promise<FileServiceConfigManager> {\n return createFileServiceConfigWithConfigManager(customConfig);\n}\n\nexport function getOssStorageModeLabel(config: FileServiceConfig): string {\n const oss = config.storageProviders['aliyun-oss'] as AliyunOSSConfig | undefined;\n if (oss?.enabled) {\n return oss.customDomain\n ? '阿里云 OSS + 自定义域名'\n : '阿里云 OSS';\n }\n return '本地存储';\n}\n\nexport function isOssEnabledInConfig(config: FileServiceConfig): boolean {\n const oss = config.storageProviders['aliyun-oss'];\n return Boolean(oss?.enabled);\n}\n\n/** @deprecated 使用 createOssFileConfigManagerFromEnv */\nexport async function getShowMasterpieceFileConfig(): Promise<FileServiceConfigManager> {\n return createOssFileConfigManagerFromEnv();\n}\n","import {\n UniversalFileService,\n createFileServiceWithFactory,\n loadConfigFromEnv,\n createDrizzleFileRepository,\n} from '../../universalFile/server';\nimport type { FileServiceFactoryOptions } from '../../universalFile/server/config-helpers';\nimport type { UploadFileInfo } from '../../universalFile/types';\nimport {\n FileServiceConfigManager,\n type FileServiceConfig,\n} from '../../universalFile/server/config-manager';\nimport { createUniversalFileServiceWithConfigManager } from '../../universalFile/server/service-helpers';\nimport { createOssFileConfigManagerFromEnv } from './config';\n\nexport { UniversalFileService, createUniversalFileServiceWithConfigManager };\n\nexport interface DrizzlePersistenceOptions {\n db: unknown;\n fileMetadata: unknown;\n fileStorageProviders: unknown;\n}\n\nexport async function createOssFileServiceWithDrizzlePersistence(options: {\n configManager?: FileServiceConfigManager;\n persistence: DrizzlePersistenceOptions;\n}): Promise<UniversalFileService> {\n const configManager = options.configManager\n ?? await createOssFileConfigManagerFromEnv();\n const repository = createDrizzleFileRepository({\n db: options.persistence.db,\n fileMetadata: options.persistence.fileMetadata,\n fileStorageProviders: options.persistence.fileStorageProviders,\n });\n return createUniversalFileServiceFromConfigManager(configManager, repository);\n}\n\nexport async function resolveUploadAccessUrl(\n service: UniversalFileService,\n fileId: string,\n options?: { cdnUrl?: string | null; userId?: string; fallbackPath?: string },\n): Promise<string> {\n if (options?.cdnUrl) {\n return options.cdnUrl;\n }\n try {\n const url = await service.getFileUrl(fileId, options?.userId);\n if (url) return url;\n } catch {\n // fall through\n }\n return options?.fallbackPath ?? `/uploads/${fileId}`;\n}\n\nexport async function uploadFileAndResolveAccessUrl(\n service: UniversalFileService,\n uploadInfo: UploadFileInfo,\n userId?: string,\n): Promise<{ fileId: string; accessUrl: string; uploadResult: Awaited<ReturnType<UniversalFileService['uploadFile']>> }> {\n const uploadResult = await service.uploadFile(uploadInfo);\n const accessUrl = await resolveUploadAccessUrl(service, uploadResult.id, {\n cdnUrl: uploadResult.cdnUrl,\n userId,\n fallbackPath: `/uploads/${uploadResult.storagePath}`,\n });\n return {\n fileId: uploadResult.id,\n accessUrl,\n uploadResult,\n };\n}\n\n/**\n * 基于配置管理器创建并初始化 UniversalFileService。\n */\nexport async function createUniversalFileServiceFromConfigManager(\n configManager: FileServiceConfigManager,\n repository?: unknown,\n): Promise<UniversalFileService> {\n const config = configManager.getConfig();\n const serviceConfig = {\n storage: config.storageProviders[config.defaultStorage],\n defaultStorage: config.defaultStorage,\n defaultCDN: config.defaultCDN,\n storageProviders: config.storageProviders,\n cdnProviders: config.cdnProviders,\n maxFileSize: config.maxFileSize,\n allowedMimeTypes: config.allowedMimeTypes,\n cache: {\n enabled: true,\n metadataTTL: config.cache.metadataTTL,\n urlTTL: config.cache.urlTTL,\n },\n ...(repository\n ? {\n persistence: {\n enabled: true,\n repository,\n autoPersist: true,\n },\n }\n : {}),\n };\n\n const service = new UniversalFileService(serviceConfig as any);\n await service.initialize();\n return service;\n}\n\n/**\n * 通过 fileId 解析访问 URL(需已初始化的 UniversalFileService 或全局 ConfigManager)。\n */\nexport async function getFileUrlByFileId(\n fileId: string,\n options?: {\n configManager?: FileServiceConfigManager;\n service?: UniversalFileService;\n userId?: string;\n },\n): Promise<string | null> {\n try {\n if (options?.service) {\n return await options.service.getFileUrl(fileId, options.userId);\n }\n if (options?.configManager) {\n const service = await createUniversalFileServiceFromConfigManager(\n options.configManager,\n );\n return await service.getFileUrl(fileId, options.userId);\n }\n const service = await createUniversalFileServiceWithConfigManager();\n return await service.getFileUrl(fileId, options?.userId);\n } catch {\n return null;\n }\n}\n\n/**\n * 批量解析 fileId → URL。\n */\nexport async function resolveFileUrlMap(\n fileIds: string[],\n options?: {\n resolver?: (fileId: string) => Promise<string | null | undefined>;\n configManager?: FileServiceConfigManager;\n userId?: string;\n },\n): Promise<Map<string, string>> {\n const map = new Map<string, string>();\n const uniqueIds = [...new Set(fileIds.filter(Boolean))];\n\n await Promise.all(\n uniqueIds.map(async (fileId) => {\n let url: string | null | undefined;\n if (options?.resolver) {\n url = await options.resolver(fileId);\n } else {\n url = await getFileUrlByFileId(fileId, {\n configManager: options?.configManager,\n userId: options?.userId,\n });\n }\n if (url) {\n map.set(fileId, url);\n }\n }),\n );\n\n return map;\n}\n\nexport type FileUrlResolver = (\n fileId: string,\n userId?: string,\n) => Promise<string | null | undefined>;\n\nexport interface CreateFileUrlResolverOptions {\n configManager?: FileServiceConfigManager;\n loadConfigManager?: () => Promise<FileServiceConfigManager>;\n userId?: string;\n}\n\n/**\n * 显式创建 fileId → URL 解析器(替代 globalThis 单例,R2-203)。\n */\nexport function createFileUrlResolver(\n options: CreateFileUrlResolverOptions = {},\n): FileUrlResolver {\n let configManagerPromise: Promise<FileServiceConfigManager> | null = null;\n\n async function getConfigManager(): Promise<FileServiceConfigManager> {\n if (options.configManager) {\n return options.configManager;\n }\n if (options.loadConfigManager) {\n configManagerPromise ??= options.loadConfigManager();\n return configManagerPromise;\n }\n configManagerPromise ??= createOssFileConfigManagerFromEnv();\n return configManagerPromise;\n }\n\n return async (fileId: string, userId?: string) =>\n getFileUrlByFileId(fileId, {\n configManager: await getConfigManager(),\n userId: userId ?? options.userId,\n });\n}\n\nexport async function createOssFileService(\n options: FileServiceFactoryOptions = {},\n): Promise<UniversalFileService> {\n return createFileServiceWithFactory({\n configLoaders: [() => Promise.resolve(loadConfigFromEnv())],\n autoInitialize: true,\n ...options,\n });\n}\n\nexport type { FileServiceConfig, FileServiceConfigManager };\n","import type { FileServiceConfigManager } from '../../universalFile/server/config-manager';\nimport type { UniversalFileService } from '../../universalFile/server';\nimport { createOssFileConfigManagerFromEnv } from './config';\nimport {\n createOssFileServiceWithDrizzlePersistence,\n createUniversalFileServiceFromConfigManager,\n createFileUrlResolver,\n getFileUrlByFileId,\n type DrizzlePersistenceOptions,\n type FileUrlResolver,\n} from './service';\n\nexport interface OssFileBootstrapOptions {\n /** 自定义配置加载(如从 DB 注入 env 后再 createOssFileConfigManagerFromEnv) */\n loadConfigManager?: () => Promise<FileServiceConfigManager>;\n /** Drizzle 持久化;传入后 createPersistentFileService 会写入 file_metadata */\n persistence?: DrizzlePersistenceOptions;\n}\n\nexport interface OssFileBootstrap {\n getConfigManager(): Promise<FileServiceConfigManager>;\n /** 无 Drizzle 持久化的 UniversalFileService(如 skill-manager 自行写 metadata) */\n createFileService(): Promise<UniversalFileService>;\n createPersistentFileService(): Promise<UniversalFileService>;\n createFileUrlResolver(): FileUrlResolver;\n getFileUrl(fileId: string, userId?: string): Promise<string | null>;\n}\n\n/**\n * 一站式 OSS / universal-file 服务端 bootstrap(R2-205)。\n */\nexport function createOssFileBootstrap(\n options: OssFileBootstrapOptions = {},\n): OssFileBootstrap {\n let configManagerPromise: Promise<FileServiceConfigManager> | null = null;\n\n const getConfigManager = async (): Promise<FileServiceConfigManager> => {\n configManagerPromise ??=\n options.loadConfigManager?.() ?? createOssFileConfigManagerFromEnv();\n return configManagerPromise;\n };\n\n return {\n getConfigManager,\n createFileService: async () => {\n const configManager = await getConfigManager();\n return createUniversalFileServiceFromConfigManager(configManager);\n },\n createPersistentFileService: async () => {\n const configManager = await getConfigManager();\n if (options.persistence) {\n return createOssFileServiceWithDrizzlePersistence({\n configManager,\n persistence: options.persistence,\n });\n }\n return createUniversalFileServiceFromConfigManager(configManager);\n },\n createFileUrlResolver: () =>\n createFileUrlResolver({ loadConfigManager: getConfigManager }),\n getFileUrl: async (fileId, userId) => {\n const configManager = await getConfigManager();\n return getFileUrlByFileId(fileId, { configManager, userId });\n },\n };\n}\n"]}
|
package/dist/chunk-XBZIS3MV.mjs
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import bcrypt from 'bcryptjs';
|
|
2
|
-
|
|
3
|
-
// src/common/auth/services/password-utils.ts
|
|
4
|
-
async function hashPassword(password, saltRounds = 12) {
|
|
5
|
-
return bcrypt.hash(password, saltRounds);
|
|
6
|
-
}
|
|
7
|
-
async function verifyPassword(password, hashedPassword) {
|
|
8
|
-
return bcrypt.compare(password, hashedPassword);
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export { hashPassword, verifyPassword };
|
|
12
|
-
//# sourceMappingURL=chunk-XBZIS3MV.mjs.map
|
|
13
|
-
//# sourceMappingURL=chunk-XBZIS3MV.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/auth/services/password-utils.ts"],"names":[],"mappings":";;;AAUA,eAAsB,YAAA,CAAa,QAAA,EAAkB,UAAA,GAAqB,EAAA,EAAqB;AAC7F,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,QAAA,EAAU,UAAU,CAAA;AACzC;AAKA,eAAsB,cAAA,CAAe,UAAkB,cAAA,EAA0C;AAC/F,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,QAAA,EAAU,cAAc,CAAA;AAChD","file":"chunk-XBZIS3MV.mjs","sourcesContent":["/**\n * Auth Services - Password Utilities\n * 密码哈希相关工具函数\n */\n\nimport bcrypt from 'bcryptjs';\n\n/**\n * 哈希密码\n */\nexport async function hashPassword(password: string, saltRounds: number = 12): Promise<string> {\n return bcrypt.hash(password, saltRounds);\n}\n\n/**\n * 验证密码\n */\nexport async function verifyPassword(password: string, hashedPassword: string): Promise<boolean> {\n return bcrypt.compare(password, hashedPassword);\n}\n\n"]}
|
package/dist/chunk-XFOZ56FB.mjs
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { createSa2kitAuthClient } from './chunk-LHJKLUM7.mjs';
|
|
2
|
-
import { STORAGE_KEYS, BaseApiClient, API_ROUTES } from './chunk-G4NFB2QA.mjs';
|
|
3
|
-
import { useSession, useAuthForm, useAuth } from './chunk-MZOGYD4N.mjs';
|
|
4
|
-
import { __export } from './chunk-MAI35PU6.mjs';
|
|
5
|
-
|
|
6
|
-
// src/common/auth/index.ts
|
|
7
|
-
var auth_exports = {};
|
|
8
|
-
__export(auth_exports, {
|
|
9
|
-
API_ROUTES: () => API_ROUTES,
|
|
10
|
-
BaseApiClient: () => BaseApiClient,
|
|
11
|
-
STORAGE_KEYS: () => STORAGE_KEYS,
|
|
12
|
-
createSa2kitAuthClient: () => createSa2kitAuthClient,
|
|
13
|
-
useAuth: () => useAuth,
|
|
14
|
-
useAuthForm: () => useAuthForm,
|
|
15
|
-
useSession: () => useSession
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
export { auth_exports };
|
|
19
|
-
//# sourceMappingURL=chunk-XFOZ56FB.mjs.map
|
|
20
|
-
//# sourceMappingURL=chunk-XFOZ56FB.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/auth/index.ts"],"names":[],"mappings":";;;;;;AAAA,IAAA,YAAA,GAAA;AAAA,QAAA,CAAA,YAAA,EAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,sBAAA,EAAA,MAAA,sBAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,UAAA,EAAA,MAAA;AAAA,CAAA,CAAA","file":"chunk-XFOZ56FB.mjs","sourcesContent":["/**\n * @package sa2kit/common/auth\n *\n * Browser / client 安全入口(Better Auth 3.0)\n */\nexport { createSa2kitAuthClient, type Sa2kitAuthClient, type Sa2kitAuthClientOptions } from './client';\nexport { useSession, type UseSessionReturn } from './hooks/useSession';\n\n/** @deprecated 3.0 请使用 createSa2kitAuthClient + useSession */\nexport { useAuth, useAuthForm } from './hooks/useAuth';\n/** @deprecated 3.0 请使用 createSa2kitAuthClient */\nexport { BaseApiClient, API_ROUTES, STORAGE_KEYS } from './client';\n\nexport type { LoginFormState, RegisterFormState } from './components/types';\nexport * from './types';\n"]}
|