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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/i18n/index.ts","../src/common/i18n/i18n.ts","../src/common/i18n/hooks.ts","../src/common/i18n/locales/zh-CN.ts","../src/common/i18n/locales/en-US.ts","../src/common/i18n/adapters/web.ts","../src/common/i18n/adapters/mobile.ts","../src/common/i18n/adapters/miniapp.ts","../src/common/i18n/adapters/desktop.ts","../src/common/i18n/components/LanguageSwitcher.tsx"],"names":["t","useState","useEffect"],"mappings":"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","file":"chunk-CHYSSZ4E.mjs","sourcesContent":["/**\n * i18n 国际化模块\n *\n * 提供完整的国际化解决方案,支持多语言切换、动态加载、React Hooks 和 UI 组件\n */\n\n// 核心功能\nexport { createI18n, initI18n, getI18n, t } from './i18n';\n\n// 类型定义\nexport type {\n Locale,\n TranslationKey,\n TranslationValue,\n Translations,\n LocaleResources,\n TranslateOptions,\n I18nConfig,\n I18nInstance,\n I18nAdapter,\n} from './types';\n\n// React Hooks\nexport { useTranslation, useLocale } from './hooks';\n\n// 示例翻译资源\nexport { default as zhCN } from './locales/zh-CN';\nexport { default as enUS } from './locales/en-US';\n\n// 平台适配器\nexport * from './adapters';\n\n// UI 组件(Tailwind CSS)\nexport * from './components';\n","/**\n * 轻量级 i18n 核心实现\n * 支持:翻译、插值、复数、嵌套键、类型安全\n */\n\nimport type {\n Locale,\n Translations,\n LocaleResources,\n TranslateOptions,\n I18nConfig,\n I18nInstance,\n} from './types';\n\n/**\n * 默认插值函数\n * 支持 {{key}} 格式的变量替换\n */\nfunction defaultInterpolate(template: string, data: Record<string, any>): string {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key) => {\n return data[key]?.toString() ?? match;\n });\n}\n\n/**\n * 从嵌套对象中获取值\n * 支持 \"user.name\" 这样的路径\n */\nfunction getNestedValue(obj: any, path: string): any {\n const keys = path.split('.');\n let result = obj;\n\n for (const key of keys) {\n if (result && typeof result === 'object' && key in result) {\n result = result[key];\n } else {\n return undefined;\n }\n }\n\n return result;\n}\n\n/**\n * 创建 i18n 实例\n */\nexport function createI18n(config: I18nConfig): I18nInstance {\n let currentLocale: Locale = config.locale;\n const fallbackLocale: Locale = config.fallbackLocale || 'zh-CN';\n const resources: LocaleResources = config.resources || {};\n const interpolate = config.interpolate || defaultInterpolate;\n\n /**\n * 翻译函数\n * @param key 翻译键,支持嵌套 \"common.hello\"\n * @param options 选项\n */\n function t(key: string, options: TranslateOptions = {}): string {\n const { defaultValue, count, context = {} } = options;\n\n // 获取当前语言的翻译\n let translation = getNestedValue(resources[currentLocale], key);\n\n // 如果没有找到,尝试使用 fallback 语言\n if (translation === undefined && currentLocale !== fallbackLocale) {\n translation = getNestedValue(resources[fallbackLocale], key);\n }\n\n // 如果还是没有找到,使用默认值或键名\n if (translation === undefined) {\n return defaultValue || key;\n }\n\n // 如果不是字符串,返回 JSON 字符串\n if (typeof translation !== 'string') {\n return JSON.stringify(translation);\n }\n\n // 处理复数\n if (count !== undefined) {\n const pluralKey = count === 1 ? (key) + '_one' : (key) + '_other';\n const pluralTranslation = getNestedValue(resources[currentLocale], pluralKey);\n if (pluralTranslation && typeof pluralTranslation === 'string') {\n translation = pluralTranslation;\n }\n }\n\n // 插值\n const data = { ...context, count };\n return interpolate(translation, data);\n }\n\n /**\n * 设置当前语言\n */\n function setLocale(locale: Locale): void {\n currentLocale = locale;\n }\n\n /**\n * 添加翻译资源\n */\n function addResources(locale: Locale, newResources: Translations): void {\n if (!resources[locale]) {\n resources[locale] = {};\n }\n resources[locale] = {\n ...resources[locale],\n ...newResources,\n };\n }\n\n /**\n * 获取当前语言\n */\n function getLocale(): Locale {\n return currentLocale;\n }\n\n return {\n locale: currentLocale,\n t,\n setLocale,\n addResources,\n getLocale,\n };\n}\n\n/**\n * 全局 i18n 实例(可选)\n */\nlet globalI18n: I18nInstance | null = null;\n\n/**\n * 初始化全局 i18n\n */\nexport function initI18n(config: I18nConfig): I18nInstance {\n globalI18n = createI18n(config);\n return globalI18n;\n}\n\n/**\n * 获取全局 i18n 实例\n */\nexport function getI18n(): I18nInstance {\n if (!globalI18n) {\n throw new Error('i18n not initialized. Call initI18n() first.');\n }\n return globalI18n;\n}\n\n/**\n * 快捷翻译函数\n */\nexport function t(key: string, options?: TranslateOptions): string {\n return getI18n().t(key, options);\n}\n","/**\n * React hooks for i18n\n */\n\nimport { useState, useCallback, useEffect, useMemo } from 'react';\nimport { getI18n } from './i18n';\nimport type { Locale, TranslateOptions } from './types';\n\n/**\n * useTranslation Hook\n * React 组件中使用翻译\n * 支持 SSR 环境,在 i18n 未初始化时安全降级\n */\nexport function useTranslation() {\n const [locale, setLocaleState] = useState<Locale>('zh-CN');\n const [i18nInstance, setI18nInstance] = useState<any>(null);\n\n useEffect(() => {\n // 仅在客户端尝试获取 i18n 实例\n if (typeof window !== 'undefined') {\n try {\n const i18n = getI18n();\n setI18nInstance(i18n);\n setLocaleState(i18n.getLocale());\n } catch {\n // i18n 未初始化,保持 null\n console.warn('i18n not initialized. Some translations may not work.');\n }\n }\n }, []);\n\n // 翻译函数\n const t = useCallback(\n (key: string, options?: TranslateOptions): string => {\n if (i18nInstance) {\n return i18nInstance.t(key, options);\n }\n // 未初始化时返回 key 作为后备\n return key;\n },\n [i18nInstance]\n );\n\n // 切换语言\n const setLocale = useCallback(\n (newLocale: Locale) => {\n if (i18nInstance) {\n i18nInstance.setLocale(newLocale);\n setLocaleState(newLocale);\n } else {\n console.warn('i18n not initialized. Cannot change locale.');\n }\n },\n [i18nInstance]\n );\n\n return useMemo(\n () => ({\n t,\n locale,\n setLocale,\n }),\n [t, locale, setLocale]\n );\n}\n\n/**\n * useLocale Hook\n * 只获取和设置语言,不包含翻译函数\n */\nexport function useLocale() {\n const i18n = getI18n();\n const [locale, setLocaleState] = useState<Locale>(i18n.getLocale());\n\n const setLocale = useCallback((newLocale: Locale) => {\n i18n.setLocale(newLocale);\n setLocaleState(newLocale);\n }, []);\n\n return {\n locale,\n setLocale,\n };\n}\n","/**\n * 简体中文翻译\n */\n\nexport default {\n // ==================== 应用信息 ====================\n app: {\n name: 'LyricNote',\n fullName: 'LyricNote - 歌词笔记',\n icon: '🎵',\n description: '一个强大的歌词和笔记管理应用',\n author: 'LyricNote Team',\n copyright: '© ' + (new Date().getFullYear()) + ' LyricNote',\n version: '1.0.0',\n },\n\n // ==================== 应用标题 ====================\n titles: {\n main: '🎵 LyricNote',\n admin: 'LyricNote 管理后台',\n withVersion: 'LyricNote v1.0.0',\n welcome: '欢迎使用 LyricNote',\n about: '关于 LyricNote',\n },\n\n // ==================== 通用文案 ====================\n common: {\n hello: '你好',\n welcome: '欢迎',\n confirm: '确认',\n cancel: '取消',\n save: '保存',\n delete: '删除',\n edit: '编辑',\n back: '返回',\n next: '下一步',\n submit: '提交',\n finish: '完成',\n loading: '加载中...',\n success: '操作成功',\n error: '操作失败',\n retry: '重试',\n empty: '暂无数据',\n },\n\n // ==================== 导航菜单 ====================\n nav: {\n home: '首页',\n lyrics: '歌词',\n create: '创作',\n collection: '收藏',\n profile: '我的',\n settings: '设置',\n history: '历史',\n logout: '退出登录',\n },\n\n // ==================== 用户相关 ====================\n user: {\n login: '登录',\n register: '注册',\n username: '用户名',\n password: '密码',\n email: '邮箱',\n phone: '手机号',\n nickname: '昵称',\n },\n\n // ==================== 页面标题和描述 ====================\n pages: {\n home: {\n title: '首页',\n description: '一个强大的歌词和笔记管理应用',\n },\n profile: {\n title: '个人中心',\n description: '管理您的个人信息和偏好设置',\n },\n admin: {\n title: 'LyricNote 管理后台',\n description: '系统管理和数据统计',\n },\n login: {\n title: '登录',\n description: '登录到 LyricNote',\n },\n },\n\n // ==================== 表单验证 ====================\n validation: {\n required: '{{field}}不能为空',\n invalid_email: '邮箱格式不正确',\n password_too_short: '密码至少需要{{count}}个字符',\n password_weak: '密码强度不够',\n passwords_not_match: '两次密码不一致',\n },\n\n // ==================== 状态提示 ====================\n status: {\n loading: '加载中...',\n success: '操作成功',\n error: '操作失败',\n empty: '暂无数据',\n network_error: '网络错误,请稍后重试',\n },\n\n // ==================== 错误消息 ====================\n errors: {\n network: '网络错误,请稍后重试',\n server: '服务器错误',\n unauthorized: '未授权,请先登录',\n not_found: '未找到相关内容',\n unknown: '未知错误',\n },\n\n // ==================== 成功消息 ====================\n success: {\n saved: '保存成功',\n deleted: '删除成功',\n updated: '更新成功',\n created: '创建成功',\n },\n\n // ==================== 语言设置 ====================\n language: {\n label: '语言',\n zh_cn: '简体中文',\n zh_tw: '繁體中文',\n en_us: 'English',\n ja_jp: '日本語',\n },\n} as const;\n","/**\n * English translations\n */\n\nexport default {\n // ==================== App Information ====================\n app: {\n name: 'LyricNote',\n fullName: 'LyricNote - Lyrics & Notes',\n icon: '🎵',\n description: 'A powerful lyrics and notes management app',\n author: 'LyricNote Team',\n copyright: '© ' + (new Date().getFullYear()) + ' LyricNote',\n version: '1.0.0',\n },\n\n // ==================== App Titles ====================\n titles: {\n main: '🎵 LyricNote',\n admin: 'LyricNote Admin',\n withVersion: 'LyricNote v1.0.0',\n welcome: 'Welcome to LyricNote',\n about: 'About LyricNote',\n },\n\n // ==================== Common ====================\n common: {\n hello: 'Hello',\n welcome: 'Welcome',\n confirm: 'Confirm',\n cancel: 'Cancel',\n save: 'Save',\n delete: 'Delete',\n edit: 'Edit',\n back: 'Back',\n next: 'Next',\n submit: 'Submit',\n finish: 'Finish',\n loading: 'Loading...',\n success: 'Success',\n error: 'Error',\n retry: 'Retry',\n empty: 'No data',\n },\n\n // ==================== Navigation ====================\n nav: {\n home: 'Home',\n lyrics: 'Lyrics',\n create: 'Create',\n collection: 'Collection',\n profile: 'Profile',\n settings: 'Settings',\n history: 'History',\n logout: 'Logout',\n },\n\n // ==================== User ====================\n user: {\n login: 'Login',\n register: 'Register',\n username: 'Username',\n password: 'Password',\n email: 'Email',\n phone: 'Phone',\n nickname: 'Nickname',\n },\n\n // ==================== Pages ====================\n pages: {\n home: {\n title: 'Home',\n description: 'A powerful lyrics and notes management app',\n },\n profile: {\n title: 'Profile',\n description: 'Manage your personal information and preferences',\n },\n admin: {\n title: 'LyricNote Admin',\n description: 'System management and data statistics',\n },\n login: {\n title: 'Login',\n description: 'Login to LyricNote',\n },\n },\n\n // ==================== Form Validation ====================\n validation: {\n required: '{{field}} is required',\n invalid_email: 'Invalid email format',\n password_too_short: 'Password must be at least {{count}} characters',\n password_weak: 'Password is too weak',\n passwords_not_match: 'Passwords do not match',\n },\n\n // ==================== Status Messages ====================\n status: {\n loading: 'Loading...',\n success: 'Success',\n error: 'Error',\n empty: 'No data',\n network_error: 'Network error, please try again later',\n },\n\n // ==================== Error Messages ====================\n errors: {\n network: 'Network error, please try again later',\n server: 'Server error',\n unauthorized: 'Unauthorized, please login first',\n not_found: 'Not found',\n unknown: 'Unknown error',\n },\n\n // ==================== Success Messages ====================\n success: {\n saved: 'Saved successfully',\n deleted: 'Deleted successfully',\n updated: 'Updated successfully',\n created: 'Created successfully',\n },\n\n // ==================== Language Settings ====================\n language: {\n label: 'Language',\n zh_cn: '简体中文',\n zh_tw: '繁體中文',\n en_us: 'English',\n ja_jp: '日本語',\n },\n} as const;\n","/**\n * Web 平台适配器\n * 用于浏览器环境的语言检测和存储\n */\n\nimport type { Locale, I18nAdapter } from '../types';\n\n/**\n * Web 平台适配器\n * 使用 localStorage 存储语言偏好\n */\nexport class WebI18nAdapter implements I18nAdapter {\n private storageKey = 'app_locale';\n\n getSystemLocale(): Locale {\n if (typeof navigator === 'undefined') return 'zh-CN';\n const browserLocale = navigator.language;\n return this.normalizeLocale(browserLocale);\n }\n\n async saveLocale(locale: Locale): Promise<void> {\n if (typeof localStorage === 'undefined') return;\n localStorage.setItem(this.storageKey, locale);\n }\n\n async loadLocale(): Promise<Locale | null> {\n if (typeof localStorage === 'undefined') return null;\n const stored = localStorage.getItem(this.storageKey);\n return stored as Locale | null;\n }\n\n private normalizeLocale(locale: string): Locale {\n const map: Record<string, Locale> = {\n 'zh-CN': 'zh-CN',\n 'zh-TW': 'zh-TW',\n 'zh-HK': 'zh-TW',\n zh: 'zh-CN',\n 'en-US': 'en-US',\n 'en-GB': 'en-US',\n en: 'en-US',\n 'ja-JP': 'ja-JP',\n ja: 'ja-JP',\n };\n return map[locale] || 'zh-CN';\n }\n}\n\n","/**\n * React Native 平台适配器\n * 用于 React Native 应用的语言检测和存储\n */\n\nimport type { Locale, I18nAdapter } from '../types';\n\n/**\n * React Native 平台适配器\n * 使用 AsyncStorage 存储语言偏好\n *\n * 注意:需要安装 @react-native-async-storage/async-storage\n */\nexport class ReactNativeI18nAdapter implements I18nAdapter {\n private storageKey = '@app_locale';\n\n getSystemLocale(): Locale {\n // 需要导入 react-native 的 Platform 和 NativeModules\n try {\n // @ts-ignore - react-native 在运行时动态加载\n const { Platform, NativeModules } = require('react-native');\n const locale =\n Platform.OS === 'ios'\n ? NativeModules.SettingsManager.settings.AppleLocale ||\n NativeModules.SettingsManager.settings.AppleLanguages[0]\n : NativeModules.I18nManager.localeIdentifier;\n\n return this.normalizeLocale(locale);\n } catch {\n return 'zh-CN';\n }\n }\n\n async saveLocale(locale: Locale): Promise<void> {\n try {\n // @ts-ignore - AsyncStorage 在运行时动态加载\n const AsyncStorage = require('@react-native-async-storage/async-storage').default;\n await AsyncStorage.setItem(this.storageKey, locale);\n } catch (error) {\n console.error('Failed to save locale:', error);\n }\n }\n\n async loadLocale(): Promise<Locale | null> {\n try {\n // @ts-ignore - AsyncStorage 在运行时动态加载\n const AsyncStorage = require('@react-native-async-storage/async-storage').default;\n const stored = await AsyncStorage.getItem(this.storageKey);\n return stored as Locale | null;\n } catch (error) {\n console.error('Failed to load locale:', error);\n return null;\n }\n }\n\n private normalizeLocale(locale: string): Locale {\n const map: Record<string, Locale> = {\n 'zh-CN': 'zh-CN',\n zh_CN: 'zh-CN',\n 'zh-Hans': 'zh-CN',\n zh_Hans_CN: 'zh-CN',\n 'zh-TW': 'zh-TW',\n zh_TW: 'zh-TW',\n 'zh-Hant': 'zh-TW',\n zh_Hant_TW: 'zh-TW',\n 'en-US': 'en-US',\n en_US: 'en-US',\n en: 'en-US',\n 'ja-JP': 'ja-JP',\n ja_JP: 'ja-JP',\n ja: 'ja-JP',\n };\n return map[locale] || 'zh-CN';\n }\n}\n\n","/**\n * Taro (小程序) 平台适配器\n * 用于微信小程序、支付宝小程序等通过 Taro 开发的应用\n */\n\nimport type { Locale, I18nAdapter } from '../types';\n\n/**\n * Taro (小程序) 平台适配器\n * 使用 Taro.storage API 存储语言偏好\n *\n * 注意:需要安装 @tarojs/taro\n */\nexport class TaroI18nAdapter implements I18nAdapter {\n private storageKey = 'app_locale';\n\n getSystemLocale(): Locale {\n try {\n // @ts-ignore - Taro 在运行时动态加载\n const Taro = require('@tarojs/taro').default;\n const systemInfo = Taro.getSystemInfoSync();\n return this.normalizeLocale(systemInfo.language);\n } catch {\n return 'zh-CN';\n }\n }\n\n async saveLocale(locale: Locale): Promise<void> {\n try {\n // @ts-ignore - Taro 在运行时动态加载\n const Taro = require('@tarojs/taro').default;\n await Taro.setStorage({\n key: this.storageKey,\n data: locale,\n });\n } catch (error) {\n console.error('Failed to save locale:', error);\n }\n }\n\n async loadLocale(): Promise<Locale | null> {\n try {\n // @ts-ignore - Taro 在运行时动态加载\n const Taro = require('@tarojs/taro').default;\n const res = await Taro.getStorage({\n key: this.storageKey,\n });\n return res.data as Locale | null;\n } catch (error) {\n return null;\n }\n }\n\n private normalizeLocale(locale: string): Locale {\n const map: Record<string, Locale> = {\n zh_CN: 'zh-CN',\n 'zh-CN': 'zh-CN',\n zh_TW: 'zh-TW',\n 'zh-TW': 'zh-TW',\n en: 'en-US',\n 'en-US': 'en-US',\n ja: 'ja-JP',\n 'ja-JP': 'ja-JP',\n };\n return map[locale] || 'zh-CN';\n }\n}\n\n","/**\n * Electron 平台适配器\n * 用于 Electron 桌面应用的语言检测和存储\n */\n\nimport type { Locale, I18nAdapter } from '../types';\n\n/**\n * Electron 平台适配器\n * 使用 localStorage 存储语言偏好\n *\n * 注意:Electron 渲染进程支持 Web API\n */\nexport class ElectronI18nAdapter implements I18nAdapter {\n private storageKey = 'app_locale';\n\n getSystemLocale(): Locale {\n if (typeof navigator === 'undefined') return 'zh-CN';\n const browserLocale = navigator.language;\n return this.normalizeLocale(browserLocale);\n }\n\n async saveLocale(locale: Locale): Promise<void> {\n if (typeof localStorage === 'undefined') return;\n localStorage.setItem(this.storageKey, locale);\n }\n\n async loadLocale(): Promise<Locale | null> {\n if (typeof localStorage === 'undefined') return null;\n const stored = localStorage.getItem(this.storageKey);\n return stored as Locale | null;\n }\n\n private normalizeLocale(locale: string): Locale {\n const map: Record<string, Locale> = {\n 'zh-CN': 'zh-CN',\n 'zh-TW': 'zh-TW',\n 'zh-HK': 'zh-TW',\n zh: 'zh-CN',\n 'en-US': 'en-US',\n 'en-GB': 'en-US',\n en: 'en-US',\n 'ja-JP': 'ja-JP',\n ja: 'ja-JP',\n };\n return map[locale] || 'zh-CN';\n }\n}\n\n","'use client';\n\n/**\n * 语言切换组件\n * 支持多种样式:按钮组、下拉菜单、图标按钮\n * 使用 Tailwind CSS 样式,支持暗色模式\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { useTranslation } from '../hooks';\nimport type { Locale } from '../types';\nimport { clsx } from 'clsx';\n\n// ==================== 类型定义 ====================\n\nexport interface LanguageSwitcherProps {\n variant?: 'buttons' | 'dropdown' | 'icon';\n className?: string;\n onLanguageChange?: (locale: Locale) => void;\n}\n\nexport interface LanguageOption {\n locale: Locale;\n label: string;\n flag: string;\n}\n\n// ==================== 语言选项配置 ====================\n\nconst LANGUAGE_OPTIONS: LanguageOption[] = [\n { locale: 'zh-CN', label: '简体中文', flag: '🇨🇳' },\n { locale: 'zh-TW', label: '繁體中文', flag: '🇹🇼' },\n { locale: 'en-US', label: 'English', flag: '🇺🇸' },\n { locale: 'ja-JP', label: '日本語', flag: '🇯🇵' },\n];\n\n// ==================== 按钮组样式 ====================\n\n/**\n * 按钮组语言切换器\n */\nexport function LanguageSwitcherButtons({\n className = '',\n onLanguageChange,\n}: LanguageSwitcherProps) {\n const { locale, setLocale } = useTranslation();\n\n const handleChange = (newLocale: Locale) => {\n setLocale(newLocale);\n onLanguageChange?.(newLocale);\n };\n\n return (\n <div\n className={clsx('inline-flex items-center gap-1 p-1 bg-gray-100 dark:bg-gray-800 rounded-lg', className)}\n >\n {LANGUAGE_OPTIONS.map((option) => (\n <button\n key={option.locale}\n onClick={() => handleChange(option.locale)}\n className={clsx(\n 'inline-flex items-center gap-2 px-3 py-1.5 rounded-md text-sm font-medium transition-all duration-200',\n locale === option.locale\n ? 'bg-white dark:bg-gray-700 text-blue-600 dark:text-blue-400 shadow-sm'\n : 'text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-700/50'\n )}\n aria-label={option.label}\n >\n <span className=\"text-base leading-none\">{option.flag}</span>\n <span className=\"hidden sm:inline\">{option.label}</span>\n </button>\n ))}\n </div>\n );\n}\n\n// ==================== 下拉菜单样式 ====================\n\n/**\n * 下拉菜单语言切换器\n */\nexport function LanguageSwitcherDropdown({\n className = '',\n onLanguageChange,\n}: LanguageSwitcherProps) {\n const { locale, setLocale, t } = useTranslation();\n\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const newLocale = e.target.value as Locale;\n setLocale(newLocale);\n onLanguageChange?.(newLocale);\n };\n\n return (\n <div className={clsx('inline-flex flex-col gap-2', className)}>\n <label\n htmlFor=\"language-select\"\n className=\"text-sm font-medium text-gray-700 dark:text-gray-300\"\n >\n {t('language.label')}\n </label>\n <select\n id=\"language-select\"\n value={locale}\n onChange={handleChange}\n className=\"\n min-w-[160px] px-3 py-2 pr-8\n bg-white dark:bg-gray-800\n border border-gray-300 dark:border-gray-600\n rounded-lg text-sm\n text-gray-900 dark:text-gray-100\n focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\n cursor-pointer\n appearance-none\n bg-[url('data:image/svg+xml;charset=UTF-8,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27currentColor%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3e%3cpolyline points=%276 9 12 15 18 9%27%3e%3c/polyline%3e%3c/svg%3e')]\n bg-[length:1rem] bg-[right_0.5rem_center] bg-no-repeat\n \"\n aria-label={t('language.label')}\n >\n {LANGUAGE_OPTIONS.map((option) => (\n <option key={option.locale} value={option.locale}>\n {option.flag} {option.label}\n </option>\n ))}\n </select>\n </div>\n );\n}\n\n// ==================== 图标按钮样式 ====================\n\n/**\n * 图标按钮语言切换器(带下拉菜单)\n */\nexport function LanguageSwitcherIcon({ className = '', onLanguageChange }: LanguageSwitcherProps) {\n const { locale, setLocale } = useTranslation();\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const currentOption = LANGUAGE_OPTIONS.find((opt) => opt.locale === locale);\n\n const handleSelect = (newLocale: Locale) => {\n setLocale(newLocale);\n setIsOpen(false);\n onLanguageChange?.(newLocale);\n };\n\n // 点击外部关闭下拉菜单\n useEffect(() => {\n if (!isOpen) return;\n\n function handleClickOutside(event: MouseEvent) {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n return (\n <div className={clsx('relative', className)} ref={dropdownRef}>\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"\n inline-flex items-center gap-1.5 px-3 py-2\n bg-white dark:bg-gray-800\n border border-gray-300 dark:border-gray-600\n rounded-lg\n hover:bg-gray-50 dark:hover:bg-gray-700\n focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\n transition-all duration-200\n \"\n aria-label=\"Switch Language\"\n >\n <span className=\"text-lg leading-none\">{currentOption?.flag}</span>\n <svg\n className={clsx('w-4 h-4 text-gray-600 dark:text-gray-400 transition-transform duration-200', isOpen ? 'rotate-180' : '')}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {isOpen && (\n <div\n className=\"\n absolute top-full right-0 mt-2 min-w-[180px]\n bg-white dark:bg-gray-800\n border border-gray-200 dark:border-gray-700\n rounded-lg shadow-lg\n py-1\n z-50\n animate-in fade-in slide-in-from-top-2 duration-200\n \"\n >\n {LANGUAGE_OPTIONS.map((option) => (\n <button\n key={option.locale}\n onClick={() => handleSelect(option.locale)}\n className={clsx(\n 'w-full flex items-center gap-3 px-4 py-2.5 text-sm transition-colors duration-150',\n locale === option.locale\n ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400'\n : 'text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700/50'\n )}\n >\n <span className=\"text-lg leading-none\">{option.flag}</span>\n <span className=\"flex-1 text-left\">{option.label}</span>\n {locale === option.locale && (\n <svg\n className=\"w-4 h-4 text-blue-600 dark:text-blue-400\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n )}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n\n// ==================== 主组件 ====================\n\n/**\n * 语言切换器主组件\n * 根据 variant 自动选择样式\n */\nexport function LanguageSwitcher({\n variant = 'icon',\n className,\n onLanguageChange,\n}: LanguageSwitcherProps) {\n switch (variant) {\n case 'buttons':\n return <LanguageSwitcherButtons className={className} onLanguageChange={onLanguageChange} />;\n case 'dropdown':\n return <LanguageSwitcherDropdown className={className} onLanguageChange={onLanguageChange} />;\n case 'icon':\n default:\n return <LanguageSwitcherIcon className={className} onLanguageChange={onLanguageChange} />;\n }\n}\n\n// ==================== 默认导出 ====================\n\nexport default LanguageSwitcher;\n"]}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
import { __export } from './chunk-MAI35PU6.mjs';
|
|
2
|
+
|
|
3
|
+
// src/common/api/index.ts
|
|
4
|
+
var api_exports = {};
|
|
5
|
+
__export(api_exports, {
|
|
6
|
+
BaseApiClient: () => BaseApiClient,
|
|
7
|
+
DEFAULT_API_ROUTES: () => DEFAULT_API_ROUTES,
|
|
8
|
+
DEFAULT_STORAGE_KEYS: () => DEFAULT_STORAGE_KEYS
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
// src/common/api/types.ts
|
|
12
|
+
var DEFAULT_STORAGE_KEYS = {
|
|
13
|
+
AUTH_TOKEN: "auth_token",
|
|
14
|
+
USER_DATA: "user_data",
|
|
15
|
+
REFRESH_TOKEN: "refresh_token"
|
|
16
|
+
};
|
|
17
|
+
var DEFAULT_API_ROUTES = {
|
|
18
|
+
auth: {
|
|
19
|
+
login: "/auth/login",
|
|
20
|
+
logout: "/auth/logout",
|
|
21
|
+
register: "/auth/register",
|
|
22
|
+
me: "/auth/me"
|
|
23
|
+
},
|
|
24
|
+
users: {
|
|
25
|
+
list: "/users",
|
|
26
|
+
detail: (id) => "/users/" + id,
|
|
27
|
+
update: (id) => "/users/" + id,
|
|
28
|
+
delete: (id) => "/users/" + id
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// src/common/api/BaseApiClient.ts
|
|
33
|
+
var BaseApiClient = class {
|
|
34
|
+
constructor(config) {
|
|
35
|
+
this.token = null;
|
|
36
|
+
this.user = null;
|
|
37
|
+
this.baseUrl = config.baseUrl;
|
|
38
|
+
this.storage = config.storage;
|
|
39
|
+
this.request = config.request;
|
|
40
|
+
this.storageKeys = {
|
|
41
|
+
...DEFAULT_STORAGE_KEYS,
|
|
42
|
+
...config.storageKeys || {}
|
|
43
|
+
};
|
|
44
|
+
this.routes = {
|
|
45
|
+
...DEFAULT_API_ROUTES,
|
|
46
|
+
...config.routes || {},
|
|
47
|
+
auth: {
|
|
48
|
+
...DEFAULT_API_ROUTES.auth,
|
|
49
|
+
...config.routes?.auth || {}
|
|
50
|
+
},
|
|
51
|
+
users: {
|
|
52
|
+
...DEFAULT_API_ROUTES.users,
|
|
53
|
+
...config.routes?.users || {}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 初始化 - 从存储中加载 token 和用户信息
|
|
59
|
+
*/
|
|
60
|
+
async init() {
|
|
61
|
+
try {
|
|
62
|
+
this.token = await this.storage.getItem(this.storageKeys.AUTH_TOKEN);
|
|
63
|
+
const userData = await this.storage.getItem(this.storageKeys.USER_DATA);
|
|
64
|
+
if (userData) {
|
|
65
|
+
this.user = JSON.parse(userData);
|
|
66
|
+
}
|
|
67
|
+
} catch (error) {
|
|
68
|
+
console.error("Failed to load auth data:", error);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 设置认证 token
|
|
73
|
+
*/
|
|
74
|
+
async setToken(token) {
|
|
75
|
+
this.token = token;
|
|
76
|
+
if (token) {
|
|
77
|
+
await this.storage.setItem(this.storageKeys.AUTH_TOKEN, token);
|
|
78
|
+
} else {
|
|
79
|
+
await this.storage.removeItem(this.storageKeys.AUTH_TOKEN);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* 设置用户信息
|
|
84
|
+
*/
|
|
85
|
+
async setUser(user) {
|
|
86
|
+
this.user = user;
|
|
87
|
+
if (user) {
|
|
88
|
+
await this.storage.setItem(this.storageKeys.USER_DATA, JSON.stringify(user));
|
|
89
|
+
} else {
|
|
90
|
+
await this.storage.removeItem(this.storageKeys.USER_DATA);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 获取当前 token
|
|
95
|
+
*/
|
|
96
|
+
getToken() {
|
|
97
|
+
return this.token;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* 获取当前用户
|
|
101
|
+
*/
|
|
102
|
+
getUser() {
|
|
103
|
+
return this.user;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 检查是否已登录
|
|
107
|
+
*/
|
|
108
|
+
async isAuthenticated() {
|
|
109
|
+
return !!this.token;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* 清除用户数据
|
|
113
|
+
*/
|
|
114
|
+
async clearUserData() {
|
|
115
|
+
await this.storage.removeItem(this.storageKeys.AUTH_TOKEN);
|
|
116
|
+
await this.storage.removeItem(this.storageKeys.USER_DATA);
|
|
117
|
+
if (this.storageKeys.REFRESH_TOKEN) {
|
|
118
|
+
await this.storage.removeItem(this.storageKeys.REFRESH_TOKEN);
|
|
119
|
+
}
|
|
120
|
+
this.token = null;
|
|
121
|
+
this.user = null;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* 发送请求的通用方法
|
|
125
|
+
*/
|
|
126
|
+
async sendRequest(config) {
|
|
127
|
+
try {
|
|
128
|
+
const headers = {
|
|
129
|
+
"Content-Type": "application/json",
|
|
130
|
+
...config.headers || {}
|
|
131
|
+
};
|
|
132
|
+
if (this.token) {
|
|
133
|
+
headers["Authorization"] = "Bearer " + this.token;
|
|
134
|
+
}
|
|
135
|
+
const response = await this.request.request({
|
|
136
|
+
...config,
|
|
137
|
+
url: this.baseUrl + config.url,
|
|
138
|
+
headers
|
|
139
|
+
});
|
|
140
|
+
return response;
|
|
141
|
+
} catch (error) {
|
|
142
|
+
console.error("API request error:", error);
|
|
143
|
+
return {
|
|
144
|
+
success: false,
|
|
145
|
+
error: error instanceof Error ? error.message : "\u7F51\u7EDC\u9519\u8BEF\uFF0C\u8BF7\u91CD\u8BD5"
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* 发送 GET 请求
|
|
151
|
+
*/
|
|
152
|
+
async get(url, params) {
|
|
153
|
+
return this.sendRequest({ url, method: "GET", params });
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* 发送 POST 请求
|
|
157
|
+
*/
|
|
158
|
+
async post(url, body) {
|
|
159
|
+
return this.sendRequest({ url, method: "POST", body });
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* 发送 PUT 请求
|
|
163
|
+
*/
|
|
164
|
+
async put(url, body) {
|
|
165
|
+
return this.sendRequest({ url, method: "PUT", body });
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* 发送 PATCH 请求
|
|
169
|
+
*/
|
|
170
|
+
async patch(url, body) {
|
|
171
|
+
return this.sendRequest({ url, method: "PATCH", body });
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* 发送 DELETE 请求
|
|
175
|
+
*/
|
|
176
|
+
async delete(url) {
|
|
177
|
+
return this.sendRequest({ url, method: "DELETE" });
|
|
178
|
+
}
|
|
179
|
+
// ==================== 默认认证方法(子类可重写) ====================
|
|
180
|
+
/**
|
|
181
|
+
* 用户注册
|
|
182
|
+
* 默认实现,子类可重写以添加自定义逻辑
|
|
183
|
+
*/
|
|
184
|
+
async register(email, password, username) {
|
|
185
|
+
if (!this.routes.auth?.register) {
|
|
186
|
+
throw new Error("Register route is not configured");
|
|
187
|
+
}
|
|
188
|
+
const response = await this.post(this.routes.auth.register, {
|
|
189
|
+
email,
|
|
190
|
+
password,
|
|
191
|
+
username
|
|
192
|
+
});
|
|
193
|
+
if (response.success && response.data) {
|
|
194
|
+
await this.setToken(response.data.token);
|
|
195
|
+
await this.setUser(response.data.user);
|
|
196
|
+
await this.onAuthSuccess?.(response.data.user, response.data.token);
|
|
197
|
+
} else if (!response.success) {
|
|
198
|
+
await this.onAuthError?.(response.error || "Registration failed");
|
|
199
|
+
}
|
|
200
|
+
return response;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* 用户登录
|
|
204
|
+
* 默认实现,子类可重写以添加自定义逻辑
|
|
205
|
+
*/
|
|
206
|
+
async login(email, password) {
|
|
207
|
+
if (!this.routes.auth?.login) {
|
|
208
|
+
throw new Error("Login route is not configured");
|
|
209
|
+
}
|
|
210
|
+
const response = await this.post(this.routes.auth.login, {
|
|
211
|
+
email,
|
|
212
|
+
password
|
|
213
|
+
});
|
|
214
|
+
if (response.success && response.data) {
|
|
215
|
+
await this.setToken(response.data.token);
|
|
216
|
+
await this.setUser(response.data.user);
|
|
217
|
+
await this.onAuthSuccess?.(response.data.user, response.data.token);
|
|
218
|
+
} else if (!response.success) {
|
|
219
|
+
await this.onAuthError?.(response.error || "Login failed");
|
|
220
|
+
}
|
|
221
|
+
return response;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* 用户退出登录
|
|
225
|
+
* 默认实现,子类可重写以添加自定义逻辑
|
|
226
|
+
*/
|
|
227
|
+
async logout() {
|
|
228
|
+
if (this.routes.auth?.logout) {
|
|
229
|
+
await this.post(this.routes.auth.logout);
|
|
230
|
+
}
|
|
231
|
+
await this.clearUserData();
|
|
232
|
+
await this.onLogout?.();
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* 获取当前用户信息
|
|
236
|
+
* 默认实现,子类可重写以添加自定义逻辑
|
|
237
|
+
*/
|
|
238
|
+
async getCurrentUser() {
|
|
239
|
+
if (!this.routes.auth?.me) {
|
|
240
|
+
throw new Error("Current user route is not configured");
|
|
241
|
+
}
|
|
242
|
+
const response = await this.get(this.routes.auth.me);
|
|
243
|
+
if (response.success && response.data) {
|
|
244
|
+
const userData = response.data.user || response.data;
|
|
245
|
+
await this.setUser(userData);
|
|
246
|
+
return {
|
|
247
|
+
...response,
|
|
248
|
+
data: userData
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
return response;
|
|
252
|
+
}
|
|
253
|
+
// ==================== 默认用户管理方法(子类可重写) ====================
|
|
254
|
+
/**
|
|
255
|
+
* 获取用户列表
|
|
256
|
+
* 默认实现,子类可重写以添加自定义逻辑
|
|
257
|
+
*/
|
|
258
|
+
async getUsers(params) {
|
|
259
|
+
if (!this.routes.users?.list) {
|
|
260
|
+
throw new Error("Users list route is not configured");
|
|
261
|
+
}
|
|
262
|
+
return this.get(this.routes.users.list, params);
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* 获取用户详情
|
|
266
|
+
* 默认实现,子类可重写以添加自定义逻辑
|
|
267
|
+
*/
|
|
268
|
+
async getUserById(userId) {
|
|
269
|
+
if (!this.routes.users?.detail) {
|
|
270
|
+
throw new Error("User detail route is not configured");
|
|
271
|
+
}
|
|
272
|
+
return this.get(this.routes.users.detail(userId));
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* 更新用户信息
|
|
276
|
+
* 默认实现,子类可重写以添加自定义逻辑
|
|
277
|
+
*/
|
|
278
|
+
async updateUser(userId, data) {
|
|
279
|
+
if (!this.routes.users?.update) {
|
|
280
|
+
throw new Error("User update route is not configured");
|
|
281
|
+
}
|
|
282
|
+
return this.put(this.routes.users.update(userId), data);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* 删除用户
|
|
286
|
+
* 默认实现,子类可重写以添加自定义逻辑
|
|
287
|
+
*/
|
|
288
|
+
async deleteUser(userId) {
|
|
289
|
+
if (!this.routes.users?.delete) {
|
|
290
|
+
throw new Error("User delete route is not configured");
|
|
291
|
+
}
|
|
292
|
+
return this.delete(this.routes.users.delete(userId));
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
export { BaseApiClient, DEFAULT_API_ROUTES, DEFAULT_STORAGE_KEYS, api_exports };
|
|
297
|
+
//# sourceMappingURL=chunk-DO6QYAZV.mjs.map
|
|
298
|
+
//# sourceMappingURL=chunk-DO6QYAZV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/api/index.ts","../src/common/api/types.ts","../src/common/api/BaseApiClient.ts"],"names":[],"mappings":"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","file":"chunk-DO6QYAZV.mjs","sourcesContent":["/**\n * API 模块\n * API Module\n *\n * 提供通用的 API 客户端基类和类型定义\n */\n\nexport * from './types';\nexport * from './BaseApiClient';\n\n// 重新导出依赖的适配器类型,方便使用\nexport type { StorageAdapter } from '../storage';\nexport type { RequestAdapter, RequestConfig } from '../request';\n\n// 导出常用的默认配置\nexport { DEFAULT_STORAGE_KEYS, DEFAULT_API_ROUTES } from './types';\n\n","/**\n * API 通用类型定义\n * Common API Types\n */\n\n/**\n * API 响应类型\n * Generic API Response Format\n */\nexport interface ApiResponse<T = any> {\n success: boolean;\n data?: T;\n error?: string;\n message?: string;\n meta?: {\n pagination?: {\n page: number;\n limit: number;\n total: number;\n pages: number;\n };\n [key: string]: any;\n };\n}\n\n/**\n * 分页参数类型\n * Pagination Parameters\n */\nexport interface PaginationParams {\n page?: number;\n limit?: number;\n search?: string;\n sortBy?: string;\n sortOrder?: 'asc' | 'desc';\n}\n\n/**\n * 认证响应类型(泛型)\n * Generic Auth Response\n */\nexport interface AuthResponse<TUser = any> {\n user: TUser;\n token: string;\n}\n\n/**\n * 默认存储键常量\n * Default Storage Keys\n */\nexport const DEFAULT_STORAGE_KEYS = {\n AUTH_TOKEN: 'auth_token',\n USER_DATA: 'user_data',\n REFRESH_TOKEN: 'refresh_token',\n} as const;\n\n/**\n * 存储键类型(可扩展)\n * Storage Keys Type\n */\nexport type StorageKeys = typeof DEFAULT_STORAGE_KEYS;\n\n/**\n * API 路由配置\n * API Routes Configuration\n */\nexport interface ApiRoutes {\n /** 认证相关路由 */\n auth?: {\n login?: string;\n logout?: string;\n register?: string;\n me?: string;\n };\n /** 用户相关路由 */\n users?: {\n list?: string;\n detail?: (id: string) => string;\n update?: (id: string) => string;\n delete?: (id: string) => string;\n };\n /** 自定义路由 */\n [key: string]: any;\n}\n\n/**\n * 默认 API 路由\n */\nexport const DEFAULT_API_ROUTES: ApiRoutes = {\n auth: {\n login: '/auth/login',\n logout: '/auth/logout',\n register: '/auth/register',\n me: '/auth/me',\n },\n users: {\n list: '/users',\n detail: (id: string) => '/users/' + (id),\n update: (id: string) => '/users/' + (id),\n delete: (id: string) => '/users/' + (id),\n },\n};\n","/**\n * 基础 API 客户端(泛型)\n * Base API Client (Generic)\n *\n * 提供统一的 API 调用逻辑,通过适配器模式支持多平台\n * 使用泛型 TUser 支持不同项目的用户类型\n */\n\nimport type { StorageAdapter } from '../storage';\nimport type { RequestAdapter, RequestConfig } from '../request';\nimport type { ApiResponse, AuthResponse, StorageKeys, ApiRoutes } from './types';\nimport { DEFAULT_STORAGE_KEYS, DEFAULT_API_ROUTES } from './types';\n\n/**\n * 基础 API 客户端配置\n */\nexport interface BaseApiClientConfig {\n /** 基础 URL */\n baseUrl: string;\n /** 存储适配器 */\n storage: StorageAdapter;\n /** 请求适配器 */\n request: RequestAdapter;\n /** 自定义存储键(可选) */\n storageKeys?: Partial<StorageKeys>;\n /** API 路由配置(可选) */\n routes?: ApiRoutes;\n}\n\n/**\n * 基础 API 客户端\n * @template TUser 用户类型(泛型)\n */\nexport class BaseApiClient<TUser = any> {\n protected token: string | null = null;\n protected user: TUser | null = null;\n protected baseUrl: string;\n protected storage: StorageAdapter;\n protected request: RequestAdapter;\n protected storageKeys: StorageKeys;\n protected routes: ApiRoutes;\n\n constructor(config: BaseApiClientConfig) {\n this.baseUrl = config.baseUrl;\n this.storage = config.storage;\n this.request = config.request;\n this.storageKeys = {\n ...DEFAULT_STORAGE_KEYS,\n ...(config.storageKeys || {}),\n };\n this.routes = {\n ...DEFAULT_API_ROUTES,\n ...(config.routes || {}),\n auth: {\n ...DEFAULT_API_ROUTES.auth,\n ...(config.routes?.auth || {}),\n },\n users: {\n ...DEFAULT_API_ROUTES.users,\n ...(config.routes?.users || {}),\n },\n };\n }\n\n /**\n * 初始化 - 从存储中加载 token 和用户信息\n */\n async init(): Promise<void> {\n try {\n this.token = await this.storage.getItem(this.storageKeys.AUTH_TOKEN);\n const userData = await this.storage.getItem(this.storageKeys.USER_DATA);\n if (userData) {\n this.user = JSON.parse(userData) as TUser;\n }\n } catch (error) {\n console.error('Failed to load auth data:', error);\n }\n }\n\n /**\n * 设置认证 token\n */\n async setToken(token: string | null): Promise<void> {\n this.token = token;\n if (token) {\n await this.storage.setItem(this.storageKeys.AUTH_TOKEN, token);\n } else {\n await this.storage.removeItem(this.storageKeys.AUTH_TOKEN);\n }\n }\n\n /**\n * 设置用户信息\n */\n async setUser(user: TUser | null): Promise<void> {\n this.user = user;\n if (user) {\n await this.storage.setItem(this.storageKeys.USER_DATA, JSON.stringify(user));\n } else {\n await this.storage.removeItem(this.storageKeys.USER_DATA);\n }\n }\n\n /**\n * 获取当前 token\n */\n getToken(): string | null {\n return this.token;\n }\n\n /**\n * 获取当前用户\n */\n getUser(): TUser | null {\n return this.user;\n }\n\n /**\n * 检查是否已登录\n */\n async isAuthenticated(): Promise<boolean> {\n return !!this.token;\n }\n\n /**\n * 清除用户数据\n */\n async clearUserData(): Promise<void> {\n await this.storage.removeItem(this.storageKeys.AUTH_TOKEN);\n await this.storage.removeItem(this.storageKeys.USER_DATA);\n if (this.storageKeys.REFRESH_TOKEN) {\n await this.storage.removeItem(this.storageKeys.REFRESH_TOKEN);\n }\n this.token = null;\n this.user = null;\n }\n\n /**\n * 发送请求的通用方法\n */\n protected async sendRequest<T = any>(config: RequestConfig): Promise<ApiResponse<T>> {\n try {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...(config.headers || {}),\n };\n\n // 添加认证 token\n if (this.token) {\n headers['Authorization'] = 'Bearer ' + (this.token);\n }\n\n const response = await this.request.request<ApiResponse<T>>({\n ...config,\n url: (this.baseUrl) + (config.url),\n headers,\n });\n\n return response;\n } catch (error) {\n console.error('API request error:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : '网络错误,请重试',\n };\n }\n }\n\n /**\n * 发送 GET 请求\n */\n async get<T = any>(url: string, params?: Record<string, any>): Promise<ApiResponse<T>> {\n return this.sendRequest({ url, method: 'GET', params });\n }\n\n /**\n * 发送 POST 请求\n */\n async post<T = any>(url: string, body?: any): Promise<ApiResponse<T>> {\n return this.sendRequest({ url, method: 'POST', body });\n }\n\n /**\n * 发送 PUT 请求\n */\n async put<T = any>(url: string, body?: any): Promise<ApiResponse<T>> {\n return this.sendRequest({ url, method: 'PUT', body });\n }\n\n /**\n * 发送 PATCH 请求\n */\n async patch<T = any>(url: string, body?: any): Promise<ApiResponse<T>> {\n return this.sendRequest({ url, method: 'PATCH', body });\n }\n\n /**\n * 发送 DELETE 请求\n */\n async delete<T = any>(url: string): Promise<ApiResponse<T>> {\n return this.sendRequest({ url, method: 'DELETE' });\n }\n\n // ==================== 默认认证方法(子类可重写) ====================\n\n /**\n * 用户注册\n * 默认实现,子类可重写以添加自定义逻辑\n */\n async register(\n email: string,\n password: string,\n username: string\n ): Promise<ApiResponse<AuthResponse<TUser>>> {\n if (!this.routes.auth?.register) {\n throw new Error('Register route is not configured');\n }\n\n const response = await this.post<AuthResponse<TUser>>(this.routes.auth.register, {\n email,\n password,\n username,\n });\n\n if (response.success && response.data) {\n await this.setToken(response.data.token);\n await this.setUser(response.data.user);\n await this.onAuthSuccess?.(response.data.user, response.data.token);\n } else if (!response.success) {\n await this.onAuthError?.(response.error || 'Registration failed');\n }\n\n return response;\n }\n\n /**\n * 用户登录\n * 默认实现,子类可重写以添加自定义逻辑\n */\n async login(email: string, password: string): Promise<ApiResponse<AuthResponse<TUser>>> {\n if (!this.routes.auth?.login) {\n throw new Error('Login route is not configured');\n }\n\n const response = await this.post<AuthResponse<TUser>>(this.routes.auth.login, {\n email,\n password,\n });\n\n if (response.success && response.data) {\n await this.setToken(response.data.token);\n await this.setUser(response.data.user);\n await this.onAuthSuccess?.(response.data.user, response.data.token);\n } else if (!response.success) {\n await this.onAuthError?.(response.error || 'Login failed');\n }\n\n return response;\n }\n\n /**\n * 用户退出登录\n * 默认实现,子类可重写以添加自定义逻辑\n */\n async logout(): Promise<void> {\n if (this.routes.auth?.logout) {\n await this.post<void>(this.routes.auth.logout);\n }\n\n // 无论请求成功与否,都清除本地数据\n await this.clearUserData();\n await this.onLogout?.();\n }\n\n /**\n * 获取当前用户信息\n * 默认实现,子类可重写以添加自定义逻辑\n */\n async getCurrentUser(): Promise<ApiResponse<TUser>> {\n if (!this.routes.auth?.me) {\n throw new Error('Current user route is not configured');\n }\n\n const response = await this.get<any>(this.routes.auth.me);\n\n // 统一处理响应格式:自动展开 response.data.user 为 response.data\n if (response.success && response.data) {\n // 如果 data 是嵌套的 {user: {...}, session: {...}} 格式,提取 user\n const userData = response.data.user || response.data;\n\n await this.setUser(userData);\n\n return {\n ...response,\n data: userData,\n };\n }\n\n return response;\n }\n\n // ==================== 默认用户管理方法(子类可重写) ====================\n\n /**\n * 获取用户列表\n * 默认实现,子类可重写以添加自定义逻辑\n */\n async getUsers(params?: {\n page?: number;\n limit?: number;\n search?: string;\n }): Promise<ApiResponse<{ users: TUser[]; total: number }>> {\n if (!this.routes.users?.list) {\n throw new Error('Users list route is not configured');\n }\n\n return this.get(this.routes.users.list, params);\n }\n\n /**\n * 获取用户详情\n * 默认实现,子类可重写以添加自定义逻辑\n */\n async getUserById(userId: string): Promise<ApiResponse<TUser>> {\n if (!this.routes.users?.detail) {\n throw new Error('User detail route is not configured');\n }\n\n return this.get(this.routes.users.detail(userId));\n }\n\n /**\n * 更新用户信息\n * 默认实现,子类可重写以添加自定义逻辑\n */\n async updateUser(userId: string, data: Partial<TUser>): Promise<ApiResponse<TUser>> {\n if (!this.routes.users?.update) {\n throw new Error('User update route is not configured');\n }\n\n return this.put(this.routes.users.update(userId), data);\n }\n\n /**\n * 删除用户\n * 默认实现,子类可重写以添加自定义逻辑\n */\n async deleteUser(userId: string): Promise<ApiResponse<void>> {\n if (!this.routes.users?.delete) {\n throw new Error('User delete route is not configured');\n }\n\n return this.delete(this.routes.users.delete(userId));\n }\n\n // ==================== 子类可重写的钩子方法 ====================\n\n /**\n * 请求前钩子(子类可重写)\n */\n protected async onBeforeRequest?(config: RequestConfig): Promise<RequestConfig>;\n\n /**\n * 请求后钩子(子类可重写)\n */\n protected async onAfterRequest?<T>(response: ApiResponse<T>): Promise<ApiResponse<T>>;\n\n /**\n * 请求错误钩子(子类可重写)\n */\n protected async onRequestError?(error: Error): Promise<void>;\n\n /**\n * 认证成功钩子(子类可重写)\n */\n protected async onAuthSuccess?(user: TUser, token: string): Promise<void>;\n\n /**\n * 认证失败钩子(子类可重写)\n */\n protected async onAuthError?(error: string): Promise<void>;\n\n /**\n * 登出钩子(子类可重写)\n */\n protected async onLogout?(): Promise<void>;\n}\n\n"]}
|