sa2kit 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (712) hide show
  1. package/README.md +5 -5
  2. package/dist/AliyunOSSProvider-7IOT5U6M.js +15 -0
  3. package/dist/{AliyunOSSProvider-4GRL2FJB.js.map → AliyunOSSProvider-7IOT5U6M.js.map} +1 -1
  4. package/dist/AliyunOSSProvider-ZXZM7OQA.mjs +6 -0
  5. package/dist/{AliyunOSSProvider-QNVFIZ7Q.mjs.map → AliyunOSSProvider-ZXZM7OQA.mjs.map} +1 -1
  6. package/dist/LocalStorageProvider-KJKRCKBS.js +15 -0
  7. package/dist/{LocalStorageProvider-PFA2DMIJ.js.map → LocalStorageProvider-KJKRCKBS.js.map} +1 -1
  8. package/dist/LocalStorageProvider-O22465NY.mjs +6 -0
  9. package/dist/{LocalStorageProvider-J5RHV37G.mjs.map → LocalStorageProvider-O22465NY.mjs.map} +1 -1
  10. package/dist/{chunk-SLKOEYFH.js → chunk-2234T4A6.js} +5 -5
  11. package/dist/chunk-2234T4A6.js.map +1 -0
  12. package/dist/{chunk-HQLKOXG7.js → chunk-36KGNXKW.js} +3 -3
  13. package/dist/{chunk-HQLKOXG7.js.map → chunk-36KGNXKW.js.map} +1 -1
  14. package/dist/{chunk-BCE6RUZV.js → chunk-375C7WL7.js} +19 -19
  15. package/dist/chunk-375C7WL7.js.map +1 -0
  16. package/dist/{chunk-VMTEDX5H.js → chunk-3J24Z4MB.js} +34 -318
  17. package/dist/chunk-3J24Z4MB.js.map +1 -0
  18. package/dist/{chunk-PBI7FKMB.js → chunk-3QCATFQV.js} +3 -3
  19. package/dist/chunk-3QCATFQV.js.map +1 -0
  20. package/dist/{chunk-FXQOXLDE.js → chunk-3R6JHA6D.js} +4 -4
  21. package/dist/chunk-3R6JHA6D.js.map +1 -0
  22. package/dist/{chunk-ZRAW3HXA.js → chunk-4OXKHV7J.js} +3 -3
  23. package/dist/chunk-4OXKHV7J.js.map +1 -0
  24. package/dist/chunk-4PJM4752.js +4 -0
  25. package/dist/{chunk-5USIS3UM.js.map → chunk-4PJM4752.js.map} +1 -1
  26. package/dist/{chunk-3Z43XGA4.mjs → chunk-65JRVC3F.mjs} +4 -4
  27. package/dist/{chunk-3Z43XGA4.mjs.map → chunk-65JRVC3F.mjs.map} +1 -1
  28. package/dist/{chunk-Q5EDCKQA.js → chunk-6HL54I2B.js} +16 -16
  29. package/dist/chunk-6HL54I2B.js.map +1 -0
  30. package/dist/chunk-6V2MIQPF.mjs +77 -0
  31. package/dist/chunk-6V2MIQPF.mjs.map +1 -0
  32. package/dist/{chunk-C6KV7VTZ.mjs → chunk-7CRU2Y5X.mjs} +5 -5
  33. package/dist/chunk-7CRU2Y5X.mjs.map +1 -0
  34. package/dist/chunk-7PMT4L4I.js +324 -0
  35. package/dist/chunk-7PMT4L4I.js.map +1 -0
  36. package/dist/{chunk-XJ7ZAGC5.js → chunk-7VVZHFEM.js} +3 -3
  37. package/dist/chunk-7VVZHFEM.js.map +1 -0
  38. package/dist/chunk-AWHGIKTQ.js +56 -0
  39. package/dist/{chunk-FHLTPXAR.js.map → chunk-AWHGIKTQ.js.map} +1 -1
  40. package/dist/chunk-B3GYF6TY.js +37 -0
  41. package/dist/{chunk-2Y7BKFKZ.js.map → chunk-B3GYF6TY.js.map} +1 -1
  42. package/dist/{chunk-5FUAQLGC.mjs → chunk-BDBJFOXM.mjs} +3 -3
  43. package/dist/{chunk-5FUAQLGC.mjs.map → chunk-BDBJFOXM.mjs.map} +1 -1
  44. package/dist/{chunk-ZGVB35L2.mjs → chunk-BTW3SWQN.mjs} +3 -3
  45. package/dist/chunk-BTW3SWQN.mjs.map +1 -0
  46. package/dist/{chunk-I5ZPEDNR.mjs → chunk-CHYSSZ4E.mjs} +10 -10
  47. package/dist/chunk-CHYSSZ4E.mjs.map +1 -0
  48. package/dist/{chunk-FIUBFREP.mjs → chunk-DO6QYAZV.mjs} +5 -5
  49. package/dist/chunk-DO6QYAZV.mjs.map +1 -0
  50. package/dist/{chunk-MBANGIG3.mjs → chunk-DTR53LQO.mjs} +6 -6
  51. package/dist/chunk-DTR53LQO.mjs.map +1 -0
  52. package/dist/{chunk-EQXPL7TN.mjs → chunk-EI2S4XDG.mjs} +16 -5
  53. package/dist/chunk-EI2S4XDG.mjs.map +1 -0
  54. package/dist/{chunk-GSNGCENJ.js → chunk-EOZHUI46.js} +16 -4
  55. package/dist/chunk-EOZHUI46.js.map +1 -0
  56. package/dist/{chunk-25OFOKNF.js → chunk-F2BZIU67.js} +18 -5
  57. package/dist/chunk-F2BZIU67.js.map +1 -0
  58. package/dist/{chunk-AQPU2AXH.js → chunk-F2TEJSCP.js} +10 -10
  59. package/dist/chunk-F2TEJSCP.js.map +1 -0
  60. package/dist/{chunk-UCOE6SET.js → chunk-FCLS5R24.js} +3 -3
  61. package/dist/chunk-FCLS5R24.js.map +1 -0
  62. package/dist/{chunk-3NHAT7D4.mjs → chunk-FUA6ZGMI.mjs} +27 -12
  63. package/dist/chunk-FUA6ZGMI.mjs.map +1 -0
  64. package/dist/chunk-FY2X3LYR.mjs +3 -0
  65. package/dist/{chunk-VRN76M56.mjs.map → chunk-FY2X3LYR.mjs.map} +1 -1
  66. package/dist/{chunk-V7EVKD5G.mjs → chunk-GS4SAW25.mjs} +4 -4
  67. package/dist/chunk-GS4SAW25.mjs.map +1 -0
  68. package/dist/chunk-H56ICWUO.js +321 -0
  69. package/dist/chunk-H56ICWUO.js.map +1 -0
  70. package/dist/{chunk-HDMIOOZY.mjs → chunk-HG34SGMN.mjs} +4 -4
  71. package/dist/chunk-HG34SGMN.mjs.map +1 -0
  72. package/dist/chunk-HL4H2HF6.js +279 -0
  73. package/dist/chunk-HL4H2HF6.js.map +1 -0
  74. package/dist/chunk-IJIQUMAK.mjs +272 -0
  75. package/dist/chunk-IJIQUMAK.mjs.map +1 -0
  76. package/dist/{imageCrop/index.mjs → chunk-KEZFTDZT.mjs} +24 -6
  77. package/dist/chunk-KEZFTDZT.mjs.map +1 -0
  78. package/dist/{chunk-KQ643L7Z.js → chunk-KHOVC2KL.js} +3 -3
  79. package/dist/chunk-KHOVC2KL.js.map +1 -0
  80. package/dist/{chunk-6PMXAK7F.js → chunk-KRBSTLKC.js} +57 -57
  81. package/dist/chunk-KRBSTLKC.js.map +1 -0
  82. package/dist/chunk-KVYHCGRY.js +2011 -0
  83. package/dist/chunk-KVYHCGRY.js.map +1 -0
  84. package/dist/{chunk-G7UBMCUT.mjs → chunk-LZ5YTMMP.mjs} +3 -3
  85. package/dist/chunk-LZ5YTMMP.mjs.map +1 -0
  86. package/dist/{chunk-WW4GE6CZ.js → chunk-MJ6XJGAL.js} +23 -119
  87. package/dist/chunk-MJ6XJGAL.js.map +1 -0
  88. package/dist/{chunk-NCRP2YHY.mjs → chunk-MKLXCV4Z.mjs} +8 -96
  89. package/dist/chunk-MKLXCV4Z.mjs.map +1 -0
  90. package/dist/chunk-MMDSZIXD.mjs +286 -0
  91. package/dist/chunk-MMDSZIXD.mjs.map +1 -0
  92. package/dist/{chunk-TC5YU6A4.mjs → chunk-N2O3OX5Y.mjs} +3 -3
  93. package/dist/chunk-N2O3OX5Y.mjs.map +1 -0
  94. package/dist/{chunk-3FRAIS4T.mjs → chunk-O6NNSPWD.mjs} +5 -5
  95. package/dist/{chunk-3FRAIS4T.mjs.map → chunk-O6NNSPWD.mjs.map} +1 -1
  96. package/dist/chunk-OIRZXSYM.js +80 -0
  97. package/dist/chunk-OIRZXSYM.js.map +1 -0
  98. package/dist/{chunk-Q5VFBPMG.mjs → chunk-P7JQRNBJ.mjs} +3 -3
  99. package/dist/chunk-P7JQRNBJ.mjs.map +1 -0
  100. package/dist/{chunk-BIHYZA67.mjs → chunk-PLIG5257.mjs} +18 -18
  101. package/dist/chunk-PLIG5257.mjs.map +1 -0
  102. package/dist/chunk-QIF4MG5V.mjs +283 -0
  103. package/dist/chunk-QIF4MG5V.mjs.map +1 -0
  104. package/dist/{chunk-4OOANEJV.mjs → chunk-RHECN4E2.mjs} +21 -21
  105. package/dist/chunk-RHECN4E2.mjs.map +1 -0
  106. package/dist/{chunk-YOTQG4NP.mjs → chunk-RHHTZTIN.mjs} +4 -4
  107. package/dist/chunk-RHHTZTIN.mjs.map +1 -0
  108. package/dist/{chunk-G6NSKJMH.js → chunk-RRQ2X26Z.js} +4 -4
  109. package/dist/chunk-RRQ2X26Z.js.map +1 -0
  110. package/dist/{chunk-4WBCWJSN.js → chunk-RST2T54Y.js} +7 -7
  111. package/dist/chunk-RST2T54Y.js.map +1 -0
  112. package/dist/{chunk-R2DXTE2L.js → chunk-RVNQI6BI.js} +4 -4
  113. package/dist/chunk-RVNQI6BI.js.map +1 -0
  114. package/dist/{chunk-SKFEJPMJ.mjs → chunk-S3K4LTRI.mjs} +6 -6
  115. package/dist/chunk-S3K4LTRI.mjs.map +1 -0
  116. package/dist/{chunk-ZM2SZJTZ.js → chunk-SWZ5XNF6.js} +9 -9
  117. package/dist/chunk-SWZ5XNF6.js.map +1 -0
  118. package/dist/{chunk-QSKLQX6H.js → chunk-U7HNBCBS.js} +16 -16
  119. package/dist/chunk-U7HNBCBS.js.map +1 -0
  120. package/dist/{chunk-CIVO4R6N.mjs → chunk-UJS3YSD3.mjs} +3 -3
  121. package/dist/chunk-UJS3YSD3.mjs.map +1 -0
  122. package/dist/{chunk-G6HXNQ2U.mjs → chunk-UJUWDF7M.mjs} +8 -8
  123. package/dist/chunk-UJUWDF7M.mjs.map +1 -0
  124. package/dist/{chunk-CAYOQDBR.js → chunk-UR5NENGE.js} +3 -3
  125. package/dist/chunk-UR5NENGE.js.map +1 -0
  126. package/dist/{chunk-QXAOXBVB.mjs → chunk-V7HGBDCB.mjs} +3 -3
  127. package/dist/chunk-V7HGBDCB.mjs.map +1 -0
  128. package/dist/{chunk-ATUCZXJY.js → chunk-V7RLIZMN.js} +14 -4
  129. package/dist/chunk-V7RLIZMN.js.map +1 -0
  130. package/dist/{chunk-ACUFEDVQ.js → chunk-VCKXK6V5.js} +9 -9
  131. package/dist/chunk-VCKXK6V5.js.map +1 -0
  132. package/dist/{chunk-XUS5ACKR.mjs → chunk-VIEXDTNF.mjs} +3 -3
  133. package/dist/chunk-VIEXDTNF.mjs.map +1 -0
  134. package/dist/{imageCrop/index.js → chunk-VN2DULIA.js} +24 -5
  135. package/dist/chunk-VN2DULIA.js.map +1 -0
  136. package/dist/{chunk-S6YSGVWD.js → chunk-VNWMRUY6.js} +31 -87
  137. package/dist/chunk-VNWMRUY6.js.map +1 -0
  138. package/dist/{chunk-3DXPQ4YV.mjs → chunk-VYK4M2D6.mjs} +18 -6
  139. package/dist/chunk-VYK4M2D6.mjs.map +1 -0
  140. package/dist/{chunk-WEEXCPSE.mjs → chunk-WB4H6ZUW.mjs} +3 -3
  141. package/dist/chunk-WB4H6ZUW.mjs.map +1 -0
  142. package/dist/{chunk-GWNBVGDT.mjs → chunk-WM3AEJ2E.mjs} +6 -257
  143. package/dist/chunk-WM3AEJ2E.mjs.map +1 -0
  144. package/dist/{chunk-CX2GHCAI.mjs → chunk-X5GINUGI.mjs} +26 -81
  145. package/dist/chunk-X5GINUGI.mjs.map +1 -0
  146. package/dist/{chunk-DIF5VRL3.mjs → chunk-XB7GUEHZ.mjs} +14 -5
  147. package/dist/chunk-XB7GUEHZ.mjs.map +1 -0
  148. package/dist/{chunk-ZLYPALF3.js → chunk-XE5RGZ3B.js} +11 -11
  149. package/dist/chunk-XE5RGZ3B.js.map +1 -0
  150. package/dist/{chunk-WJ7IMUEJ.mjs → chunk-XNTIMVSL.mjs} +7 -7
  151. package/dist/chunk-XNTIMVSL.mjs.map +1 -0
  152. package/dist/{chunk-ZWQJSZEY.js → chunk-Y7WHUKJF.js} +28 -12
  153. package/dist/chunk-Y7WHUKJF.js.map +1 -0
  154. package/dist/{components/index.mjs → chunk-YIRPPMCN.mjs} +305 -785
  155. package/dist/chunk-YIRPPMCN.mjs.map +1 -0
  156. package/dist/{chunk-KH6RQ4J5.js → chunk-Z2SNB5LJ.js} +3 -3
  157. package/dist/chunk-Z2SNB5LJ.js.map +1 -0
  158. package/dist/{chunk-HJ6MH7J7.js → chunk-ZOP7YIVX.js} +17 -17
  159. package/dist/chunk-ZOP7YIVX.js.map +1 -0
  160. package/dist/{chunk-HJZHQW5R.mjs → chunk-ZUZLWHH5.mjs} +3 -3
  161. package/dist/chunk-ZUZLWHH5.mjs.map +1 -0
  162. package/dist/{ai → common/ai}/llm/core/index.d.mts +3 -3
  163. package/dist/{ai → common/ai}/llm/core/index.d.ts +3 -3
  164. package/dist/{ai/llm → common/ai/llm/core}/index.js +14 -14
  165. package/dist/{ai/llm → common/ai/llm/core}/index.mjs +3 -3
  166. package/dist/{ai → common/ai}/llm/electron/index.d.mts +3 -3
  167. package/dist/{ai/llm/web → common/ai/llm/electron}/index.d.ts +3 -3
  168. package/dist/common/ai/llm/electron/index.js +67 -0
  169. package/dist/common/ai/llm/electron/index.mjs +10 -0
  170. package/dist/{ai → common/ai}/llm/index.d.mts +2 -2
  171. package/dist/{ai → common/ai}/llm/index.d.ts +2 -2
  172. package/dist/{ai/llm/core → common/ai/llm}/index.js +13 -13
  173. package/dist/{ai/llm/core → common/ai/llm}/index.mjs +2 -2
  174. package/dist/{ai → common/ai}/llm/miniapp/index.d.mts +3 -3
  175. package/dist/{ai → common/ai}/llm/miniapp/index.d.ts +3 -3
  176. package/dist/{ai/llm/rn → common/ai/llm/miniapp}/index.js +16 -16
  177. package/dist/{ai/llm/rn → common/ai/llm/miniapp}/index.mjs +4 -4
  178. package/dist/{ai → common/ai}/llm/rn/index.d.mts +3 -3
  179. package/dist/{ai → common/ai}/llm/rn/index.d.ts +3 -3
  180. package/dist/{ai/llm/miniapp → common/ai/llm/rn}/index.js +16 -16
  181. package/dist/{ai/llm/miniapp → common/ai/llm/rn}/index.mjs +4 -4
  182. package/dist/common/ai/llm/ui/electron/index.d.mts +5 -0
  183. package/dist/common/ai/llm/ui/electron/index.d.ts +5 -0
  184. package/dist/common/ai/llm/ui/electron/index.js +22 -0
  185. package/dist/common/ai/llm/ui/electron/index.mjs +9 -0
  186. package/dist/common/ai/llm/ui/miniapp/index.d.mts +9 -0
  187. package/dist/common/ai/llm/ui/miniapp/index.d.ts +9 -0
  188. package/dist/common/ai/llm/ui/miniapp/index.js +14 -0
  189. package/dist/common/ai/llm/ui/miniapp/index.mjs +5 -0
  190. package/dist/common/ai/llm/ui/rn/index.d.mts +9 -0
  191. package/dist/common/ai/llm/ui/rn/index.d.ts +9 -0
  192. package/dist/common/ai/llm/ui/rn/index.js +14 -0
  193. package/dist/common/ai/llm/ui/rn/index.mjs +5 -0
  194. package/dist/{ai → common/ai}/llm/ui/web/index.d.mts +7 -7
  195. package/dist/{ai → common/ai}/llm/ui/web/index.d.ts +7 -7
  196. package/dist/common/ai/llm/ui/web/index.js +21 -0
  197. package/dist/common/ai/llm/ui/web/index.mjs +8 -0
  198. package/dist/{ai → common/ai}/llm/web/index.d.mts +3 -3
  199. package/dist/{ai/llm/electron → common/ai/llm/web}/index.d.ts +3 -3
  200. package/dist/common/ai/llm/web/index.js +66 -0
  201. package/dist/common/ai/llm/web/index.mjs +9 -0
  202. package/dist/{analytics → common/analytics}/index.d.mts +1 -1
  203. package/dist/{analytics → common/analytics}/index.d.ts +1 -1
  204. package/dist/{analytics → common/analytics}/index.js +79 -79
  205. package/dist/{analytics → common/analytics}/index.mjs +3 -3
  206. package/dist/{analytics → common/analytics}/server/index.js +2 -2
  207. package/dist/common/analytics/server/index.js.map +1 -0
  208. package/dist/{analytics → common/analytics}/server/index.mjs +2 -2
  209. package/dist/common/analytics/server/index.mjs.map +1 -0
  210. package/dist/{api → common/api}/index.d.mts +3 -3
  211. package/dist/{api → common/api}/index.d.ts +3 -3
  212. package/dist/common/api/index.js +21 -0
  213. package/dist/common/api/index.mjs +4 -0
  214. package/dist/common/auth/components/index.d.mts +9 -9
  215. package/dist/common/auth/components/index.d.ts +9 -9
  216. package/dist/common/auth/index.js +6 -6
  217. package/dist/common/auth/index.mjs +2 -2
  218. package/dist/common/auth/react/index.d.mts +3 -3
  219. package/dist/common/auth/react/index.d.ts +3 -3
  220. package/dist/common/auth/rn/index.d.mts +2 -2
  221. package/dist/common/auth/rn/index.d.ts +2 -2
  222. package/dist/common/auth/rn/index.js +2 -2
  223. package/dist/common/auth/rn/index.js.map +1 -1
  224. package/dist/common/auth/rn/index.mjs +1 -1
  225. package/dist/common/auth/rn/index.mjs.map +1 -1
  226. package/dist/common/components/index.d.mts +4 -0
  227. package/dist/common/components/index.d.ts +4 -0
  228. package/dist/common/components/index.js +414 -0
  229. package/dist/common/components/index.mjs +9 -0
  230. package/dist/{config → common/config}/index.d.mts +1 -1
  231. package/dist/{config → common/config}/index.d.ts +1 -1
  232. package/dist/common/config/index.js +21 -0
  233. package/dist/common/config/index.mjs +4 -0
  234. package/dist/{config → common/config}/server/index.js +5 -5
  235. package/dist/common/config/server/index.js.map +1 -0
  236. package/dist/{config → common/config}/server/index.mjs +5 -5
  237. package/dist/common/config/server/index.mjs.map +1 -0
  238. package/dist/common/export/index.d.mts +2 -2
  239. package/dist/common/export/index.d.ts +2 -2
  240. package/dist/common/export/index.js +67 -67
  241. package/dist/common/export/index.mjs +3 -3
  242. package/dist/common/export/server/index.d.mts +2 -2
  243. package/dist/common/export/server/index.d.ts +2 -2
  244. package/dist/common/export/server/index.js +76 -48
  245. package/dist/common/export/server/index.mjs +3 -3
  246. package/dist/common/file/index.d.mts +2 -2
  247. package/dist/common/file/index.d.ts +2 -2
  248. package/dist/common/file/index.js +27 -27
  249. package/dist/common/file/index.mjs +5 -5
  250. package/dist/common/file/server/index.d.mts +2 -2
  251. package/dist/common/file/server/index.d.ts +2 -2
  252. package/dist/common/file/server/index.js +58 -50
  253. package/dist/common/file/server/index.mjs +8 -8
  254. package/dist/{i18n → common/i18n}/index.d.mts +1 -1
  255. package/dist/{i18n → common/i18n}/index.d.ts +1 -1
  256. package/dist/{i18n → common/i18n}/index.js +18 -18
  257. package/dist/{i18n → common/i18n}/index.mjs +2 -2
  258. package/dist/common/imageCrop/index.d.mts +2 -0
  259. package/dist/common/imageCrop/index.d.ts +2 -0
  260. package/dist/common/imageCrop/index.js +61 -0
  261. package/dist/common/imageCrop/index.mjs +4 -0
  262. package/dist/common/index.d.mts +16 -16
  263. package/dist/common/index.d.ts +16 -16
  264. package/dist/common/index.js +75 -67
  265. package/dist/common/index.mjs +26 -26
  266. package/dist/common/logger/index.d.mts +1 -1
  267. package/dist/common/logger/index.d.ts +1 -1
  268. package/dist/common/logger/index.js +6 -7
  269. package/dist/common/logger/index.mjs +1 -2
  270. package/dist/{ossFile → common/ossFile}/index.d.mts +6 -6
  271. package/dist/{ossFile → common/ossFile}/index.d.ts +6 -6
  272. package/dist/{ossFile → common/ossFile}/index.js +26 -26
  273. package/dist/{ossFile → common/ossFile}/index.mjs +5 -5
  274. package/dist/{ossFile/server/index.d.ts → common/ossFile/server/index.d.mts} +7 -7
  275. package/dist/{ossFile/server/index.d.mts → common/ossFile/server/index.d.ts} +7 -7
  276. package/dist/{ossFile → common/ossFile}/server/index.js +60 -52
  277. package/dist/{ossFile → common/ossFile}/server/index.mjs +10 -10
  278. package/dist/common/platform/index.js +8 -8
  279. package/dist/common/platform/index.mjs +4 -4
  280. package/dist/common/request/index.d.mts +1 -1
  281. package/dist/common/request/index.d.ts +1 -1
  282. package/dist/common/request/index.js +5 -6
  283. package/dist/common/request/index.mjs +2 -3
  284. package/dist/common/storage/index.d.mts +1 -1
  285. package/dist/common/storage/index.d.ts +1 -1
  286. package/dist/common/storage/index.js +17 -17
  287. package/dist/common/storage/index.mjs +5 -5
  288. package/dist/{universalExport → common/universalExport}/index.d.mts +6 -86
  289. package/dist/{universalExport → common/universalExport}/index.d.ts +6 -86
  290. package/dist/{universalExport → common/universalExport}/index.js +67 -67
  291. package/dist/common/universalExport/index.mjs +5 -0
  292. package/dist/{universalExport → common/universalExport}/server/index.d.mts +3 -84
  293. package/dist/{universalExport → common/universalExport}/server/index.d.ts +3 -84
  294. package/dist/common/universalExport/server/index.js +151 -0
  295. package/dist/common/universalExport/server/index.mjs +6 -0
  296. package/dist/{universalFile/index.d.ts → common/universalFile/index.d.mts} +9 -9
  297. package/dist/{universalFile/index.d.mts → common/universalFile/index.d.ts} +9 -9
  298. package/dist/{universalFile → common/universalFile}/index.js +63 -63
  299. package/dist/common/universalFile/index.js.map +1 -0
  300. package/dist/{universalFile → common/universalFile}/index.mjs +4 -4
  301. package/dist/common/universalFile/index.mjs.map +1 -0
  302. package/dist/{universalFile → common/universalFile}/server/index.d.mts +5 -5
  303. package/dist/{universalFile → common/universalFile}/server/index.d.ts +5 -5
  304. package/dist/{universalFile → common/universalFile}/server/index.js +68 -68
  305. package/dist/{universalFile → common/universalFile}/server/index.mjs +8 -8
  306. package/dist/common/utils/index.d.mts +1 -1
  307. package/dist/common/utils/index.d.ts +1 -1
  308. package/dist/common/utils/index.js +11 -12
  309. package/dist/common/utils/index.mjs +2 -3
  310. package/dist/{index-WrR57hKT.d.ts → index-BRLygK4h.d.ts} +2 -2
  311. package/dist/{request/index.d.mts → index-BWNK5mH2.d.ts} +19 -2
  312. package/dist/{utils/index.d.mts → index-BiCK6gg6.d.mts} +19 -1
  313. package/dist/{utils/index.d.ts → index-BiCK6gg6.d.ts} +19 -1
  314. package/dist/{index-DoUo8IrU.d.mts → index-BxZauNN_.d.mts} +8 -8
  315. package/dist/{index-DoUo8IrU.d.ts → index-BxZauNN_.d.ts} +8 -8
  316. package/dist/{request/index.d.ts → index-C-P2yBTH.d.mts} +19 -2
  317. package/dist/{index-D0cqaQEH.d.mts → index-CLB80GCP.d.mts} +5 -5
  318. package/dist/{index-D0cqaQEH.d.ts → index-CLB80GCP.d.ts} +5 -5
  319. package/dist/{index-2G9Dxjvt.d.ts → index-CT4K2z-O.d.ts} +2 -2
  320. package/dist/{index-qcOvRVuN.d.mts → index-D6RJTGce.d.mts} +2 -2
  321. package/dist/{storage/index.d.ts → index-DA7L9JlE.d.mts} +26 -3
  322. package/dist/{imageCrop/index.d.mts → index-DXVph21C.d.mts} +40 -4
  323. package/dist/{imageCrop/index.d.ts → index-DXVph21C.d.ts} +40 -4
  324. package/dist/{index-CYuUB8aF.d.mts → index-DzyK789B.d.mts} +2 -2
  325. package/dist/{logger/index.d.mts → index-FVJZCEtm.d.mts} +21 -1
  326. package/dist/{logger/index.d.ts → index-FVJZCEtm.d.ts} +21 -1
  327. package/dist/{storage/index.d.mts → index-nD9vPCZT.d.ts} +26 -3
  328. package/dist/{components/index.d.mts → index-nOmIv2BG.d.mts} +159 -5
  329. package/dist/{components/index.d.ts → index-nOmIv2BG.d.ts} +159 -5
  330. package/dist/{path-qjVnH8qU.d.ts → path-Bzc7hj1N.d.ts} +5 -1
  331. package/dist/{path-DkaHQSyW.d.mts → path-DN_65vhO.d.mts} +5 -1
  332. package/dist/{types-3ujSNAXb.d.mts → utils-Dm3O1rAa.d.mts} +81 -1
  333. package/dist/{types-3ujSNAXb.d.ts → utils-Dm3O1rAa.d.ts} +81 -1
  334. package/package.json +292 -312
  335. package/dist/AliyunOSSProvider-4GRL2FJB.js +0 -15
  336. package/dist/AliyunOSSProvider-QNVFIZ7Q.mjs +0 -6
  337. package/dist/CollisionBalls-BpHufX3H.d.mts +0 -41
  338. package/dist/CollisionBalls-BpHufX3H.d.ts +0 -41
  339. package/dist/ConfigService-BxK06xP6.d.mts +0 -262
  340. package/dist/ConfigService-BxK06xP6.d.ts +0 -262
  341. package/dist/LocalStorageProvider-J5RHV37G.mjs +0 -6
  342. package/dist/LocalStorageProvider-PFA2DMIJ.js +0 -15
  343. package/dist/UniversalFileService-CC4d3wkc.d.ts +0 -139
  344. package/dist/UniversalFileService-CzAE_G4V.d.mts +0 -139
  345. package/dist/ai/llm/electron/index.js +0 -66
  346. package/dist/ai/llm/electron/index.mjs +0 -9
  347. package/dist/ai/llm/ui/electron/index.d.mts +0 -5
  348. package/dist/ai/llm/ui/electron/index.d.ts +0 -5
  349. package/dist/ai/llm/ui/electron/index.js +0 -21
  350. package/dist/ai/llm/ui/electron/index.mjs +0 -8
  351. package/dist/ai/llm/ui/miniapp/index.d.mts +0 -9
  352. package/dist/ai/llm/ui/miniapp/index.d.ts +0 -9
  353. package/dist/ai/llm/ui/miniapp/index.js +0 -14
  354. package/dist/ai/llm/ui/miniapp/index.mjs +0 -5
  355. package/dist/ai/llm/ui/rn/index.d.mts +0 -9
  356. package/dist/ai/llm/ui/rn/index.d.ts +0 -9
  357. package/dist/ai/llm/ui/rn/index.js +0 -14
  358. package/dist/ai/llm/ui/rn/index.mjs +0 -5
  359. package/dist/ai/llm/ui/web/index.js +0 -20
  360. package/dist/ai/llm/ui/web/index.mjs +0 -7
  361. package/dist/ai/llm/web/index.js +0 -65
  362. package/dist/ai/llm/web/index.mjs +0 -8
  363. package/dist/analytics/server/index.js.map +0 -1
  364. package/dist/analytics/server/index.mjs.map +0 -1
  365. package/dist/api/index.js +0 -21
  366. package/dist/api/index.mjs +0 -4
  367. package/dist/audioDetection/index.d.mts +0 -449
  368. package/dist/audioDetection/index.d.ts +0 -449
  369. package/dist/audioDetection/index.js +0 -1244
  370. package/dist/audioDetection/index.js.map +0 -1
  371. package/dist/audioDetection/index.mjs +0 -1227
  372. package/dist/audioDetection/index.mjs.map +0 -1
  373. package/dist/boothVaultService-Cn4WPhjg.d.mts +0 -83
  374. package/dist/boothVaultService-Cn4WPhjg.d.ts +0 -83
  375. package/dist/business/index.d.mts +0 -2
  376. package/dist/business/index.d.ts +0 -2
  377. package/dist/business/index.js +0 -581
  378. package/dist/business/index.js.map +0 -1
  379. package/dist/business/index.mjs +0 -575
  380. package/dist/business/index.mjs.map +0 -1
  381. package/dist/calendar/index.d.mts +0 -1325
  382. package/dist/calendar/index.d.ts +0 -1325
  383. package/dist/calendar/index.js +0 -5964
  384. package/dist/calendar/index.js.map +0 -1
  385. package/dist/calendar/index.mjs +0 -5878
  386. package/dist/calendar/index.mjs.map +0 -1
  387. package/dist/calendar/routes/index.d.mts +0 -191
  388. package/dist/calendar/routes/index.d.ts +0 -191
  389. package/dist/calendar/routes/index.js +0 -844
  390. package/dist/calendar/routes/index.js.map +0 -1
  391. package/dist/calendar/routes/index.mjs +0 -826
  392. package/dist/calendar/routes/index.mjs.map +0 -1
  393. package/dist/chunk-25OFOKNF.js.map +0 -1
  394. package/dist/chunk-2Y7BKFKZ.js +0 -37
  395. package/dist/chunk-3CSCIRQY.js +0 -17
  396. package/dist/chunk-3CSCIRQY.js.map +0 -1
  397. package/dist/chunk-3DXPQ4YV.mjs.map +0 -1
  398. package/dist/chunk-3NHAT7D4.mjs.map +0 -1
  399. package/dist/chunk-4FDUURSD.js +0 -22
  400. package/dist/chunk-4FDUURSD.js.map +0 -1
  401. package/dist/chunk-4OOANEJV.mjs.map +0 -1
  402. package/dist/chunk-4WBCWJSN.js.map +0 -1
  403. package/dist/chunk-5GBDDXYL.mjs +0 -23
  404. package/dist/chunk-5GBDDXYL.mjs.map +0 -1
  405. package/dist/chunk-5USIS3UM.js +0 -4
  406. package/dist/chunk-6PMXAK7F.js.map +0 -1
  407. package/dist/chunk-7B5SI4OF.mjs +0 -15
  408. package/dist/chunk-7B5SI4OF.mjs.map +0 -1
  409. package/dist/chunk-ACUFEDVQ.js.map +0 -1
  410. package/dist/chunk-AQPU2AXH.js.map +0 -1
  411. package/dist/chunk-ATUCZXJY.js.map +0 -1
  412. package/dist/chunk-BCE6RUZV.js.map +0 -1
  413. package/dist/chunk-BIHYZA67.mjs.map +0 -1
  414. package/dist/chunk-C6KV7VTZ.mjs.map +0 -1
  415. package/dist/chunk-CAYOQDBR.js.map +0 -1
  416. package/dist/chunk-CIVO4R6N.mjs.map +0 -1
  417. package/dist/chunk-CX2GHCAI.mjs.map +0 -1
  418. package/dist/chunk-DIF5VRL3.mjs.map +0 -1
  419. package/dist/chunk-EQXPL7TN.mjs.map +0 -1
  420. package/dist/chunk-FCEBAWN6.js +0 -18
  421. package/dist/chunk-FCEBAWN6.js.map +0 -1
  422. package/dist/chunk-FHIE5MTC.mjs +0 -541
  423. package/dist/chunk-FHIE5MTC.mjs.map +0 -1
  424. package/dist/chunk-FHLTPXAR.js +0 -56
  425. package/dist/chunk-FIUBFREP.mjs.map +0 -1
  426. package/dist/chunk-FXQOXLDE.js.map +0 -1
  427. package/dist/chunk-G6HXNQ2U.mjs.map +0 -1
  428. package/dist/chunk-G6NSKJMH.js.map +0 -1
  429. package/dist/chunk-G7UBMCUT.mjs.map +0 -1
  430. package/dist/chunk-GSNGCENJ.js.map +0 -1
  431. package/dist/chunk-GWNBVGDT.mjs.map +0 -1
  432. package/dist/chunk-HDMIOOZY.mjs.map +0 -1
  433. package/dist/chunk-HJ6MH7J7.js.map +0 -1
  434. package/dist/chunk-HJZHQW5R.mjs.map +0 -1
  435. package/dist/chunk-I5ZPEDNR.mjs.map +0 -1
  436. package/dist/chunk-KH6RQ4J5.js.map +0 -1
  437. package/dist/chunk-KQ643L7Z.js.map +0 -1
  438. package/dist/chunk-LFB5EIIM.mjs +0 -31
  439. package/dist/chunk-LFB5EIIM.mjs.map +0 -1
  440. package/dist/chunk-MBANGIG3.mjs.map +0 -1
  441. package/dist/chunk-NCRP2YHY.mjs.map +0 -1
  442. package/dist/chunk-NDGHXVGS.js +0 -25
  443. package/dist/chunk-NDGHXVGS.js.map +0 -1
  444. package/dist/chunk-NDPO5OMC.js +0 -563
  445. package/dist/chunk-NDPO5OMC.js.map +0 -1
  446. package/dist/chunk-PBI7FKMB.js.map +0 -1
  447. package/dist/chunk-Q5EDCKQA.js.map +0 -1
  448. package/dist/chunk-Q5VFBPMG.mjs.map +0 -1
  449. package/dist/chunk-QSKLQX6H.js.map +0 -1
  450. package/dist/chunk-QXAOXBVB.mjs.map +0 -1
  451. package/dist/chunk-R2DXTE2L.js.map +0 -1
  452. package/dist/chunk-RTD2WHQQ.mjs +0 -16
  453. package/dist/chunk-RTD2WHQQ.mjs.map +0 -1
  454. package/dist/chunk-S6YSGVWD.js.map +0 -1
  455. package/dist/chunk-SKFEJPMJ.mjs.map +0 -1
  456. package/dist/chunk-SLKOEYFH.js.map +0 -1
  457. package/dist/chunk-TC5YU6A4.mjs.map +0 -1
  458. package/dist/chunk-UCOE6SET.js.map +0 -1
  459. package/dist/chunk-UIYKZ73N.js +0 -36
  460. package/dist/chunk-UIYKZ73N.js.map +0 -1
  461. package/dist/chunk-V7EVKD5G.mjs.map +0 -1
  462. package/dist/chunk-VMTEDX5H.js.map +0 -1
  463. package/dist/chunk-VRN76M56.mjs +0 -3
  464. package/dist/chunk-VXFUXZN5.mjs +0 -20
  465. package/dist/chunk-VXFUXZN5.mjs.map +0 -1
  466. package/dist/chunk-WEEXCPSE.mjs.map +0 -1
  467. package/dist/chunk-WJ7IMUEJ.mjs.map +0 -1
  468. package/dist/chunk-WW4GE6CZ.js.map +0 -1
  469. package/dist/chunk-XJ7ZAGC5.js.map +0 -1
  470. package/dist/chunk-XUS5ACKR.mjs.map +0 -1
  471. package/dist/chunk-YOTQG4NP.mjs.map +0 -1
  472. package/dist/chunk-ZGVB35L2.mjs.map +0 -1
  473. package/dist/chunk-ZLYPALF3.js.map +0 -1
  474. package/dist/chunk-ZM2SZJTZ.js.map +0 -1
  475. package/dist/chunk-ZRAW3HXA.js.map +0 -1
  476. package/dist/chunk-ZWQJSZEY.js.map +0 -1
  477. package/dist/components/index.js +0 -2516
  478. package/dist/components/index.js.map +0 -1
  479. package/dist/components/index.mjs.map +0 -1
  480. package/dist/config/index.js +0 -21
  481. package/dist/config/index.mjs +0 -4
  482. package/dist/config/server/index.js.map +0 -1
  483. package/dist/config/server/index.mjs.map +0 -1
  484. package/dist/drizzle-schema-BNhqj2AZ.d.mts +0 -1114
  485. package/dist/drizzle-schema-BNhqj2AZ.d.ts +0 -1114
  486. package/dist/festivalCard/index.d.mts +0 -76
  487. package/dist/festivalCard/index.d.ts +0 -76
  488. package/dist/festivalCard/index.js +0 -1492
  489. package/dist/festivalCard/index.js.map +0 -1
  490. package/dist/festivalCard/index.mjs +0 -1475
  491. package/dist/festivalCard/index.mjs.map +0 -1
  492. package/dist/festivalCard/routes/index.d.mts +0 -42
  493. package/dist/festivalCard/routes/index.d.ts +0 -42
  494. package/dist/festivalCard/routes/index.js +0 -361
  495. package/dist/festivalCard/routes/index.js.map +0 -1
  496. package/dist/festivalCard/routes/index.mjs +0 -356
  497. package/dist/festivalCard/routes/index.mjs.map +0 -1
  498. package/dist/festivalCard/server/index.d.mts +0 -120
  499. package/dist/festivalCard/server/index.d.ts +0 -120
  500. package/dist/festivalCard/server/index.js +0 -272
  501. package/dist/festivalCard/server/index.js.map +0 -1
  502. package/dist/festivalCard/server/index.mjs +0 -265
  503. package/dist/festivalCard/server/index.mjs.map +0 -1
  504. package/dist/festivalCardService-B3GsnNpV.d.ts +0 -13
  505. package/dist/festivalCardService-CWhrLNE9.d.mts +0 -13
  506. package/dist/imageCrop/index.js.map +0 -1
  507. package/dist/imageCrop/index.mjs.map +0 -1
  508. package/dist/index-Bjem5rWn.d.mts +0 -17
  509. package/dist/index-C5U-2hJq.d.ts +0 -23
  510. package/dist/index-CifSBBP2.d.ts +0 -17
  511. package/dist/index-D0K4ehme.d.mts +0 -20
  512. package/dist/index-DLnfKN-a.d.mts +0 -23
  513. package/dist/index-DSel44Ke.d.mts +0 -93
  514. package/dist/index-DSel44Ke.d.ts +0 -93
  515. package/dist/index-DZ5iJtNO.d.mts +0 -102
  516. package/dist/index-DZ5iJtNO.d.ts +0 -102
  517. package/dist/index-Da7qdkgW.d.ts +0 -20
  518. package/dist/index-DrPcMJPc.d.mts +0 -250
  519. package/dist/index-DrPcMJPc.d.ts +0 -250
  520. package/dist/index-oLUvfqT8.d.ts +0 -20
  521. package/dist/index-pe38RDgC.d.mts +0 -20
  522. package/dist/index.d.mts +0 -11611
  523. package/dist/index.d.ts +0 -11611
  524. package/dist/index.js +0 -17230
  525. package/dist/index.js.map +0 -1
  526. package/dist/index.mjs +0 -16954
  527. package/dist/index.mjs.map +0 -1
  528. package/dist/logger/index.js +0 -29
  529. package/dist/logger/index.mjs +0 -4
  530. package/dist/mikuContest/ui/web/index.d.mts +0 -2
  531. package/dist/mikuContest/ui/web/index.d.ts +0 -2
  532. package/dist/mikuContest/ui/web/index.js +0 -353
  533. package/dist/mikuContest/ui/web/index.js.map +0 -1
  534. package/dist/mikuContest/ui/web/index.mjs +0 -343
  535. package/dist/mikuContest/ui/web/index.mjs.map +0 -1
  536. package/dist/mikuFireworks3D/index.d.mts +0 -268
  537. package/dist/mikuFireworks3D/index.d.ts +0 -268
  538. package/dist/mikuFireworks3D/index.js +0 -1267
  539. package/dist/mikuFireworks3D/index.js.map +0 -1
  540. package/dist/mikuFireworks3D/index.mjs +0 -1228
  541. package/dist/mikuFireworks3D/index.mjs.map +0 -1
  542. package/dist/mikuFusionGame/index.d.mts +0 -117
  543. package/dist/mikuFusionGame/index.d.ts +0 -117
  544. package/dist/mikuFusionGame/index.js +0 -1208
  545. package/dist/mikuFusionGame/index.js.map +0 -1
  546. package/dist/mikuFusionGame/index.mjs +0 -1195
  547. package/dist/mikuFusionGame/index.mjs.map +0 -1
  548. package/dist/mmd/admin/index.d.mts +0 -487
  549. package/dist/mmd/admin/index.d.ts +0 -487
  550. package/dist/mmd/admin/index.js +0 -1058
  551. package/dist/mmd/admin/index.js.map +0 -1
  552. package/dist/mmd/admin/index.mjs +0 -1027
  553. package/dist/mmd/admin/index.mjs.map +0 -1
  554. package/dist/mmd/index.d.mts +0 -2467
  555. package/dist/mmd/index.d.ts +0 -2467
  556. package/dist/mmd/index.js +0 -10119
  557. package/dist/mmd/index.js.map +0 -1
  558. package/dist/mmd/index.mjs +0 -10028
  559. package/dist/mmd/index.mjs.map +0 -1
  560. package/dist/mmd/server/index.d.mts +0 -139
  561. package/dist/mmd/server/index.d.ts +0 -139
  562. package/dist/mmd/server/index.js +0 -424
  563. package/dist/mmd/server/index.js.map +0 -1
  564. package/dist/mmd/server/index.mjs +0 -404
  565. package/dist/mmd/server/index.mjs.map +0 -1
  566. package/dist/music/index.d.mts +0 -74
  567. package/dist/music/index.d.ts +0 -74
  568. package/dist/music/index.js +0 -830
  569. package/dist/music/index.js.map +0 -1
  570. package/dist/music/index.mjs +0 -809
  571. package/dist/music/index.mjs.map +0 -1
  572. package/dist/music/server/index.d.mts +0 -1
  573. package/dist/music/server/index.d.ts +0 -1
  574. package/dist/music/server/index.js +0 -194
  575. package/dist/music/server/index.js.map +0 -1
  576. package/dist/music/server/index.mjs +0 -182
  577. package/dist/music/server/index.mjs.map +0 -1
  578. package/dist/navigation/index.d.mts +0 -93
  579. package/dist/navigation/index.d.ts +0 -93
  580. package/dist/navigation/index.js +0 -453
  581. package/dist/navigation/index.js.map +0 -1
  582. package/dist/navigation/index.mjs +0 -443
  583. package/dist/navigation/index.mjs.map +0 -1
  584. package/dist/portfolio/index.d.mts +0 -66
  585. package/dist/portfolio/index.d.ts +0 -66
  586. package/dist/portfolio/index.js +0 -736
  587. package/dist/portfolio/index.js.map +0 -1
  588. package/dist/portfolio/index.mjs +0 -724
  589. package/dist/portfolio/index.mjs.map +0 -1
  590. package/dist/qqbot/server/index.d.mts +0 -216
  591. package/dist/qqbot/server/index.d.ts +0 -216
  592. package/dist/qqbot/server/index.js +0 -394
  593. package/dist/qqbot/server/index.js.map +0 -1
  594. package/dist/qqbot/server/index.mjs +0 -385
  595. package/dist/qqbot/server/index.mjs.map +0 -1
  596. package/dist/qqbot/ui/web/index.d.mts +0 -10
  597. package/dist/qqbot/ui/web/index.d.ts +0 -10
  598. package/dist/qqbot/ui/web/index.js +0 -105
  599. package/dist/qqbot/ui/web/index.js.map +0 -1
  600. package/dist/qqbot/ui/web/index.mjs +0 -99
  601. package/dist/qqbot/ui/web/index.mjs.map +0 -1
  602. package/dist/request/index.js +0 -22
  603. package/dist/request/index.mjs +0 -5
  604. package/dist/screenReceiver/index.d.mts +0 -86
  605. package/dist/screenReceiver/index.d.ts +0 -86
  606. package/dist/screenReceiver/index.js +0 -281
  607. package/dist/screenReceiver/index.js.map +0 -1
  608. package/dist/screenReceiver/index.mjs +0 -273
  609. package/dist/screenReceiver/index.mjs.map +0 -1
  610. package/dist/storage/index.js +0 -48
  611. package/dist/storage/index.mjs +0 -7
  612. package/dist/testYourself/admin/index.d.mts +0 -58
  613. package/dist/testYourself/admin/index.d.ts +0 -58
  614. package/dist/testYourself/admin/index.js +0 -1009
  615. package/dist/testYourself/admin/index.js.map +0 -1
  616. package/dist/testYourself/admin/index.mjs +0 -1002
  617. package/dist/testYourself/admin/index.mjs.map +0 -1
  618. package/dist/testYourself/index.d.mts +0 -53
  619. package/dist/testYourself/index.d.ts +0 -53
  620. package/dist/testYourself/index.js +0 -2551
  621. package/dist/testYourself/index.js.map +0 -1
  622. package/dist/testYourself/index.mjs +0 -2531
  623. package/dist/testYourself/index.mjs.map +0 -1
  624. package/dist/testYourself/server/index.d.mts +0 -1029
  625. package/dist/testYourself/server/index.d.ts +0 -1029
  626. package/dist/testYourself/server/index.js +0 -825
  627. package/dist/testYourself/server/index.js.map +0 -1
  628. package/dist/testYourself/server/index.mjs +0 -816
  629. package/dist/testYourself/server/index.mjs.map +0 -1
  630. package/dist/types-B6B210gX.d.mts +0 -270
  631. package/dist/types-B6B210gX.d.ts +0 -270
  632. package/dist/types-Bdnte5EN.d.mts +0 -292
  633. package/dist/types-Cs0CLvrH.d.mts +0 -70
  634. package/dist/types-Cs0CLvrH.d.ts +0 -70
  635. package/dist/types-HorDyIRv.d.mts +0 -303
  636. package/dist/types-HorDyIRv.d.ts +0 -303
  637. package/dist/types-_rFX1atk.d.ts +0 -292
  638. package/dist/universalExport/index.mjs +0 -5
  639. package/dist/universalExport/server/index.js +0 -123
  640. package/dist/universalExport/server/index.mjs +0 -6
  641. package/dist/universalFile/index.js.map +0 -1
  642. package/dist/universalFile/index.mjs.map +0 -1
  643. package/dist/universalFile/server/index.js.map +0 -1
  644. package/dist/universalFile/server/index.mjs.map +0 -1
  645. package/dist/utils/index.js +0 -46
  646. package/dist/utils/index.js.map +0 -1
  647. package/dist/utils/index.mjs +0 -5
  648. package/dist/utils/index.mjs.map +0 -1
  649. package/dist/vocaloidBooth/index.d.mts +0 -64
  650. package/dist/vocaloidBooth/index.d.ts +0 -64
  651. package/dist/vocaloidBooth/index.js +0 -376
  652. package/dist/vocaloidBooth/index.js.map +0 -1
  653. package/dist/vocaloidBooth/index.mjs +0 -362
  654. package/dist/vocaloidBooth/index.mjs.map +0 -1
  655. package/dist/vocaloidBooth/server/index.d.mts +0 -111
  656. package/dist/vocaloidBooth/server/index.d.ts +0 -111
  657. package/dist/vocaloidBooth/server/index.js +0 -247
  658. package/dist/vocaloidBooth/server/index.js.map +0 -1
  659. package/dist/vocaloidBooth/server/index.mjs +0 -237
  660. package/dist/vocaloidBooth/server/index.mjs.map +0 -1
  661. package/dist/vocaloidBooth/web/index.d.mts +0 -3
  662. package/dist/vocaloidBooth/web/index.d.ts +0 -3
  663. package/dist/vocaloidBooth/web/index.js +0 -376
  664. package/dist/vocaloidBooth/web/index.js.map +0 -1
  665. package/dist/vocaloidBooth/web/index.mjs +0 -362
  666. package/dist/vocaloidBooth/web/index.mjs.map +0 -1
  667. /package/dist/{ai → common/ai}/llm/core/index.js.map +0 -0
  668. /package/dist/{ai → common/ai}/llm/core/index.mjs.map +0 -0
  669. /package/dist/{ai → common/ai}/llm/electron/index.js.map +0 -0
  670. /package/dist/{ai → common/ai}/llm/electron/index.mjs.map +0 -0
  671. /package/dist/{ai → common/ai}/llm/index.js.map +0 -0
  672. /package/dist/{ai → common/ai}/llm/index.mjs.map +0 -0
  673. /package/dist/{ai → common/ai}/llm/miniapp/index.js.map +0 -0
  674. /package/dist/{ai → common/ai}/llm/miniapp/index.mjs.map +0 -0
  675. /package/dist/{ai → common/ai}/llm/rn/index.js.map +0 -0
  676. /package/dist/{ai → common/ai}/llm/rn/index.mjs.map +0 -0
  677. /package/dist/{ai → common/ai}/llm/ui/electron/index.js.map +0 -0
  678. /package/dist/{ai → common/ai}/llm/ui/electron/index.mjs.map +0 -0
  679. /package/dist/{ai → common/ai}/llm/ui/miniapp/index.js.map +0 -0
  680. /package/dist/{ai → common/ai}/llm/ui/miniapp/index.mjs.map +0 -0
  681. /package/dist/{ai → common/ai}/llm/ui/rn/index.js.map +0 -0
  682. /package/dist/{ai → common/ai}/llm/ui/rn/index.mjs.map +0 -0
  683. /package/dist/{ai → common/ai}/llm/ui/web/index.js.map +0 -0
  684. /package/dist/{ai → common/ai}/llm/ui/web/index.mjs.map +0 -0
  685. /package/dist/{ai → common/ai}/llm/web/index.js.map +0 -0
  686. /package/dist/{ai → common/ai}/llm/web/index.mjs.map +0 -0
  687. /package/dist/{analytics → common/analytics}/index.js.map +0 -0
  688. /package/dist/{analytics → common/analytics}/index.mjs.map +0 -0
  689. /package/dist/{analytics → common/analytics}/server/index.d.mts +0 -0
  690. /package/dist/{analytics → common/analytics}/server/index.d.ts +0 -0
  691. /package/dist/{api → common/api}/index.js.map +0 -0
  692. /package/dist/{api → common/api}/index.mjs.map +0 -0
  693. /package/dist/{config → common/components}/index.js.map +0 -0
  694. /package/dist/{config → common/components}/index.mjs.map +0 -0
  695. /package/dist/{i18n → common/config}/index.js.map +0 -0
  696. /package/dist/{i18n → common/config}/index.mjs.map +0 -0
  697. /package/dist/{config → common/config}/server/index.d.mts +0 -0
  698. /package/dist/{config → common/config}/server/index.d.ts +0 -0
  699. /package/dist/{logger → common/i18n}/index.js.map +0 -0
  700. /package/dist/{logger → common/i18n}/index.mjs.map +0 -0
  701. /package/dist/{ossFile → common/imageCrop}/index.js.map +0 -0
  702. /package/dist/{ossFile → common/imageCrop}/index.mjs.map +0 -0
  703. /package/dist/{ossFile/server → common/ossFile}/index.js.map +0 -0
  704. /package/dist/{ossFile/server → common/ossFile}/index.mjs.map +0 -0
  705. /package/dist/{request → common/ossFile/server}/index.js.map +0 -0
  706. /package/dist/{request → common/ossFile/server}/index.mjs.map +0 -0
  707. /package/dist/{storage → common/universalExport}/index.js.map +0 -0
  708. /package/dist/{storage → common/universalExport}/index.mjs.map +0 -0
  709. /package/dist/{universalExport → common/universalExport/server}/index.js.map +0 -0
  710. /package/dist/{universalExport → common/universalExport/server}/index.mjs.map +0 -0
  711. /package/dist/{universalExport → common/universalFile}/server/index.js.map +0 -0
  712. /package/dist/{universalExport → common/universalFile}/server/index.mjs.map +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/testYourself/server/ConfigService.ts","../../src/testYourself/utils/fingerprint.ts","../../src/testYourself/data/defaultResults.ts","../../src/testYourself/components/TestYourself.tsx","../../src/testYourself/admin/ConfigManager.tsx","../../src/testYourself/admin/ConfigList.tsx","../../src/testYourself/server/index.ts","../../src/testYourself/server/drizzle-schema.ts","../../src/testYourself/server/DatabaseConfigAdapter.ts"],"names":["ConfigService","index","useState","useEffect","getDefaultConfigService","useRef","React","useCallback","text","Star","Edit","Copy","Download","Trash2","ImageIcon","X","Plus","Save","clsx","AlertCircle","CheckCircle2","UploadIcon","RefreshCw","ExternalLink","pgTable","uuid","varchar","json","integer","boolean","timestamp","eq","sql","and","or","desc"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * 测测你是什么 - 配置管理服务\n * Test Yourself - Configuration Management Service\n * \n * 服务端逻辑:配置的增删改查\n */\n\nimport type { SavedConfig, TestConfig, ConfigListItem } from '../types';\n\nexport interface ConfigServiceOptions {\n /** 存储类型 */\n storageType?: 'localStorage' | 'memory' | 'custom';\n /** 自定义存储适配器 */\n customStorage?: IConfigStorage;\n /** 是否启用缓存 */\n enableCache?: boolean;\n}\n\n/**\n * 配置存储适配器接口\n */\nexport interface IConfigStorage {\n /** 保存配置 */\n saveConfig(config: SavedConfig): Promise<void>;\n /** 获取配置 */\n getConfig(id: string): Promise<SavedConfig | null>;\n /** 获取所有配置列表 */\n getAllConfigs(): Promise<SavedConfig[]>;\n /** 删除配置 */\n deleteConfig(id: string): Promise<void>;\n /** 更新配置 */\n updateConfig(id: string, config: SavedConfig): Promise<void>;\n /** 设置默认配置 */\n setDefaultConfig(id: string): Promise<void>;\n /** 获取默认配置 */\n getDefaultConfig(): Promise<SavedConfig | null>;\n}\n\n/**\n * LocalStorage 存储适配器\n */\nclass LocalStorageAdapter implements IConfigStorage {\n private readonly STORAGE_KEY = 'test-yourself-configs';\n private readonly DEFAULT_KEY = 'test-yourself-default-config';\n\n private async getAllConfigsData(): Promise<SavedConfig[]> {\n if (typeof window === 'undefined') return [];\n \n try {\n const data = localStorage.getItem(this.STORAGE_KEY);\n return data ? JSON.parse(data) : [];\n } catch (error) {\n console.error('读取配置失败:', error);\n return [];\n }\n }\n\n private async saveAllConfigsData(configs: SavedConfig[]): Promise<void> {\n if (typeof window === 'undefined') return;\n \n try {\n localStorage.setItem(this.STORAGE_KEY, JSON.stringify(configs));\n } catch (error) {\n console.error('保存配置失败:', error);\n throw error;\n }\n }\n\n async saveConfig(config: SavedConfig): Promise<void> {\n const configs = await this.getAllConfigsData();\n const existingIndex = configs.findIndex(c => c.id === config.id);\n \n if (existingIndex >= 0) {\n configs[existingIndex] = config;\n } else {\n configs.push(config);\n }\n \n await this.saveAllConfigsData(configs);\n }\n\n async getConfig(id: string): Promise<SavedConfig | null> {\n const configs = await this.getAllConfigsData();\n return configs.find(c => c.id === id) || null;\n }\n\n async getAllConfigs(): Promise<SavedConfig[]> {\n return this.getAllConfigsData();\n }\n\n async deleteConfig(id: string): Promise<void> {\n const configs = await this.getAllConfigsData();\n const filtered = configs.filter(c => c.id !== id);\n await this.saveAllConfigsData(filtered);\n }\n\n async updateConfig(id: string, config: SavedConfig): Promise<void> {\n const configs = await this.getAllConfigsData();\n const index = configs.findIndex(c => c.id === id);\n \n if (index >= 0) {\n configs[index] = { ...config, updatedAt: Date.now() };\n await this.saveAllConfigsData(configs);\n } else {\n throw new Error('配置不存在: ' + (id));\n }\n }\n\n async setDefaultConfig(id: string): Promise<void> {\n if (typeof window === 'undefined') return;\n \n const config = await this.getConfig(id);\n if (!config) {\n throw new Error('配置不存在: ' + (id));\n }\n \n // 清除其他配置的默认标记\n const configs = await this.getAllConfigsData();\n configs.forEach(c => c.isDefault = c.id === id);\n await this.saveAllConfigsData(configs);\n \n // 保存默认配置ID\n localStorage.setItem(this.DEFAULT_KEY, id);\n }\n\n async getDefaultConfig(): Promise<SavedConfig | null> {\n if (typeof window === 'undefined') return null;\n \n try {\n const defaultId = localStorage.getItem(this.DEFAULT_KEY);\n if (defaultId) {\n return await this.getConfig(defaultId);\n }\n \n // 如果没有设置默认配置,返回第一个标记为默认的配置\n const configs = await this.getAllConfigsData();\n return configs.find(c => c.isDefault) || null;\n } catch (error) {\n console.error('获取默认配置失败:', error);\n return null;\n }\n }\n}\n\n/**\n * 内存存储适配器(用于测试或SSR)\n */\nclass MemoryStorageAdapter implements IConfigStorage {\n private configs: Map<string, SavedConfig> = new Map();\n private defaultConfigId: string | null = null;\n\n async saveConfig(config: SavedConfig): Promise<void> {\n this.configs.set(config.id, config);\n }\n\n async getConfig(id: string): Promise<SavedConfig | null> {\n return this.configs.get(id) || null;\n }\n\n async getAllConfigs(): Promise<SavedConfig[]> {\n return Array.from(this.configs.values());\n }\n\n async deleteConfig(id: string): Promise<void> {\n this.configs.delete(id);\n if (this.defaultConfigId === id) {\n this.defaultConfigId = null;\n }\n }\n\n async updateConfig(id: string, config: SavedConfig): Promise<void> {\n if (!this.configs.has(id)) {\n throw new Error('配置不存在: ' + (id));\n }\n this.configs.set(id, { ...config, updatedAt: Date.now() });\n }\n\n async setDefaultConfig(id: string): Promise<void> {\n if (!this.configs.has(id)) {\n throw new Error('配置不存在: ' + (id));\n }\n \n // 清除其他配置的默认标记\n this.configs.forEach(c => c.isDefault = c.id === id);\n this.defaultConfigId = id;\n }\n\n async getDefaultConfig(): Promise<SavedConfig | null> {\n if (this.defaultConfigId) {\n return this.configs.get(this.defaultConfigId) || null;\n }\n \n // 返回第一个标记为默认的配置\n for (const config of this.configs.values()) {\n if (config.isDefault) {\n return config;\n }\n }\n \n return null;\n }\n}\n\n/**\n * 配置管理服务\n */\nexport class ConfigService {\n private storage: IConfigStorage;\n private cache: Map<string, SavedConfig> = new Map();\n private enableCache: boolean;\n\n constructor(options: ConfigServiceOptions = {}) {\n const {\n storageType = 'localStorage',\n customStorage,\n enableCache = true,\n } = options;\n\n this.enableCache = enableCache;\n\n if (customStorage) {\n this.storage = customStorage;\n } else if (storageType === 'memory') {\n this.storage = new MemoryStorageAdapter();\n } else {\n this.storage = new LocalStorageAdapter();\n }\n }\n\n /**\n * 初始化服务(如果需要)\n */\n async init(): Promise<void> {\n // 基础类不需要初始化,但子类或适配器可能需要\n }\n\n /**\n * 生成唯一ID\n */\n private generateId(): string {\n return 'config_' + (Date.now()) + '_' + (Math.random().toString(36).substring(2, 9));\n }\n\n /**\n * 保存配置\n */\n async saveConfig(config: SavedConfig): Promise<void> {\n await this.storage.saveConfig(config);\n\n if (config.isDefault) {\n await this.storage.setDefaultConfig(config.id);\n }\n\n if (this.enableCache) {\n this.cache.set(config.id, config);\n }\n }\n\n /**\n * 创建新配置\n */\n async createConfig(\n name: string,\n config: TestConfig,\n description?: string,\n isDefault = false\n ): Promise<SavedConfig> {\n const savedConfig: SavedConfig = {\n id: this.generateId(),\n name,\n description,\n config,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n isDefault,\n };\n\n await this.storage.saveConfig(savedConfig);\n\n if (isDefault) {\n await this.storage.setDefaultConfig(savedConfig.id);\n }\n\n if (this.enableCache) {\n this.cache.set(savedConfig.id, savedConfig);\n }\n\n return savedConfig;\n }\n\n /**\n * 获取配置\n */\n async getConfig(id: string): Promise<SavedConfig | null> {\n // 先查缓存\n if (this.enableCache && this.cache.has(id)) {\n return this.cache.get(id)!;\n }\n\n const config = await this.storage.getConfig(id);\n\n if (config && this.enableCache) {\n this.cache.set(id, config);\n }\n\n return config;\n }\n\n /**\n * 获取所有配置列表\n */\n async getAllConfigs(): Promise<SavedConfig[]> {\n return await this.storage.getAllConfigs();\n }\n\n /**\n * 获取配置列表(精简版)\n */\n async getConfigList(): Promise<ConfigListItem[]> {\n const configs = await this.getAllConfigs();\n return configs.map(c => ({\n id: c.id,\n name: c.name,\n description: c.description,\n resultCount: c.config.results.length,\n createdAt: c.createdAt,\n updatedAt: c.updatedAt,\n isDefault: c.isDefault,\n }));\n }\n\n /**\n * 更新配置\n */\n async updateConfig(\n id: string,\n updates: {\n name?: string;\n description?: string;\n config?: TestConfig;\n isDefault?: boolean;\n }\n ): Promise<SavedConfig> {\n const existing = await this.getConfig(id);\n if (!existing) {\n throw new Error('配置不存在: ' + (id));\n }\n\n const updated: SavedConfig = {\n ...existing,\n ...updates,\n updatedAt: Date.now(),\n };\n\n await this.storage.updateConfig(id, updated);\n\n if (updates.isDefault) {\n await this.storage.setDefaultConfig(id);\n }\n\n if (this.enableCache) {\n this.cache.set(id, updated);\n }\n\n return updated;\n }\n\n /**\n * 删除配置\n */\n async deleteConfig(id: string): Promise<void> {\n await this.storage.deleteConfig(id);\n\n if (this.enableCache) {\n this.cache.delete(id);\n }\n }\n\n /**\n * 设置默认配置\n */\n async setDefaultConfig(id: string): Promise<void> {\n await this.storage.setDefaultConfig(id);\n\n // 清理缓存,让下次获取时重新加载\n if (this.enableCache) {\n this.cache.clear();\n }\n }\n\n /**\n * 获取默认配置\n */\n async getDefaultConfig(): Promise<SavedConfig | null> {\n return await this.storage.getDefaultConfig();\n }\n\n /**\n * 清空缓存\n */\n clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * 导出配置(JSON格式)\n */\n async exportConfig(id: string): Promise<string> {\n const config = await this.getConfig(id);\n if (!config) {\n throw new Error('配置不存在: ' + (id));\n }\n return JSON.stringify(config, null, 2);\n }\n\n /**\n * 导入配置\n */\n async importConfig(jsonString: string): Promise<SavedConfig> {\n try {\n const data = JSON.parse(jsonString) as SavedConfig;\n \n // 生成新ID,避免冲突\n const newConfig: SavedConfig = {\n ...data,\n id: this.generateId(),\n createdAt: Date.now(),\n updatedAt: Date.now(),\n isDefault: false, // 导入的配置不设为默认\n };\n\n await this.storage.saveConfig(newConfig);\n\n if (this.enableCache) {\n this.cache.set(newConfig.id, newConfig);\n }\n\n return newConfig;\n } catch (error) {\n throw new Error('导入配置失败: ' + (error));\n }\n }\n\n /**\n * 复制配置\n */\n async duplicateConfig(id: string, newName?: string): Promise<SavedConfig> {\n const original = await this.getConfig(id);\n if (!original) {\n throw new Error('配置不存在: ' + (id));\n }\n\n const duplicated: SavedConfig = {\n ...original,\n id: this.generateId(),\n name: newName || (original.name) + ' (副本)',\n createdAt: Date.now(),\n updatedAt: Date.now(),\n isDefault: false,\n };\n\n await this.storage.saveConfig(duplicated);\n\n if (this.enableCache) {\n this.cache.set(duplicated.id, duplicated);\n }\n\n return duplicated;\n }\n\n /**\n * 批量删除配置\n */\n async deleteConfigs(ids: string[]): Promise<void> {\n for (const id of ids) {\n await this.deleteConfig(id);\n }\n }\n}\n\n/**\n * 创建默认配置服务实例\n */\nexport function createConfigService(options?: ConfigServiceOptions): ConfigService {\n return new ConfigService(options);\n}\n\n/**\n * 默认配置服务实例(单例)\n */\nlet defaultServiceInstance: ConfigService | null = null;\n\nexport function getDefaultConfigService(): ConfigService {\n if (!defaultServiceInstance) {\n defaultServiceInstance = createConfigService();\n }\n return defaultServiceInstance;\n}\n\n\n","/**\n * 设备指纹生成工具\n * Device Fingerprint Generator\n */\n\nimport type { DeviceFingerprint } from '../types';\n\n/**\n * 生成Canvas指纹\n */\nfunction getCanvasFingerprint(): string {\n try {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) return 'no-canvas';\n\n canvas.width = 200;\n canvas.height = 50;\n\n // 绘制文字\n ctx.textBaseline = 'top';\n ctx.font = '14px Arial';\n ctx.fillStyle = '#f60';\n ctx.fillRect(0, 0, 200, 50);\n ctx.fillStyle = '#069';\n ctx.fillText('Canvas Fingerprint 🎨', 2, 15);\n\n // 转换为数据URL\n return canvas.toDataURL();\n } catch (error) {\n return 'canvas-error';\n }\n}\n\n/**\n * 生成WebGL指纹\n */\nfunction getWebGLFingerprint(): string {\n try {\n const canvas = document.createElement('canvas');\n const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n if (!gl) return 'no-webgl';\n\n const glContext = gl as WebGLRenderingContext;\n const debugInfo = glContext.getExtension('WEBGL_debug_renderer_info');\n \n if (debugInfo) {\n const vendor = glContext.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);\n const renderer = glContext.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);\n return (vendor) + '~' + (renderer);\n }\n\n return 'webgl-no-debug';\n } catch (error) {\n return 'webgl-error';\n }\n}\n\n/**\n * 检测可用字体\n */\nfunction getAvailableFonts(): string {\n const testFonts = [\n 'Arial', 'Verdana', 'Courier New', 'Georgia', 'Times New Roman',\n 'Comic Sans MS', 'Trebuchet MS', 'Arial Black', 'Impact',\n 'Courier', 'Helvetica', 'Monaco', 'Consolas', 'Menlo'\n ];\n \n const availableFonts: string[] = [];\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n \n if (!ctx) return 'no-fonts';\n\n const baseFonts = ['monospace', 'sans-serif', 'serif'];\n const testString = 'mmmmmmmmmmlli';\n const baseWidths: { [key: string]: number } = {};\n\n // 获取基础字体宽度\n baseFonts.forEach(font => {\n ctx.font = '72px ' + (font);\n baseWidths[font] = ctx.measureText(testString).width;\n });\n\n // 测试每个字体\n testFonts.forEach(font => {\n let detected = false;\n baseFonts.forEach(baseFont => {\n ctx.font = '72px ' + (font) + ', ' + (baseFont);\n const width = ctx.measureText(testString).width;\n if (width !== baseWidths[baseFont]) {\n detected = true;\n }\n });\n if (detected) {\n availableFonts.push(font);\n }\n });\n\n return availableFonts.join(',') || 'no-custom-fonts';\n}\n\n/**\n * 获取设备指纹信息(增强版)\n */\nexport function getDeviceFingerprint(): DeviceFingerprint {\n const fingerprint: DeviceFingerprint = {\n // 基础信息\n userAgent: navigator.userAgent,\n screenResolution: (window.screen.width) + 'x' + (window.screen.height),\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n language: navigator.language,\n platform: navigator.platform,\n\n // 显示信息\n colorDepth: window.screen.colorDepth,\n devicePixelRatio: window.devicePixelRatio,\n\n // 硬件信息\n hardwareConcurrency: navigator.hardwareConcurrency || 0,\n maxTouchPoints: navigator.maxTouchPoints || 0,\n\n // Canvas和WebGL指纹\n canvasFingerprint: getCanvasFingerprint(),\n webglFingerprint: getWebGLFingerprint(),\n\n // 字体检测\n fonts: getAvailableFonts(),\n\n // 浏览器能力\n cookieEnabled: navigator.cookieEnabled,\n localStorageEnabled: (() => {\n try {\n return typeof localStorage !== 'undefined';\n } catch {\n return false;\n }\n })(),\n sessionStorageEnabled: (() => {\n try {\n return typeof sessionStorage !== 'undefined';\n } catch {\n return false;\n }\n })(),\n indexedDBEnabled: (() => {\n try {\n return typeof indexedDB !== 'undefined';\n } catch {\n return false;\n }\n })(),\n };\n\n return fingerprint;\n}\n\n/**\n * 尝试获取IP地址\n * 注意:由于浏览器安全限制,直接获取IP地址需要外部API\n */\nexport async function tryGetIPAddress(): Promise<string | null> {\n try {\n // 尝试使用公共API获取IP\n // 注意:这需要CORS支持,实际使用时可能需要配置\n const response = await fetch('https://api.ipify.org?format=json', {\n method: 'GET',\n mode: 'cors',\n });\n \n if (response.ok) {\n const data = await response.json();\n return data.ip || null;\n }\n } catch (error) {\n console.warn('无法获取IP地址:', error);\n }\n \n return null;\n}\n\n/**\n * 简单的哈希函数 (DJB2算法)\n */\nfunction simpleHash(str: string): number {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) + hash) + str.charCodeAt(i);\n }\n return Math.abs(hash);\n}\n\n/**\n * 生成设备唯一标识\n * @param fingerprint 设备指纹\n * @param salt 盐值\n * @returns 唯一标识哈希值\n */\nexport function generateDeviceHash(\n fingerprint: DeviceFingerprint,\n salt: string = 'test-yourself-salt-2024'\n): string {\n // 组合所有指纹信息(包含新增的特征)\n const components = [\n // 基础信息\n fingerprint.userAgent,\n fingerprint.ip || 'no-ip',\n fingerprint.screenResolution,\n fingerprint.timezone,\n fingerprint.language,\n fingerprint.platform,\n \n // 显示信息\n fingerprint.colorDepth?.toString() || '0',\n fingerprint.devicePixelRatio?.toString() || '0',\n \n // 硬件信息\n fingerprint.hardwareConcurrency?.toString() || '0',\n fingerprint.maxTouchPoints?.toString() || '0',\n \n // Canvas和WebGL指纹(这些是最独特的)\n fingerprint.canvasFingerprint || 'no-canvas',\n fingerprint.webglFingerprint || 'no-webgl',\n \n // 字体(不同设备安装的字体不同)\n fingerprint.fonts || 'no-fonts',\n \n // 浏览器能力\n fingerprint.cookieEnabled ? '1' : '0',\n fingerprint.localStorageEnabled ? '1' : '0',\n fingerprint.sessionStorageEnabled ? '1' : '0',\n fingerprint.indexedDBEnabled ? '1' : '0',\n \n // 盐值\n salt,\n ];\n\n // 拼接并生成哈希\n const combined = components.join('|');\n const hash = simpleHash(combined);\n \n return hash.toString(36); // 转换为36进制字符串\n}\n\n/**\n * 根据哈希值选择结果索引\n * @param hash 设备哈希值\n * @param totalResults 总结果数\n * @returns 结果索引 (0 到 totalResults-1)\n */\nexport function selectResultIndex(hash: string, totalResults: number): number {\n const numHash = parseInt(hash, 36);\n return numHash % totalResults;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * 默认测试结果数据\n * Default Test Results Data\n * \n * 包含45个预设结果\n */\n\nimport type { TestResult } from '../types';\n\nexport const DEFAULT_RESULTS: TestResult[] = [\n // 动物系列 (1-15)\n {\n id: 'animal-cat',\n title: '慵懒的猫咪 🐱',\n description: '你就像一只优雅的猫,独立自主,喜欢按照自己的节奏生活。有时高冷,有时粘人,充满神秘魅力。',\n image: '🐱',\n imageType: 'emoji',\n },\n {\n id: 'animal-dog',\n title: '忠诚的狗狗 🐕',\n description: '你像一只热情的狗狗,对朋友忠诚,充满活力。总是能给周围的人带来欢乐和温暖。',\n image: '🐕',\n imageType: 'emoji',\n },\n {\n id: 'animal-panda',\n title: '可爱的熊猫 🐼',\n description: '你就像国宝熊猫一样,呆萌可爱,人见人爱。慢节奏的生活方式让你充满治愈力。',\n image: '🐼',\n imageType: 'emoji',\n },\n {\n id: 'animal-fox',\n title: '机智的狐狸 🦊',\n description: '聪明伶俐,反应敏捷。你总能用智慧解决问题,是团队中的智囊担当。',\n image: '🦊',\n imageType: 'emoji',\n },\n {\n id: 'animal-owl',\n title: '睿智的猫头鹰 🦉',\n description: '你像猫头鹰一样充满智慧,喜欢在夜深人静时思考。理性、沉稳是你的标签。',\n image: '🦉',\n imageType: 'emoji',\n },\n {\n id: 'animal-dolphin',\n title: '快乐的海豚 🐬',\n description: '活泼开朗,社交达人。你的笑容能够感染身边的每一个人。',\n image: '🐬',\n imageType: 'emoji',\n },\n {\n id: 'animal-butterfly',\n title: '自由的蝴蝶 🦋',\n description: '追求自由,热爱美好事物。你的人生充满色彩,从不被束缚。',\n image: '🦋',\n imageType: 'emoji',\n },\n {\n id: 'animal-lion',\n title: '勇敢的狮子 🦁',\n description: '天生的领导者,勇敢果断。你的气场强大,总能激励他人。',\n image: '🦁',\n imageType: 'emoji',\n },\n {\n id: 'animal-rabbit',\n title: '温柔的兔子 🐰',\n description: '心地善良,温柔体贴。你的存在就像春天的微风,让人感到温暖。',\n image: '🐰',\n imageType: 'emoji',\n },\n {\n id: 'animal-penguin',\n title: '呆萌的企鹅 🐧',\n description: '憨态可掬,认真执着。虽然看起来笨拙,但做事一丝不苟。',\n image: '🐧',\n imageType: 'emoji',\n },\n {\n id: 'animal-eagle',\n title: '翱翔的雄鹰 🦅',\n description: '目光远大,志向高远。你总是能看到别人看不到的机会。',\n image: '🦅',\n imageType: 'emoji',\n },\n {\n id: 'animal-koala',\n title: '慵懒的考拉 🐨',\n description: '佛系生活,知足常乐。你懂得享受当下,活在自己的节奏里。',\n image: '🐨',\n imageType: 'emoji',\n },\n {\n id: 'animal-sloth',\n title: '悠闲的树懒 🦥',\n description: '慢慢来,比较快。你相信急不来的事就不要急,保持自己的pace。',\n image: '🦥',\n imageType: 'emoji',\n },\n {\n id: 'animal-unicorn',\n title: '梦幻的独角兽 🦄',\n description: '充满幻想,追求完美。你的世界五彩斑斓,总有独特的想法。',\n image: '🦄',\n imageType: 'emoji',\n },\n {\n id: 'animal-dragon',\n title: '神秘的龙 🐉',\n description: '强大而神秘,充满魅力。你是传说中的存在,令人向往。',\n image: '🐉',\n imageType: 'emoji',\n },\n\n // 星球系列 (16-25)\n {\n id: 'planet-sun',\n title: '温暖的太阳 ☀️',\n description: '你就像太阳一样,是团队的能量来源,温暖着周围的每个人。',\n image: '☀️',\n imageType: 'emoji',\n },\n {\n id: 'planet-moon',\n title: '温柔的月亮 🌙',\n description: '安静而温柔,在黑暗中给人光明。你是夜晚最美的陪伴。',\n image: '🌙',\n imageType: 'emoji',\n },\n {\n id: 'planet-star',\n title: '闪耀的星星 ⭐',\n description: '虽然渺小,但始终闪耀。你用自己的方式发光发热。',\n image: '⭐',\n imageType: 'emoji',\n },\n {\n id: 'planet-earth',\n title: '包容的地球 🌍',\n description: '包容万物,生机勃勃。你有着宽广的胸怀和无限的可能。',\n image: '🌍',\n imageType: 'emoji',\n },\n {\n id: 'planet-saturn',\n title: '独特的土星 🪐',\n description: '与众不同,自成一格。你的个性就像土星环一样令人着迷。',\n image: '🪐',\n imageType: 'emoji',\n },\n {\n id: 'weather-rainbow',\n title: '绚丽的彩虹 🌈',\n description: '风雨过后见彩虹,你总能在困难后看到希望和美好。',\n image: '🌈',\n imageType: 'emoji',\n },\n {\n id: 'weather-cloud',\n title: '飘逸的云朵 ☁️',\n description: '自由自在,随风飘荡。你不被定义,永远充满可能。',\n image: '☁️',\n imageType: 'emoji',\n },\n {\n id: 'weather-lightning',\n title: '闪电 ⚡',\n description: '爆发力强,行动迅速。你的能量就像闪电一样令人震撼。',\n image: '⚡',\n imageType: 'emoji',\n },\n {\n id: 'weather-snowflake',\n title: '独特的雪花 ❄️',\n description: '世界上没有两片相同的雪花,你也是独一无二的存在。',\n image: '❄️',\n imageType: 'emoji',\n },\n {\n id: 'weather-fire',\n title: '热情的火焰 🔥',\n description: '热情似火,充满激情。你的存在能点燃周围的气氛。',\n image: '🔥',\n imageType: 'emoji',\n },\n\n // 植物系列 (26-35)\n {\n id: 'plant-tree',\n title: '坚韧的大树 🌳',\n description: '稳重可靠,根基深厚。你是大家可以依靠的存在。',\n image: '🌳',\n imageType: 'emoji',\n },\n {\n id: 'plant-flower',\n title: '美丽的花朵 🌸',\n description: '绽放自我,美丽动人。你的存在就是一道靓丽的风景。',\n image: '🌸',\n imageType: 'emoji',\n },\n {\n id: 'plant-sunflower',\n title: '向阳的向日葵 🌻',\n description: '永远向着阳光,积极向上。你的乐观感染着每个人。',\n image: '🌻',\n imageType: 'emoji',\n },\n {\n id: 'plant-rose',\n title: '优雅的玫瑰 🌹',\n description: '高贵优雅,充满魅力。虽有刺但更有美丽。',\n image: '🌹',\n imageType: 'emoji',\n },\n {\n id: 'plant-cactus',\n title: '坚强的仙人掌 🌵',\n description: '在艰难环境中依然坚强。你的韧性令人敬佩。',\n image: '🌵',\n imageType: 'emoji',\n },\n {\n id: 'plant-clover',\n title: '幸运的四叶草 🍀',\n description: '幸运的象征,总能给人带来好运和希望。',\n image: '🍀',\n imageType: 'emoji',\n },\n {\n id: 'plant-maple',\n title: '浪漫的枫叶 🍁',\n description: '浪漫而诗意,你的世界充满艺术气息。',\n image: '🍁',\n imageType: 'emoji',\n },\n {\n id: 'plant-mushroom',\n title: '神秘的蘑菇 🍄',\n description: '低调神秘,总有意想不到的惊喜。',\n image: '🍄',\n imageType: 'emoji',\n },\n {\n id: 'plant-cherry',\n title: '浪漫的樱花 🌸',\n description: '短暂而美好,你珍惜每一个瞬间的美丽。',\n image: '🌸',\n imageType: 'emoji',\n },\n {\n id: 'plant-bamboo',\n title: '坚韧的竹子 🎋',\n description: '虚心有节,愈挫愈勇。你的精神值得学习。',\n image: '🎋',\n imageType: 'emoji',\n },\n\n // 食物系列 (36-45)\n {\n id: 'food-coffee',\n title: '提神的咖啡 ☕',\n description: '你就像咖啡,是大家的能量来源,帮助他人保持活力。',\n image: '☕',\n imageType: 'emoji',\n },\n {\n id: 'food-pizza',\n title: '快乐的披萨 🍕',\n description: '人见人爱,总能带来快乐。你是聚会的灵魂。',\n image: '🍕',\n imageType: 'emoji',\n },\n {\n id: 'food-cookie',\n title: '甜蜜的饼干 🍪',\n description: '温暖甜蜜,给人comfort。你是最好的治愈系存在。',\n image: '🍪',\n imageType: 'emoji',\n },\n {\n id: 'food-icecream',\n title: '清凉的冰淇淋 🍦',\n description: '甜美可爱,在炎热时给人清凉。你总能在关键时刻出现。',\n image: '🍦',\n imageType: 'emoji',\n },\n {\n id: 'food-honey',\n title: '甜蜜的蜂蜜 🍯',\n description: '天然甜美,纯粹可爱。你的存在就是幸福的味道。',\n image: '🍯',\n imageType: 'emoji',\n },\n {\n id: 'food-sushi',\n title: '精致的寿司 🍣',\n description: '精致优雅,注重细节。你对生活有着独特的品味。',\n image: '🍣',\n imageType: 'emoji',\n },\n {\n id: 'food-cake',\n title: '甜美的蛋糕 🎂',\n description: '甜蜜美好,是庆祝的象征。你总能给人带来惊喜。',\n image: '🎂',\n imageType: 'emoji',\n },\n {\n id: 'food-donut',\n title: '可爱的甜甜圈 🍩',\n description: '圆圆满满,甜蜜可爱。你的存在让生活更美好。',\n image: '🍩',\n imageType: 'emoji',\n },\n {\n id: 'food-lollipop',\n title: '童真的棒棒糖 🍭',\n description: '保持童心,永远年轻。你的纯真令人羡慕。',\n image: '🍭',\n imageType: 'emoji',\n },\n {\n id: 'food-watermelon',\n title: '清爽的西瓜 🍉',\n description: '清爽解渴,夏日必备。你总能带来清新的感觉。',\n image: '🍉',\n imageType: 'emoji',\n },\n];\n\n// 验证数据集长度\nif (DEFAULT_RESULTS.length !== 45) {\n console.warn('结果数据集应包含45项,当前: ' + (DEFAULT_RESULTS.length));\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * 测测你是什么 - 主组件\n * Test Yourself Game - Main Component\n */\n\n'use client';\n\nimport React, { useState, useEffect, useRef } from 'react';\nimport type { TestYourselfProps, TestResult, TestStatus, DeviceFingerprint, TestConfig } from '../types';\nimport { \n getDeviceFingerprint, \n tryGetIPAddress, \n generateDeviceHash, \n selectResultIndex \n} from '../utils/fingerprint';\nimport { DEFAULT_RESULTS } from '../data/defaultResults';\n\nconst STORAGE_KEY = 'test-yourself-result';\n\nexport const TestYourself: React.FC<TestYourselfProps> = ({\n config: propConfig,\n configId,\n onResult,\n className = '',\n}) => {\n const [loadedConfig, setLoadedConfig] = useState<TestConfig | null>(null);\n const [configLoading, setConfigLoading] = useState(false);\n\n // 加载配置(如果提供了 configId)\n useEffect(() => {\n const loadConfig = async () => {\n if (configId) {\n setConfigLoading(true);\n try {\n // 动态导入 ConfigService\n const { getDefaultConfigService } = await import('../server/ConfigService');\n const service = getDefaultConfigService();\n const savedConfig = await service.getConfig(configId);\n if (savedConfig) {\n setLoadedConfig(savedConfig.config);\n } else {\n console.warn('配置 ' + (configId) + ' 不存在,使用默认配置');\n }\n } catch (error) {\n console.error('加载配置失败:', error);\n } finally {\n setConfigLoading(false);\n }\n }\n };\n\n loadConfig();\n }, [configId]);\n\n // 使用加载的配置或属性传入的配置\n const config = loadedConfig || propConfig || {\n gameTitle: '测测你是什么',\n gameDescription: '长按按钮,发现你的专属属性',\n results: DEFAULT_RESULTS,\n };\n\n const {\n gameTitle,\n gameDescription,\n buttonText = '长按开始测试',\n longPressDuration = 2000,\n results = DEFAULT_RESULTS,\n enableIPFetch = false,\n customSalt,\n resultStyle = 'card',\n } = config;\n\n const [status, setStatus] = useState<TestStatus>('idle');\n const [result, setResult] = useState<TestResult | null>(null);\n const [pressProgress, setPressProgress] = useState(0);\n const [ipWarning, setIpWarning] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n const pressTimerRef = useRef<NodeJS.Timeout | null>(null);\n const progressIntervalRef = useRef<NodeJS.Timeout | null>(null);\n const startTimeRef = useRef<number>(0);\n\n // 初始化:检查localStorage和获取IP\n useEffect(() => {\n const initializeTest = async () => {\n // 等待配置加载完成\n if (configLoading) {\n return;\n }\n\n // 使用不同的 storage key(如果有 configId)\n const storageKey = configId ? (STORAGE_KEY) + '_' + (configId) : STORAGE_KEY;\n \n // 检查localStorage中是否已有结果\n const savedResult = localStorage.getItem(storageKey);\n if (savedResult) {\n try {\n const parsed = JSON.parse(savedResult);\n setResult(parsed);\n setStatus('completed');\n setIsLoading(false);\n return;\n } catch (error) {\n console.error('解析保存的结果失败:', error);\n }\n }\n\n // 如果启用IP获取,尝试获取\n if (enableIPFetch) {\n const ip = await tryGetIPAddress();\n if (!ip) {\n setIpWarning('⚠️ 无法获取IP地址,将仅使用浏览器指纹生成结果');\n }\n }\n\n setIsLoading(false);\n };\n\n initializeTest();\n }, [enableIPFetch, configLoading, configId]);\n\n // 计算并保存结果\n const calculateResult = async (): Promise<TestResult> => {\n try {\n // 获取设备指纹\n const fingerprint: DeviceFingerprint = getDeviceFingerprint();\n\n // 如果启用IP,尝试获取\n if (enableIPFetch) {\n const ip = await tryGetIPAddress();\n if (ip) {\n fingerprint.ip = ip;\n }\n }\n\n // 使用实际结果数据(如果配置的results为空,使用默认数据)\n const actualResults = results.length > 0 ? results : DEFAULT_RESULTS;\n\n // 生成唯一哈希\n const hash = generateDeviceHash(fingerprint, customSalt);\n\n // 根据哈希选择结果\n const index = selectResultIndex(hash, actualResults.length);\n const selectedResult = actualResults[index];\n\n if (!selectedResult) {\n console.error('无法获取测试结果,index:', index, 'total:', actualResults.length);\n throw new Error('无法获取测试结果');\n }\n\n console.log('计算结果成功:', selectedResult);\n\n // 保存到localStorage(使用不同的 key)\n const storageKey = configId ? (STORAGE_KEY) + '_' + (configId) : STORAGE_KEY;\n localStorage.setItem(storageKey, JSON.stringify(selectedResult));\n\n return selectedResult;\n } catch (error) {\n console.error('计算结果失败:', error);\n throw error;\n }\n };\n\n // 处理按下\n const handlePressStart = (e: React.MouseEvent | React.TouchEvent) => {\n if (status !== 'idle') return;\n\n // 阻止默认行为(防止移动端长按出现选择菜单)\n e.preventDefault();\n\n setStatus('pressing');\n startTimeRef.current = Date.now();\n\n // 设置进度更新\n progressIntervalRef.current = setInterval(() => {\n const elapsed = Date.now() - startTimeRef.current;\n const progress = Math.min((elapsed / longPressDuration) * 100, 100);\n setPressProgress(progress);\n }, 16); // ~60fps\n\n // 设置完成定时器\n pressTimerRef.current = setTimeout(async () => {\n try {\n setPressProgress(100);\n \n // 清理进度定时器\n if (progressIntervalRef.current) {\n clearInterval(progressIntervalRef.current);\n progressIntervalRef.current = null;\n }\n \n console.log('开始计算结果...');\n \n // 计算结果\n const testResult = await calculateResult();\n \n console.log('结果计算完成,更新状态:', testResult);\n \n // 先更新结果,再更新状态\n setResult(testResult);\n \n // 使用setTimeout确保状态更新\n setTimeout(() => {\n setStatus('completed');\n console.log('状态已更新为 completed');\n }, 0);\n\n // 调用回调\n if (onResult) {\n onResult(testResult);\n }\n } catch (error) {\n console.error('测试失败:', error);\n // 重置状态\n setStatus('idle');\n setPressProgress(0);\n alert('测试失败,请重试');\n }\n }, longPressDuration);\n\n // 添加全局监听器(用于PC端)\n if ('button' in e && e.button === 0) {\n // 鼠标事件\n const handleGlobalMouseUp = () => {\n handlePressEnd();\n document.removeEventListener('mouseup', handleGlobalMouseUp);\n };\n document.addEventListener('mouseup', handleGlobalMouseUp);\n }\n };\n\n // 处理松开\n const handlePressEnd = () => {\n if (status !== 'pressing') return;\n\n // 清理定时器\n if (pressTimerRef.current) {\n clearTimeout(pressTimerRef.current);\n pressTimerRef.current = null;\n }\n if (progressIntervalRef.current) {\n clearInterval(progressIntervalRef.current);\n progressIntervalRef.current = null;\n }\n\n // 重置状态\n setStatus('idle');\n setPressProgress(0);\n };\n\n // 处理鼠标离开(仅用于提示,不取消长按)\n const handleMouseLeave = (e: React.MouseEvent) => {\n // PC端:不取消长按,让用户可以移出按钮区域\n // 只要保持鼠标按下就继续\n };\n\n // 处理触摸移动(移动端)\n const handleTouchMove = (e: React.TouchEvent) => {\n // 检查手指是否移出按钮区域\n const touch = e.touches[0];\n if (!touch) return;\n \n const target = e.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n \n const isInside = \n touch.clientX >= rect.left &&\n touch.clientX <= rect.right &&\n touch.clientY >= rect.top &&\n touch.clientY <= rect.bottom;\n \n // 如果移出按钮,取消长按(移动端才取消)\n if (!isInside && status === 'pressing') {\n handlePressEnd();\n }\n };\n\n // 清理\n useEffect(() => {\n return () => {\n if (pressTimerRef.current) {\n clearTimeout(pressTimerRef.current);\n }\n if (progressIntervalRef.current) {\n clearInterval(progressIntervalRef.current);\n }\n };\n }, []);\n\n // 重新测试\n const handleReset = () => {\n const storageKey = configId ? (STORAGE_KEY) + '_' + (configId) : STORAGE_KEY;\n localStorage.removeItem(storageKey);\n setResult(null);\n setStatus('idle');\n setPressProgress(0);\n };\n\n // 背景容器样式\n const backgroundStyle: React.CSSProperties = {\n position: 'relative',\n minHeight: '100vh',\n overflow: 'hidden',\n background: 'linear-gradient(135deg, #f3e8ff 0%, #fce7f3 50%, #dbeafe 100%)',\n };\n\n // 装饰性光晕\n const DecorativeBackground = () => (\n <>\n <div style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '384px',\n height: '384px',\n background: 'radial-gradient(circle, rgba(192, 132, 252, 0.3) 0%, transparent 70%)',\n borderRadius: '50%',\n filter: 'blur(60px)',\n transform: 'translate(-50%, -50%)',\n pointerEvents: 'none',\n }} />\n <div style={{\n position: 'absolute',\n top: '50%',\n right: 0,\n width: '384px',\n height: '384px',\n background: 'radial-gradient(circle, rgba(244, 114, 182, 0.3) 0%, transparent 70%)',\n borderRadius: '50%',\n filter: 'blur(60px)',\n transform: 'translateX(50%)',\n pointerEvents: 'none',\n }} />\n <div style={{\n position: 'absolute',\n bottom: 0,\n left: '50%',\n width: '384px',\n height: '384px',\n background: 'radial-gradient(circle, rgba(147, 197, 253, 0.3) 0%, transparent 70%)',\n borderRadius: '50%',\n filter: 'blur(60px)',\n transform: 'translate(-50%, 50%)',\n pointerEvents: 'none',\n }} />\n </>\n );\n\n if (isLoading) {\n return (\n <div className={className} style={backgroundStyle}>\n <DecorativeBackground />\n <div style={{\n position: 'relative',\n zIndex: 10,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: '100vh',\n }}>\n <div style={{ textAlign: 'center' }}>\n <div style={{\n position: 'relative',\n width: '64px',\n height: '64px',\n margin: '0 auto 16px',\n }}>\n <div style={{\n position: 'absolute',\n inset: 0,\n border: '4px solid #e9d5ff',\n borderRadius: '50%',\n }} />\n <div style={{\n position: 'absolute',\n inset: 0,\n border: '4px solid transparent',\n borderTopColor: '#a855f7',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }} />\n </div>\n <p style={{ fontSize: '14px', color: '#6b7280' }}>✨ 加载中</p>\n </div>\n </div>\n </div>\n );\n }\n\n // 结果展示\n if (status === 'completed' && result) {\n return (\n <div className={className} style={backgroundStyle}>\n <DecorativeBackground />\n <div style={{\n position: 'relative',\n zIndex: 10,\n minHeight: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '24px',\n }}>\n <div style={{ maxWidth: '420px', width: '100%' }}>\n {/* 结果卡片 - 可爱风格 */}\n <div style={{\n position: 'relative',\n background: 'linear-gradient(135deg, #fdf2f8 0%, #faf5ff 50%, #eff6ff 100%)',\n borderRadius: '32px',\n boxShadow: '0 25px 50px -12px rgba(168, 85, 247, 0.25), 0 0 0 1px rgba(168, 85, 247, 0.1)',\n overflow: 'hidden',\n padding: '40px 32px',\n textAlign: 'center',\n }}>\n {/* 装饰性星星 */}\n <div style={{ position: 'absolute', top: '20px', left: '20px', fontSize: '24px', opacity: 0.6 }}>✨</div>\n <div style={{ position: 'absolute', top: '40px', right: '30px', fontSize: '20px', opacity: 0.5 }}>⭐</div>\n <div style={{ position: 'absolute', bottom: '30px', left: '40px', fontSize: '18px', opacity: 0.4 }}>💫</div>\n <div style={{ position: 'absolute', bottom: '50px', right: '25px', fontSize: '22px', opacity: 0.5 }}>🌟</div>\n \n {/* Emoji 展示 */}\n <div style={{ marginBottom: '24px' }}>\n <div style={{ \n display: 'inline-block',\n fontSize: '80px',\n animation: 'bounce-slow 2s ease-in-out infinite',\n filter: 'drop-shadow(0 10px 20px rgba(0,0,0,0.1))',\n }}>\n {result.imageType === 'emoji' ? result.image : '🎉'}\n </div>\n </div>\n\n {/* 标题 */}\n <h2 style={{\n fontSize: '32px',\n fontWeight: 800,\n background: 'linear-gradient(135deg, #9333ea 0%, #ec4899 100%)',\n WebkitBackgroundClip: 'text',\n WebkitTextFillColor: 'transparent',\n backgroundClip: 'text',\n marginBottom: '16px',\n lineHeight: 1.3,\n }}>\n {result.title}\n </h2>\n\n {/* 描述卡片 */}\n <div style={{\n background: 'rgba(255, 255, 255, 0.8)',\n borderRadius: '20px',\n padding: '20px 24px',\n marginBottom: '28px',\n boxShadow: '0 4px 15px rgba(168, 85, 247, 0.1)',\n border: '2px dashed rgba(168, 85, 247, 0.2)',\n }}>\n <p style={{\n fontSize: '16px',\n color: '#6b7280',\n lineHeight: 1.7,\n margin: 0,\n }}>\n {result.description}\n </p>\n </div>\n\n {/* 可爱装饰线 */}\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n marginBottom: '24px',\n }}>\n <span style={{ width: '40px', height: '3px', background: 'linear-gradient(to right, #a855f7, transparent)', borderRadius: '999px' }}></span>\n <span style={{ fontSize: '16px' }}>💕</span>\n <span style={{ width: '40px', height: '3px', background: 'linear-gradient(to left, #ec4899, transparent)', borderRadius: '999px' }}></span>\n </div>\n\n {/* 重新测试按钮 */}\n <button\n onClick={handleReset}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n padding: '14px 32px',\n fontSize: '16px',\n fontWeight: 600,\n color: 'white',\n background: 'linear-gradient(135deg, #a855f7 0%, #ec4899 100%)',\n border: 'none',\n borderRadius: '9999px',\n cursor: 'pointer',\n boxShadow: '0 10px 25px -5px rgba(168, 85, 247, 0.4)',\n transition: 'all 0.3s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.transform = 'scale(1.05) translateY(-2px)';\n e.currentTarget.style.boxShadow = '0 15px 35px -5px rgba(168, 85, 247, 0.5)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.transform = 'scale(1) translateY(0)';\n e.currentTarget.style.boxShadow = '0 10px 25px -5px rgba(168, 85, 247, 0.4)';\n }}\n >\n <span>🔄</span>\n <span>重新测试</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n // 测试界面 - 时尚可爱设计\n return (\n <div className={className} style={backgroundStyle}>\n <DecorativeBackground />\n <div style={{\n position: 'relative',\n zIndex: 10,\n minHeight: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '16px',\n }}>\n <div style={{ maxWidth: '512px', width: '100%', textAlign: 'center', userSelect: 'none' }}>\n {/* 标题区域 */}\n <div style={{ marginBottom: '48px' }}>\n <div style={{ \n display: 'inline-block', \n marginBottom: '16px',\n animation: 'bounce-slow 2s ease-in-out infinite',\n }}>\n <span style={{ fontSize: '56px' }}>🎲</span>\n </div>\n <h1 style={{\n fontSize: '48px',\n fontWeight: 900,\n marginBottom: '12px',\n background: 'linear-gradient(135deg, #9333ea 0%, #ec4899 50%, #3b82f6 100%)',\n WebkitBackgroundClip: 'text',\n WebkitTextFillColor: 'transparent',\n backgroundClip: 'text',\n lineHeight: 1.2,\n }}>\n {gameTitle}\n </h1>\n {gameDescription && (\n <p style={{ \n fontSize: '18px', \n color: '#6b7280', \n fontWeight: 500,\n }}>\n {gameDescription}\n </p>\n )}\n </div>\n\n {/* 长按按钮区域 */}\n <div style={{ marginBottom: '24px' }}>\n {/* 主按钮 */}\n <button\n onMouseDown={handlePressStart}\n onMouseLeave={handleMouseLeave}\n onTouchStart={handlePressStart}\n onTouchEnd={handlePressEnd}\n onTouchMove={handleTouchMove}\n onTouchCancel={handlePressEnd}\n onContextMenu={(e) => e.preventDefault()}\n onDragStart={(e) => e.preventDefault()}\n style={{\n display: 'block',\n margin: '0 auto',\n width: '200px',\n height: '200px',\n borderRadius: '50%',\n border: 'none',\n fontSize: '20px',\n fontWeight: 'bold',\n cursor: 'pointer',\n position: 'relative',\n overflow: 'hidden',\n userSelect: 'none',\n WebkitTouchCallout: 'none',\n WebkitUserSelect: 'none',\n touchAction: 'none',\n transition: 'transform 0.3s ease',\n transform: status === 'pressing' ? 'scale(0.95)' : 'scale(1)',\n background: status === 'pressing' \n ? 'linear-gradient(to top, rgb(168, 85, 247) ' + (pressProgress) + '%, rgb(236, 72, 153) ' + (pressProgress) + '%)'\n : 'linear-gradient(135deg, #4f46e5 0%, #7c3aed 25%, #db2777 50%, #f97316 75%, #059669 100%)',\n boxShadow: status === 'pressing' \n ? 'inset 0 4px 12px rgba(0,0,0,0.3), 0 0 0 4px rgba(168, 85, 247, 0.5)'\n : '0 15px 35px -10px rgba(79, 70, 229, 0.6), 0 0 0 4px rgba(255,255,255,0.8)',\n }}\n >\n {/* 按钮内容 */}\n <div style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'white',\n pointerEvents: 'none',\n }}>\n {status === 'pressing' ? (\n <>\n <span style={{ fontSize: '36px', fontWeight: 900, marginBottom: '4px' }}>{Math.round(pressProgress)}%</span>\n <span style={{ fontSize: '14px', opacity: 0.8 }}>继续按住</span>\n </>\n ) : (\n <>\n <span style={{ fontSize: '32px', marginBottom: '8px' }}>👆</span>\n <span style={{ fontSize: '16px', fontWeight: 'bold', padding: '0 16px' }}>{buttonText}</span>\n </>\n )}\n </div>\n\n {/* 内部装饰圆环 */}\n {status === 'idle' && (\n <div style={{\n position: 'absolute',\n top: '16px',\n left: '16px',\n right: '16px',\n bottom: '16px',\n border: '2px solid rgba(255,255,255,0.3)',\n borderRadius: '50%',\n }}></div>\n )}\n </button>\n\n {/* 进度条 */}\n {status === 'pressing' && (\n <div style={{\n marginTop: '16px',\n marginLeft: 'auto',\n marginRight: 'auto',\n width: '192px',\n height: '8px',\n backgroundColor: '#e5e7eb',\n borderRadius: '9999px',\n overflow: 'hidden',\n }}>\n <div style={{\n height: '100%',\n width: (pressProgress) + '%',\n background: 'linear-gradient(to right, #a855f7, #ec4899)',\n transition: 'width 0.1s ease',\n }} />\n </div>\n )}\n </div>\n\n {/* 底部提示 - 简洁可爱 */}\n <div style={{ marginTop: '24px' }}>\n {status === 'pressing' ? (\n <p style={{ \n fontSize: '18px', \n fontWeight: 500, \n color: '#9333ea',\n animation: 'pulse 2s ease-in-out infinite',\n }}>\n ✨ 正在分析中...\n </p>\n ) : (\n <div style={{ \n display: 'flex', \n alignItems: 'center', \n justifyContent: 'center', \n gap: '8px',\n }}>\n <span style={{ \n display: 'inline-block', \n width: '6px', \n height: '6px', \n backgroundColor: '#a855f7', \n borderRadius: '50%',\n animation: 'bounce 1s infinite',\n }} />\n <span style={{ \n display: 'inline-block', \n width: '6px', \n height: '6px', \n backgroundColor: '#ec4899', \n borderRadius: '50%',\n animation: 'bounce 1s infinite 0.1s',\n }} />\n <span style={{ \n display: 'inline-block', \n width: '6px', \n height: '6px', \n backgroundColor: '#3b82f6', \n borderRadius: '50%',\n animation: 'bounce 1s infinite 0.2s',\n }} />\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\n// 添加CSS样式来支持触摸优化和动画\nconst touchOptimizationStyles = `\n @keyframes bounce-slow {\n 0%, 100% {\n transform: translateY(0);\n }\n 50% {\n transform: translateY(-10px);\n }\n }\n \n @keyframes bounce {\n 0%, 100% {\n transform: translateY(0);\n }\n 50% {\n transform: translateY(-4px);\n }\n }\n \n @keyframes pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n }\n \n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n`;\n\n// 注入样式\nif (typeof document !== 'undefined' && !document.getElementById('test-yourself-styles')) {\n const style = document.createElement('style');\n style.id = 'test-yourself-styles';\n style.textContent = touchOptimizationStyles;\n document.head.appendChild(style);\n};\n\nexport default TestYourself;\n\n\n","/**\n * 测测你是什么 - 配置管理后台组件\n * Test Yourself - Configuration Manager Component\n * \n * 支持创建、编辑、管理多套测试配置\n */\n\n'use client';\n\nimport React, { useState, useCallback, useEffect } from 'react';\nimport { clsx } from 'clsx';\nimport {\n Plus,\n Trash2,\n Edit,\n Save,\n X,\n Upload as UploadIcon,\n Download,\n Copy,\n Star,\n Image as ImageIcon,\n AlertCircle,\n CheckCircle2,\n} from 'lucide-react';\n\nimport type { SavedConfig, TestConfig, TestResult } from '../types';\nimport { ConfigService } from '../server/ConfigService';\nimport { DEFAULT_RESULTS } from '../data/defaultResults';\n\nexport interface ConfigManagerProps {\n /** 配置服务实例 */\n configService: ConfigService;\n /** 配置变化回调 */\n onConfigChange?: (configs: SavedConfig[]) => void;\n /** 自定义样式 */\n className?: string;\n /** 图片上传处理函数 */\n onImageUpload?: (file: File) => Promise<string>;\n}\n\ninterface EditingResult extends TestResult {\n _tempId?: string;\n}\n\n/**\n * 配置管理器组件\n */\nexport const ConfigManager: React.FC<ConfigManagerProps> = ({\n configService,\n onConfigChange,\n className = '',\n onImageUpload,\n}) => {\n const [configs, setConfigs] = useState<SavedConfig[]>([]);\n const [selectedConfig, setSelectedConfig] = useState<SavedConfig | null>(null);\n const [isEditing, setIsEditing] = useState(false);\n const [isCreating, setIsCreating] = useState(false);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [success, setSuccess] = useState<string | null>(null);\n\n // 编辑表单状态\n const [editForm, setEditForm] = useState({\n name: '',\n description: '',\n gameTitle: '',\n gameDescription: '',\n buttonText: '长按开始测试',\n longPressDuration: 2000,\n results: [] as EditingResult[],\n });\n\n // 加载配置列表\n const loadConfigs = useCallback(async () => {\n try {\n setLoading(true);\n const allConfigs = await configService.getAllConfigs();\n setConfigs(allConfigs);\n onConfigChange?.(allConfigs);\n } catch (err: any) {\n setError('加载配置失败: ' + (err.message));\n } finally {\n setLoading(false);\n }\n }, [configService, onConfigChange]);\n\n useEffect(() => {\n loadConfigs();\n }, [loadConfigs]);\n\n // 开始创建新配置\n const handleStartCreate = () => {\n setEditForm({\n name: '新配置',\n description: '',\n gameTitle: '测测你是什么',\n gameDescription: '长按按钮,发现你的专属属性',\n buttonText: '长按开始测试',\n longPressDuration: 2000,\n results: [],\n });\n setIsCreating(true);\n setIsEditing(true);\n setSelectedConfig(null);\n };\n\n // 开始编辑配置\n const handleStartEdit = (config: SavedConfig) => {\n setEditForm({\n name: config.name,\n description: config.description || '',\n gameTitle: config.config.gameTitle,\n gameDescription: config.config.gameDescription || '',\n buttonText: config.config.buttonText || '长按开始测试',\n longPressDuration: config.config.longPressDuration || 2000,\n results: config.config.results,\n });\n setIsCreating(false);\n setIsEditing(true);\n setSelectedConfig(config);\n };\n\n // 取消编辑\n const handleCancelEdit = () => {\n setIsEditing(false);\n setIsCreating(false);\n setSelectedConfig(null);\n setError(null);\n };\n\n // 保存配置\n const handleSave = async () => {\n try {\n setError(null);\n\n // 验证\n if (!editForm.name.trim()) {\n setError('请输入配置名称');\n return;\n }\n if (!editForm.gameTitle.trim()) {\n setError('请输入游戏标题');\n return;\n }\n if (editForm.results.length === 0) {\n setError('请至少添加一个结果项');\n return;\n }\n\n const testConfig: TestConfig = {\n gameTitle: editForm.gameTitle,\n gameDescription: editForm.gameDescription,\n buttonText: editForm.buttonText,\n longPressDuration: editForm.longPressDuration,\n results: editForm.results,\n };\n\n if (isCreating) {\n await configService.createConfig(\n editForm.name,\n testConfig,\n editForm.description\n );\n setSuccess('创建配置成功!');\n } else if (selectedConfig) {\n await configService.updateConfig(selectedConfig.id, {\n name: editForm.name,\n description: editForm.description,\n config: testConfig,\n });\n setSuccess('更新配置成功!');\n }\n\n await loadConfigs();\n handleCancelEdit();\n\n // 3秒后清除成功提示\n setTimeout(() => setSuccess(null), 3000);\n } catch (err: any) {\n setError('保存失败: ' + (err.message));\n }\n };\n\n // 删除配置\n const handleDelete = async (id: string) => {\n if (!confirm('确定要删除这个配置吗?')) return;\n\n try {\n await configService.deleteConfig(id);\n await loadConfigs();\n setSuccess('删除成功!');\n setTimeout(() => setSuccess(null), 3000);\n } catch (err: any) {\n setError('删除失败: ' + (err.message));\n }\n };\n\n // 复制配置\n const handleDuplicate = async (id: string) => {\n try {\n await configService.duplicateConfig(id);\n await loadConfigs();\n setSuccess('复制成功!');\n setTimeout(() => setSuccess(null), 3000);\n } catch (err: any) {\n setError('复制失败: ' + (err.message));\n }\n };\n\n // 设置默认配置\n const handleSetDefault = async (id: string) => {\n try {\n await configService.setDefaultConfig(id);\n await loadConfigs();\n setSuccess('设置默认配置成功!');\n setTimeout(() => setSuccess(null), 3000);\n } catch (err: any) {\n setError('设置失败: ' + (err.message));\n }\n };\n\n // 导出配置\n const handleExport = async (id: string) => {\n try {\n const jsonString = await configService.exportConfig(id);\n const blob = new Blob([jsonString], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = 'config_' + (id) + '.json';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n setSuccess('导出成功!');\n setTimeout(() => setSuccess(null), 3000);\n } catch (err: any) {\n setError('导出失败: ' + (err.message));\n }\n };\n\n // 导入配置\n const handleImport = async () => {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = '.json';\n input.onchange = async (e) => {\n const file = (e.target as HTMLInputElement).files?.[0];\n if (!file) return;\n\n try {\n const text = await file.text();\n await configService.importConfig(text);\n await loadConfigs();\n setSuccess('导入成功!');\n setTimeout(() => setSuccess(null), 3000);\n } catch (err: any) {\n setError('导入失败: ' + (err.message));\n }\n };\n input.click();\n };\n\n // 添加结果项\n const handleAddResult = () => {\n const newResult: EditingResult = {\n id: 'temp_' + (Date.now()),\n _tempId: 'temp_' + (Date.now()),\n title: '新结果',\n description: '这是一个新的结果描述',\n image: '🎉',\n imageType: 'emoji',\n };\n setEditForm({\n ...editForm,\n results: [...editForm.results, newResult],\n });\n };\n\n // 删除结果项\n const handleDeleteResult = (index: number) => {\n const newResults = [...editForm.results];\n newResults.splice(index, 1);\n setEditForm({ ...editForm, results: newResults });\n };\n\n // 更新结果项\n const handleUpdateResult = (index: number, updates: Partial<TestResult>) => {\n const newResults = [...editForm.results];\n newResults[index] = { ...newResults[index], ...updates } as EditingResult;\n setEditForm({ ...editForm, results: newResults });\n };\n\n // 图片上传处理\n const handleResultImageUpload = async (index: number, file: File) => {\n try {\n if (!onImageUpload) {\n // 如果没有提供上传函数,使用 Base64\n const reader = new FileReader();\n reader.onload = (e) => {\n const base64 = e.target?.result as string;\n handleUpdateResult(index, {\n image: base64,\n imageType: 'url',\n });\n };\n reader.readAsDataURL(file);\n } else {\n // 使用提供的上传函数\n const url = await onImageUpload(file);\n handleUpdateResult(index, {\n image: url,\n imageType: 'url',\n });\n }\n } catch (err: any) {\n setError('上传图片失败: ' + (err.message));\n }\n };\n\n // 使用默认结果\n const handleUseDefaultResults = () => {\n if (confirm('确定要使用默认的45个结果吗?这将替换当前的所有结果。')) {\n setEditForm({ ...editForm, results: DEFAULT_RESULTS });\n }\n };\n\n // 渲染配置列表\n const renderConfigList = () => (\n <div className=\"space-y-4\">\n {configs.map((config) => (\n <div\n key={config.id}\n className=\"bg-white dark:bg-gray-800 rounded-lg shadow-sm p-4 border border-gray-200 dark:border-gray-700 hover:shadow-md transition-shadow\"\n >\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2 mb-1\">\n <h3 className=\"text-lg font-semibold text-gray-900 dark:text-white\">\n {config.name}\n </h3>\n {config.isDefault && (\n <span className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200\">\n <Star className=\"w-3 h-3\" />\n 默认\n </span>\n )}\n </div>\n {config.description && (\n <p className=\"text-sm text-gray-600 dark:text-gray-400 mb-2\">\n {config.description}\n </p>\n )}\n <div className=\"flex items-center gap-4 text-xs text-gray-500 dark:text-gray-400\">\n <span>结果数: {config.config.results.length}</span>\n <span>创建: {new Date(config.createdAt).toLocaleDateString()}</span>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n onClick={() => handleSetDefault(config.id)}\n disabled={config.isDefault}\n className=\"p-2 text-gray-600 hover:text-yellow-600 disabled:opacity-50 disabled:cursor-not-allowed\"\n title=\"设为默认\"\n >\n <Star className=\"w-5 h-5\" />\n </button>\n <button\n onClick={() => handleStartEdit(config)}\n className=\"p-2 text-gray-600 hover:text-blue-600\"\n title=\"编辑\"\n >\n <Edit className=\"w-5 h-5\" />\n </button>\n <button\n onClick={() => handleDuplicate(config.id)}\n className=\"p-2 text-gray-600 hover:text-green-600\"\n title=\"复制\"\n >\n <Copy className=\"w-5 h-5\" />\n </button>\n <button\n onClick={() => handleExport(config.id)}\n className=\"p-2 text-gray-600 hover:text-purple-600\"\n title=\"导出\"\n >\n <Download className=\"w-5 h-5\" />\n </button>\n <button\n onClick={() => handleDelete(config.id)}\n className=\"p-2 text-gray-600 hover:text-red-600\"\n title=\"删除\"\n >\n <Trash2 className=\"w-5 h-5\" />\n </button>\n </div>\n </div>\n </div>\n ))}\n </div>\n );\n\n // 渲染结果编辑器\n const renderResultEditor = (result: EditingResult, index: number) => (\n <div\n key={result._tempId || result.id}\n className=\"bg-gray-50 dark:bg-gray-700 rounded-lg p-4 space-y-3\"\n >\n <div className=\"flex items-start justify-between\">\n <h4 className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n 结果 #{index + 1}\n </h4>\n <button\n onClick={() => handleDeleteResult(index)}\n className=\"text-red-600 hover:text-red-700\"\n >\n <Trash2 className=\"w-4 h-4\" />\n </button>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n {/* 标题 */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n 标题\n </label>\n <input\n type=\"text\"\n value={result.title}\n onChange={(e) => handleUpdateResult(index, { title: e.target.value })}\n className=\"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-white\"\n placeholder=\"例如: 可爱的猫咪\"\n />\n </div>\n\n {/* 图片/Emoji */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n 图片/Emoji\n </label>\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n value={result.image}\n onChange={(e) => handleUpdateResult(index, { image: e.target.value })}\n className=\"flex-1 px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-white\"\n placeholder=\"🎉 或 URL\"\n />\n <label className=\"cursor-pointer inline-flex items-center justify-center px-3 py-2 bg-blue-50 dark:bg-blue-900 text-blue-600 dark:text-blue-200 rounded-lg hover:bg-blue-100 dark:hover:bg-blue-800\">\n <ImageIcon className=\"w-5 h-5\" />\n <input\n type=\"file\"\n accept=\"image/*\"\n className=\"hidden\"\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) handleResultImageUpload(index, file);\n }}\n />\n </label>\n </div>\n </div>\n </div>\n\n {/* 描述 */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n 描述\n </label>\n <textarea\n value={result.description}\n onChange={(e) => handleUpdateResult(index, { description: e.target.value })}\n rows={2}\n className=\"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-white\"\n placeholder=\"这个结果的详细描述...\"\n />\n </div>\n\n {/* 预览 */}\n {result.image && (\n <div className=\"flex items-center gap-2 p-2 bg-white dark:bg-gray-600 rounded border border-gray-200 dark:border-gray-500\">\n <span className=\"text-sm text-gray-500 dark:text-gray-400\">预览:</span>\n {result.imageType === 'emoji' ? (\n <span className=\"text-2xl\">{result.image}</span>\n ) : (\n <img src={result.image} alt={result.title} className=\"w-8 h-8 object-cover rounded\" />\n )}\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {result.title}\n </span>\n </div>\n )}\n </div>\n );\n\n // 渲染编辑表单\n const renderEditForm = () => (\n <div className=\"space-y-6\">\n <div className=\"flex items-center justify-between\">\n <h2 className=\"text-2xl font-bold text-gray-900 dark:text-white\">\n {isCreating ? '创建新配置' : '编辑配置'}\n </h2>\n <button\n onClick={handleCancelEdit}\n className=\"p-2 text-gray-600 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-200\"\n >\n <X className=\"w-6 h-6\" />\n </button>\n </div>\n\n {/* 基本信息 */}\n <div className=\"space-y-4 bg-white dark:bg-gray-800 rounded-lg p-6 shadow-sm border border-gray-200 dark:border-gray-700\">\n <h3 className=\"text-lg font-semibold text-gray-900 dark:text-white mb-4\">\n 基本信息\n </h3>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n 配置名称 *\n </label>\n <input\n type=\"text\"\n value={editForm.name}\n onChange={(e) => setEditForm({ ...editForm, name: e.target.value })}\n className=\"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white\"\n placeholder=\"例如: 动物主题测试\"\n />\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n 游戏标题 *\n </label>\n <input\n type=\"text\"\n value={editForm.gameTitle}\n onChange={(e) => setEditForm({ ...editForm, gameTitle: e.target.value })}\n className=\"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white\"\n placeholder=\"例如: 测测你是什么动物\"\n />\n </div>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n 配置描述\n </label>\n <textarea\n value={editForm.description}\n onChange={(e) => setEditForm({ ...editForm, description: e.target.value })}\n rows={2}\n className=\"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white\"\n placeholder=\"简要描述这个配置的用途...\"\n />\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n 游戏描述\n </label>\n <input\n type=\"text\"\n value={editForm.gameDescription}\n onChange={(e) => setEditForm({ ...editForm, gameDescription: e.target.value })}\n className=\"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white\"\n placeholder=\"例如: 长按按钮,发现你的专属属性\"\n />\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n 按钮文本\n </label>\n <input\n type=\"text\"\n value={editForm.buttonText}\n onChange={(e) => setEditForm({ ...editForm, buttonText: e.target.value })}\n className=\"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white\"\n />\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n 长按时间 (毫秒)\n </label>\n <input\n type=\"number\"\n value={editForm.longPressDuration}\n onChange={(e) =>\n setEditForm({ ...editForm, longPressDuration: parseInt(e.target.value) || 2000 })\n }\n className=\"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white\"\n min=\"500\"\n step=\"100\"\n />\n </div>\n </div>\n </div>\n\n {/* 结果列表 */}\n <div className=\"bg-white dark:bg-gray-800 rounded-lg p-6 shadow-sm border border-gray-200 dark:border-gray-700\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-lg font-semibold text-gray-900 dark:text-white\">\n 结果列表 ({editForm.results.length})\n </h3>\n <div className=\"flex gap-2\">\n <button\n onClick={handleUseDefaultResults}\n className=\"inline-flex items-center gap-2 px-3 py-1.5 text-sm bg-purple-50 dark:bg-purple-900 text-purple-600 dark:text-purple-200 rounded-lg hover:bg-purple-100 dark:hover:bg-purple-800\"\n >\n 使用默认结果\n </button>\n <button\n onClick={handleAddResult}\n className=\"inline-flex items-center gap-2 px-3 py-1.5 text-sm bg-blue-50 dark:bg-blue-900 text-blue-600 dark:text-blue-200 rounded-lg hover:bg-blue-100 dark:hover:bg-blue-800\"\n >\n <Plus className=\"w-4 h-4\" />\n 添加结果\n </button>\n </div>\n </div>\n\n <div className=\"space-y-3 max-h-[500px] overflow-y-auto\">\n {editForm.results.length === 0 ? (\n <div className=\"text-center py-8 text-gray-500 dark:text-gray-400\">\n <p>还没有添加任何结果</p>\n <p className=\"text-sm mt-2\">点击\"添加结果\"或\"使用默认结果\"开始</p>\n </div>\n ) : (\n editForm.results.map((result, index) => renderResultEditor(result, index))\n )}\n </div>\n </div>\n\n {/* 操作按钮 */}\n <div className=\"flex items-center justify-end gap-3\">\n <button\n onClick={handleCancelEdit}\n className=\"px-6 py-2 text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700\"\n >\n 取消\n </button>\n <button\n onClick={handleSave}\n className=\"inline-flex items-center gap-2 px-6 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700\"\n >\n <Save className=\"w-5 h-5\" />\n 保存配置\n </button>\n </div>\n </div>\n );\n\n if (loading) {\n return (\n <div className={clsx('p-8', className)}>\n <div className=\"text-center\">\n <div className=\"inline-block w-8 h-8 border-4 border-blue-600 border-t-transparent rounded-full animate-spin\"></div>\n <p className=\"mt-2 text-gray-600 dark:text-gray-400\">加载中...</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className={clsx('p-6', className)}>\n {/* 消息提示 */}\n {error && (\n <div className=\"mb-4 p-4 bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg flex items-center gap-2 text-red-800 dark:text-red-200\">\n <AlertCircle className=\"w-5 h-5 flex-shrink-0\" />\n <span>{error}</span>\n <button onClick={() => setError(null)} className=\"ml-auto\">\n <X className=\"w-5 h-5\" />\n </button>\n </div>\n )}\n\n {success && (\n <div className=\"mb-4 p-4 bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg flex items-center gap-2 text-green-800 dark:text-green-200\">\n <CheckCircle2 className=\"w-5 h-5 flex-shrink-0\" />\n <span>{success}</span>\n <button onClick={() => setSuccess(null)} className=\"ml-auto\">\n <X className=\"w-5 h-5\" />\n </button>\n </div>\n )}\n\n {isEditing ? (\n renderEditForm()\n ) : (\n <>\n {/* 头部操作栏 */}\n <div className=\"flex items-center justify-between mb-6\">\n <h1 className=\"text-3xl font-bold text-gray-900 dark:text-white\">配置管理</h1>\n <div className=\"flex gap-2\">\n <button\n onClick={handleImport}\n className=\"inline-flex items-center gap-2 px-4 py-2 text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700\"\n >\n <UploadIcon className=\"w-5 h-5\" />\n 导入\n </button>\n <button\n onClick={handleStartCreate}\n className=\"inline-flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700\"\n >\n <Plus className=\"w-5 h-5\" />\n 创建配置\n </button>\n </div>\n </div>\n\n {/* 配置列表 */}\n {configs.length === 0 ? (\n <div className=\"text-center py-12 bg-white dark:bg-gray-800 rounded-lg border-2 border-dashed border-gray-300 dark:border-gray-700\">\n <p className=\"text-gray-600 dark:text-gray-400 mb-4\">还没有任何配置</p>\n <button\n onClick={handleStartCreate}\n className=\"inline-flex items-center gap-2 px-6 py-3 bg-blue-600 text-white rounded-lg hover:bg-blue-700\"\n >\n <Plus className=\"w-5 h-5\" />\n 创建第一个配置\n </button>\n </div>\n ) : (\n renderConfigList()\n )}\n </>\n )}\n </div>\n );\n};\n\nexport default ConfigManager;\n\n\n\n\n\n\n\n\n\n\n","/**\n * 测测你是什么 - 配置列表组件\n * Test Yourself - Configuration List Component\n * \n * 用于展示和选择配置\n */\n\n'use client';\n\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { clsx } from 'clsx';\nimport {\n Eye,\n Edit,\n Trash2,\n Copy,\n Star,\n Download,\n RefreshCw,\n ExternalLink,\n} from 'lucide-react';\n\nimport type { ConfigListItem } from '../types';\nimport { ConfigService } from '../server/ConfigService';\n\nexport interface ConfigListProps {\n /** 配置服务实例 */\n configService: ConfigService;\n /** 选择配置回调 */\n onSelect?: (id: string) => void;\n /** 编辑配置回调 */\n onEdit?: (id: string) => void;\n /** 删除配置回调 */\n onDelete?: (id: string) => void;\n /** 是否显示操作按钮 */\n showActions?: boolean;\n /** 是否显示预览链接 */\n showPreviewLink?: boolean;\n /** 预览基础URL */\n previewBaseUrl?: string;\n /** 自定义样式 */\n className?: string;\n /** 每页显示数量 */\n pageSize?: number;\n}\n\n/**\n * 配置列表组件\n */\nexport const ConfigList: React.FC<ConfigListProps> = ({\n configService,\n onSelect,\n onEdit,\n onDelete,\n showActions = true,\n showPreviewLink = false,\n previewBaseUrl = '/test-yourself',\n className = '',\n pageSize = 10,\n}) => {\n const [configs, setConfigs] = useState<ConfigListItem[]>([]);\n const [loading, setLoading] = useState(true);\n const [currentPage, setCurrentPage] = useState(1);\n const [searchTerm, setSearchTerm] = useState('');\n\n // 加载配置列表\n const loadConfigs = useCallback(async () => {\n try {\n setLoading(true);\n const list = await configService.getConfigList();\n setConfigs(list);\n } catch (error) {\n console.error('加载配置列表失败:', error);\n } finally {\n setLoading(false);\n }\n }, [configService]);\n\n useEffect(() => {\n loadConfigs();\n }, [loadConfigs]);\n\n // 处理刷新\n const handleRefresh = () => {\n loadConfigs();\n };\n\n // 处理选择\n const handleSelect = (id: string) => {\n onSelect?.(id);\n };\n\n // 处理编辑\n const handleEdit = (id: string) => {\n onEdit?.(id);\n };\n\n // 处理删除\n const handleDelete = async (id: string) => {\n if (!confirm('确定要删除这个配置吗?')) return;\n \n try {\n await configService.deleteConfig(id);\n await loadConfigs();\n onDelete?.(id);\n } catch (error) {\n console.error('删除配置失败:', error);\n alert('删除失败,请重试');\n }\n };\n\n // 处理复制\n const handleDuplicate = async (id: string) => {\n try {\n await configService.duplicateConfig(id);\n await loadConfigs();\n } catch (error) {\n console.error('复制配置失败:', error);\n alert('复制失败,请重试');\n }\n };\n\n // 处理设置默认\n const handleSetDefault = async (id: string) => {\n try {\n await configService.setDefaultConfig(id);\n await loadConfigs();\n } catch (error) {\n console.error('设置默认配置失败:', error);\n alert('设置失败,请重试');\n }\n };\n\n // 处理导出\n const handleExport = async (id: string) => {\n try {\n const jsonString = await configService.exportConfig(id);\n const blob = new Blob([jsonString], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = 'config_' + (id) + '.json';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n } catch (error) {\n console.error('导出配置失败:', error);\n alert('导出失败,请重试');\n }\n };\n\n // 生成预览链接\n const getPreviewUrl = (id: string) => {\n return (previewBaseUrl) + '?configId=' + (id);\n };\n\n // 过滤配置\n const filteredConfigs = configs.filter(config => {\n if (!searchTerm) return true;\n const term = searchTerm.toLowerCase();\n return (\n config.name.toLowerCase().includes(term) ||\n config.description?.toLowerCase().includes(term)\n );\n });\n\n // 分页\n const totalPages = Math.ceil(filteredConfigs.length / pageSize);\n const startIndex = (currentPage - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n const currentConfigs = filteredConfigs.slice(startIndex, endIndex);\n\n if (loading) {\n return (\n <div className={clsx('p-8', className)}>\n <div className=\"text-center\">\n <div className=\"inline-block w-8 h-8 border-4 border-blue-600 border-t-transparent rounded-full animate-spin\"></div>\n <p className=\"mt-2 text-gray-600 dark:text-gray-400\">加载中...</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className={className}>\n {/* 头部 */}\n <div className=\"mb-4 flex items-center justify-between gap-4\">\n <div className=\"flex-1\">\n <input\n type=\"text\"\n placeholder=\"搜索配置...\"\n value={searchTerm}\n onChange={(e) => {\n setSearchTerm(e.target.value);\n setCurrentPage(1);\n }}\n className=\"w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-white\"\n />\n </div>\n <button\n onClick={handleRefresh}\n className=\"p-2 text-gray-600 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-200\"\n title=\"刷新\"\n >\n <RefreshCw className=\"w-5 h-5\" />\n </button>\n </div>\n\n {/* 配置列表 */}\n {currentConfigs.length === 0 ? (\n <div className=\"text-center py-12 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700\">\n <p className=\"text-gray-600 dark:text-gray-400\">\n {searchTerm ? '没有找到匹配的配置' : '还没有任何配置'}\n </p>\n </div>\n ) : (\n <div className=\"space-y-3\">\n {currentConfigs.map((config) => (\n <div\n key={config.id}\n className=\"bg-white dark:bg-gray-800 rounded-lg shadow-sm p-4 border border-gray-200 dark:border-gray-700 hover:shadow-md transition-shadow\"\n >\n <div className=\"flex items-start justify-between gap-4\">\n {/* 配置信息 */}\n <div\n className=\"flex-1 cursor-pointer\"\n onClick={() => handleSelect(config.id)}\n >\n <div className=\"flex items-center gap-2 mb-1\">\n <h3 className=\"text-lg font-semibold text-gray-900 dark:text-white\">\n {config.name}\n </h3>\n {config.isDefault && (\n <span className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200\">\n <Star className=\"w-3 h-3\" />\n 默认\n </span>\n )}\n </div>\n {config.description && (\n <p className=\"text-sm text-gray-600 dark:text-gray-400 mb-2\">\n {config.description}\n </p>\n )}\n <div className=\"flex items-center gap-4 text-xs text-gray-500 dark:text-gray-400\">\n <span>结果数: {config.resultCount}</span>\n <span>创建: {new Date(config.createdAt).toLocaleDateString()}</span>\n {config.updatedAt !== config.createdAt && (\n <span>更新: {new Date(config.updatedAt).toLocaleDateString()}</span>\n )}\n </div>\n </div>\n\n {/* 操作按钮 */}\n {showActions && (\n <div className=\"flex items-center gap-1\">\n {showPreviewLink && (\n <a\n href={getPreviewUrl(config.id)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"p-2 text-gray-600 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-400\"\n title=\"预览\"\n >\n <ExternalLink className=\"w-4 h-4\" />\n </a>\n )}\n <button\n onClick={() => handleSetDefault(config.id)}\n disabled={config.isDefault}\n className=\"p-2 text-gray-600 hover:text-yellow-600 disabled:opacity-50 disabled:cursor-not-allowed\"\n title=\"设为默认\"\n >\n <Star className=\"w-4 h-4\" />\n </button>\n <button\n onClick={() => handleEdit(config.id)}\n className=\"p-2 text-gray-600 hover:text-blue-600\"\n title=\"编辑\"\n >\n <Edit className=\"w-4 h-4\" />\n </button>\n <button\n onClick={() => handleDuplicate(config.id)}\n className=\"p-2 text-gray-600 hover:text-green-600\"\n title=\"复制\"\n >\n <Copy className=\"w-4 h-4\" />\n </button>\n <button\n onClick={() => handleExport(config.id)}\n className=\"p-2 text-gray-600 hover:text-purple-600\"\n title=\"导出\"\n >\n <Download className=\"w-4 h-4\" />\n </button>\n <button\n onClick={() => handleDelete(config.id)}\n className=\"p-2 text-gray-600 hover:text-red-600\"\n title=\"删除\"\n >\n <Trash2 className=\"w-4 h-4\" />\n </button>\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* 分页 */}\n {totalPages > 1 && (\n <div className=\"mt-4 flex items-center justify-between\">\n <p className=\"text-sm text-gray-600 dark:text-gray-400\">\n 显示 {startIndex + 1} - {Math.min(endIndex, filteredConfigs.length)} 共{' '}\n {filteredConfigs.length} 个配置\n </p>\n <div className=\"flex items-center gap-2\">\n <button\n onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}\n disabled={currentPage === 1}\n className=\"px-3 py-1 border border-gray-300 dark:border-gray-600 rounded-lg disabled:opacity-50 disabled:cursor-not-allowed hover:bg-gray-50 dark:hover:bg-gray-700\"\n >\n 上一页\n </button>\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">\n {currentPage} / {totalPages}\n </span>\n <button\n onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))}\n disabled={currentPage === totalPages}\n className=\"px-3 py-1 border border-gray-300 dark:border-gray-600 rounded-lg disabled:opacity-50 disabled:cursor-not-allowed hover:bg-gray-50 dark:hover:bg-gray-700\"\n >\n 下一页\n </button>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default ConfigList;\n\n\n\n\n\n\n\n\n\n","/**\n * 测测你是什么 - 服务端逻辑入口\n * Test Yourself - Server Logic Entry\n */\n\n// ========== 配置服务 ==========\nexport {\n ConfigService,\n createConfigService,\n getDefaultConfigService,\n} from './ConfigService';\n\nexport type {\n ConfigServiceOptions,\n IConfigStorage,\n} from './ConfigService';\n\n// ========== 数据库适配器 ==========\nexport {\n DatabaseConfigAdapter,\n createDatabaseConfigAdapter,\n} from './DatabaseConfigAdapter';\n\nexport type {\n DatabaseConfigAdapterOptions,\n DrizzleDb,\n} from './DatabaseConfigAdapter';\n\n// ========== 数据库 Schema ==========\nexport {\n testYourselfConfigs,\n testYourselfConfigUsage,\n testYourselfConfigShares,\n} from './drizzle-schema';\n\nexport type {\n TestYourselfConfig,\n NewTestYourselfConfig,\n TestYourselfConfigUsage,\n NewTestYourselfConfigUsage,\n TestYourselfConfigShare,\n NewTestYourselfConfigShare,\n} from './drizzle-schema';\n","/**\n * TestYourself 模块数据库表结构定义\n * Database Schema for TestYourself Module\n * \n * 使用 Drizzle ORM 定义配置表\n */\n\nimport {\n pgTable,\n uuid,\n varchar,\n text,\n timestamp,\n boolean,\n json,\n integer,\n index,\n} from 'drizzle-orm/pg-core';\nimport type { TestConfig } from '../types';\n\n/**\n * 测试配置表 (test_yourself_configs)\n * \n * 存储所有测试配置,支持多租户、版本控制等企业级功能\n */\nexport const testYourselfConfigs = pgTable(\n 'test_yourself_configs',\n {\n // ========== 主键 ==========\n /** 配置唯一ID */\n id: uuid('id').primaryKey().defaultRandom(),\n\n // ========== 基本信息 ==========\n /** 配置名称 */\n name: varchar('name', { length: 255 }).notNull(),\n \n /** 配置描述 */\n description: text('description'),\n \n /** 配置标签(用于分类和搜索) */\n tags: json('tags').$type<string[]>().default([]),\n\n // ========== 配置数据 ==========\n /** 测试配置内容(JSON格式) */\n config: json('config').$type<TestConfig>().notNull(),\n \n /** 结果数量(冗余字段,便于查询) */\n resultCount: integer('result_count').notNull().default(0),\n\n // ========== 状态字段 ==========\n /** 是否为默认配置 */\n isDefault: boolean('is_default').notNull().default(false),\n \n /** 是否已发布(草稿/发布) */\n isPublished: boolean('is_published').notNull().default(true),\n \n /** 是否已归档 */\n isArchived: boolean('is_archived').notNull().default(false),\n \n /** 是否已删除(软删除) */\n isDeleted: boolean('is_deleted').notNull().default(false),\n\n // ========== 权限和所有权 ==========\n /** 创建者ID */\n createdBy: varchar('created_by', { length: 255 }).notNull(),\n \n /** 最后更新者ID */\n updatedBy: varchar('updated_by', { length: 255 }),\n \n /** 所属组织/租户ID(多租户支持) */\n organizationId: varchar('organization_id', { length: 255 }),\n\n // ========== 统计信息 ==========\n /** 使用次数 */\n usageCount: integer('usage_count').notNull().default(0),\n \n /** 最后使用时间 */\n lastUsedAt: timestamp('last_used_at'),\n \n /** 浏览次数 */\n viewCount: integer('view_count').notNull().default(0),\n\n // ========== 版本控制 ==========\n /** 配置版本号 */\n version: integer('version').notNull().default(1),\n \n /** 父配置ID(用于版本追踪) */\n parentId: uuid('parent_id'),\n\n // ========== 自定义字段 ==========\n /** 自定义元数据(扩展字段) */\n metadata: json('metadata').$type<Record<string, any>>(),\n \n /** 配置来源(web/api/import) */\n source: varchar('source', { length: 50 }),\n\n // ========== 时间戳 ==========\n /** 创建时间 */\n createdAt: timestamp('created_at').defaultNow().notNull(),\n \n /** 更新时间 */\n updatedAt: timestamp('updated_at').defaultNow().notNull(),\n \n /** 发布时间 */\n publishedAt: timestamp('published_at'),\n \n /** 归档时间 */\n archivedAt: timestamp('archived_at'),\n \n /** 删除时间 */\n deletedAt: timestamp('deleted_at'),\n },\n (table) => ({\n // ========== 索引设计 ==========\n \n /** 名称搜索索引 */\n nameIndex: index('test_configs_name_idx').on(table.name),\n \n /** 创建者索引 */\n createdByIndex: index('test_configs_created_by_idx').on(table.createdBy),\n \n /** 组织索引(多租户) */\n organizationIndex: index('test_configs_organization_idx').on(table.organizationId),\n \n /** 默认配置索引 */\n isDefaultIndex: index('test_configs_is_default_idx').on(table.isDefault),\n \n /** 发布状态索引 */\n isPublishedIndex: index('test_configs_is_published_idx').on(table.isPublished),\n \n /** 删除状态索引 */\n isDeletedIndex: index('test_configs_is_deleted_idx').on(table.isDeleted),\n \n /** 创建时间索引 */\n createdAtIndex: index('test_configs_created_at_idx').on(table.createdAt),\n \n /** 最后使用时间索引 */\n lastUsedAtIndex: index('test_configs_last_used_at_idx').on(table.lastUsedAt),\n \n /** 组合索引:组织+删除状态+发布状态 */\n orgDeletedPublishedIndex: index('test_configs_org_deleted_published_idx').on(\n table.organizationId,\n table.isDeleted,\n table.isPublished\n ),\n \n /** 组合索引:创建者+删除状态 */\n createdByDeletedIndex: index('test_configs_created_by_deleted_idx').on(\n table.createdBy,\n table.isDeleted\n ),\n })\n);\n\n/**\n * 配置使用记录表 (test_yourself_config_usage)\n * \n * 记录配置的每次使用情况,用于统计分析\n */\nexport const testYourselfConfigUsage = pgTable(\n 'test_yourself_config_usage',\n {\n /** 记录ID */\n id: uuid('id').primaryKey().defaultRandom(),\n \n /** 配置ID */\n configId: uuid('config_id')\n .references(() => testYourselfConfigs.id, { onDelete: 'cascade' })\n .notNull(),\n \n /** 用户ID */\n userId: varchar('user_id', { length: 255 }),\n \n /** 设备指纹 */\n fingerprint: text('fingerprint'),\n \n /** 测试结果ID */\n resultId: varchar('result_id', { length: 255 }),\n \n /** IP地址 */\n ipAddress: varchar('ip_address', { length: 45 }),\n \n /** User Agent */\n userAgent: text('user_agent'),\n \n /** 来源页面 */\n referer: text('referer'),\n \n /** 使用时间 */\n usedAt: timestamp('used_at').defaultNow().notNull(),\n \n /** 完成时间(毫秒) */\n completionTime: integer('completion_time'),\n \n /** 额外数据 */\n metadata: json('metadata').$type<Record<string, any>>(),\n },\n (table) => ({\n /** 配置ID索引 */\n configIndex: index('test_usage_config_idx').on(table.configId),\n \n /** 用户ID索引 */\n userIndex: index('test_usage_user_idx').on(table.userId),\n \n /** 使用时间索引 */\n usedAtIndex: index('test_usage_used_at_idx').on(table.usedAt),\n \n /** 指纹索引 */\n fingerprintIndex: index('test_usage_fingerprint_idx').on(table.fingerprint),\n })\n);\n\n/**\n * 配置分享表 (test_yourself_config_shares)\n * \n * 管理配置的公开分享功能\n */\nexport const testYourselfConfigShares = pgTable(\n 'test_yourself_config_shares',\n {\n /** 分享ID */\n id: uuid('id').primaryKey().defaultRandom(),\n \n /** 分享代码(短链接标识) */\n shareCode: varchar('share_code', { length: 20 }).notNull().unique(),\n \n /** 配置ID */\n configId: uuid('config_id')\n .references(() => testYourselfConfigs.id, { onDelete: 'cascade' })\n .notNull(),\n \n /** 分享标题 */\n title: varchar('title', { length: 255 }),\n \n /** 分享描述 */\n description: text('description'),\n \n /** 访问密码 */\n password: varchar('password', { length: 100 }),\n \n /** 最大访问次数 */\n maxAccess: integer('max_access'),\n \n /** 当前访问次数 */\n accessCount: integer('access_count').notNull().default(0),\n \n /** 是否启用 */\n isActive: boolean('is_active').notNull().default(true),\n \n /** 过期时间 */\n expiresAt: timestamp('expires_at'),\n \n /** 创建者ID */\n createdBy: varchar('created_by', { length: 255 }).notNull(),\n \n /** 创建时间 */\n createdAt: timestamp('created_at').defaultNow().notNull(),\n \n /** 更新时间 */\n updatedAt: timestamp('updated_at').defaultNow().notNull(),\n },\n (table) => ({\n /** 分享代码索引 */\n shareCodeIndex: index('test_shares_share_code_idx').on(table.shareCode),\n \n /** 配置ID索引 */\n configIndex: index('test_shares_config_idx').on(table.configId),\n \n /** 创建者索引 */\n createdByIndex: index('test_shares_created_by_idx').on(table.createdBy),\n \n /** 活跃状态索引 */\n isActiveIndex: index('test_shares_is_active_idx').on(table.isActive),\n })\n);\n\n// ========== 类型导出 ==========\n\nexport type TestYourselfConfig = typeof testYourselfConfigs.$inferSelect;\nexport type NewTestYourselfConfig = typeof testYourselfConfigs.$inferInsert;\n\nexport type TestYourselfConfigUsage = typeof testYourselfConfigUsage.$inferSelect;\nexport type NewTestYourselfConfigUsage = typeof testYourselfConfigUsage.$inferInsert;\n\nexport type TestYourselfConfigShare = typeof testYourselfConfigShares.$inferSelect;\nexport type NewTestYourselfConfigShare = typeof testYourselfConfigShares.$inferInsert;\n","/**\n * TestYourself 数据库配置适配器\n * Database Configuration Adapter\n * \n * 实现基于数据库的配置存储\n */\n\nimport { eq, and, desc, sql, or } from 'drizzle-orm';\nimport type { IConfigStorage } from './ConfigService';\nimport type { SavedConfig } from '../types';\nimport { testYourselfConfigs } from './drizzle-schema';\nimport type { TestYourselfConfig } from './drizzle-schema';\n\n/**\n * Drizzle 数据库连接类型\n */\nexport type DrizzleDb = any;\n\n/**\n * 数据库适配器配置\n */\nexport interface DatabaseConfigAdapterOptions {\n /** Drizzle 数据库实例 */\n db: DrizzleDb;\n /** 当前用户ID(用于创建和更新) */\n userId?: string;\n /** 组织ID(多租户支持) */\n organizationId?: string;\n /** 是否启用软删除(默认 true) */\n softDelete?: boolean;\n}\n\n/**\n * 数据库配置适配器\n * \n * 实现 IConfigStorage 接口,将配置存储在数据库中\n */\nexport class DatabaseConfigAdapter implements IConfigStorage {\n private db: DrizzleDb;\n private userId: string;\n private organizationId?: string;\n private softDelete: boolean;\n\n constructor(options: DatabaseConfigAdapterOptions) {\n this.db = options.db;\n this.userId = options.userId || 'system';\n this.organizationId = options.organizationId;\n this.softDelete = options.softDelete !== false;\n }\n\n /**\n * 设置当前用户ID\n */\n setUserId(userId: string): void {\n this.userId = userId;\n }\n\n /**\n * 设置组织ID\n */\n setOrganizationId(organizationId: string): void {\n this.organizationId = organizationId;\n }\n\n /**\n * 将数据库记录转换为 SavedConfig\n */\n private toSavedConfig(dbConfig: TestYourselfConfig): SavedConfig {\n return {\n id: dbConfig.id,\n name: dbConfig.name,\n description: dbConfig.description || undefined,\n config: dbConfig.config,\n createdAt: dbConfig.createdAt.getTime(),\n updatedAt: dbConfig.updatedAt.getTime(),\n isDefault: dbConfig.isDefault,\n };\n }\n\n /**\n * 保存配置\n */\n async saveConfig(config: SavedConfig): Promise<void> {\n try {\n // 检查是否已存在\n const existing = await this.db\n .select()\n .from(testYourselfConfigs)\n .where(eq(testYourselfConfigs.id, config.id))\n .limit(1);\n\n const resultCount = config.config.results?.length || 0;\n\n if (existing && existing.length > 0) {\n // 更新现有配置\n await this.db\n .update(testYourselfConfigs)\n .set({\n name: config.name,\n description: config.description || null,\n config: config.config,\n resultCount,\n isDefault: config.isDefault || false,\n updatedBy: this.userId,\n updatedAt: new Date(),\n version: sql`${testYourselfConfigs.version} + 1`, // 版本号递增\n })\n .where(eq(testYourselfConfigs.id, config.id));\n\n console.log('✅ [DatabaseAdapter] 配置已更新:', config.id);\n } else {\n // 插入新配置\n await this.db.insert(testYourselfConfigs).values({\n id: config.id,\n name: config.name,\n description: config.description || null,\n config: config.config,\n resultCount,\n isDefault: config.isDefault || false,\n createdBy: this.userId,\n organizationId: this.organizationId,\n createdAt: new Date(config.createdAt),\n updatedAt: new Date(config.updatedAt),\n });\n\n console.log('✅ [DatabaseAdapter] 配置已创建:', config.id);\n }\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 保存配置失败:', error);\n throw error;\n }\n }\n\n /**\n * 获取配置\n */\n async getConfig(id: string): Promise<SavedConfig | null> {\n try {\n const conditions = [eq(testYourselfConfigs.id, id)];\n\n // 如果启用软删除,过滤已删除的记录\n if (this.softDelete) {\n conditions.push(eq(testYourselfConfigs.isDeleted, false));\n }\n\n const result = await this.db\n .select()\n .from(testYourselfConfigs)\n .where(and(...conditions))\n .limit(1);\n\n if (!result || result.length === 0) {\n return null;\n }\n\n return this.toSavedConfig(result[0]);\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 获取配置失败:', error);\n throw error;\n }\n }\n\n /**\n * 获取所有配置列表\n */\n async getAllConfigs(): Promise<SavedConfig[]> {\n try {\n const conditions = [];\n\n // 如果启用软删除,过滤已删除的记录\n if (this.softDelete) {\n conditions.push(eq(testYourselfConfigs.isDeleted, false));\n }\n\n // 如果设置了组织ID,只查询该组织的配置\n if (this.organizationId) {\n conditions.push(\n or(\n eq(testYourselfConfigs.organizationId, this.organizationId),\n sql`${testYourselfConfigs.organizationId} IS NULL` // 包含全局配置\n )\n );\n }\n\n const result = await this.db\n .select()\n .from(testYourselfConfigs)\n .where(conditions.length > 0 ? and(...conditions) : undefined)\n .orderBy(desc(testYourselfConfigs.createdAt));\n\n return result.map((config: TestYourselfConfig) => this.toSavedConfig(config));\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 获取配置列表失败:', error);\n throw error;\n }\n }\n\n /**\n * 删除配置\n */\n async deleteConfig(id: string): Promise<void> {\n try {\n if (this.softDelete) {\n // 软删除\n await this.db\n .update(testYourselfConfigs)\n .set({\n isDeleted: true,\n deletedAt: new Date(),\n updatedBy: this.userId,\n updatedAt: new Date(),\n })\n .where(eq(testYourselfConfigs.id, id));\n\n console.log('🗑️ [DatabaseAdapter] 配置已软删除:', id);\n } else {\n // 硬删除\n await this.db\n .delete(testYourselfConfigs)\n .where(eq(testYourselfConfigs.id, id));\n\n console.log('🗑️ [DatabaseAdapter] 配置已硬删除:', id);\n }\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 删除配置失败:', error);\n throw error;\n }\n }\n\n /**\n * 更新配置\n */\n async updateConfig(id: string, config: SavedConfig): Promise<void> {\n try {\n const resultCount = config.config.results?.length || 0;\n\n await this.db\n .update(testYourselfConfigs)\n .set({\n name: config.name,\n description: config.description || null,\n config: config.config,\n resultCount,\n isDefault: config.isDefault || false,\n updatedBy: this.userId,\n updatedAt: new Date(config.updatedAt),\n version: sql`${testYourselfConfigs.version} + 1`,\n })\n .where(eq(testYourselfConfigs.id, id));\n\n console.log('✅ [DatabaseAdapter] 配置已更新:', id);\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 更新配置失败:', error);\n throw error;\n }\n }\n\n /**\n * 设置默认配置\n */\n async setDefaultConfig(id: string): Promise<void> {\n try {\n // 使用事务确保原子性\n await this.db.transaction(async (tx: any) => {\n // 1. 清除所有默认配置标记\n const conditions = [eq(testYourselfConfigs.isDefault, true)];\n \n if (this.organizationId) {\n conditions.push(\n eq(testYourselfConfigs.organizationId, this.organizationId)\n );\n }\n\n await tx\n .update(testYourselfConfigs)\n .set({\n isDefault: false,\n updatedBy: this.userId,\n updatedAt: new Date(),\n })\n .where(and(...conditions));\n\n // 2. 设置新的默认配置\n await tx\n .update(testYourselfConfigs)\n .set({\n isDefault: true,\n updatedBy: this.userId,\n updatedAt: new Date(),\n })\n .where(eq(testYourselfConfigs.id, id));\n });\n\n console.log('✅ [DatabaseAdapter] 默认配置已设置:', id);\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 设置默认配置失败:', error);\n throw error;\n }\n }\n\n /**\n * 获取默认配置\n */\n async getDefaultConfig(): Promise<SavedConfig | null> {\n try {\n const conditions = [eq(testYourselfConfigs.isDefault, true)];\n\n // 如果启用软删除,过滤已删除的记录\n if (this.softDelete) {\n conditions.push(eq(testYourselfConfigs.isDeleted, false));\n }\n\n // 如果设置了组织ID,只查询该组织的配置\n if (this.organizationId) {\n conditions.push(\n eq(testYourselfConfigs.organizationId, this.organizationId)\n );\n }\n\n const result = await this.db\n .select()\n .from(testYourselfConfigs)\n .where(and(...conditions))\n .limit(1);\n\n if (!result || result.length === 0) {\n return null;\n }\n\n return this.toSavedConfig(result[0]);\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 获取默认配置失败:', error);\n throw error;\n }\n }\n\n /**\n * 恢复已删除的配置(软删除时可用)\n */\n async restoreConfig(id: string): Promise<void> {\n if (!this.softDelete) {\n throw new Error('恢复功能仅在启用软删除时可用');\n }\n\n try {\n await this.db\n .update(testYourselfConfigs)\n .set({\n isDeleted: false,\n deletedAt: null,\n updatedBy: this.userId,\n updatedAt: new Date(),\n })\n .where(eq(testYourselfConfigs.id, id));\n\n console.log('♻️ [DatabaseAdapter] 配置已恢复:', id);\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 恢复配置失败:', error);\n throw error;\n }\n }\n\n /**\n * 归档配置\n */\n async archiveConfig(id: string): Promise<void> {\n try {\n await this.db\n .update(testYourselfConfigs)\n .set({\n isArchived: true,\n archivedAt: new Date(),\n updatedBy: this.userId,\n updatedAt: new Date(),\n })\n .where(eq(testYourselfConfigs.id, id));\n\n console.log('📦 [DatabaseAdapter] 配置已归档:', id);\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 归档配置失败:', error);\n throw error;\n }\n }\n\n /**\n * 取消归档\n */\n async unarchiveConfig(id: string): Promise<void> {\n try {\n await this.db\n .update(testYourselfConfigs)\n .set({\n isArchived: false,\n archivedAt: null,\n updatedBy: this.userId,\n updatedAt: new Date(),\n })\n .where(eq(testYourselfConfigs.id, id));\n\n console.log('📂 [DatabaseAdapter] 配置已取消归档:', id);\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 取消归档失败:', error);\n throw error;\n }\n }\n\n /**\n * 记录使用次数\n */\n async incrementUsageCount(id: string): Promise<void> {\n try {\n await this.db\n .update(testYourselfConfigs)\n .set({\n usageCount: sql`${testYourselfConfigs.usageCount} + 1`,\n lastUsedAt: new Date(),\n })\n .where(eq(testYourselfConfigs.id, id));\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 更新使用次数失败:', error);\n // 不抛出错误,避免影响主流程\n }\n }\n}\n\n/**\n * 创建数据库配置适配器\n * \n * @example\n * ```typescript\n * import { drizzle } from 'drizzle-orm/postgres-js';\n * import { createDatabaseConfigAdapter } from './DatabaseConfigAdapter';\n * \n * const db = drizzle(connection);\n * const adapter = createDatabaseConfigAdapter({\n * db,\n * userId: 'user-123',\n * organizationId: 'org-456',\n * });\n * \n * // 在 ConfigService 中使用\n * const configService = new ConfigService({\n * storageType: 'custom',\n * customStorage: adapter,\n * });\n * ```\n */\nexport function createDatabaseConfigAdapter(\n options: DatabaseConfigAdapterOptions\n): DatabaseConfigAdapter {\n return new DatabaseConfigAdapter(options);\n}\n"]}