beatsaber-bot-core 0.2.0-rc.8 → 0.3.0-rc.1

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 (678) hide show
  1. package/dist/cjs/cmd/bind/bind-beatleader.js +2 -2
  2. package/dist/cjs/cmd/bind/bind-beatleader.js.map +1 -1
  3. package/dist/cjs/cmd/bind/bind-beatsaver.js +2 -2
  4. package/dist/cjs/cmd/bind/bind-beatsaver.js.map +1 -1
  5. package/dist/cjs/cmd/bind/bind-id-beatleader.js +3 -3
  6. package/dist/cjs/cmd/bind/bind-id-beatleader.js.map +1 -1
  7. package/dist/cjs/cmd/bind/bind-id-beatsaver.js +3 -3
  8. package/dist/cjs/cmd/bind/bind-id-beatsaver.js.map +1 -1
  9. package/dist/cjs/cmd/bind/bind-scoresaber.js +3 -3
  10. package/dist/cjs/cmd/bind/bind-scoresaber.js.map +1 -1
  11. package/dist/cjs/cmd/bind/index.js +12 -12
  12. package/dist/cjs/cmd/bind/index.js.map +1 -1
  13. package/dist/cjs/cmd/bsmap/id-search.js +3 -3
  14. package/dist/cjs/cmd/bsmap/id-search.js.map +1 -1
  15. package/dist/cjs/cmd/bsmap/key-search.js +2 -2
  16. package/dist/cjs/cmd/bsmap/key-search.js.map +1 -1
  17. package/dist/cjs/cmd/bsmap/latest.js +2 -2
  18. package/dist/cjs/cmd/bsmap/latest.js.map +1 -1
  19. package/dist/cjs/cmd/deprecated/tmp.js +4 -4
  20. package/dist/cjs/cmd/deprecated/tmp.js.map +1 -1
  21. package/dist/cjs/cmd/index.js +11 -11
  22. package/dist/cjs/cmd/index.js.map +1 -1
  23. package/dist/cjs/cmd/rank.js +8 -8
  24. package/dist/cjs/cmd/rank.js.map +1 -1
  25. package/dist/cjs/cmd/score.js +16 -20
  26. package/dist/cjs/cmd/score.js.map +1 -1
  27. package/dist/cjs/cmd/subscribe/beatleader.js +3 -3
  28. package/dist/cjs/cmd/subscribe/beatleader.js.map +1 -1
  29. package/dist/cjs/cmd/subscribe/beatsaver.js +3 -3
  30. package/dist/cjs/cmd/subscribe/beatsaver.js.map +1 -1
  31. package/dist/cjs/cmd/subscribe/id-beatleader-score.js +4 -4
  32. package/dist/cjs/cmd/subscribe/id-beatleader-score.js.map +1 -1
  33. package/dist/cjs/cmd/subscribe/id-beatsaver-mapper.js +4 -4
  34. package/dist/cjs/cmd/subscribe/id-beatsaver-mapper.js.map +1 -1
  35. package/dist/cjs/cmd/subscribe/index.js +8 -8
  36. package/dist/cjs/cmd/subscribe/index.js.map +1 -1
  37. package/dist/cjs/cmd/subscribe/subjoin.js +6 -6
  38. package/dist/cjs/cmd/subscribe/subjoin.js.map +1 -1
  39. package/dist/cjs/cmd/subscribe/subleave.js +6 -6
  40. package/dist/cjs/cmd/subscribe/subleave.js.map +1 -1
  41. package/dist/cjs/cmd/subscribe/unsubscribe.js +8 -8
  42. package/dist/cjs/cmd/subscribe/unsubscribe.js.map +1 -1
  43. package/dist/cjs/common/cache.js.map +1 -0
  44. package/dist/cjs/common/fetch/error.js.map +1 -0
  45. package/dist/cjs/{infra/support → common}/fetch/index.js +16 -14
  46. package/dist/cjs/common/fetch/index.js.map +1 -0
  47. package/dist/cjs/{infra/support → common}/fetch/ofetch.js +5 -12
  48. package/dist/cjs/common/fetch/ofetch.js.map +1 -0
  49. package/dist/cjs/common/i18n/index.js +55 -0
  50. package/dist/cjs/common/i18n/index.js.map +1 -0
  51. package/dist/cjs/common/i18n/parser.js.map +1 -0
  52. package/dist/cjs/{infra/i18n/index.js → common/i18n/util.js} +10 -71
  53. package/dist/cjs/common/i18n/util.js.map +1 -0
  54. package/dist/cjs/{infra/support → common}/render/index.js +55 -15
  55. package/dist/cjs/common/render/index.js.map +1 -0
  56. package/dist/cjs/common/render/puppeteer.js.map +1 -0
  57. package/dist/cjs/{infra → common}/s3/index.js +34 -13
  58. package/dist/cjs/common/s3/index.js.map +1 -0
  59. package/dist/cjs/components/components/RankDifficulty.js +60 -84
  60. package/dist/cjs/components/components/RankDifficulty.js.map +1 -1
  61. package/dist/cjs/components/components/base/avatar.js +1 -2
  62. package/dist/cjs/components/components/base/avatar.js.map +1 -1
  63. package/dist/cjs/components/components/bl-rank-score-item.js +25 -87
  64. package/dist/cjs/components/components/bl-rank-score-item.js.map +1 -1
  65. package/dist/cjs/components/components/bl-score-item.js +28 -69
  66. package/dist/cjs/components/components/bl-score-item.js.map +1 -1
  67. package/dist/cjs/components/components/characteristic.js +106 -118
  68. package/dist/cjs/components/components/characteristic.js.map +1 -1
  69. package/dist/cjs/components/components/flag.js +6 -14
  70. package/dist/cjs/components/components/flag.js.map +1 -1
  71. package/dist/cjs/components/components/icons/BeatLeader.js +55 -71
  72. package/dist/cjs/components/components/icons/BeatLeader.js.map +1 -1
  73. package/dist/cjs/components/components/icons/RankIcon.js +3 -7
  74. package/dist/cjs/components/components/icons/RankIcon.js.map +1 -1
  75. package/dist/cjs/components/components/icons/ScoreSaberIcon.js +276 -312
  76. package/dist/cjs/components/components/icons/ScoreSaberIcon.js.map +1 -1
  77. package/dist/cjs/components/components/progressbar.js +12 -2
  78. package/dist/cjs/components/components/progressbar.js.map +1 -1
  79. package/dist/cjs/components/components/scoreItem.js +26 -63
  80. package/dist/cjs/components/components/scoreItem.js.map +1 -1
  81. package/dist/cjs/components/components/scoregraph.js +4 -5
  82. package/dist/cjs/components/components/scoregraph.js.map +1 -1
  83. package/dist/cjs/components/components/skill-graph.js +147 -164
  84. package/dist/cjs/components/components/skill-graph.js.map +1 -1
  85. package/dist/cjs/components/components/socre-badge.js +7 -10
  86. package/dist/cjs/components/components/socre-badge.js.map +1 -1
  87. package/dist/cjs/components/components/ss-rank-score-item.js +25 -87
  88. package/dist/cjs/components/components/ss-rank-score-item.js.map +1 -1
  89. package/dist/cjs/components/components/ss-score-item.js +38 -65
  90. package/dist/cjs/components/components/ss-score-item.js.map +1 -1
  91. package/dist/cjs/components/index.js +3 -43
  92. package/dist/cjs/components/index.js.map +1 -1
  93. package/dist/cjs/components/pages/bl-player.js +91 -136
  94. package/dist/cjs/components/pages/bl-player.js.map +1 -1
  95. package/dist/cjs/components/pages/bl-score-with-rank.js +114 -221
  96. package/dist/cjs/components/pages/bl-score-with-rank.js.map +1 -1
  97. package/dist/cjs/components/pages/bl-score.js +67 -169
  98. package/dist/cjs/components/pages/bl-score.js.map +1 -1
  99. package/dist/cjs/components/pages/bs-map.js +95 -166
  100. package/dist/cjs/components/pages/bs-map.js.map +1 -1
  101. package/dist/cjs/components/pages/index.js +26 -26
  102. package/dist/cjs/components/pages/index.js.map +1 -1
  103. package/dist/cjs/components/pages/ss-player.js +48 -77
  104. package/dist/cjs/components/pages/ss-player.js.map +1 -1
  105. package/dist/cjs/components/utils/bl/bsorReplayAcc.js +2 -2
  106. package/dist/cjs/components/utils/bl/bsorReplayAcc.js.map +1 -1
  107. package/dist/cjs/components/utils/bl/getPart.js.map +1 -1
  108. package/dist/cjs/components/utils/bl/stastic.js.map +1 -1
  109. package/dist/cjs/components/utils/format.js +3 -3
  110. package/dist/cjs/components/utils/format.js.map +1 -1
  111. package/dist/cjs/components/utils/getMods.js.map +1 -1
  112. package/dist/cjs/components/utils/index.js +4 -4
  113. package/dist/cjs/config.js +40 -0
  114. package/dist/cjs/config.js.map +1 -1
  115. package/dist/cjs/{interface → core}/cmd/builder.js +5 -5
  116. package/dist/cjs/core/cmd/builder.js.map +1 -0
  117. package/dist/cjs/core/cmd/type.js.map +1 -0
  118. package/dist/cjs/core/domain.js +16 -0
  119. package/dist/cjs/core/domain.js.map +1 -0
  120. package/dist/cjs/core/error.js +38 -0
  121. package/dist/cjs/core/error.js.map +1 -0
  122. package/dist/cjs/{interface/bot.js → core/event.js} +3 -3
  123. package/dist/cjs/core/event.js.map +1 -0
  124. package/dist/cjs/core/index.js +39 -0
  125. package/dist/cjs/core/index.js.map +1 -0
  126. package/dist/cjs/core/logger.js.map +1 -0
  127. package/dist/cjs/core/session.js +16 -0
  128. package/dist/cjs/core/session.js.map +1 -0
  129. package/dist/cjs/{schedules → events/schedules}/index.js +4 -3
  130. package/dist/cjs/events/schedules/index.js.map +1 -0
  131. package/dist/cjs/{schedules → events/schedules}/temp.js +7 -3
  132. package/dist/cjs/events/schedules/temp.js.map +1 -0
  133. package/dist/cjs/{ws → events/ws}/beatleader.js +6 -6
  134. package/dist/cjs/events/ws/beatleader.js.map +1 -0
  135. package/dist/cjs/{ws → events/ws}/beatsaver.js +11 -11
  136. package/dist/cjs/events/ws/beatsaver.js.map +1 -0
  137. package/dist/cjs/events/ws/handler.js.map +1 -0
  138. package/dist/cjs/{ws → events/ws}/index.js +6 -8
  139. package/dist/cjs/events/ws/index.js.map +1 -0
  140. package/dist/cjs/index.js +27 -18
  141. package/dist/cjs/index.js.map +1 -1
  142. package/dist/cjs/interface/db/index.js +0 -6
  143. package/dist/cjs/interface/db/index.js.map +1 -1
  144. package/dist/cjs/interface/db/models.js.map +1 -1
  145. package/dist/cjs/interface/index.js +12 -21
  146. package/dist/cjs/interface/index.js.map +1 -1
  147. package/dist/cjs/{service → services}/api/base/aioclient.js +1 -1
  148. package/dist/cjs/services/api/base/aioclient.js.map +1 -0
  149. package/dist/cjs/{service → services}/api/base/blclient.js +1 -1
  150. package/dist/cjs/services/api/base/blclient.js.map +1 -0
  151. package/dist/cjs/{service → services}/api/base/bsclient.js +2 -2
  152. package/dist/cjs/services/api/base/bsclient.js.map +1 -0
  153. package/dist/cjs/{service → services}/api/base/index.js +8 -8
  154. package/dist/cjs/services/api/base/index.js.map +1 -0
  155. package/dist/cjs/{service → services}/api/base/ssclient.js +2 -2
  156. package/dist/cjs/services/api/base/ssclient.js.map +1 -0
  157. package/dist/cjs/{service → services}/api/index.js +17 -9
  158. package/dist/cjs/services/api/index.js.map +1 -0
  159. package/dist/cjs/services/api/interfaces/aiosaber/index.js.map +1 -0
  160. package/dist/cjs/services/api/interfaces/beatleader/bsor.js.map +1 -0
  161. package/dist/cjs/{service → services}/api/interfaces/beatleader/index.js +10 -10
  162. package/dist/cjs/services/api/interfaces/beatleader/index.js.map +1 -0
  163. package/dist/cjs/services/api/interfaces/beatleader/req.js.map +1 -0
  164. package/dist/cjs/services/api/interfaces/beatleader/score.js.map +1 -0
  165. package/dist/cjs/services/api/interfaces/beatleader/user.js.map +1 -0
  166. package/dist/cjs/services/api/interfaces/beatleader/ws.js.map +1 -0
  167. package/dist/cjs/services/api/interfaces/beatsaver/alert.js.map +1 -0
  168. package/dist/cjs/services/api/interfaces/beatsaver/bsmap.js.map +1 -0
  169. package/dist/cjs/{service → services}/api/interfaces/beatsaver/index.js +10 -10
  170. package/dist/cjs/services/api/interfaces/beatsaver/index.js.map +1 -0
  171. package/dist/cjs/services/api/interfaces/beatsaver/resp.js.map +1 -0
  172. package/dist/cjs/services/api/interfaces/beatsaver/user.js.map +1 -0
  173. package/dist/cjs/services/api/interfaces/beatsaver/ws.js.map +1 -0
  174. package/dist/cjs/services/api/interfaces/index.js.map +1 -0
  175. package/dist/cjs/{service → services}/api/interfaces/scoresaber/index.js +6 -6
  176. package/dist/cjs/services/api/interfaces/scoresaber/index.js.map +1 -0
  177. package/dist/cjs/services/api/interfaces/scoresaber/item.js.map +1 -0
  178. package/dist/cjs/services/api/interfaces/scoresaber/leaderboard.js.map +1 -0
  179. package/dist/cjs/services/api/interfaces/scoresaber/resp.js.map +1 -0
  180. package/dist/cjs/services/api/interfaces/scoresaber/user.js.map +1 -0
  181. package/dist/cjs/services/api/interfaces/scoresaber/ws.js.map +1 -0
  182. package/dist/cjs/services/api/sortScore.js.map +1 -0
  183. package/dist/cjs/{infra → services}/errors/index.js +21 -38
  184. package/dist/cjs/services/errors/index.js.map +1 -0
  185. package/dist/cjs/services/i18n/index.js +43 -0
  186. package/dist/cjs/services/i18n/index.js.map +1 -0
  187. package/dist/cjs/{infra → services}/i18n/zh-cn.json +1 -1
  188. package/dist/cjs/{infra → services}/index.js +12 -9
  189. package/dist/cjs/services/index.js.map +1 -0
  190. package/dist/cjs/services/preference.js.map +1 -0
  191. package/dist/cjs/{service → services}/render/index.js +36 -13
  192. package/dist/cjs/services/render/index.js.map +1 -0
  193. package/dist/cjs/utils/bsorDecoder.js +329 -0
  194. package/dist/cjs/utils/bsorDecoder.js.map +1 -0
  195. package/dist/cjs/utils/index.js +6 -1
  196. package/dist/cjs/utils/index.js.map +1 -1
  197. package/dist/cjs/utils/platform.js +38 -0
  198. package/dist/cjs/utils/platform.js.map +1 -0
  199. package/dist/esm/cmd/bind/bind-beatleader.js +2 -2
  200. package/dist/esm/cmd/bind/bind-beatleader.js.map +1 -1
  201. package/dist/esm/cmd/bind/bind-beatsaver.js +2 -2
  202. package/dist/esm/cmd/bind/bind-beatsaver.js.map +1 -1
  203. package/dist/esm/cmd/bind/bind-id-beatleader.js +3 -3
  204. package/dist/esm/cmd/bind/bind-id-beatleader.js.map +1 -1
  205. package/dist/esm/cmd/bind/bind-id-beatsaver.js +3 -3
  206. package/dist/esm/cmd/bind/bind-id-beatsaver.js.map +1 -1
  207. package/dist/esm/cmd/bind/bind-scoresaber.js +3 -3
  208. package/dist/esm/cmd/bind/bind-scoresaber.js.map +1 -1
  209. package/dist/esm/cmd/bind/index.js +5 -5
  210. package/dist/esm/cmd/bind/index.js.map +1 -1
  211. package/dist/esm/cmd/bsmap/id-search.js +2 -2
  212. package/dist/esm/cmd/bsmap/id-search.js.map +1 -1
  213. package/dist/esm/cmd/bsmap/key-search.js +1 -1
  214. package/dist/esm/cmd/bsmap/key-search.js.map +1 -1
  215. package/dist/esm/cmd/bsmap/latest.js +2 -2
  216. package/dist/esm/cmd/bsmap/latest.js.map +1 -1
  217. package/dist/esm/cmd/deprecated/tmp.js +3 -3
  218. package/dist/esm/cmd/deprecated/tmp.js.map +1 -1
  219. package/dist/esm/cmd/index.js +11 -11
  220. package/dist/esm/cmd/index.js.map +1 -1
  221. package/dist/esm/cmd/rank.js +5 -5
  222. package/dist/esm/cmd/rank.js.map +1 -1
  223. package/dist/esm/cmd/score.js +13 -17
  224. package/dist/esm/cmd/score.js.map +1 -1
  225. package/dist/esm/cmd/subscribe/beatleader.js +3 -3
  226. package/dist/esm/cmd/subscribe/beatleader.js.map +1 -1
  227. package/dist/esm/cmd/subscribe/beatsaver.js +3 -3
  228. package/dist/esm/cmd/subscribe/beatsaver.js.map +1 -1
  229. package/dist/esm/cmd/subscribe/id-beatleader-score.js +4 -4
  230. package/dist/esm/cmd/subscribe/id-beatleader-score.js.map +1 -1
  231. package/dist/esm/cmd/subscribe/id-beatsaver-mapper.js +4 -4
  232. package/dist/esm/cmd/subscribe/id-beatsaver-mapper.js.map +1 -1
  233. package/dist/esm/cmd/subscribe/index.js +7 -7
  234. package/dist/esm/cmd/subscribe/index.js.map +1 -1
  235. package/dist/esm/cmd/subscribe/subjoin.js +5 -5
  236. package/dist/esm/cmd/subscribe/subjoin.js.map +1 -1
  237. package/dist/esm/cmd/subscribe/subleave.js +5 -5
  238. package/dist/esm/cmd/subscribe/subleave.js.map +1 -1
  239. package/dist/esm/cmd/subscribe/unsubscribe.js +7 -7
  240. package/dist/esm/cmd/subscribe/unsubscribe.js.map +1 -1
  241. package/dist/esm/common/cache.js.map +1 -0
  242. package/dist/esm/common/fetch/error.js.map +1 -0
  243. package/dist/esm/common/fetch/index.js +35 -0
  244. package/dist/esm/common/fetch/index.js.map +1 -0
  245. package/dist/esm/{infra/support → common}/fetch/ofetch.js +4 -10
  246. package/dist/esm/common/fetch/ofetch.js.map +1 -0
  247. package/dist/esm/common/i18n/index.js +32 -0
  248. package/dist/esm/common/i18n/index.js.map +1 -0
  249. package/dist/esm/common/i18n/parser.js.map +1 -0
  250. package/dist/esm/{infra/i18n/index.js → common/i18n/util.js} +4 -56
  251. package/dist/esm/common/i18n/util.js.map +1 -0
  252. package/dist/esm/{infra/support → common}/render/index.js +53 -13
  253. package/dist/esm/common/render/index.js.map +1 -0
  254. package/dist/esm/common/render/puppeteer.js.map +1 -0
  255. package/dist/esm/{infra → common}/s3/index.js +32 -12
  256. package/dist/esm/common/s3/index.js.map +1 -0
  257. package/dist/esm/components/components/RankDifficulty.js +60 -84
  258. package/dist/esm/components/components/RankDifficulty.js.map +1 -1
  259. package/dist/esm/components/components/base/avatar.js +1 -2
  260. package/dist/esm/components/components/base/avatar.js.map +1 -1
  261. package/dist/esm/components/components/bl-rank-score-item.js +25 -87
  262. package/dist/esm/components/components/bl-rank-score-item.js.map +1 -1
  263. package/dist/esm/components/components/bl-score-item.js +28 -69
  264. package/dist/esm/components/components/bl-score-item.js.map +1 -1
  265. package/dist/esm/components/components/characteristic.js +106 -118
  266. package/dist/esm/components/components/characteristic.js.map +1 -1
  267. package/dist/esm/components/components/flag.js +6 -14
  268. package/dist/esm/components/components/flag.js.map +1 -1
  269. package/dist/esm/components/components/icons/BeatLeader.js +55 -71
  270. package/dist/esm/components/components/icons/BeatLeader.js.map +1 -1
  271. package/dist/esm/components/components/icons/RankIcon.js +3 -7
  272. package/dist/esm/components/components/icons/RankIcon.js.map +1 -1
  273. package/dist/esm/components/components/icons/ScoreSaberIcon.js +276 -312
  274. package/dist/esm/components/components/icons/ScoreSaberIcon.js.map +1 -1
  275. package/dist/esm/components/components/progressbar.js +2 -2
  276. package/dist/esm/components/components/progressbar.js.map +1 -1
  277. package/dist/esm/components/components/scoreItem.js +26 -63
  278. package/dist/esm/components/components/scoreItem.js.map +1 -1
  279. package/dist/esm/components/components/scoregraph.js +4 -5
  280. package/dist/esm/components/components/scoregraph.js.map +1 -1
  281. package/dist/esm/components/components/skill-graph.js +147 -164
  282. package/dist/esm/components/components/skill-graph.js.map +1 -1
  283. package/dist/esm/components/components/socre-badge.js +7 -10
  284. package/dist/esm/components/components/socre-badge.js.map +1 -1
  285. package/dist/esm/components/components/ss-rank-score-item.js +25 -87
  286. package/dist/esm/components/components/ss-rank-score-item.js.map +1 -1
  287. package/dist/esm/components/components/ss-score-item.js +28 -65
  288. package/dist/esm/components/components/ss-score-item.js.map +1 -1
  289. package/dist/esm/components/index.js +3 -43
  290. package/dist/esm/components/index.js.map +1 -1
  291. package/dist/esm/components/pages/bl-player.js +91 -136
  292. package/dist/esm/components/pages/bl-player.js.map +1 -1
  293. package/dist/esm/components/pages/bl-score-with-rank.js +114 -221
  294. package/dist/esm/components/pages/bl-score-with-rank.js.map +1 -1
  295. package/dist/esm/components/pages/bl-score.js +67 -169
  296. package/dist/esm/components/pages/bl-score.js.map +1 -1
  297. package/dist/esm/components/pages/bs-map.js +95 -166
  298. package/dist/esm/components/pages/bs-map.js.map +1 -1
  299. package/dist/esm/components/pages/index.js +21 -21
  300. package/dist/esm/components/pages/index.js.map +1 -1
  301. package/dist/esm/components/pages/ss-player.js +48 -77
  302. package/dist/esm/components/pages/ss-player.js.map +1 -1
  303. package/dist/esm/components/utils/bl/bsorReplayAcc.js +2 -2
  304. package/dist/esm/components/utils/bl/bsorReplayAcc.js.map +1 -1
  305. package/dist/esm/components/utils/bl/getPart.js.map +1 -1
  306. package/dist/esm/components/utils/bl/stastic.js.map +1 -1
  307. package/dist/esm/components/utils/format.js +3 -3
  308. package/dist/esm/components/utils/format.js.map +1 -1
  309. package/dist/esm/components/utils/getMods.js.map +1 -1
  310. package/dist/esm/components/utils/index.js +2 -2
  311. package/dist/esm/config.js +32 -0
  312. package/dist/esm/config.js.map +1 -1
  313. package/dist/esm/{interface → core}/cmd/builder.js +4 -4
  314. package/dist/esm/core/cmd/builder.js.map +1 -0
  315. package/dist/esm/core/domain.js +1 -0
  316. package/dist/esm/core/error.js +16 -0
  317. package/dist/esm/core/error.js.map +1 -0
  318. package/dist/esm/core/event.js +1 -0
  319. package/dist/esm/core/index.js +10 -0
  320. package/dist/esm/core/index.js.map +1 -0
  321. package/dist/esm/core/session.js +1 -0
  322. package/dist/esm/events/schedules/index.js +16 -0
  323. package/dist/esm/events/schedules/index.js.map +1 -0
  324. package/dist/esm/{schedules → events/schedules}/temp.js +7 -3
  325. package/dist/esm/events/schedules/temp.js.map +1 -0
  326. package/dist/esm/{ws → events/ws}/beatleader.js +6 -6
  327. package/dist/esm/events/ws/beatleader.js.map +1 -0
  328. package/dist/esm/{ws → events/ws}/beatsaver.js +11 -11
  329. package/dist/esm/events/ws/beatsaver.js.map +1 -0
  330. package/dist/esm/events/ws/index.js +4 -0
  331. package/dist/esm/events/ws/index.js.map +1 -0
  332. package/dist/esm/index.js +15 -10
  333. package/dist/esm/index.js.map +1 -1
  334. package/dist/esm/interface/db/index.js +0 -1
  335. package/dist/esm/interface/db/index.js.map +1 -1
  336. package/dist/esm/interface/index.js +9 -15
  337. package/dist/esm/interface/index.js.map +1 -1
  338. package/dist/esm/{service → services}/api/base/aioclient.js +1 -1
  339. package/dist/esm/services/api/base/aioclient.js.map +1 -0
  340. package/dist/esm/{service → services}/api/base/blclient.js +1 -1
  341. package/dist/esm/services/api/base/blclient.js.map +1 -0
  342. package/dist/esm/{service → services}/api/base/bsclient.js +2 -2
  343. package/dist/esm/services/api/base/bsclient.js.map +1 -0
  344. package/dist/esm/services/api/base/index.js +5 -0
  345. package/dist/esm/services/api/base/index.js.map +1 -0
  346. package/dist/esm/{service → services}/api/base/ssclient.js +2 -2
  347. package/dist/esm/services/api/base/ssclient.js.map +1 -0
  348. package/dist/esm/{service → services}/api/index.js +16 -8
  349. package/dist/esm/services/api/index.js.map +1 -0
  350. package/dist/esm/services/api/interfaces/beatleader/index.js +6 -0
  351. package/dist/esm/services/api/interfaces/beatleader/index.js.map +1 -0
  352. package/dist/esm/services/api/interfaces/beatsaver/index.js +6 -0
  353. package/dist/esm/services/api/interfaces/beatsaver/index.js.map +1 -0
  354. package/dist/esm/services/api/interfaces/scoresaber/index.js +4 -0
  355. package/dist/esm/services/api/interfaces/scoresaber/index.js.map +1 -0
  356. package/dist/esm/services/api/sortScore.js.map +1 -0
  357. package/dist/esm/{infra → services}/errors/index.js +1 -17
  358. package/dist/esm/services/errors/index.js.map +1 -0
  359. package/dist/esm/services/i18n/index.js +21 -0
  360. package/dist/esm/services/i18n/index.js.map +1 -0
  361. package/dist/esm/services/index.js +9 -0
  362. package/dist/esm/services/index.js.map +1 -0
  363. package/dist/esm/services/preference.js.map +1 -0
  364. package/dist/esm/{service → services}/render/index.js +34 -11
  365. package/dist/esm/services/render/index.js.map +1 -0
  366. package/dist/esm/utils/bsorDecoder.js +301 -0
  367. package/dist/esm/utils/bsorDecoder.js.map +1 -0
  368. package/dist/esm/utils/index.js +2 -0
  369. package/dist/esm/utils/index.js.map +1 -1
  370. package/dist/esm/utils/platform.js +14 -0
  371. package/dist/esm/utils/platform.js.map +1 -0
  372. package/dist/types/index.d.ts +1376 -48
  373. package/package.json +19 -10
  374. package/dist/cjs/components/utils/canvas.js +0 -2
  375. package/dist/cjs/components/utils/canvas.js.map +0 -1
  376. package/dist/cjs/infra/errors/index.js.map +0 -1
  377. package/dist/cjs/infra/i18n/index.js.map +0 -1
  378. package/dist/cjs/infra/i18n/parser.js.map +0 -1
  379. package/dist/cjs/infra/index.js.map +0 -1
  380. package/dist/cjs/infra/s3/index.js.map +0 -1
  381. package/dist/cjs/infra/support/cache.js.map +0 -1
  382. package/dist/cjs/infra/support/fetch/error.js.map +0 -1
  383. package/dist/cjs/infra/support/fetch/index.js.map +0 -1
  384. package/dist/cjs/infra/support/fetch/ofetch.js.map +0 -1
  385. package/dist/cjs/infra/support/render/index.js.map +0 -1
  386. package/dist/cjs/infra/support/render/puppeteer.js.map +0 -1
  387. package/dist/cjs/interface/bot.js.map +0 -1
  388. package/dist/cjs/interface/cmd/builder.js.map +0 -1
  389. package/dist/cjs/interface/cmd/type.js.map +0 -1
  390. package/dist/cjs/interface/logger.js.map +0 -1
  391. package/dist/cjs/schedules/index.js.map +0 -1
  392. package/dist/cjs/schedules/interface.js +0 -16
  393. package/dist/cjs/schedules/interface.js.map +0 -1
  394. package/dist/cjs/schedules/temp.js.map +0 -1
  395. package/dist/cjs/service/api/base/aioclient.js.map +0 -1
  396. package/dist/cjs/service/api/base/blclient.js.map +0 -1
  397. package/dist/cjs/service/api/base/bsclient.js.map +0 -1
  398. package/dist/cjs/service/api/base/index.js.map +0 -1
  399. package/dist/cjs/service/api/base/ssclient.js.map +0 -1
  400. package/dist/cjs/service/api/index.js.map +0 -1
  401. package/dist/cjs/service/api/interfaces/aiosaber/index.js.map +0 -1
  402. package/dist/cjs/service/api/interfaces/beatleader/bsor.js.map +0 -1
  403. package/dist/cjs/service/api/interfaces/beatleader/index.js.map +0 -1
  404. package/dist/cjs/service/api/interfaces/beatleader/req.js.map +0 -1
  405. package/dist/cjs/service/api/interfaces/beatleader/score.js.map +0 -1
  406. package/dist/cjs/service/api/interfaces/beatleader/user.js.map +0 -1
  407. package/dist/cjs/service/api/interfaces/beatleader/ws.js.map +0 -1
  408. package/dist/cjs/service/api/interfaces/beatsaver/alert.js.map +0 -1
  409. package/dist/cjs/service/api/interfaces/beatsaver/bsmap.js.map +0 -1
  410. package/dist/cjs/service/api/interfaces/beatsaver/index.js.map +0 -1
  411. package/dist/cjs/service/api/interfaces/beatsaver/resp.js.map +0 -1
  412. package/dist/cjs/service/api/interfaces/beatsaver/user.js.map +0 -1
  413. package/dist/cjs/service/api/interfaces/beatsaver/ws.js.map +0 -1
  414. package/dist/cjs/service/api/interfaces/index.js.map +0 -1
  415. package/dist/cjs/service/api/interfaces/scoresaber/index.js.map +0 -1
  416. package/dist/cjs/service/api/interfaces/scoresaber/item.js.map +0 -1
  417. package/dist/cjs/service/api/interfaces/scoresaber/leaderboard.js.map +0 -1
  418. package/dist/cjs/service/api/interfaces/scoresaber/resp.js.map +0 -1
  419. package/dist/cjs/service/api/interfaces/scoresaber/user.js.map +0 -1
  420. package/dist/cjs/service/api/interfaces/scoresaber/ws.js.map +0 -1
  421. package/dist/cjs/service/api/sortScore.js.map +0 -1
  422. package/dist/cjs/service/index.js +0 -16
  423. package/dist/cjs/service/index.js.map +0 -1
  424. package/dist/cjs/service/preference.js.map +0 -1
  425. package/dist/cjs/service/render/index.js.map +0 -1
  426. package/dist/cjs/service/render/interfaces.js +0 -16
  427. package/dist/cjs/service/render/interfaces.js.map +0 -1
  428. package/dist/cjs/ws/beatleader.js.map +0 -1
  429. package/dist/cjs/ws/beatsaver.js.map +0 -1
  430. package/dist/cjs/ws/bl-filter.js +0 -1
  431. package/dist/cjs/ws/handler.js.map +0 -1
  432. package/dist/cjs/ws/index.js.map +0 -1
  433. package/dist/cjs/ws/scoresaber.js +0 -75
  434. package/dist/cjs/ws/scoresaber.js.map +0 -1
  435. package/dist/esm/components/utils/canvas.js +0 -2
  436. package/dist/esm/components/utils/canvas.js.map +0 -1
  437. package/dist/esm/infra/errors/index.js.map +0 -1
  438. package/dist/esm/infra/i18n/index.js.map +0 -1
  439. package/dist/esm/infra/i18n/parser.js.map +0 -1
  440. package/dist/esm/infra/index.js +0 -6
  441. package/dist/esm/infra/index.js.map +0 -1
  442. package/dist/esm/infra/s3/index.js.map +0 -1
  443. package/dist/esm/infra/support/cache.js.map +0 -1
  444. package/dist/esm/infra/support/fetch/error.js.map +0 -1
  445. package/dist/esm/infra/support/fetch/index.js +0 -33
  446. package/dist/esm/infra/support/fetch/index.js.map +0 -1
  447. package/dist/esm/infra/support/fetch/ofetch.js.map +0 -1
  448. package/dist/esm/infra/support/render/index.js.map +0 -1
  449. package/dist/esm/infra/support/render/puppeteer.js.map +0 -1
  450. package/dist/esm/interface/bot.js +0 -1
  451. package/dist/esm/interface/cmd/builder.js.map +0 -1
  452. package/dist/esm/schedules/index.js +0 -15
  453. package/dist/esm/schedules/index.js.map +0 -1
  454. package/dist/esm/schedules/interface.js +0 -1
  455. package/dist/esm/schedules/temp.js.map +0 -1
  456. package/dist/esm/service/api/base/aioclient.js.map +0 -1
  457. package/dist/esm/service/api/base/blclient.js.map +0 -1
  458. package/dist/esm/service/api/base/bsclient.js.map +0 -1
  459. package/dist/esm/service/api/base/index.js +0 -5
  460. package/dist/esm/service/api/base/index.js.map +0 -1
  461. package/dist/esm/service/api/base/ssclient.js.map +0 -1
  462. package/dist/esm/service/api/index.js.map +0 -1
  463. package/dist/esm/service/api/interfaces/beatleader/index.js +0 -6
  464. package/dist/esm/service/api/interfaces/beatleader/index.js.map +0 -1
  465. package/dist/esm/service/api/interfaces/beatsaver/index.js +0 -6
  466. package/dist/esm/service/api/interfaces/beatsaver/index.js.map +0 -1
  467. package/dist/esm/service/api/interfaces/scoresaber/index.js +0 -4
  468. package/dist/esm/service/api/interfaces/scoresaber/index.js.map +0 -1
  469. package/dist/esm/service/api/sortScore.js.map +0 -1
  470. package/dist/esm/service/index.js +0 -1
  471. package/dist/esm/service/index.js.map +0 -1
  472. package/dist/esm/service/preference.js.map +0 -1
  473. package/dist/esm/service/render/index.js.map +0 -1
  474. package/dist/esm/service/render/interfaces.js +0 -1
  475. package/dist/esm/service/render/interfaces.js.map +0 -1
  476. package/dist/esm/ws/beatleader.js.map +0 -1
  477. package/dist/esm/ws/beatsaver.js.map +0 -1
  478. package/dist/esm/ws/bl-filter.js +0 -1
  479. package/dist/esm/ws/bl-filter.js.map +0 -1
  480. package/dist/esm/ws/index.js +0 -5
  481. package/dist/esm/ws/index.js.map +0 -1
  482. package/dist/esm/ws/scoresaber.js +0 -53
  483. package/dist/esm/ws/scoresaber.js.map +0 -1
  484. package/dist/types/cmd/bind/bind-beatleader.d.ts +0 -34
  485. package/dist/types/cmd/bind/bind-beatsaver.d.ts +0 -34
  486. package/dist/types/cmd/bind/bind-id-beatleader.d.ts +0 -34
  487. package/dist/types/cmd/bind/bind-id-beatsaver.d.ts +0 -34
  488. package/dist/types/cmd/bind/bind-scoresaber.d.ts +0 -34
  489. package/dist/types/cmd/bind/index.d.ts +0 -41
  490. package/dist/types/cmd/bsmap/id-search.d.ts +0 -41
  491. package/dist/types/cmd/bsmap/key-search.d.ts +0 -41
  492. package/dist/types/cmd/bsmap/latest.d.ts +0 -41
  493. package/dist/types/cmd/config/index.d.ts +0 -2
  494. package/dist/types/cmd/deprecated/tmp.d.ts +0 -41
  495. package/dist/types/cmd/index.d.ts +0 -34
  496. package/dist/types/cmd/rank.d.ts +0 -41
  497. package/dist/types/cmd/score.d.ts +0 -41
  498. package/dist/types/cmd/subscribe/beatleader.d.ts +0 -34
  499. package/dist/types/cmd/subscribe/beatsaver.d.ts +0 -34
  500. package/dist/types/cmd/subscribe/id-beatleader-score.d.ts +0 -34
  501. package/dist/types/cmd/subscribe/id-beatsaver-mapper.d.ts +0 -34
  502. package/dist/types/cmd/subscribe/index.d.ts +0 -41
  503. package/dist/types/cmd/subscribe/subjoin.d.ts +0 -41
  504. package/dist/types/cmd/subscribe/subleave.d.ts +0 -41
  505. package/dist/types/cmd/subscribe/unsubscribe.d.ts +0 -41
  506. package/dist/types/components/components/RankDifficulty.d.ts +0 -10
  507. package/dist/types/components/components/base/avatar.d.ts +0 -10
  508. package/dist/types/components/components/bl-rank-score-item.d.ts +0 -21
  509. package/dist/types/components/components/bl-score-item.d.ts +0 -10
  510. package/dist/types/components/components/characteristic.d.ts +0 -9
  511. package/dist/types/components/components/flag.d.ts +0 -9
  512. package/dist/types/components/components/icons/BeatLeader.d.ts +0 -6
  513. package/dist/types/components/components/icons/RankIcon.d.ts +0 -8
  514. package/dist/types/components/components/icons/ScoreSaberIcon.d.ts +0 -6
  515. package/dist/types/components/components/progressbar.d.ts +0 -8
  516. package/dist/types/components/components/scoreItem.d.ts +0 -8
  517. package/dist/types/components/components/scoregraph.d.ts +0 -15
  518. package/dist/types/components/components/skill-graph.d.ts +0 -9
  519. package/dist/types/components/components/socre-badge.d.ts +0 -9
  520. package/dist/types/components/components/ss-rank-score-item.d.ts +0 -21
  521. package/dist/types/components/components/ss-score-item.d.ts +0 -8
  522. package/dist/types/components/index.d.ts +0 -5
  523. package/dist/types/components/pages/bl-player.d.ts +0 -11
  524. package/dist/types/components/pages/bl-score-with-rank.d.ts +0 -18
  525. package/dist/types/components/pages/bl-score.d.ts +0 -15
  526. package/dist/types/components/pages/bs-map.d.ts +0 -11
  527. package/dist/types/components/pages/index.d.ts +0 -14
  528. package/dist/types/components/pages/ss-player.d.ts +0 -13
  529. package/dist/types/components/utils/bl/beatleader.d.ts +0 -15
  530. package/dist/types/components/utils/bl/blheadset.d.ts +0 -275
  531. package/dist/types/components/utils/bl/bsorDecoder.d.ts +0 -189
  532. package/dist/types/components/utils/bl/bsorReplayAcc.d.ts +0 -38
  533. package/dist/types/components/utils/bl/getPart.d.ts +0 -9
  534. package/dist/types/components/utils/bl/stastic.d.ts +0 -3
  535. package/dist/types/components/utils/canvas.d.ts +0 -2
  536. package/dist/types/components/utils/format.d.ts +0 -8
  537. package/dist/types/components/utils/getMods.d.ts +0 -5
  538. package/dist/types/components/utils/index.d.ts +0 -6
  539. package/dist/types/components/utils/qrcode.d.ts +0 -3
  540. package/dist/types/components/utils/sleep.d.ts +0 -3
  541. package/dist/types/components/utils/tag-format.d.ts +0 -3
  542. package/dist/types/components/utils/tw-join.d.ts +0 -5
  543. package/dist/types/config.d.ts +0 -30
  544. package/dist/types/index-Dagy_c8G.d.ts +0 -74
  545. package/dist/types/infra/errors/index.d.ts +0 -69
  546. package/dist/types/infra/i18n/index.d.ts +0 -4
  547. package/dist/types/infra/i18n/parser.d.ts +0 -16
  548. package/dist/types/infra/index.d.ts +0 -6
  549. package/dist/types/infra/s3/index.d.ts +0 -20
  550. package/dist/types/infra/support/cache.d.ts +0 -6
  551. package/dist/types/infra/support/fetch/error.d.ts +0 -11
  552. package/dist/types/infra/support/fetch/index.d.ts +0 -7
  553. package/dist/types/infra/support/fetch/ofetch.d.ts +0 -24
  554. package/dist/types/infra/support/render/index.d.ts +0 -38
  555. package/dist/types/infra/support/render/puppeteer.d.ts +0 -43
  556. package/dist/types/interface/bot.d.ts +0 -22
  557. package/dist/types/interface/cmd/builder.d.ts +0 -53
  558. package/dist/types/interface/cmd/type.d.ts +0 -30
  559. package/dist/types/interface/db/index.d.ts +0 -45
  560. package/dist/types/interface/db/models.d.ts +0 -41
  561. package/dist/types/interface/index.d.ts +0 -30
  562. package/dist/types/interface/logger.d.ts +0 -8
  563. package/dist/types/schedules/index.d.ts +0 -40
  564. package/dist/types/schedules/interface.d.ts +0 -45
  565. package/dist/types/schedules/temp.d.ts +0 -35
  566. package/dist/types/service/api/base/aioclient.d.ts +0 -13
  567. package/dist/types/service/api/base/blclient.d.ts +0 -28
  568. package/dist/types/service/api/base/bsclient.d.ts +0 -29
  569. package/dist/types/service/api/base/index.d.ts +0 -19
  570. package/dist/types/service/api/base/ssclient.d.ts +0 -17
  571. package/dist/types/service/api/index.d.ts +0 -59
  572. package/dist/types/service/api/interfaces/aiosaber/index.d.ts +0 -9
  573. package/dist/types/service/api/interfaces/beatleader/bsor.d.ts +0 -113
  574. package/dist/types/service/api/interfaces/beatleader/index.d.ts +0 -5
  575. package/dist/types/service/api/interfaces/beatleader/req.d.ts +0 -22
  576. package/dist/types/service/api/interfaces/beatleader/score.d.ts +0 -164
  577. package/dist/types/service/api/interfaces/beatleader/user.d.ts +0 -173
  578. package/dist/types/service/api/interfaces/beatleader/ws.d.ts +0 -90
  579. package/dist/types/service/api/interfaces/beatsaver/alert.d.ts +0 -20
  580. package/dist/types/service/api/interfaces/beatsaver/bsmap.d.ts +0 -70
  581. package/dist/types/service/api/interfaces/beatsaver/index.d.ts +0 -13
  582. package/dist/types/service/api/interfaces/beatsaver/resp.d.ts +0 -11
  583. package/dist/types/service/api/interfaces/beatsaver/user.d.ts +0 -10
  584. package/dist/types/service/api/interfaces/beatsaver/ws.d.ts +0 -13
  585. package/dist/types/service/api/interfaces/index.d.ts +0 -14
  586. package/dist/types/service/api/interfaces/scoresaber/index.d.ts +0 -3
  587. package/dist/types/service/api/interfaces/scoresaber/item.d.ts +0 -67
  588. package/dist/types/service/api/interfaces/scoresaber/leaderboard.d.ts +0 -13
  589. package/dist/types/service/api/interfaces/scoresaber/resp.d.ts +0 -12
  590. package/dist/types/service/api/interfaces/scoresaber/user.d.ts +0 -35
  591. package/dist/types/service/api/interfaces/scoresaber/ws.d.ts +0 -80
  592. package/dist/types/service/api/sortScore.d.ts +0 -5
  593. package/dist/types/service/index.d.ts +0 -30
  594. package/dist/types/service/preference.d.ts +0 -38
  595. package/dist/types/service/render/index.d.ts +0 -43
  596. package/dist/types/service/render/interfaces.d.ts +0 -30
  597. package/dist/types/utils/index.d.ts +0 -5
  598. package/dist/types/ws/beatleader.d.ts +0 -47
  599. package/dist/types/ws/beatsaver.d.ts +0 -52
  600. package/dist/types/ws/bl-filter.d.ts +0 -2
  601. package/dist/types/ws/handler.d.ts +0 -8
  602. package/dist/types/ws/index.d.ts +0 -36
  603. package/dist/types/ws/scoresaber.d.ts +0 -47
  604. /package/dist/cjs/{infra/support → common}/cache.js +0 -0
  605. /package/dist/cjs/{infra/support → common}/fetch/error.js +0 -0
  606. /package/dist/cjs/{infra → common}/i18n/parser.js +0 -0
  607. /package/dist/cjs/{infra/support → common}/render/puppeteer.js +0 -0
  608. /package/dist/cjs/{interface → core}/cmd/type.js +0 -0
  609. /package/dist/cjs/{interface → core}/logger.js +0 -0
  610. /package/dist/cjs/{ws → events/ws}/handler.js +0 -0
  611. /package/dist/cjs/{service → services}/api/interfaces/aiosaber/index.js +0 -0
  612. /package/dist/cjs/{service → services}/api/interfaces/beatleader/bsor.js +0 -0
  613. /package/dist/cjs/{service → services}/api/interfaces/beatleader/req.js +0 -0
  614. /package/dist/cjs/{service → services}/api/interfaces/beatleader/score.js +0 -0
  615. /package/dist/cjs/{service → services}/api/interfaces/beatleader/user.js +0 -0
  616. /package/dist/cjs/{service → services}/api/interfaces/beatleader/ws.js +0 -0
  617. /package/dist/cjs/{service → services}/api/interfaces/beatsaver/alert.js +0 -0
  618. /package/dist/cjs/{service → services}/api/interfaces/beatsaver/bsmap.js +0 -0
  619. /package/dist/cjs/{service → services}/api/interfaces/beatsaver/resp.js +0 -0
  620. /package/dist/cjs/{service → services}/api/interfaces/beatsaver/user.js +0 -0
  621. /package/dist/cjs/{service → services}/api/interfaces/beatsaver/ws.js +0 -0
  622. /package/dist/cjs/{service → services}/api/interfaces/index.js +0 -0
  623. /package/dist/cjs/{service → services}/api/interfaces/scoresaber/item.js +0 -0
  624. /package/dist/cjs/{service → services}/api/interfaces/scoresaber/leaderboard.js +0 -0
  625. /package/dist/cjs/{service → services}/api/interfaces/scoresaber/resp.js +0 -0
  626. /package/dist/cjs/{service → services}/api/interfaces/scoresaber/user.js +0 -0
  627. /package/dist/cjs/{service → services}/api/interfaces/scoresaber/ws.js +0 -0
  628. /package/dist/cjs/{service → services}/api/sortScore.js +0 -0
  629. /package/dist/cjs/{service → services}/preference.js +0 -0
  630. /package/dist/esm/{infra/support → common}/cache.js +0 -0
  631. /package/dist/esm/{infra/support → common}/fetch/error.js +0 -0
  632. /package/dist/esm/{infra → common}/i18n/parser.js +0 -0
  633. /package/dist/esm/{infra/support → common}/render/puppeteer.js +0 -0
  634. /package/dist/esm/{interface → core}/cmd/type.js +0 -0
  635. /package/dist/esm/{interface → core}/cmd/type.js.map +0 -0
  636. /package/dist/{cjs/ws/bl-filter.js.map → esm/core/domain.js.map} +0 -0
  637. /package/dist/esm/{interface/bot.js.map → core/event.js.map} +0 -0
  638. /package/dist/esm/{interface → core}/logger.js +0 -0
  639. /package/dist/esm/{interface → core}/logger.js.map +0 -0
  640. /package/dist/esm/{schedules/interface.js.map → core/session.js.map} +0 -0
  641. /package/dist/esm/{ws → events/ws}/handler.js +0 -0
  642. /package/dist/esm/{ws → events/ws}/handler.js.map +0 -0
  643. /package/dist/esm/{service → services}/api/interfaces/aiosaber/index.js +0 -0
  644. /package/dist/esm/{service → services}/api/interfaces/aiosaber/index.js.map +0 -0
  645. /package/dist/esm/{service → services}/api/interfaces/beatleader/bsor.js +0 -0
  646. /package/dist/esm/{service → services}/api/interfaces/beatleader/bsor.js.map +0 -0
  647. /package/dist/esm/{service → services}/api/interfaces/beatleader/req.js +0 -0
  648. /package/dist/esm/{service → services}/api/interfaces/beatleader/req.js.map +0 -0
  649. /package/dist/esm/{service → services}/api/interfaces/beatleader/score.js +0 -0
  650. /package/dist/esm/{service → services}/api/interfaces/beatleader/score.js.map +0 -0
  651. /package/dist/esm/{service → services}/api/interfaces/beatleader/user.js +0 -0
  652. /package/dist/esm/{service → services}/api/interfaces/beatleader/user.js.map +0 -0
  653. /package/dist/esm/{service → services}/api/interfaces/beatleader/ws.js +0 -0
  654. /package/dist/esm/{service → services}/api/interfaces/beatleader/ws.js.map +0 -0
  655. /package/dist/esm/{service → services}/api/interfaces/beatsaver/alert.js +0 -0
  656. /package/dist/esm/{service → services}/api/interfaces/beatsaver/alert.js.map +0 -0
  657. /package/dist/esm/{service → services}/api/interfaces/beatsaver/bsmap.js +0 -0
  658. /package/dist/esm/{service → services}/api/interfaces/beatsaver/bsmap.js.map +0 -0
  659. /package/dist/esm/{service → services}/api/interfaces/beatsaver/resp.js +0 -0
  660. /package/dist/esm/{service → services}/api/interfaces/beatsaver/resp.js.map +0 -0
  661. /package/dist/esm/{service → services}/api/interfaces/beatsaver/user.js +0 -0
  662. /package/dist/esm/{service → services}/api/interfaces/beatsaver/user.js.map +0 -0
  663. /package/dist/esm/{service → services}/api/interfaces/beatsaver/ws.js +0 -0
  664. /package/dist/esm/{service → services}/api/interfaces/beatsaver/ws.js.map +0 -0
  665. /package/dist/esm/{service → services}/api/interfaces/index.js +0 -0
  666. /package/dist/esm/{service → services}/api/interfaces/index.js.map +0 -0
  667. /package/dist/esm/{service → services}/api/interfaces/scoresaber/item.js +0 -0
  668. /package/dist/esm/{service → services}/api/interfaces/scoresaber/item.js.map +0 -0
  669. /package/dist/esm/{service → services}/api/interfaces/scoresaber/leaderboard.js +0 -0
  670. /package/dist/esm/{service → services}/api/interfaces/scoresaber/leaderboard.js.map +0 -0
  671. /package/dist/esm/{service → services}/api/interfaces/scoresaber/resp.js +0 -0
  672. /package/dist/esm/{service → services}/api/interfaces/scoresaber/resp.js.map +0 -0
  673. /package/dist/esm/{service → services}/api/interfaces/scoresaber/user.js +0 -0
  674. /package/dist/esm/{service → services}/api/interfaces/scoresaber/user.js.map +0 -0
  675. /package/dist/esm/{service → services}/api/interfaces/scoresaber/ws.js +0 -0
  676. /package/dist/esm/{service → services}/api/interfaces/scoresaber/ws.js.map +0 -0
  677. /package/dist/esm/{service → services}/api/sortScore.js +0 -0
  678. /package/dist/esm/{service → services}/preference.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/pages/bs-map.tsx"],"sourcesContent":["/** @jsxImportSource react */\nimport React from 'react'\nimport RankIcon from '../components/icons/RankIcon'\nimport {\n Calendar,\n Clock,\n Gauge,\n HeartPulse,\n Key,\n Star,\n ThumbsDown,\n ThumbsUp,\n} from 'lucide-react'\nimport dayjs from 'dayjs'\nimport { diffConv, formatNumber, formatTime, getTag } from '../utils'\nimport { getMods } from '../utils/getMods'\nimport Progressbar from '../components/progressbar'\nimport { CharacteristicIcon } from '../components/characteristic'\nimport { BSMap } from '@/service/api/interfaces/beatsaver'\n\ninterface BSMapProps {\n bsMap: BSMap\n previewQrUrl: string\n bsMapQrUrl: string\n}\n\nexport default function BSMapShare({\n bsMap,\n bsMapQrUrl,\n previewQrUrl,\n}: BSMapProps) {\n // if ranked fetch rank star\n const bg = 'https://www.loliapi.com/acg/pe/'\n return (\n <>\n <div\n className={\n 'w-[400px] rounded-none flex flex-col relative h-auto my-auto'\n }\n id=\"render-result\"\n >\n <div className={'relative z-10'}>\n <div\n className={'bg-blend-darken bg-black/[.8] text-white rounded-none'}\n >\n <img\n src={bsMap.versions[0].coverURL}\n className=\"w-[400px]\"\n loading={'eager'}\n alt={'bsmap cover'}\n />\n <div className=\"flex w-full h-auto flex-col\">\n <div className=\"p-4\">\n <div className=\"text-ellipsis line-clamp-2\">\n <span className=\"text-ellipsis line-clamp-2 text-xl font-weight bg-gradient-to-r bg-clip-text text-transparent from-red-300 to-blue-300\">\n {bsMap.name}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <div className=\"author flex space-x-4 items-center \">\n <img\n src={bsMap.uploader.avatar}\n className=\"rounded-full w-8 h-8\"\n loading={'eager'}\n alt={'bsmap mapper avatar'}\n />\n <span className=\"text-xl\">{bsMap.uploader.name}</span>\n </div>\n </div>\n\n <div className=\"meta flex space-x-4 text-xs py-2 items-center\">\n <RankIcon blrank={bsMap.blRanked} ssrank={bsMap.ranked} />\n <div className=\"flex space-x-1 items-center justify-between\">\n <HeartPulse className=\"w-3 h-3\" />\n <span>{bsMap.metadata.bpm.toFixed(0)}</span>\n </div>\n <div className=\"flex space-x-1 items-center justify-between\">\n <Clock className=\"w-3 h-3\" />\n <span>\n {dayjs\n .duration(bsMap.metadata.duration, 'seconds')\n .format('mm:ss')}\n </span>\n </div>\n\n <div className=\"flex space-x-1 items-center justify-between\">\n <Key className=\"w-3 h-3\" />\n <span className=\"font-weight bg-gradient-to-r bg-clip-text text-transparent from-red-300 to-blue-300\">\n {bsMap.id}\n </span>\n </div>\n <div className=\"flex space-x-2 text-xs\">\n <span>\n <Calendar className=\"h-3 w-3\" />\n </span>\n <span>{formatTime(bsMap.lastPublishedAt)}</span>\n </div>\n </div>\n\n <div className=\"tags flex flex-wrap justify-start\">\n {bsMap.tags\n ?.sort((a, b) => b.length - a.length)\n ?.map((item) => (\n <span\n className=\"text-xs mx-1 text-white bg-red-500 rounded px-1\"\n key={item}\n >\n {getTag(item)}\n </span>\n ))}\n </div>\n <div className=\"tags flex flex-wrap justify-start pt-2\">\n {getMods(bsMap)\n ?.sort((a, b) => b.length - a.length)\n ?.map((item) => (\n <span\n className=\"text-xs mx-1 text-white bg-blue-500 rounded px-1\"\n key={item}\n >\n {item}\n </span>\n ))}\n </div>\n <div className=\"flex space-x-2\">\n <div className=\"percentage w-42 py-2 flex text-xs items-center space-x-4\">\n <Progressbar value={bsMap.stats.score * 100} />\n <span>{(bsMap.stats.score * 100).toFixed(1)}%</span>\n </div>\n <div className=\"flex space-x-1 items-center text-xs\">\n <span>\n <ThumbsUp className=\"h-3 w-3\" />\n </span>\n <span>{formatNumber(bsMap.stats.upvotes)}</span>\n </div>\n <div className=\"flex space-x-1 items-center text-xs\">\n <span>\n <ThumbsDown className=\"h-3 w-3\" />\n </span>\n <span>{formatNumber(bsMap.stats.downvotes)}</span>\n </div>\n </div>\n\n <span className=\"font-bold\">难度</span>\n <div className=\"grid grid-cols-2\">\n {bsMap.versions[0].diffs.map((diff) => (\n <div\n key={diff.difficulty + diff.characteristic}\n className=\"text-xs space-x-1 flex items-center\"\n >\n <span className=\"h-3 w-3 shrink-0\">\n <CharacteristicIcon\n characteristic={diff.characteristic}\n />\n </span>\n <span>{diffConv(diff.difficulty)}</span>\n <span>\n <Gauge className={'w-3 h-3 ml-1'} />\n </span>\n <span>{diff.nps.toFixed(2)}</span>\n {diff.stars && (\n <>\n <span>\n <Star className={'w-3 h-3 ml-1'} />\n </span>\n <span>{diff.stars?.toFixed(2)}</span>\n </>\n )}\n </div>\n ))}\n </div>\n\n <span className=\"font-bold\">描述</span>\n <p className=\"text-xs\">{bsMap.description}</p>\n\n <div className={'flex items-center justify-between pt-2'}>\n <div\n className={\n 'text-[10px] text-opacity-70 text-slate-100 align-bottom mt-auto mb-0'\n }\n >\n Powered by BSBot\n </div>\n <div className=\"flex items-center space-x-2\">\n <div className={'flex flex-col items-center'}>\n <img\n width={80}\n height={80}\n src={bsMapQrUrl}\n className=\"w-20 h-20\"\n />\n {/*<QRCode url={`https://beatsaver.com/maps/${bsMap.id}`} classNameame={'w-20'}/>*/}\n <div className={'text-[8px] font-light'}>beatsaver</div>\n </div>\n <div className={'flex flex-col items-center'}>\n <img\n width={80}\n height={80}\n src={previewQrUrl}\n className=\"w-20 h-20\"\n />\n {/*<QRCode url={`https://allpoland.github.io/ArcViewer/?id=${bsMap.id}`} className={'w-20'}/>*/}\n <div className={'text-[8px] font-light'}>preview</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <img\n src={bg}\n className={'inset-0 absolute h-full object-cover -z-10'}\n loading={'eager'}\n alt={'random background img'}\n />\n </div>\n </div>\n </>\n )\n}\n"],"mappings":"AA6CY,SAmHY,UAnHZ,KAcM,YAdN;AA3CZ,OAAO,cAAc;AACrB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,OAAO,WAAW;AAClB,SAAS,UAAU,cAAc,YAAY,cAAc;AAC3D,SAAS,eAAe;AACxB,OAAO,iBAAiB;AACxB,SAAS,0BAA0B;AASpB,SAAR,WAA4B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,GAAe;AA9Bf;AAgCE,QAAM,KAAK;AACX,SACE,gCACE;AAAA,IAAC;AAAA;AAAA,MACC,WACE;AAAA,MAEF,IAAG;AAAA,MAEH,+BAAC,SAAI,WAAW,iBACd;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,YAEX;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,KAAK,MAAM,SAAS,CAAC,EAAE;AAAA,kBACvB,WAAU;AAAA,kBACV,SAAS;AAAA,kBACT,KAAK;AAAA;AAAA,cACP;AAAA,cACA,oBAAC,SAAI,WAAU,+BACb,+BAAC,SAAI,WAAU,OACb;AAAA,oCAAC,SAAI,WAAU,+BACb,8BAAC,UAAK,WAAU,2HACb,gBAAM,MACT,GACF;AAAA,gBACA,oBAAC,SAAI,WAAU,qCACb,+BAAC,SAAI,WAAU,uCACb;AAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,KAAK,MAAM,SAAS;AAAA,sBACpB,WAAU;AAAA,sBACV,SAAS;AAAA,sBACT,KAAK;AAAA;AAAA,kBACP;AAAA,kBACA,oBAAC,UAAK,WAAU,WAAW,gBAAM,SAAS,MAAK;AAAA,mBACjD,GACF;AAAA,gBAEA,qBAAC,SAAI,WAAU,kDACb;AAAA,sCAAC,YAAS,QAAQ,MAAM,UAAU,QAAQ,MAAM,QAAQ;AAAA,kBACxD,qBAAC,SAAI,WAAU,+CACb;AAAA,wCAAC,cAAW,WAAU,WAAU;AAAA,oBAChC,oBAAC,UAAM,gBAAM,SAAS,IAAI,QAAQ,CAAC,GAAE;AAAA,qBACvC;AAAA,kBACA,qBAAC,SAAI,WAAU,+CACb;AAAA,wCAAC,SAAM,WAAU,WAAU;AAAA,oBAC3B,oBAAC,UACE,gBACE,SAAS,MAAM,SAAS,UAAU,SAAS,EAC3C,OAAO,OAAO,GACnB;AAAA,qBACF;AAAA,kBAEA,qBAAC,SAAI,WAAU,+CACb;AAAA,wCAAC,OAAI,WAAU,WAAU;AAAA,oBACzB,oBAAC,UAAK,WAAU,uFACb,gBAAM,IACT;AAAA,qBACF;AAAA,kBACA,qBAAC,SAAI,WAAU,0BACb;AAAA,wCAAC,UACC,8BAAC,YAAS,WAAU,WAAU,GAChC;AAAA,oBACA,oBAAC,UAAM,qBAAW,MAAM,eAAe,GAAE;AAAA,qBAC3C;AAAA,mBACF;AAAA,gBAEA,oBAAC,SAAI,WAAU,qCACZ,4BAAM,SAAN,mBACG,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,YAD/B,mBAEG,IAAI,CAAC,SACL;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAU;AAAA,oBAGT,iBAAO,IAAI;AAAA;AAAA,kBAFP;AAAA,gBAGP,IAEN;AAAA,gBACA,oBAAC,SAAI,WAAU,0CACZ,8BAAQ,KAAK,MAAb,mBACG,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,YAD/B,mBAEG,IAAI,CAAC,SACL;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAU;AAAA,oBAGT;AAAA;AAAA,kBAFI;AAAA,gBAGP,IAEN;AAAA,gBACA,qBAAC,SAAI,WAAU,kBACb;AAAA,uCAAC,SAAI,WAAU,4DACb;AAAA,wCAAC,eAAY,OAAO,MAAM,MAAM,QAAQ,KAAK;AAAA,oBAC7C,qBAAC,UAAO;AAAA,6BAAM,MAAM,QAAQ,KAAK,QAAQ,CAAC;AAAA,sBAAE;AAAA,uBAAC;AAAA,qBAC/C;AAAA,kBACA,qBAAC,SAAI,WAAU,uCACb;AAAA,wCAAC,UACC,8BAAC,YAAS,WAAU,WAAU,GAChC;AAAA,oBACA,oBAAC,UAAM,uBAAa,MAAM,MAAM,OAAO,GAAE;AAAA,qBAC3C;AAAA,kBACA,qBAAC,SAAI,WAAU,uCACb;AAAA,wCAAC,UACC,8BAAC,cAAW,WAAU,WAAU,GAClC;AAAA,oBACA,oBAAC,UAAM,uBAAa,MAAM,MAAM,SAAS,GAAE;AAAA,qBAC7C;AAAA,mBACF;AAAA,gBAEA,oBAAC,UAAK,WAAU,aAAY,0BAAE;AAAA,gBAC9B,oBAAC,SAAI,WAAU,oBACZ,gBAAM,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC,SAAM;AAhJtD,sBAAAA;AAiJoB;AAAA,oBAAC;AAAA;AAAA,sBAEC,WAAU;AAAA,sBAEV;AAAA,4CAAC,UAAK,WAAU,oBACd;AAAA,0BAAC;AAAA;AAAA,4BACC,gBAAgB,KAAK;AAAA;AAAA,wBACvB,GACF;AAAA,wBACA,oBAAC,UAAM,mBAAS,KAAK,UAAU,GAAE;AAAA,wBACjC,oBAAC,UACC,8BAAC,SAAM,WAAW,gBAAgB,GACpC;AAAA,wBACA,oBAAC,UAAM,eAAK,IAAI,QAAQ,CAAC,GAAE;AAAA,wBAC1B,KAAK,SACJ,iCACE;AAAA,8CAAC,UACC,8BAAC,QAAK,WAAW,gBAAgB,GACnC;AAAA,0BACA,oBAAC,UAAM,WAAAA,MAAA,KAAK,UAAL,gBAAAA,IAAY,QAAQ,IAAG;AAAA,2BAChC;AAAA;AAAA;AAAA,oBAnBG,KAAK,aAAa,KAAK;AAAA,kBAqB9B;AAAA,iBACD,GACH;AAAA,gBAEA,oBAAC,UAAK,WAAU,aAAY,0BAAE;AAAA,gBAC9B,oBAAC,OAAE,WAAU,WAAW,gBAAM,aAAY;AAAA,gBAE1C,qBAAC,SAAI,WAAW,0CACd;AAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,WACE;AAAA,sBAEH;AAAA;AAAA,kBAED;AAAA,kBACA,qBAAC,SAAI,WAAU,+BACb;AAAA,yCAAC,SAAI,WAAW,8BACd;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,OAAO;AAAA,0BACP,QAAQ;AAAA,0BACR,KAAK;AAAA,0BACL,WAAU;AAAA;AAAA,sBACZ;AAAA,sBAEA,oBAAC,SAAI,WAAW,yBAAyB,uBAAS;AAAA,uBACpD;AAAA,oBACA,qBAAC,SAAI,WAAW,8BACd;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,OAAO;AAAA,0BACP,QAAQ;AAAA,0BACR,KAAK;AAAA,0BACL,WAAU;AAAA;AAAA,sBACZ;AAAA,sBAEA,oBAAC,SAAI,WAAW,yBAAyB,qBAAO;AAAA,uBAClD;AAAA,qBACF;AAAA,mBACF;AAAA,iBACF,GACF;AAAA;AAAA;AAAA,QACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,WAAW;AAAA,YACX,SAAS;AAAA,YACT,KAAK;AAAA;AAAA,QACP;AAAA,SACF;AAAA;AAAA,EACF,GACF;AAEJ;","names":["_a"]}
1
+ {"version":3,"sources":["../../../../src/components/pages/bs-map.tsx"],"sourcesContent":["import React from 'react'\nimport RankIcon from '../components/icons/RankIcon'\nimport {\n Calendar,\n Clock,\n Gauge,\n HeartPulse,\n Key,\n Star,\n ThumbsDown,\n ThumbsUp,\n} from 'lucide-react'\nimport dayjs from 'dayjs'\nimport { diffConv, formatNumber, formatTime, getTag } from '../utils'\nimport { getMods } from '../utils/getMods'\nimport Progressbar from '../components/progressbar'\nimport { CharacteristicIcon } from '../components/characteristic'\nimport { BSMap } from '@/services/api/interfaces/beatsaver'\n\ninterface BSMapProps {\n bsMap: BSMap\n previewQrUrl: string\n bsMapQrUrl: string\n}\n\nexport default function BSMapShare({\n bsMap,\n bsMapQrUrl,\n previewQrUrl,\n}: BSMapProps) {\n // if ranked fetch rank star\n const bg = 'https://www.loliapi.com/acg/pe/'\n return (\n <>\n <div\n className={\n 'w-[400px] rounded-none flex flex-col relative h-auto my-auto'\n }\n id=\"render-result\"\n >\n <div className={'relative z-10'}>\n <div\n className={'bg-blend-darken bg-black/[.8] text-white rounded-none'}\n >\n <img\n src={bsMap.versions[0].coverURL}\n className=\"w-[400px]\"\n loading={'eager'}\n alt={'bsmap cover'}\n />\n <div className=\"flex w-full h-auto flex-col\">\n <div className=\"p-4\">\n <div className=\"text-ellipsis line-clamp-2\">\n <span className=\"text-ellipsis line-clamp-2 text-xl font-weight bg-gradient-to-r bg-clip-text text-transparent from-red-300 to-blue-300\">\n {bsMap.name}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <div className=\"author flex space-x-4 items-center \">\n <img\n src={bsMap.uploader.avatar}\n className=\"rounded-full w-8 h-8\"\n loading={'eager'}\n alt={'bsmap mapper avatar'}\n />\n <span className=\"text-xl\">{bsMap.uploader.name}</span>\n </div>\n </div>\n\n <div className=\"meta flex space-x-4 text-xs py-2 items-center\">\n <RankIcon blrank={bsMap.blRanked} ssrank={bsMap.ranked} />\n <div className=\"flex space-x-1 items-center justify-between\">\n <HeartPulse className=\"w-3 h-3\" />\n <span>{bsMap.metadata.bpm.toFixed(0)}</span>\n </div>\n <div className=\"flex space-x-1 items-center justify-between\">\n <Clock className=\"w-3 h-3\" />\n <span>\n {dayjs\n .duration(bsMap.metadata.duration, 'seconds')\n .format('mm:ss')}\n </span>\n </div>\n\n <div className=\"flex space-x-1 items-center justify-between\">\n <Key className=\"w-3 h-3\" />\n <span className=\"font-weight bg-gradient-to-r bg-clip-text text-transparent from-red-300 to-blue-300\">\n {bsMap.id}\n </span>\n </div>\n <div className=\"flex space-x-2 text-xs\">\n <span>\n <Calendar className=\"h-3 w-3\" />\n </span>\n <span>{formatTime(bsMap.lastPublishedAt)}</span>\n </div>\n </div>\n\n <div className=\"tags flex flex-wrap justify-start\">\n {bsMap.tags\n ?.sort((a, b) => b.length - a.length)\n ?.map((item) => (\n <span\n className=\"text-xs mx-1 text-white bg-red-500 rounded px-1\"\n key={item}\n >\n {getTag(item)}\n </span>\n ))}\n </div>\n <div className=\"tags flex flex-wrap justify-start pt-2\">\n {getMods(bsMap)\n ?.sort((a, b) => b.length - a.length)\n ?.map((item) => (\n <span\n className=\"text-xs mx-1 text-white bg-blue-500 rounded px-1\"\n key={item}\n >\n {item}\n </span>\n ))}\n </div>\n <div className=\"flex space-x-2\">\n <div className=\"percentage w-42 py-2 flex text-xs items-center space-x-4\">\n <Progressbar value={bsMap.stats.score * 100} />\n <span>{(bsMap.stats.score * 100).toFixed(1)}%</span>\n </div>\n <div className=\"flex space-x-1 items-center text-xs\">\n <span>\n <ThumbsUp className=\"h-3 w-3\" />\n </span>\n <span>{formatNumber(bsMap.stats.upvotes)}</span>\n </div>\n <div className=\"flex space-x-1 items-center text-xs\">\n <span>\n <ThumbsDown className=\"h-3 w-3\" />\n </span>\n <span>{formatNumber(bsMap.stats.downvotes)}</span>\n </div>\n </div>\n\n <span className=\"font-bold\">难度</span>\n <div className=\"grid grid-cols-2\">\n {bsMap.versions[0].diffs.map((diff) => (\n <div\n key={diff.difficulty + diff.characteristic}\n className=\"text-xs space-x-1 flex items-center\"\n >\n <span className=\"h-3 w-3 shrink-0\">\n <CharacteristicIcon\n characteristic={diff.characteristic}\n />\n </span>\n <span>{diffConv(diff.difficulty)}</span>\n <span>\n <Gauge className={'w-3 h-3 ml-1'} />\n </span>\n <span>{diff.nps.toFixed(2)}</span>\n {diff.stars && (\n <>\n <span>\n <Star className={'w-3 h-3 ml-1'} />\n </span>\n <span>{diff.stars?.toFixed(2)}</span>\n </>\n )}\n </div>\n ))}\n </div>\n\n <span className=\"font-bold\">描述</span>\n <p className=\"text-xs\">{bsMap.description}</p>\n\n <div className={'flex items-center justify-between pt-2'}>\n <div\n className={\n 'text-[10px] text-opacity-70 text-slate-100 align-bottom mt-auto mb-0'\n }\n >\n Powered by BSBot\n </div>\n <div className=\"flex items-center space-x-2\">\n <div className={'flex flex-col items-center'}>\n <img\n width={80}\n height={80}\n src={bsMapQrUrl}\n className=\"w-20 h-20\"\n />\n {/*<QRCode url={`https://beatsaver.com/maps/${bsMap.id}`} classNameame={'w-20'}/>*/}\n <div className={'text-[8px] font-light'}>beatsaver</div>\n </div>\n <div className={'flex flex-col items-center'}>\n <img\n width={80}\n height={80}\n src={previewQrUrl}\n className=\"w-20 h-20\"\n />\n {/*<QRCode url={`https://allpoland.github.io/ArcViewer/?id=${bsMap.id}`} className={'w-20'}/>*/}\n <div className={'text-[8px] font-light'}>preview</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <img\n src={bg}\n className={'inset-0 absolute h-full object-cover -z-10'}\n loading={'eager'}\n alt={'random background img'}\n />\n </div>\n </div>\n </>\n )\n}\n"],"mappings":"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","names":["_a"]}
@@ -1,11 +1,11 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import BSMapShare from "./bs-map";
3
- import SSPlayerPage from "./ss-player";
4
- import BLPlayerPage from "./bl-player";
5
- import { BLScore } from "./bl-score";
6
- import BLRankScore from "../../components/pages/bl-score-with-rank";
7
- const getBSMapComp = (bsMap, bsMapQrUrl, previewQrUrl) => {
8
- return /* @__PURE__ */ jsx(
1
+ import React from "react";
2
+ import BSMapShare from "./bs-map.js";
3
+ import SSPlayerPage from "./ss-player.js";
4
+ import BLPlayerPage from "./bl-player.js";
5
+ import { BLScore } from "./bl-score.js";
6
+ import BLRankScore from "../../components/pages/bl-score-with-rank.js";
7
+ const BSMapComp = (bsMap, bsMapQrUrl, previewQrUrl) => {
8
+ return /* @__PURE__ */ React.createElement(
9
9
  BSMapShare,
10
10
  {
11
11
  bsMap,
@@ -14,14 +14,14 @@ const getBSMapComp = (bsMap, bsMapQrUrl, previewQrUrl) => {
14
14
  }
15
15
  );
16
16
  };
17
- const getSSPlayerComp = (scores, userInfo, bg) => {
18
- return /* @__PURE__ */ jsx(SSPlayerPage, { scoreUser: userInfo, leaderItems: scores, bg });
17
+ const SSPlayerComp = (scores, userInfo, bg) => {
18
+ return /* @__PURE__ */ React.createElement(SSPlayerPage, { scoreUser: userInfo, leaderItems: scores, bg });
19
19
  };
20
- const getBLPlayerComp = (scores, userInfo, bg) => {
21
- return /* @__PURE__ */ jsx(BLPlayerPage, { user: userInfo, beatleaderItems: scores, bg });
20
+ const BLPlayerComp = (scores, userInfo, bg) => {
21
+ return /* @__PURE__ */ React.createElement(BLPlayerPage, { user: userInfo, beatleaderItems: scores, bg });
22
22
  };
23
- const getBLScoreComp = (score, bsMap, statistic, bsor, qrcodeUrl) => {
24
- return /* @__PURE__ */ jsx(
23
+ const BLScoreComp = (score, bsMap, statistic, bsor, qrcodeUrl) => {
24
+ return /* @__PURE__ */ React.createElement(
25
25
  BLScore,
26
26
  {
27
27
  score,
@@ -32,8 +32,8 @@ const getBLScoreComp = (score, bsMap, statistic, bsor, qrcodeUrl) => {
32
32
  }
33
33
  );
34
34
  };
35
- const getBLRankScoreComp = (score, aroundScores, regionTopScores, difficulties, bsMap, statistic, bsor, bg) => {
36
- return /* @__PURE__ */ jsx(
35
+ const BLRankScoreComp = (score, aroundScores, regionTopScores, difficulties, bsMap, statistic, bsor, bg) => {
36
+ return /* @__PURE__ */ React.createElement(
37
37
  BLRankScore,
38
38
  {
39
39
  score,
@@ -48,10 +48,10 @@ const getBLRankScoreComp = (score, aroundScores, regionTopScores, difficulties,
48
48
  );
49
49
  };
50
50
  export {
51
- getBLPlayerComp,
52
- getBLRankScoreComp,
53
- getBLScoreComp,
54
- getBSMapComp,
55
- getSSPlayerComp
51
+ BLPlayerComp,
52
+ BLRankScoreComp,
53
+ BLScoreComp,
54
+ BSMapComp,
55
+ SSPlayerComp
56
56
  };
57
57
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/pages/index.tsx"],"sourcesContent":["import React from 'react'\nimport BSMapShare from './bs-map'\nimport SSPlayerPage from './ss-player'\nimport BLPlayerPage from './bl-player'\nimport { BLScore } from './bl-score'\nimport { BSMap } from '@/service/api/interfaces/beatsaver'\nimport { BeatLeaderUser, Score } from '@/service/api/interfaces/beatleader'\nimport { ScoreSaberItem, ScoreSaberUser } from '@/service/api/interfaces/scoresaber'\nimport BLRankScore from '@/components/pages/bl-score-with-rank'\n\nexport const getBSMapComp = (\n bsMap: BSMap,\n bsMapQrUrl: string,\n previewQrUrl: string\n) => {\n return (\n <BSMapShare\n bsMap={bsMap}\n bsMapQrUrl={bsMapQrUrl}\n previewQrUrl={previewQrUrl}\n />\n )\n}\nexport const getSSPlayerComp = (\n scores: ScoreSaberItem[],\n userInfo: ScoreSaberUser,\n bg: string\n) => {\n return <SSPlayerPage scoreUser={userInfo} leaderItems={scores} bg={bg} />\n}\n\nexport const getBLPlayerComp = (\n scores: Score[],\n userInfo: BeatLeaderUser,\n bg: string\n) => {\n return <BLPlayerPage user={userInfo} beatleaderItems={scores} bg={bg} />\n}\n\nexport const getBLScoreComp = (\n score: Score,\n bsMap: BSMap,\n statistic: any,\n bsor: any,\n qrcodeUrl: string\n) => {\n return (\n <BLScore\n score={score}\n bsMap={bsMap}\n statistic={statistic}\n bsor={bsor}\n qrcodeUrl={qrcodeUrl}\n />\n )\n}\n\nexport const getBLRankScoreComp = (\n score,\n aroundScores,\n regionTopScores,\n difficulties,\n bsMap,\n statistic,\n bsor,\n bg\n) => {\n return (\n <BLRankScore\n score={score}\n bsMap={bsMap}\n aroundScores={aroundScores}\n regionTopScores={regionTopScores}\n difficulties={difficulties}\n statistic={statistic}\n bsor={bsor}\n bg={bg}\n />\n )\n}\n"],"mappings":"AAgBI;AAfJ,OAAO,gBAAgB;AACvB,OAAO,kBAAkB;AACzB,OAAO,kBAAkB;AACzB,SAAS,eAAe;AAIxB,OAAO,iBAAiB;AAEjB,MAAM,eAAe,CAC1B,OACA,YACA,iBACG;AACH,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;AACO,MAAM,kBAAkB,CAC7B,QACA,UACA,OACG;AACH,SAAO,oBAAC,gBAAa,WAAW,UAAU,aAAa,QAAQ,IAAQ;AACzE;AAEO,MAAM,kBAAkB,CAC7B,QACA,UACA,OACG;AACH,SAAO,oBAAC,gBAAa,MAAM,UAAU,iBAAiB,QAAQ,IAAQ;AACxE;AAEO,MAAM,iBAAiB,CAC5B,OACA,OACA,WACA,MACA,cACG;AACH,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;AAEO,MAAM,qBAAqB,CAChC,OACA,cACA,iBACA,cACA,OACA,WACA,MACA,OACG;AACH,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/pages/index.tsx"],"sourcesContent":["import React from 'react'\nimport BSMapShare from './bs-map'\nimport SSPlayerPage from './ss-player'\nimport BLPlayerPage from './bl-player'\nimport { BLScore } from './bl-score'\n\nimport { BSMap } from '@/services/api/interfaces/beatsaver'\nimport { BeatLeaderUser, Score } from '@/services/api/interfaces/beatleader'\nimport { ScoreSaberItem, ScoreSaberUser } from '@/services/api/interfaces/scoresaber'\nimport BLRankScore from '@/components/pages/bl-score-with-rank'\n\nexport const BSMapComp = (\n bsMap: BSMap,\n bsMapQrUrl: string,\n previewQrUrl: string\n) => {\n return (\n <BSMapShare\n bsMap={bsMap}\n bsMapQrUrl={bsMapQrUrl}\n previewQrUrl={previewQrUrl}\n />\n )\n}\nexport const SSPlayerComp = (\n scores: ScoreSaberItem[],\n userInfo: ScoreSaberUser,\n bg: string\n) => {\n return <SSPlayerPage scoreUser={userInfo} leaderItems={scores} bg={bg} />\n}\n\nexport const BLPlayerComp = (\n scores: Score[],\n userInfo: BeatLeaderUser,\n bg: string\n) => {\n return <BLPlayerPage user={userInfo} beatleaderItems={scores} bg={bg} />\n}\n\nexport const BLScoreComp = (\n score: Score,\n bsMap: BSMap,\n statistic: any,\n bsor: any,\n qrcodeUrl: string\n) => {\n return (\n <BLScore\n score={score}\n bsMap={bsMap}\n statistic={statistic}\n bsor={bsor}\n qrcodeUrl={qrcodeUrl}\n />\n )\n}\n\nexport const BLRankScoreComp = (\n score,\n aroundScores,\n regionTopScores,\n difficulties,\n bsMap,\n statistic,\n bsor,\n bg\n) => {\n return (\n <BLRankScore\n score={score}\n bsMap={bsMap}\n aroundScores={aroundScores}\n regionTopScores={regionTopScores}\n difficulties={difficulties}\n statistic={statistic}\n bsor={bsor}\n bg={bg}\n />\n )\n}\n"],"mappings":"AAAA,OAAO,WAAW;AAClB,OAAO,gBAAgB;AACvB,OAAO,kBAAkB;AACzB,OAAO,kBAAkB;AACzB,SAAS,eAAe;AAKxB,OAAO,iBAAiB;AAEjB,MAAM,YAAY,CACvB,OACA,YACA,iBACG;AACH,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;AACO,MAAM,eAAe,CAC1B,QACA,UACA,OACG;AACH,SAAO,oCAAC,gBAAa,WAAW,UAAU,aAAa,QAAQ,IAAQ;AACzE;AAEO,MAAM,eAAe,CAC1B,QACA,UACA,OACG;AACH,SAAO,oCAAC,gBAAa,MAAM,UAAU,iBAAiB,QAAQ,IAAQ;AACxE;AAEO,MAAM,cAAc,CACzB,OACA,OACA,WACA,MACA,cACG;AACH,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;AAEO,MAAM,kBAAkB,CAC7B,OACA,cACA,iBACA,cACA,OACA,WACA,MACA,OACG;AACH,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -1,89 +1,60 @@
1
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
- import Flags, { EarchIcon } from "../components/flag";
3
- import { twJoin } from "../utils/tw-join";
4
- import ScoreItem from "../components/ss-score-item";
1
+ import Flags, { EarchIcon } from "../components/flag.js";
2
+ import { twJoin } from "../utils/tw-join.js";
3
+ import ScoreItem from "../components/ss-score-item.js";
4
+ import React from "react";
5
5
  function SSPlayerPage({
6
6
  leaderItems,
7
7
  scoreUser,
8
8
  bg,
9
9
  params
10
10
  }) {
11
- return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(
11
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
12
12
  "div",
13
13
  {
14
14
  className: "flex flex-col justify-center items-center relative h-[720px] w-[1200px] my-auto",
15
- id: "render-result",
16
- children: [
17
- /* @__PURE__ */ jsxs(
18
- "div",
19
- {
20
- className: "bg-blend-darken h-full w-full left-auto absolute right-auto bg-black/[.6] p-4 text-white rounded-lg flex flex-col space-y-2 z-10",
21
- children: [
22
- /* @__PURE__ */ jsxs("div", { className: "flex space-x-4 pb-2", children: [
23
- /* @__PURE__ */ jsx(
24
- "img",
25
- {
26
- className: "h-32 w-32 rounded-md",
27
- src: scoreUser.profilePicture,
28
- loading: "eager"
29
- }
30
- ),
31
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col justify-between", children: [
32
- /* @__PURE__ */ jsx("span", { className: "text-3xl font-bold", children: scoreUser.name }),
33
- /* @__PURE__ */ jsxs("div", { className: "flex space-x-2 text-md font-bold items-center", children: [
34
- /* @__PURE__ */ jsxs("span", { className: "flex items-center space-x-1", children: [
35
- /* @__PURE__ */ jsx(EarchIcon, {}),
36
- /* @__PURE__ */ jsxs("span", { children: [
37
- "# ",
38
- scoreUser.rank
39
- ] })
40
- ] }),
41
- /* @__PURE__ */ jsxs("span", { className: "flex items-center space-x-1", children: [
42
- /* @__PURE__ */ jsx(Flags, { flagNationCode: scoreUser.country }),
43
- /* @__PURE__ */ jsxs("span", { children: [
44
- "# ",
45
- scoreUser.countryRank
46
- ] })
47
- ] })
48
- ] }),
49
- /* @__PURE__ */ jsxs(
50
- "div",
51
- {
52
- className: twJoin(
53
- "text-4xl font-bold ",
54
- " bg-gradient-to-r bg-clip-text text-transparent from-blue-300 to-red-300",
55
- "text-orange-100"
56
- ),
57
- children: [
58
- scoreUser.pp.toFixed(3),
59
- " PP"
60
- ]
61
- }
62
- )
63
- ] }),
64
- /* @__PURE__ */ jsx(
65
- "div",
66
- {
67
- className: "text-4xl pl-40 items-center flex text-gray-100 opacity-70",
68
- children: /* @__PURE__ */ jsx("span", { children: "coming soon, ... maybe?" })
69
- }
70
- )
71
- ] }),
72
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-4 gap-2", children: leaderItems.map((item, idx) => /* @__PURE__ */ jsx(ScoreItem, { scoreItem: item }, idx)) })
73
- ]
74
- }
75
- ),
76
- /* @__PURE__ */ jsx(
77
- "img",
78
- {
79
- src: bg,
80
- className: "inset-0 mx-auto w-full rounded-lg absolute h-full object-center",
81
- loading: "eager"
82
- }
83
- )
84
- ]
85
- }
86
- ) });
15
+ id: "render-result"
16
+ },
17
+ /* @__PURE__ */ React.createElement(
18
+ "div",
19
+ {
20
+ className: "bg-blend-darken h-full w-full left-auto absolute right-auto bg-black/[.6] p-4 text-white rounded-lg flex flex-col space-y-2 z-10"
21
+ },
22
+ /* @__PURE__ */ React.createElement("div", { className: "flex space-x-4 pb-2" }, /* @__PURE__ */ React.createElement(
23
+ "img",
24
+ {
25
+ className: "h-32 w-32 rounded-md",
26
+ src: scoreUser.profilePicture,
27
+ loading: "eager"
28
+ }
29
+ ), /* @__PURE__ */ React.createElement("div", { className: "flex flex-col justify-between" }, /* @__PURE__ */ React.createElement("span", { className: "text-3xl font-bold" }, scoreUser.name), /* @__PURE__ */ React.createElement("div", { className: "flex space-x-2 text-md font-bold items-center" }, /* @__PURE__ */ React.createElement("span", { className: "flex items-center space-x-1" }, /* @__PURE__ */ React.createElement(EarchIcon, null), /* @__PURE__ */ React.createElement("span", null, "# ", scoreUser.rank)), /* @__PURE__ */ React.createElement("span", { className: "flex items-center space-x-1" }, /* @__PURE__ */ React.createElement(Flags, { flagNationCode: scoreUser.country }), /* @__PURE__ */ React.createElement("span", null, "# ", scoreUser.countryRank))), /* @__PURE__ */ React.createElement(
30
+ "div",
31
+ {
32
+ className: twJoin(
33
+ "text-4xl font-bold ",
34
+ " bg-gradient-to-r bg-clip-text text-transparent from-blue-300 to-red-300",
35
+ "text-orange-100"
36
+ )
37
+ },
38
+ scoreUser.pp.toFixed(3),
39
+ " PP"
40
+ )), /* @__PURE__ */ React.createElement(
41
+ "div",
42
+ {
43
+ className: "text-4xl pl-40 items-center flex text-gray-100 opacity-70"
44
+ },
45
+ /* @__PURE__ */ React.createElement("span", null, "coming soon, ... maybe?")
46
+ )),
47
+ /* @__PURE__ */ React.createElement("div", { className: "grid grid-cols-4 gap-2" }, leaderItems.map((item, idx) => /* @__PURE__ */ React.createElement(ScoreItem, { scoreItem: item, key: idx })))
48
+ ),
49
+ /* @__PURE__ */ React.createElement(
50
+ "img",
51
+ {
52
+ src: bg,
53
+ className: "inset-0 mx-auto w-full rounded-lg absolute h-full object-center",
54
+ loading: "eager"
55
+ }
56
+ )
57
+ ));
87
58
  }
88
59
  export {
89
60
  SSPlayerPage as default
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/pages/ss-player.tsx"],"sourcesContent":["/** @jsxImportSource react */\nimport Flags, { EarchIcon } from '../components/flag'\nimport { twJoin } from '../utils/tw-join'\nimport ScoreItem from '../components/ss-score-item'\nimport { ScoreSaberItem, ScoreSaberUser } from '@/service/api/interfaces/scoresaber'\n\ninterface SSPlayerProps {\n leaderItems: ScoreSaberItem[]\n scoreUser: ScoreSaberUser\n params?: Record<string, string>\n bg: string\n}\n\nexport default function SSPlayerPage({\n leaderItems,\n scoreUser,\n bg,\n params,\n}: SSPlayerProps) {\n return (\n <>\n <div\n className={\n 'flex flex-col justify-center items-center relative h-[720px] w-[1200px] my-auto'\n }\n id=\"render-result\"\n >\n <div\n className={\n 'bg-blend-darken h-full w-full left-auto absolute right-auto bg-black/[.6] p-4 text-white rounded-lg flex flex-col space-y-2 z-10'\n }\n >\n <div className={'flex space-x-4 pb-2'}>\n <img\n className={'h-32 w-32 rounded-md'}\n src={scoreUser.profilePicture}\n loading={'eager'}\n // fallback={scoreUser.name.slice(0, 1)}\n />\n <div className={'flex flex-col justify-between'}>\n <span className={'text-3xl font-bold'}>{scoreUser.name}</span>\n <div className={'flex space-x-2 text-md font-bold items-center'}>\n <span className=\"flex items-center space-x-1\">\n <EarchIcon />\n <span># {scoreUser.rank}</span>\n </span>\n <span className=\"flex items-center space-x-1\">\n <Flags flagNationCode={scoreUser.country} />\n <span># {scoreUser.countryRank}</span>\n </span>\n </div>\n <div\n className={twJoin(\n 'text-4xl font-bold ',\n ' bg-gradient-to-r bg-clip-text text-transparent from-blue-300 to-red-300',\n 'text-orange-100'\n )}\n >\n {scoreUser.pp.toFixed(3)} PP\n </div>\n </div>\n <div\n className={\n 'text-4xl pl-40 items-center flex text-gray-100 opacity-70'\n }\n >\n <span>coming soon, ... maybe?</span>\n </div>\n </div>\n <div className={'grid grid-cols-4 gap-2'}>\n {leaderItems.map((item, idx) => (\n <ScoreItem scoreItem={item} key={idx} />\n ))}\n </div>\n </div>\n\n <img\n src={bg}\n className={\n 'inset-0 mx-auto w-full rounded-lg absolute h-full object-center'\n }\n loading={'eager'}\n />\n </div>\n </>\n )\n}\n"],"mappings":"AAoBI,mBAaQ,KAWM,YAxBd;AAnBJ,OAAO,SAAS,iBAAiB;AACjC,SAAS,cAAc;AACvB,OAAO,eAAe;AAUP,SAAR,aAA8B;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkB;AAChB,SACE,gCACE;AAAA,IAAC;AAAA;AAAA,MACC,WACE;AAAA,MAEF,IAAG;AAAA,MAEH;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WACE;AAAA,YAGF;AAAA,mCAAC,SAAI,WAAW,uBACd;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAW;AAAA,oBACX,KAAK,UAAU;AAAA,oBACf,SAAS;AAAA;AAAA,gBAEX;AAAA,gBACA,qBAAC,SAAI,WAAW,iCACd;AAAA,sCAAC,UAAK,WAAW,sBAAuB,oBAAU,MAAK;AAAA,kBACvD,qBAAC,SAAI,WAAW,iDACd;AAAA,yCAAC,UAAK,WAAU,+BACd;AAAA,0CAAC,aAAU;AAAA,sBACX,qBAAC,UAAK;AAAA;AAAA,wBAAG,UAAU;AAAA,yBAAK;AAAA,uBAC1B;AAAA,oBACA,qBAAC,UAAK,WAAU,+BACd;AAAA,0CAAC,SAAM,gBAAgB,UAAU,SAAS;AAAA,sBAC1C,qBAAC,UAAK;AAAA;AAAA,wBAAG,UAAU;AAAA,yBAAY;AAAA,uBACjC;AAAA,qBACF;AAAA,kBACA;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAW;AAAA,wBACT;AAAA,wBACA;AAAA,wBACA;AAAA,sBACF;AAAA,sBAEC;AAAA,kCAAU,GAAG,QAAQ,CAAC;AAAA,wBAAE;AAAA;AAAA;AAAA,kBAC3B;AAAA,mBACF;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,WACE;AAAA,oBAGF,8BAAC,UAAK,qCAAuB;AAAA;AAAA,gBAC/B;AAAA,iBACF;AAAA,cACA,oBAAC,SAAI,WAAW,0BACb,sBAAY,IAAI,CAAC,MAAM,QACtB,oBAAC,aAAU,WAAW,QAAW,GAAK,CACvC,GACH;AAAA;AAAA;AAAA,QACF;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,WACE;AAAA,YAEF,SAAS;AAAA;AAAA,QACX;AAAA;AAAA;AAAA,EACF,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/pages/ss-player.tsx"],"sourcesContent":["import Flags, { EarchIcon } from '../components/flag'\nimport { twJoin } from '../utils/tw-join'\nimport ScoreItem from '../components/ss-score-item'\nimport { ScoreSaberItem, ScoreSaberUser } from '@/services/api/interfaces/scoresaber'\nimport React from 'react'\n\ninterface SSPlayerProps {\n leaderItems: ScoreSaberItem[]\n scoreUser: ScoreSaberUser\n params?: Record<string, string>\n bg: string\n}\n\nexport default function SSPlayerPage({\n leaderItems,\n scoreUser,\n bg,\n params,\n}: SSPlayerProps) {\n return (\n <>\n <div\n className={\n 'flex flex-col justify-center items-center relative h-[720px] w-[1200px] my-auto'\n }\n id=\"render-result\"\n >\n <div\n className={\n 'bg-blend-darken h-full w-full left-auto absolute right-auto bg-black/[.6] p-4 text-white rounded-lg flex flex-col space-y-2 z-10'\n }\n >\n <div className={'flex space-x-4 pb-2'}>\n <img\n className={'h-32 w-32 rounded-md'}\n src={scoreUser.profilePicture}\n loading={'eager'}\n // fallback={scoreUser.name.slice(0, 1)}\n />\n <div className={'flex flex-col justify-between'}>\n <span className={'text-3xl font-bold'}>{scoreUser.name}</span>\n <div className={'flex space-x-2 text-md font-bold items-center'}>\n <span className=\"flex items-center space-x-1\">\n <EarchIcon />\n <span># {scoreUser.rank}</span>\n </span>\n <span className=\"flex items-center space-x-1\">\n <Flags flagNationCode={scoreUser.country} />\n <span># {scoreUser.countryRank}</span>\n </span>\n </div>\n <div\n className={twJoin(\n 'text-4xl font-bold ',\n ' bg-gradient-to-r bg-clip-text text-transparent from-blue-300 to-red-300',\n 'text-orange-100'\n )}\n >\n {scoreUser.pp.toFixed(3)} PP\n </div>\n </div>\n <div\n className={\n 'text-4xl pl-40 items-center flex text-gray-100 opacity-70'\n }\n >\n <span>coming soon, ... maybe?</span>\n </div>\n </div>\n <div className={'grid grid-cols-4 gap-2'}>\n {leaderItems.map((item, idx) => (\n <ScoreItem scoreItem={item} key={idx} />\n ))}\n </div>\n </div>\n\n <img\n src={bg}\n className={\n 'inset-0 mx-auto w-full rounded-lg absolute h-full object-center'\n }\n loading={'eager'}\n />\n </div>\n </>\n )\n}\n"],"mappings":"AAAA,OAAO,SAAS,iBAAiB;AACjC,SAAS,cAAc;AACvB,OAAO,eAAe;AAEtB,OAAO,WAAW;AASH,SAAR,aAA8B;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkB;AAChB,SACE,0DACE;AAAA,IAAC;AAAA;AAAA,MACC,WACE;AAAA,MAEF,IAAG;AAAA;AAAA,IAEH;AAAA,MAAC;AAAA;AAAA,QACC,WACE;AAAA;AAAA,MAGF,oCAAC,SAAI,WAAW,yBACd;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,UACX,KAAK,UAAU;AAAA,UACf,SAAS;AAAA;AAAA,MAEX,GACA,oCAAC,SAAI,WAAW,mCACd,oCAAC,UAAK,WAAW,wBAAuB,UAAU,IAAK,GACvD,oCAAC,SAAI,WAAW,mDACd,oCAAC,UAAK,WAAU,iCACd,oCAAC,eAAU,GACX,oCAAC,cAAK,MAAG,UAAU,IAAK,CAC1B,GACA,oCAAC,UAAK,WAAU,iCACd,oCAAC,SAAM,gBAAgB,UAAU,SAAS,GAC1C,oCAAC,cAAK,MAAG,UAAU,WAAY,CACjC,CACF,GACA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA;AAAA,QAEC,UAAU,GAAG,QAAQ,CAAC;AAAA,QAAE;AAAA,MAC3B,CACF,GACA;AAAA,QAAC;AAAA;AAAA,UACC,WACE;AAAA;AAAA,QAGF,oCAAC,cAAK,yBAAuB;AAAA,MAC/B,CACF;AAAA,MACA,oCAAC,SAAI,WAAW,4BACb,YAAY,IAAI,CAAC,MAAM,QACtB,oCAAC,aAAU,WAAW,MAAM,KAAK,KAAK,CACvC,CACH;AAAA,IACF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,WACE;AAAA,QAEF,SAAS;AAAA;AAAA,IACX;AAAA,EACF,CACF;AAEJ;","names":[]}
@@ -29,8 +29,8 @@ var __objRest = (source, exclude) => {
29
29
  }
30
30
  return target;
31
31
  };
32
- import { NoteEventType } from "./bsorDecoder";
33
- import { createDistanceWeightFunction } from "./beatleader";
32
+ import { NoteEventType } from "./bsorDecoder.js";
33
+ import { createDistanceWeightFunction } from "./beatleader.js";
34
34
  const NoteScoringType = {
35
35
  Ignore: -1,
36
36
  NoScore: 0,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/utils/bl/bsorReplayAcc.ts"],"sourcesContent":["import { BSOR, BSORNote, NoteCutInfo } from \"@/service/api/interfaces/beatleader\";\nimport { NoteEventType } from \"./bsorDecoder\";\nimport { createDistanceWeightFunction } from \"./beatleader\";\n\nconst NoteScoringType = {\n Ignore: -1,\n NoScore: 0,\n Normal: 1,\n SliderHead: 2,\n SliderTail: 3,\n BurstSliderHead: 4,\n BurstSliderElement: 5,\n};\n\nexport function processAccuracySpread(replay: BSOR) {\n if (replay == null) return null;\n\n const result = {\n totalLeftCount: 0.0,\n leftCount: [] as number[],\n leftTD: [] as number[],\n\n totalRightCount: 0.0,\n rightCount: [] as number[],\n rightTD: [] as number[],\n\n timeDeviation: [] as number[],\n\n maxCount: 0,\n maxTD: 0.0,\n maxTimeDeviation: 0.0,\n } as any;\n\n if (!replay?.notes?.length) return result;\n\n const timings = [] as any[];\n\n for (let i = 0; i <= 15; i++) {\n result.leftCount.push(0.0);\n result.leftTD.push(0.0);\n result.rightCount.push(0.0);\n result.rightTD.push(0.0);\n result.timeDeviation.push(0.0);\n timings.push([]);\n }\n\n for (let i = 0; i < replay.notes.length; i++) {\n const note = replay.notes[i] as BSORNote;\n if (note.eventType !== NoteEventType.good) continue;\n const noteData = decodeNoteData(note.noteID);\n if (noteData.scoringType !== NoteScoringType.Normal) continue;\n const acc = getAccForDistance(note.noteCutInfo.cutDistanceToCenter);\n const td = Math.abs(note.noteCutInfo.cutNormal.z);\n\n if (note.noteCutInfo.saberType === 0) {\n result.totalLeftCount += 1.0;\n result.leftCount[acc] += 1.0;\n result.leftTD[acc] += td;\n } else {\n result.totalRightCount += 1.0;\n result.rightCount[acc] += 1.0;\n result.rightTD[acc] += td;\n }\n\n result.timeDeviation[acc] += note.noteCutInfo.timeDeviation;\n timings[acc].push(note.noteCutInfo.timeDeviation);\n }\n\n for (let i = 0; i <= 15; i++) {\n //<-- Averages ---\n const totalCount = result.rightCount[i] + result.leftCount[i];\n result.leftTD[i] =\n result.leftCount[i] > 0 ? result.leftTD[i] / result.leftCount[i] : null;\n result.rightTD[i] =\n result.rightCount[i] > 0\n ? result.rightTD[i] / result.rightCount[i]\n : null;\n result.timeDeviation[i] =\n totalCount > 0 ? result.timeDeviation[i] / totalCount : null;\n\n result.leftCount[i] /= result.totalLeftCount;\n result.rightCount[i] /= result.totalRightCount;\n\n //<-- TimeDeviation ---\n result.timeDeviation[i] = getStandardDeviation(\n timings[i],\n result.timeDeviation[i],\n );\n\n //<-- Min / Max ---\n if (result.leftCount[i] > result.maxCount)\n result.maxCount = result.leftCount[i];\n if (result.rightCount[i] > result.maxCount)\n result.maxCount = result.rightCount[i];\n\n if (result.leftTD[i] > result.maxTD) result.maxTD = result.leftTD[i];\n if (result.rightTD[i] > result.maxTD) result.maxTD = result.rightTD[i];\n\n if (result.timeDeviation[i] > result.maxTimeDeviation)\n result.maxTimeDeviation = result.timeDeviation[i];\n }\n\n return result;\n}\n\nfunction decodeNoteData(noteId: number) {\n const result = {} as any;\n\n result.cutDirection = Math.round(noteId % 10);\n noteId /= 10;\n result.colorType = Math.round(noteId % 10);\n noteId /= 10;\n result.noteLineLayer = Math.round(noteId % 10);\n noteId /= 10;\n result.lineIndex = Math.round(noteId % 10);\n noteId /= 10;\n result.scoringType = Math.round((noteId -= 2) < -1 ? noteId + 3 : noteId);\n\n return result;\n}\n\nfunction getAccForDistance(cutDistanceToCenter: number) {\n let mul = 1 - cutDistanceToCenter / 0.3;\n if (mul > 1) mul = 1;\n if (mul < 0) mul = 0;\n return Math.round(15.0 * mul);\n}\n\nconst SummaryGroup = {\n Midlanes: 0,\n Outerlanes: 1,\n Crossovers: 2,\n Forehands: 3,\n Backhands: 4,\n};\n\nfunction getStandardDeviation(numArray: number[], mean: number) {\n if (numArray.length === 0) return null;\n\n let sqrSum = 0.0;\n numArray.forEach((num: number) => {\n sqrSum += Math.pow(num - mean, 2);\n });\n return Math.sqrt(sqrSum / numArray.length);\n}\n\nfunction getScore(noteCutInfo: any) {\n let score = 0.0;\n score += getAccForDistance(noteCutInfo.cutDistanceToCenter);\n score += getPreSwingScore(noteCutInfo.beforeCutRating);\n score += getPostSwingScore(noteCutInfo.afterCutRating);\n return score;\n}\n\nfunction getPreSwingScore(preSwingRating: number) {\n if (preSwingRating > 1) preSwingRating = 1;\n if (preSwingRating < 0) preSwingRating = 0;\n return Math.round(preSwingRating * 70);\n}\n\nfunction getPostSwingScore(postSwingRating: number) {\n if (postSwingRating > 1) postSwingRating = 1;\n if (postSwingRating < 0) postSwingRating = 0;\n return Math.round(postSwingRating * 30);\n}\n\nconst accGraphResolution = 100;\nconst smoothPeriodPercentage = 0.02;\nconst weightFunctionSteepness = 3.0;\n\nexport function processAccGraphs(replay: BSOR) {\n if (replay == null) return null;\n\n const result = {\n times: [] as any[],\n fullSwingBySaber: {\n red: [] as any[],\n blue: [] as any[],\n total: [] as any[],\n } as any,\n realScoreBySaber: {\n red: [] as any[],\n blue: [] as any[],\n total: [] as any[],\n } as any,\n };\n\n if (!replay?.notes?.length) return result;\n\n const lastNoteTime = replay.notes[replay.notes.length - 1].eventTime;\n const distanceWeightFunction = createDistanceWeightFunction(\n lastNoteTime * smoothPeriodPercentage,\n weightFunctionSteepness,\n );\n\n for (let i = 0.0; i < accGraphResolution; i += 1.0) {\n const time = lastNoteTime * (i / (accGraphResolution - 1));\n\n const sumsBySaber = {\n red: [0.0, 0.0],\n blue: [0.0, 0.0],\n total: [0.0, 0.0],\n } as any;\n const dividerBySaber = { red: 0.0, blue: 0.0, total: 0.0 } as any;\n\n for (let j = 0; j < replay.notes.length; j++) {\n const note = replay.notes[j];\n if (note.eventType !== NoteEventType.good) continue;\n const noteData = decodeNoteData(note.noteID);\n if (noteData.scoringType !== NoteScoringType.Normal) continue;\n\n const weight = distanceWeightFunction.getWeight(note.eventTime - time);\n\n const acc = getAccForDistance(note.noteCutInfo.cutDistanceToCenter);\n const pre = getPreSwingScore(note.noteCutInfo.beforeCutRating);\n const post = getPostSwingScore(note.noteCutInfo.afterCutRating);\n\n const fullSwing = acc + 100;\n const realScore = acc + pre + post;\n\n sumsBySaber.total[0] += fullSwing * weight;\n sumsBySaber.total[1] += realScore * weight;\n dividerBySaber.total += weight;\n\n const saberType = note.noteCutInfo.saberType === 0 ? \"red\" : \"blue\";\n sumsBySaber[saberType][0] += fullSwing * weight;\n sumsBySaber[saberType][1] += realScore * weight;\n dividerBySaber[saberType] += weight;\n }\n\n result.times.push(time);\n\n [\"red\", \"blue\", \"total\"].forEach((saberType) => {\n result.fullSwingBySaber[saberType].push(\n dividerBySaber[saberType] === 0\n ? 0.0\n : sumsBySaber[saberType][0] / dividerBySaber[saberType],\n );\n result.realScoreBySaber[saberType].push(\n dividerBySaber[saberType] === 0\n ? 0.0\n : sumsBySaber[saberType][1] / dividerBySaber[saberType],\n );\n });\n }\n\n return result;\n}\n\n//endregion\n\n//region SliceSummary\n\nexport function processSliceSummary(replay: any) {\n if (replay == null) return null;\n\n function createEmptySummary(label: any) {\n return {\n label,\n left: { count: 0, averageScore: 0.0, averageTD: 0.0 },\n right: { count: 0, averageScore: 0.0, averageTD: 0.0 },\n };\n }\n\n const result = [\n createEmptySummary(\"Midlanes\"),\n createEmptySummary(\"Outerlanes\"),\n createEmptySummary(\"Crossovers\"),\n createEmptySummary(\"Forehands\"),\n createEmptySummary(\"Backhands\"),\n ] as any;\n\n if (!replay?.notes?.length) return result;\n\n function getLaneSummaryEntry(noteLineIndex: any, saberType: any) {\n const summaryGroup = getLaneSummaryGroup(noteLineIndex, saberType);\n return saberType === 0\n ? result[summaryGroup].left\n : result[summaryGroup].right;\n }\n\n function getParitySummaryEntry(noteCutInfo: NoteCutInfo, saberType: any) {\n const summaryGroup = getParitySummaryGroup(noteCutInfo);\n return saberType === 0\n ? result[summaryGroup].left\n : result[summaryGroup].right;\n }\n\n function addScore(handSummary: any, score: any, td: any) {\n handSummary.count += 1;\n handSummary.averageScore += score;\n handSummary.averageTD += td;\n }\n\n function applyAverage(handSummary: any) {\n if (handSummary.count === 0) return;\n handSummary.averageScore /= handSummary.count;\n handSummary.averageTD /= handSummary.count;\n }\n\n for (let i = 0; i < replay.notes.length; i++) {\n const note = replay.notes[i];\n if (note.eventType !== NoteEventType.good) continue;\n const noteData = decodeNoteData(note.noteID);\n if (noteData.scoringType !== NoteScoringType.Normal) continue;\n\n const laneSummaryEntry = getLaneSummaryEntry(\n noteData.lineIndex,\n note.noteCutInfo.saberType,\n );\n const paritySummaryEntry = getParitySummaryEntry(\n note.noteCutInfo,\n note.noteCutInfo.saberType,\n );\n\n const score = getScore(note.noteCutInfo);\n const td = Math.abs(note.noteCutInfo.cutNormal.z);\n addScore(laneSummaryEntry, score, td);\n addScore(paritySummaryEntry, score, td);\n }\n\n result.forEach((summary: any) => {\n applyAverage(summary.left);\n applyAverage(summary.right);\n });\n\n return result;\n}\n\n//endregion\n\n//region SliceDetails\n\nexport function processSliceDetails(replay: any) {\n if (replay == null) return null;\n\n const result = {\n mainGrid: [] as any[],\n summaryGrids: [] as any[],\n };\n\n for (let i = 0; i < 12; i++) {\n const mainGridCell = {\n count: 0,\n averageScore: 0.0,\n left: [] as any[],\n right: [] as any[],\n };\n for (let j = 0; j < 9; j++) {\n mainGridCell.left.push({ count: 0, averageScore: 0.0 });\n mainGridCell.right.push({ count: 0, averageScore: 0.0 });\n }\n result.mainGrid.push(mainGridCell);\n }\n\n for (let summaryGroup = 0; summaryGroup < 5; summaryGroup++) {\n const summaryGrid = [];\n for (let i = 0; i < 12; i++) {\n summaryGrid.push({ count: 0, averageScore: 0.0 });\n }\n result.summaryGrids.push(summaryGrid);\n }\n\n if (!replay?.notes?.length) return result;\n\n function addScore(cell: any, score: any) {\n cell.count += 1;\n cell.averageScore += score;\n }\n\n function applyAverageScore(cell: any) {\n if (cell.count === 0) return;\n cell.averageScore /= cell.count;\n }\n\n for (let i = 0; i < replay.notes.length; i++) {\n const note = replay.notes[i];\n if (note.eventType !== NoteEventType.good) continue;\n const noteData = decodeNoteData(note.noteID);\n if (noteData.scoringType !== NoteScoringType.Normal) continue;\n\n const mainGridIndex = getMainGridIndex(\n noteData.noteLineLayer,\n noteData.lineIndex,\n );\n const secondaryGridIndex = getSecondaryGridIndex(noteData.cutDirection);\n const laneSummaryGroup = getLaneSummaryGroup(\n noteData.lineIndex,\n note.noteCutInfo.saberType,\n );\n const paritySummaryGroup = getParitySummaryGroup(note.noteCutInfo);\n\n const mainCell = result.mainGrid[mainGridIndex];\n let secondaryCell;\n if (note.noteCutInfo.saberType === 0) {\n secondaryCell = mainCell.left[secondaryGridIndex];\n } else {\n secondaryCell = mainCell.right[secondaryGridIndex];\n }\n const laneSummaryCell =\n result.summaryGrids[laneSummaryGroup][mainGridIndex];\n const paritySummaryCell =\n result.summaryGrids[paritySummaryGroup][mainGridIndex];\n\n const score = getScore(note.noteCutInfo);\n addScore(mainCell, score);\n addScore(secondaryCell, score);\n addScore(laneSummaryCell, score);\n addScore(paritySummaryCell, score);\n }\n\n for (let i = 0; i < 12; i++) {\n const mainCell = result.mainGrid[i];\n applyAverageScore(mainCell);\n\n for (let j = 0; j < 9; j++) {\n applyAverageScore(mainCell.left[j]);\n applyAverageScore(mainCell.right[j]);\n }\n }\n\n for (let summaryGroup = 0; summaryGroup < 5; summaryGroup++) {\n const summaryGrid = result.summaryGrids[summaryGroup];\n for (let i = 0; i < 12; i++) {\n applyAverageScore(summaryGrid[i]);\n }\n }\n\n return result;\n}\n\nexport const NoteCutDirection = {\n Up: 0,\n Down: 1,\n Left: 2,\n Right: 3,\n UpLeft: 4,\n UpRight: 5,\n DownLeft: 6,\n DownRight: 7,\n Any: 8,\n None: 9,\n};\n\nexport const NoteLineLayer = {\n Base: 0,\n Upper: 1,\n Top: 2,\n};\n\nexport const ColorType = {\n None: -1,\n ColorA: 0,\n ColorB: 1,\n};\nfunction getMainGridIndex(noteLineLayer: any, noteLineIndex: any) {\n switch (noteLineLayer) {\n case NoteLineLayer.Top:\n return noteLineIndex;\n case NoteLineLayer.Upper:\n return noteLineIndex + 4;\n case NoteLineLayer.Base:\n return noteLineIndex + 8;\n }\n return -1;\n}\n\nfunction getSecondaryGridIndex(noteCutDirection: any) {\n switch (noteCutDirection) {\n case NoteCutDirection.UpLeft:\n return 0;\n case NoteCutDirection.Up:\n return 1;\n case NoteCutDirection.UpRight:\n return 2;\n case NoteCutDirection.Left:\n return 3;\n case NoteCutDirection.Any:\n return 4;\n case NoteCutDirection.Right:\n return 5;\n case NoteCutDirection.DownLeft:\n return 6;\n case NoteCutDirection.Down:\n return 7;\n case NoteCutDirection.DownRight:\n return 8;\n }\n return -1;\n}\n\n//endregion\n\n//region Utils\n\nfunction getParitySummaryGroup(noteCutInfo: NoteCutInfo) {\n const isForehand = noteCutInfo.cutNormal.x < 0;\n return isForehand ? SummaryGroup.Forehands : SummaryGroup.Backhands;\n}\n\nfunction getLaneSummaryGroup(noteLineIndex: any, saberType: any) {\n switch (saberType) {\n case 0:\n if (noteLineIndex >= 2) return SummaryGroup.Crossovers;\n break;\n case 1:\n if (noteLineIndex <= 1) return SummaryGroup.Crossovers;\n break;\n }\n if (noteLineIndex === 1 || noteLineIndex === 2) return SummaryGroup.Midlanes;\n return SummaryGroup.Outerlanes;\n}\n\n//endregion\n\nconst createMultiplierCounter = () => {\n const MAX_MULTIPLIER = 8;\n\n let value = 1;\n let progress = 1;\n\n const inc = () => {\n if (value >= MAX_MULTIPLIER) return MAX_MULTIPLIER;\n\n if (progress + 1 >= value * 2) {\n value *= 2;\n progress = 0;\n } else {\n progress++;\n }\n\n return value;\n };\n const dec = () => {\n if (value > 1) {\n value /= 2;\n }\n\n progress = 1;\n\n return value;\n };\n\n return {\n get: () => value,\n inc,\n dec,\n };\n};\n\nconst clamp = (num: number, min: number, max: number) =>\n Math.min(Math.max(num, min), max);\n\nconst getNoteType = (noteId: number) => {\n if (!Number.isFinite(noteId) || noteId >= 80000) return null;\n\n return Math.floor(noteId / 10000);\n};\n\nconst getNoteScore = (noteData: any, noteCutInfo: any) => {\n let beforeCut = 0,\n accuracy = 0,\n afterCut = 0;\n\n if (noteData.scoringType === NoteScoringType.SliderTail) {\n beforeCut = 70;\n } else if (noteData.scoringType !== NoteScoringType.BurstSliderElement) {\n beforeCut = Math.round(clamp(noteCutInfo.beforeCutRating * 70, 0, 70));\n }\n\n if (noteData.scoringType === NoteScoringType.SliderHead) {\n afterCut = 30;\n } else if (\n ![\n NoteScoringType.BurstSliderElement,\n NoteScoringType.BurstSliderHead,\n ].includes(noteData.scoringType)\n ) {\n afterCut = Math.round(clamp(noteCutInfo.afterCutRating * 30, 0, 30));\n }\n\n if (noteData.scoringType === NoteScoringType.BurstSliderElement) {\n accuracy = 20;\n } else {\n accuracy = Math.round(\n 15 * (1 - clamp(noteCutInfo.cutDistanceToCenter / 0.3, 0, 1)),\n );\n }\n\n return beforeCut + accuracy + afterCut;\n};\n\nexport function processUnderswings(replay: any) {\n if (!replay) return null;\n\n if (!replay?.notes?.length)\n return {\n count: 0,\n acc: 0,\n fcAcc: 0,\n noUnderswingsAcc: 0,\n noUnderswingsFcAcc: 0,\n score: 0,\n fcScore: 0,\n noUnderswingsScore: 0,\n noUnderswingsFcScore: 0,\n maxCutScore: 0,\n maxSongScore: 0,\n };\n\n const multiplier = createMultiplierCounter();\n const fcMultiplier = createMultiplierCounter();\n\n const result = [...replay.notes, ...(replay.walls ?? [])]\n .map((e, idx) => ({ ...e, idx, eventTime: e?.eventTime ?? e?.time }))\n .sort((a, b) =>\n a.eventTime === b.eventTime ? a.idx - b.idx : a.eventTime - b.eventTime,\n )\n .reduce(\n (acc, event) => {\n if (\n !Number.isFinite(event?.eventType) ||\n NoteEventType.bomb === event.eventType\n ) {\n acc.multiplier.dec();\n return acc;\n }\n\n const noteData = decodeNoteData(event.noteID);\n if (noteData < NoteScoringType.Normal) return acc;\n\n const maxNoteScore = getNoteScore(noteData, {\n cutDistanceToCenter: 0,\n beforeCutRating: 1,\n afterCutRating: 1,\n });\n\n switch (event.eventType) {\n case NoteEventType.good:\n const realScore = getNoteScore(noteData, event.noteCutInfo);\n const fullSwing = getNoteScore(noteData, {\n cutDistanceToCenter: event.noteCutInfo.cutDistanceToCenter,\n beforeCutRating: 1,\n afterCutRating: 1,\n });\n\n acc.count++;\n acc.score += realScore * multiplier.get();\n acc.noUnderswingsScore += fullSwing * multiplier.get();\n acc.fcScore += realScore * fcMultiplier.get();\n acc.noUnderswingsFcScore += fullSwing * fcMultiplier.get();\n acc.maxCutScore += maxNoteScore * fcMultiplier.get();\n acc.multiplier.inc();\n break;\n\n case NoteEventType.bad:\n case NoteEventType.miss:\n acc.multiplier.dec();\n break;\n }\n\n acc.maxSongScore += maxNoteScore * fcMultiplier.get();\n acc.fcMultiplier.inc();\n\n return acc;\n },\n {\n count: 0,\n maxCutScore: 0,\n maxSongScore: 0,\n score: 0,\n fcScore: 0,\n noUnderswingsScore: 0,\n noUnderswingsFcScore: 0,\n multiplier,\n fcMultiplier,\n },\n );\n\n const { multiplier: foo, fcMultiplier: bar, ...rest } = result;\n\n return {\n ...rest,\n maxCutScore: result.maxCutScore,\n maxSongScore: result.maxSongScore,\n acc: result.maxSongScore ? (result.score / result.maxSongScore) * 100 : 0,\n fcAcc: result.maxCutScore ? (result.fcScore / result.maxCutScore) * 100 : 0,\n noUnderswingsAcc: result.maxSongScore\n ? (result.noUnderswingsScore / result.maxSongScore) * 100\n : 0,\n noUnderswingsFcAcc: result.maxCutScore\n ? (result.noUnderswingsFcScore / result.maxCutScore) * 100\n : 0,\n };\n}\n"],"mappings":"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","names":["_a"]}
1
+ {"version":3,"sources":["../../../../../src/components/utils/bl/bsorReplayAcc.ts"],"sourcesContent":["import { BSOR, BSORNote, NoteCutInfo } from \"@/services/api/interfaces/beatleader\";\nimport { NoteEventType } from \"./bsorDecoder\";\nimport { createDistanceWeightFunction } from \"./beatleader\";\n\nconst NoteScoringType = {\n Ignore: -1,\n NoScore: 0,\n Normal: 1,\n SliderHead: 2,\n SliderTail: 3,\n BurstSliderHead: 4,\n BurstSliderElement: 5,\n};\n\nexport function processAccuracySpread(replay: BSOR) {\n if (replay == null) return null;\n\n const result = {\n totalLeftCount: 0.0,\n leftCount: [] as number[],\n leftTD: [] as number[],\n\n totalRightCount: 0.0,\n rightCount: [] as number[],\n rightTD: [] as number[],\n\n timeDeviation: [] as number[],\n\n maxCount: 0,\n maxTD: 0.0,\n maxTimeDeviation: 0.0,\n } as any;\n\n if (!replay?.notes?.length) return result;\n\n const timings = [] as any[];\n\n for (let i = 0; i <= 15; i++) {\n result.leftCount.push(0.0);\n result.leftTD.push(0.0);\n result.rightCount.push(0.0);\n result.rightTD.push(0.0);\n result.timeDeviation.push(0.0);\n timings.push([]);\n }\n\n for (let i = 0; i < replay.notes.length; i++) {\n const note = replay.notes[i] as BSORNote;\n if (note.eventType !== NoteEventType.good) continue;\n const noteData = decodeNoteData(note.noteID);\n if (noteData.scoringType !== NoteScoringType.Normal) continue;\n const acc = getAccForDistance(note.noteCutInfo.cutDistanceToCenter);\n const td = Math.abs(note.noteCutInfo.cutNormal.z);\n\n if (note.noteCutInfo.saberType === 0) {\n result.totalLeftCount += 1.0;\n result.leftCount[acc] += 1.0;\n result.leftTD[acc] += td;\n } else {\n result.totalRightCount += 1.0;\n result.rightCount[acc] += 1.0;\n result.rightTD[acc] += td;\n }\n\n result.timeDeviation[acc] += note.noteCutInfo.timeDeviation;\n timings[acc].push(note.noteCutInfo.timeDeviation);\n }\n\n for (let i = 0; i <= 15; i++) {\n //<-- Averages ---\n const totalCount = result.rightCount[i] + result.leftCount[i];\n result.leftTD[i] =\n result.leftCount[i] > 0 ? result.leftTD[i] / result.leftCount[i] : null;\n result.rightTD[i] =\n result.rightCount[i] > 0\n ? result.rightTD[i] / result.rightCount[i]\n : null;\n result.timeDeviation[i] =\n totalCount > 0 ? result.timeDeviation[i] / totalCount : null;\n\n result.leftCount[i] /= result.totalLeftCount;\n result.rightCount[i] /= result.totalRightCount;\n\n //<-- TimeDeviation ---\n result.timeDeviation[i] = getStandardDeviation(\n timings[i],\n result.timeDeviation[i],\n );\n\n //<-- Min / Max ---\n if (result.leftCount[i] > result.maxCount)\n result.maxCount = result.leftCount[i];\n if (result.rightCount[i] > result.maxCount)\n result.maxCount = result.rightCount[i];\n\n if (result.leftTD[i] > result.maxTD) result.maxTD = result.leftTD[i];\n if (result.rightTD[i] > result.maxTD) result.maxTD = result.rightTD[i];\n\n if (result.timeDeviation[i] > result.maxTimeDeviation)\n result.maxTimeDeviation = result.timeDeviation[i];\n }\n\n return result;\n}\n\nfunction decodeNoteData(noteId: number) {\n const result = {} as any;\n\n result.cutDirection = Math.round(noteId % 10);\n noteId /= 10;\n result.colorType = Math.round(noteId % 10);\n noteId /= 10;\n result.noteLineLayer = Math.round(noteId % 10);\n noteId /= 10;\n result.lineIndex = Math.round(noteId % 10);\n noteId /= 10;\n result.scoringType = Math.round((noteId -= 2) < -1 ? noteId + 3 : noteId);\n\n return result;\n}\n\nfunction getAccForDistance(cutDistanceToCenter: number) {\n let mul = 1 - cutDistanceToCenter / 0.3;\n if (mul > 1) mul = 1;\n if (mul < 0) mul = 0;\n return Math.round(15.0 * mul);\n}\n\nconst SummaryGroup = {\n Midlanes: 0,\n Outerlanes: 1,\n Crossovers: 2,\n Forehands: 3,\n Backhands: 4,\n};\n\nfunction getStandardDeviation(numArray: number[], mean: number) {\n if (numArray.length === 0) return null;\n\n let sqrSum = 0.0;\n numArray.forEach((num: number) => {\n sqrSum += Math.pow(num - mean, 2);\n });\n return Math.sqrt(sqrSum / numArray.length);\n}\n\nfunction getScore(noteCutInfo: any) {\n let score = 0.0;\n score += getAccForDistance(noteCutInfo.cutDistanceToCenter);\n score += getPreSwingScore(noteCutInfo.beforeCutRating);\n score += getPostSwingScore(noteCutInfo.afterCutRating);\n return score;\n}\n\nfunction getPreSwingScore(preSwingRating: number) {\n if (preSwingRating > 1) preSwingRating = 1;\n if (preSwingRating < 0) preSwingRating = 0;\n return Math.round(preSwingRating * 70);\n}\n\nfunction getPostSwingScore(postSwingRating: number) {\n if (postSwingRating > 1) postSwingRating = 1;\n if (postSwingRating < 0) postSwingRating = 0;\n return Math.round(postSwingRating * 30);\n}\n\nconst accGraphResolution = 100;\nconst smoothPeriodPercentage = 0.02;\nconst weightFunctionSteepness = 3.0;\n\nexport function processAccGraphs(replay: BSOR) {\n if (replay == null) return null;\n\n const result = {\n times: [] as any[],\n fullSwingBySaber: {\n red: [] as any[],\n blue: [] as any[],\n total: [] as any[],\n } as any,\n realScoreBySaber: {\n red: [] as any[],\n blue: [] as any[],\n total: [] as any[],\n } as any,\n };\n\n if (!replay?.notes?.length) return result;\n\n const lastNoteTime = replay.notes[replay.notes.length - 1].eventTime;\n const distanceWeightFunction = createDistanceWeightFunction(\n lastNoteTime * smoothPeriodPercentage,\n weightFunctionSteepness,\n );\n\n for (let i = 0.0; i < accGraphResolution; i += 1.0) {\n const time = lastNoteTime * (i / (accGraphResolution - 1));\n\n const sumsBySaber = {\n red: [0.0, 0.0],\n blue: [0.0, 0.0],\n total: [0.0, 0.0],\n } as any;\n const dividerBySaber = { red: 0.0, blue: 0.0, total: 0.0 } as any;\n\n for (let j = 0; j < replay.notes.length; j++) {\n const note = replay.notes[j];\n if (note.eventType !== NoteEventType.good) continue;\n const noteData = decodeNoteData(note.noteID);\n if (noteData.scoringType !== NoteScoringType.Normal) continue;\n\n const weight = distanceWeightFunction.getWeight(note.eventTime - time);\n\n const acc = getAccForDistance(note.noteCutInfo.cutDistanceToCenter);\n const pre = getPreSwingScore(note.noteCutInfo.beforeCutRating);\n const post = getPostSwingScore(note.noteCutInfo.afterCutRating);\n\n const fullSwing = acc + 100;\n const realScore = acc + pre + post;\n\n sumsBySaber.total[0] += fullSwing * weight;\n sumsBySaber.total[1] += realScore * weight;\n dividerBySaber.total += weight;\n\n const saberType = note.noteCutInfo.saberType === 0 ? \"red\" : \"blue\";\n sumsBySaber[saberType][0] += fullSwing * weight;\n sumsBySaber[saberType][1] += realScore * weight;\n dividerBySaber[saberType] += weight;\n }\n\n result.times.push(time);\n\n [\"red\", \"blue\", \"total\"].forEach((saberType) => {\n result.fullSwingBySaber[saberType].push(\n dividerBySaber[saberType] === 0\n ? 0.0\n : sumsBySaber[saberType][0] / dividerBySaber[saberType],\n );\n result.realScoreBySaber[saberType].push(\n dividerBySaber[saberType] === 0\n ? 0.0\n : sumsBySaber[saberType][1] / dividerBySaber[saberType],\n );\n });\n }\n\n return result;\n}\n\n//endregion\n\n//region SliceSummary\n\nexport function processSliceSummary(replay: any) {\n if (replay == null) return null;\n\n function createEmptySummary(label: any) {\n return {\n label,\n left: { count: 0, averageScore: 0.0, averageTD: 0.0 },\n right: { count: 0, averageScore: 0.0, averageTD: 0.0 },\n };\n }\n\n const result = [\n createEmptySummary(\"Midlanes\"),\n createEmptySummary(\"Outerlanes\"),\n createEmptySummary(\"Crossovers\"),\n createEmptySummary(\"Forehands\"),\n createEmptySummary(\"Backhands\"),\n ] as any;\n\n if (!replay?.notes?.length) return result;\n\n function getLaneSummaryEntry(noteLineIndex: any, saberType: any) {\n const summaryGroup = getLaneSummaryGroup(noteLineIndex, saberType);\n return saberType === 0\n ? result[summaryGroup].left\n : result[summaryGroup].right;\n }\n\n function getParitySummaryEntry(noteCutInfo: NoteCutInfo, saberType: any) {\n const summaryGroup = getParitySummaryGroup(noteCutInfo);\n return saberType === 0\n ? result[summaryGroup].left\n : result[summaryGroup].right;\n }\n\n function addScore(handSummary: any, score: any, td: any) {\n handSummary.count += 1;\n handSummary.averageScore += score;\n handSummary.averageTD += td;\n }\n\n function applyAverage(handSummary: any) {\n if (handSummary.count === 0) return;\n handSummary.averageScore /= handSummary.count;\n handSummary.averageTD /= handSummary.count;\n }\n\n for (let i = 0; i < replay.notes.length; i++) {\n const note = replay.notes[i];\n if (note.eventType !== NoteEventType.good) continue;\n const noteData = decodeNoteData(note.noteID);\n if (noteData.scoringType !== NoteScoringType.Normal) continue;\n\n const laneSummaryEntry = getLaneSummaryEntry(\n noteData.lineIndex,\n note.noteCutInfo.saberType,\n );\n const paritySummaryEntry = getParitySummaryEntry(\n note.noteCutInfo,\n note.noteCutInfo.saberType,\n );\n\n const score = getScore(note.noteCutInfo);\n const td = Math.abs(note.noteCutInfo.cutNormal.z);\n addScore(laneSummaryEntry, score, td);\n addScore(paritySummaryEntry, score, td);\n }\n\n result.forEach((summary: any) => {\n applyAverage(summary.left);\n applyAverage(summary.right);\n });\n\n return result;\n}\n\n//endregion\n\n//region SliceDetails\n\nexport function processSliceDetails(replay: any) {\n if (replay == null) return null;\n\n const result = {\n mainGrid: [] as any[],\n summaryGrids: [] as any[],\n };\n\n for (let i = 0; i < 12; i++) {\n const mainGridCell = {\n count: 0,\n averageScore: 0.0,\n left: [] as any[],\n right: [] as any[],\n };\n for (let j = 0; j < 9; j++) {\n mainGridCell.left.push({ count: 0, averageScore: 0.0 });\n mainGridCell.right.push({ count: 0, averageScore: 0.0 });\n }\n result.mainGrid.push(mainGridCell);\n }\n\n for (let summaryGroup = 0; summaryGroup < 5; summaryGroup++) {\n const summaryGrid = [];\n for (let i = 0; i < 12; i++) {\n summaryGrid.push({ count: 0, averageScore: 0.0 });\n }\n result.summaryGrids.push(summaryGrid);\n }\n\n if (!replay?.notes?.length) return result;\n\n function addScore(cell: any, score: any) {\n cell.count += 1;\n cell.averageScore += score;\n }\n\n function applyAverageScore(cell: any) {\n if (cell.count === 0) return;\n cell.averageScore /= cell.count;\n }\n\n for (let i = 0; i < replay.notes.length; i++) {\n const note = replay.notes[i];\n if (note.eventType !== NoteEventType.good) continue;\n const noteData = decodeNoteData(note.noteID);\n if (noteData.scoringType !== NoteScoringType.Normal) continue;\n\n const mainGridIndex = getMainGridIndex(\n noteData.noteLineLayer,\n noteData.lineIndex,\n );\n const secondaryGridIndex = getSecondaryGridIndex(noteData.cutDirection);\n const laneSummaryGroup = getLaneSummaryGroup(\n noteData.lineIndex,\n note.noteCutInfo.saberType,\n );\n const paritySummaryGroup = getParitySummaryGroup(note.noteCutInfo);\n\n const mainCell = result.mainGrid[mainGridIndex];\n let secondaryCell;\n if (note.noteCutInfo.saberType === 0) {\n secondaryCell = mainCell.left[secondaryGridIndex];\n } else {\n secondaryCell = mainCell.right[secondaryGridIndex];\n }\n const laneSummaryCell =\n result.summaryGrids[laneSummaryGroup][mainGridIndex];\n const paritySummaryCell =\n result.summaryGrids[paritySummaryGroup][mainGridIndex];\n\n const score = getScore(note.noteCutInfo);\n addScore(mainCell, score);\n addScore(secondaryCell, score);\n addScore(laneSummaryCell, score);\n addScore(paritySummaryCell, score);\n }\n\n for (let i = 0; i < 12; i++) {\n const mainCell = result.mainGrid[i];\n applyAverageScore(mainCell);\n\n for (let j = 0; j < 9; j++) {\n applyAverageScore(mainCell.left[j]);\n applyAverageScore(mainCell.right[j]);\n }\n }\n\n for (let summaryGroup = 0; summaryGroup < 5; summaryGroup++) {\n const summaryGrid = result.summaryGrids[summaryGroup];\n for (let i = 0; i < 12; i++) {\n applyAverageScore(summaryGrid[i]);\n }\n }\n\n return result;\n}\n\nexport const NoteCutDirection = {\n Up: 0,\n Down: 1,\n Left: 2,\n Right: 3,\n UpLeft: 4,\n UpRight: 5,\n DownLeft: 6,\n DownRight: 7,\n Any: 8,\n None: 9,\n};\n\nexport const NoteLineLayer = {\n Base: 0,\n Upper: 1,\n Top: 2,\n};\n\nexport const ColorType = {\n None: -1,\n ColorA: 0,\n ColorB: 1,\n};\nfunction getMainGridIndex(noteLineLayer: any, noteLineIndex: any) {\n switch (noteLineLayer) {\n case NoteLineLayer.Top:\n return noteLineIndex;\n case NoteLineLayer.Upper:\n return noteLineIndex + 4;\n case NoteLineLayer.Base:\n return noteLineIndex + 8;\n }\n return -1;\n}\n\nfunction getSecondaryGridIndex(noteCutDirection: any) {\n switch (noteCutDirection) {\n case NoteCutDirection.UpLeft:\n return 0;\n case NoteCutDirection.Up:\n return 1;\n case NoteCutDirection.UpRight:\n return 2;\n case NoteCutDirection.Left:\n return 3;\n case NoteCutDirection.Any:\n return 4;\n case NoteCutDirection.Right:\n return 5;\n case NoteCutDirection.DownLeft:\n return 6;\n case NoteCutDirection.Down:\n return 7;\n case NoteCutDirection.DownRight:\n return 8;\n }\n return -1;\n}\n\n//endregion\n\n//region Utils\n\nfunction getParitySummaryGroup(noteCutInfo: NoteCutInfo) {\n const isForehand = noteCutInfo.cutNormal.x < 0;\n return isForehand ? SummaryGroup.Forehands : SummaryGroup.Backhands;\n}\n\nfunction getLaneSummaryGroup(noteLineIndex: any, saberType: any) {\n switch (saberType) {\n case 0:\n if (noteLineIndex >= 2) return SummaryGroup.Crossovers;\n break;\n case 1:\n if (noteLineIndex <= 1) return SummaryGroup.Crossovers;\n break;\n }\n if (noteLineIndex === 1 || noteLineIndex === 2) return SummaryGroup.Midlanes;\n return SummaryGroup.Outerlanes;\n}\n\n//endregion\n\nconst createMultiplierCounter = () => {\n const MAX_MULTIPLIER = 8;\n\n let value = 1;\n let progress = 1;\n\n const inc = () => {\n if (value >= MAX_MULTIPLIER) return MAX_MULTIPLIER;\n\n if (progress + 1 >= value * 2) {\n value *= 2;\n progress = 0;\n } else {\n progress++;\n }\n\n return value;\n };\n const dec = () => {\n if (value > 1) {\n value /= 2;\n }\n\n progress = 1;\n\n return value;\n };\n\n return {\n get: () => value,\n inc,\n dec,\n };\n};\n\nconst clamp = (num: number, min: number, max: number) =>\n Math.min(Math.max(num, min), max);\n\nconst getNoteType = (noteId: number) => {\n if (!Number.isFinite(noteId) || noteId >= 80000) return null;\n\n return Math.floor(noteId / 10000);\n};\n\nconst getNoteScore = (noteData: any, noteCutInfo: any) => {\n let beforeCut = 0,\n accuracy = 0,\n afterCut = 0;\n\n if (noteData.scoringType === NoteScoringType.SliderTail) {\n beforeCut = 70;\n } else if (noteData.scoringType !== NoteScoringType.BurstSliderElement) {\n beforeCut = Math.round(clamp(noteCutInfo.beforeCutRating * 70, 0, 70));\n }\n\n if (noteData.scoringType === NoteScoringType.SliderHead) {\n afterCut = 30;\n } else if (\n ![\n NoteScoringType.BurstSliderElement,\n NoteScoringType.BurstSliderHead,\n ].includes(noteData.scoringType)\n ) {\n afterCut = Math.round(clamp(noteCutInfo.afterCutRating * 30, 0, 30));\n }\n\n if (noteData.scoringType === NoteScoringType.BurstSliderElement) {\n accuracy = 20;\n } else {\n accuracy = Math.round(\n 15 * (1 - clamp(noteCutInfo.cutDistanceToCenter / 0.3, 0, 1)),\n );\n }\n\n return beforeCut + accuracy + afterCut;\n};\n\nexport function processUnderswings(replay: any) {\n if (!replay) return null;\n\n if (!replay?.notes?.length)\n return {\n count: 0,\n acc: 0,\n fcAcc: 0,\n noUnderswingsAcc: 0,\n noUnderswingsFcAcc: 0,\n score: 0,\n fcScore: 0,\n noUnderswingsScore: 0,\n noUnderswingsFcScore: 0,\n maxCutScore: 0,\n maxSongScore: 0,\n };\n\n const multiplier = createMultiplierCounter();\n const fcMultiplier = createMultiplierCounter();\n\n const result = [...replay.notes, ...(replay.walls ?? [])]\n .map((e, idx) => ({ ...e, idx, eventTime: e?.eventTime ?? e?.time }))\n .sort((a, b) =>\n a.eventTime === b.eventTime ? a.idx - b.idx : a.eventTime - b.eventTime,\n )\n .reduce(\n (acc, event) => {\n if (\n !Number.isFinite(event?.eventType) ||\n NoteEventType.bomb === event.eventType\n ) {\n acc.multiplier.dec();\n return acc;\n }\n\n const noteData = decodeNoteData(event.noteID);\n if (noteData < NoteScoringType.Normal) return acc;\n\n const maxNoteScore = getNoteScore(noteData, {\n cutDistanceToCenter: 0,\n beforeCutRating: 1,\n afterCutRating: 1,\n });\n\n switch (event.eventType) {\n case NoteEventType.good:\n const realScore = getNoteScore(noteData, event.noteCutInfo);\n const fullSwing = getNoteScore(noteData, {\n cutDistanceToCenter: event.noteCutInfo.cutDistanceToCenter,\n beforeCutRating: 1,\n afterCutRating: 1,\n });\n\n acc.count++;\n acc.score += realScore * multiplier.get();\n acc.noUnderswingsScore += fullSwing * multiplier.get();\n acc.fcScore += realScore * fcMultiplier.get();\n acc.noUnderswingsFcScore += fullSwing * fcMultiplier.get();\n acc.maxCutScore += maxNoteScore * fcMultiplier.get();\n acc.multiplier.inc();\n break;\n\n case NoteEventType.bad:\n case NoteEventType.miss:\n acc.multiplier.dec();\n break;\n }\n\n acc.maxSongScore += maxNoteScore * fcMultiplier.get();\n acc.fcMultiplier.inc();\n\n return acc;\n },\n {\n count: 0,\n maxCutScore: 0,\n maxSongScore: 0,\n score: 0,\n fcScore: 0,\n noUnderswingsScore: 0,\n noUnderswingsFcScore: 0,\n multiplier,\n fcMultiplier,\n },\n );\n\n const { multiplier: foo, fcMultiplier: bar, ...rest } = result;\n\n return {\n ...rest,\n maxCutScore: result.maxCutScore,\n maxSongScore: result.maxSongScore,\n acc: result.maxSongScore ? (result.score / result.maxSongScore) * 100 : 0,\n fcAcc: result.maxCutScore ? (result.fcScore / result.maxCutScore) * 100 : 0,\n noUnderswingsAcc: result.maxSongScore\n ? (result.noUnderswingsScore / result.maxSongScore) * 100\n : 0,\n noUnderswingsFcAcc: result.maxCutScore\n ? (result.noUnderswingsFcScore / result.maxCutScore) * 100\n : 0,\n };\n}\n"],"mappings":"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","names":["_a"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/utils/bl/getPart.ts"],"sourcesContent":["import { BeatLeaderUser } from '@/service/api/interfaces/beatleader'\n\nconst DEFAULT_MAX_TECH_PP = 1300\nconst DEFAULT_MAX_ACC_PP = 15000\nconst DEFAULT_MAX_PASS_PP = 6000\n\nconst getPart = (playerInfo: BeatLeaderUser) => {\n const techPp = playerInfo.techPp\n const accPp = playerInfo.accPp\n const passPp = playerInfo.passPp\n const techScale =\n techPp > DEFAULT_MAX_TECH_PP ? techPp / DEFAULT_MAX_TECH_PP : 1\n const accScale = accPp > DEFAULT_MAX_ACC_PP ? accPp / DEFAULT_MAX_ACC_PP : 1\n const passScale =\n passPp > DEFAULT_MAX_PASS_PP ? passPp / DEFAULT_MAX_PASS_PP : 1\n const triangleScale = Math.max(techScale, Math.max(accScale, passScale))\n\n const maxTechPp = DEFAULT_MAX_TECH_PP * triangleScale\n const maxAccPp = DEFAULT_MAX_ACC_PP * triangleScale\n const maxPassPp = DEFAULT_MAX_PASS_PP * triangleScale\n\n const totalNormalizedPp =\n techPp * (maxAccPp / maxTechPp) + accPp + passPp * (maxAccPp / maxPassPp)\n const normalizedTechPp = techPp / maxTechPp\n const normalizedAccPp = accPp / maxAccPp\n const normalizedPassPp = passPp / maxPassPp\n\n const techPpPart = (techPp * (maxAccPp / maxTechPp)) / totalNormalizedPp\n const accPpPart = accPp / totalNormalizedPp\n const passPpPart = (passPp * (maxAccPp / maxPassPp)) / totalNormalizedPp\n\n return {\n techPpPart,\n accPpPart,\n passPpPart,\n }\n}\n\nexport default getPart\n"],"mappings":"AAEA,MAAM,sBAAsB;AAC5B,MAAM,qBAAqB;AAC3B,MAAM,sBAAsB;AAE5B,MAAM,UAAU,CAAC,eAA+B;AAC9C,QAAM,SAAS,WAAW;AAC1B,QAAM,QAAQ,WAAW;AACzB,QAAM,SAAS,WAAW;AAC1B,QAAM,YACJ,SAAS,sBAAsB,SAAS,sBAAsB;AAChE,QAAM,WAAW,QAAQ,qBAAqB,QAAQ,qBAAqB;AAC3E,QAAM,YACJ,SAAS,sBAAsB,SAAS,sBAAsB;AAChE,QAAM,gBAAgB,KAAK,IAAI,WAAW,KAAK,IAAI,UAAU,SAAS,CAAC;AAEvE,QAAM,YAAY,sBAAsB;AACxC,QAAM,WAAW,qBAAqB;AACtC,QAAM,YAAY,sBAAsB;AAExC,QAAM,oBACJ,UAAU,WAAW,aAAa,QAAQ,UAAU,WAAW;AACjE,QAAM,mBAAmB,SAAS;AAClC,QAAM,kBAAkB,QAAQ;AAChC,QAAM,mBAAmB,SAAS;AAElC,QAAM,aAAc,UAAU,WAAW,aAAc;AACvD,QAAM,YAAY,QAAQ;AAC1B,QAAM,aAAc,UAAU,WAAW,aAAc;AAEvD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAO,kBAAQ;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/components/utils/bl/getPart.ts"],"sourcesContent":["import { BeatLeaderUser } from '@/services/api/interfaces/beatleader'\n\nconst DEFAULT_MAX_TECH_PP = 1300\nconst DEFAULT_MAX_ACC_PP = 15000\nconst DEFAULT_MAX_PASS_PP = 6000\n\nconst getPart = (playerInfo: BeatLeaderUser) => {\n const techPp = playerInfo.techPp\n const accPp = playerInfo.accPp\n const passPp = playerInfo.passPp\n const techScale =\n techPp > DEFAULT_MAX_TECH_PP ? techPp / DEFAULT_MAX_TECH_PP : 1\n const accScale = accPp > DEFAULT_MAX_ACC_PP ? accPp / DEFAULT_MAX_ACC_PP : 1\n const passScale =\n passPp > DEFAULT_MAX_PASS_PP ? passPp / DEFAULT_MAX_PASS_PP : 1\n const triangleScale = Math.max(techScale, Math.max(accScale, passScale))\n\n const maxTechPp = DEFAULT_MAX_TECH_PP * triangleScale\n const maxAccPp = DEFAULT_MAX_ACC_PP * triangleScale\n const maxPassPp = DEFAULT_MAX_PASS_PP * triangleScale\n\n const totalNormalizedPp =\n techPp * (maxAccPp / maxTechPp) + accPp + passPp * (maxAccPp / maxPassPp)\n const normalizedTechPp = techPp / maxTechPp\n const normalizedAccPp = accPp / maxAccPp\n const normalizedPassPp = passPp / maxPassPp\n\n const techPpPart = (techPp * (maxAccPp / maxTechPp)) / totalNormalizedPp\n const accPpPart = accPp / totalNormalizedPp\n const passPpPart = (passPp * (maxAccPp / maxPassPp)) / totalNormalizedPp\n\n return {\n techPpPart,\n accPpPart,\n passPpPart,\n }\n}\n\nexport default getPart\n"],"mappings":"AAEA,MAAM,sBAAsB;AAC5B,MAAM,qBAAqB;AAC3B,MAAM,sBAAsB;AAE5B,MAAM,UAAU,CAAC,eAA+B;AAC9C,QAAM,SAAS,WAAW;AAC1B,QAAM,QAAQ,WAAW;AACzB,QAAM,SAAS,WAAW;AAC1B,QAAM,YACJ,SAAS,sBAAsB,SAAS,sBAAsB;AAChE,QAAM,WAAW,QAAQ,qBAAqB,QAAQ,qBAAqB;AAC3E,QAAM,YACJ,SAAS,sBAAsB,SAAS,sBAAsB;AAChE,QAAM,gBAAgB,KAAK,IAAI,WAAW,KAAK,IAAI,UAAU,SAAS,CAAC;AAEvE,QAAM,YAAY,sBAAsB;AACxC,QAAM,WAAW,qBAAqB;AACtC,QAAM,YAAY,sBAAsB;AAExC,QAAM,oBACJ,UAAU,WAAW,aAAa,QAAQ,UAAU,WAAW;AACjE,QAAM,mBAAmB,SAAS;AAClC,QAAM,kBAAkB,QAAQ;AAChC,QAAM,mBAAmB,SAAS;AAElC,QAAM,aAAc,UAAU,WAAW,aAAc;AACvD,QAAM,YAAY,QAAQ;AAC1B,QAAM,aAAc,UAAU,WAAW,aAAc;AAEvD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAO,kBAAQ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/utils/bl/stastic.ts"],"sourcesContent":["const scoresService = null\nconst leaderboardService = null\n\n// scoreStatisticEnhancer(songScore)\nconst getStatistic = (data: any, scoreId: number, statistic: any) => {\n try {\n //fetch score stats\n // stats =\n // const statistic = leaderboard\n // \t? await leaderboardService.fetchLeaderboardStats(leaderboard.leaderboardId)\n // \t: await scoresService.fetchScoreStats(data.id);\n //\n const beatSavior = {} as any\n\n const stats = statistic.accuracyTracker\n\n stats.missedNotes =\n data?.missedNotes ??\n (statistic?.hitTracker?.leftMiss ?? 0) +\n (statistic?.hitTracker?.leftMiss ?? 0)\n stats.badCuts =\n data?.badCuts ??\n (statistic?.hitTracker?.leftBadCuts ?? 0) +\n (statistic?.hitTracker?.rightBadCuts ?? 0)\n stats.bombHit =\n data?.bombCuts ??\n (statistic?.hitTracker?.leftBombs ?? 0) +\n (statistic?.hitTracker?.rightBombs ?? 0)\n stats.wallHit = data?.wallsHit ?? 0\n stats.miss = stats.missedNotes + stats.badCuts\n stats.maxCombo = statistic.hitTracker.maxCombo\n stats.maxStreak = statistic.hitTracker.maxStreak\n stats.leftMiss = statistic.hitTracker.leftMiss\n stats.rightMiss = statistic.hitTracker.rightMiss\n stats.leftBadCuts = statistic.hitTracker.leftBadCuts\n stats.rightBadCuts = statistic.hitTracker.rightBadCuts\n stats.leftBombs = statistic.hitTracker.leftBombs\n stats.rightBombs = statistic.hitTracker.rightBombs\n\n stats.won = statistic.winTracker.won\n stats.pauses = statistic.winTracker.nbOfPause\n\n statistic.scoreTracker = {\n rawRatio: data?.unmodifiedAcc ? data.unmodifiedAcc / 100 : null,\n }\n\n beatSavior.songJumpDistance = statistic.winTracker.jumpDistance\n beatSavior.stats = stats\n beatSavior.trackers = statistic\n\n return beatSavior\n } catch (err) {\n return null\n }\n}\n\nexport default getStatistic\n"],"mappings":"AAAA,MAAM,gBAAgB;AACtB,MAAM,qBAAqB;AAG3B,MAAM,eAAe,CAAC,MAAW,SAAiB,cAAmB;AAJrE;AAKE,MAAI;AAOF,UAAM,aAAa,CAAC;AAEpB,UAAM,QAAQ,UAAU;AAExB,UAAM,eACJ,kCAAM,gBAAN,cACC,kDAAW,eAAX,mBAAuB,aAAvB,YAAmC,OACjC,kDAAW,eAAX,mBAAuB,aAAvB,YAAmC;AACxC,UAAM,WACJ,kCAAM,YAAN,cACC,kDAAW,eAAX,mBAAuB,gBAAvB,YAAsC,OACpC,kDAAW,eAAX,mBAAuB,iBAAvB,YAAuC;AAC5C,UAAM,WACJ,kCAAM,aAAN,cACC,kDAAW,eAAX,mBAAuB,cAAvB,YAAoC,OAClC,kDAAW,eAAX,mBAAuB,eAAvB,YAAqC;AAC1C,UAAM,WAAU,kCAAM,aAAN,YAAkB;AAClC,UAAM,OAAO,MAAM,cAAc,MAAM;AACvC,UAAM,WAAW,UAAU,WAAW;AACtC,UAAM,YAAY,UAAU,WAAW;AACvC,UAAM,WAAW,UAAU,WAAW;AACtC,UAAM,YAAY,UAAU,WAAW;AACvC,UAAM,cAAc,UAAU,WAAW;AACzC,UAAM,eAAe,UAAU,WAAW;AAC1C,UAAM,YAAY,UAAU,WAAW;AACvC,UAAM,aAAa,UAAU,WAAW;AAExC,UAAM,MAAM,UAAU,WAAW;AACjC,UAAM,SAAS,UAAU,WAAW;AAEpC,cAAU,eAAe;AAAA,MACvB,WAAU,6BAAM,iBAAgB,KAAK,gBAAgB,MAAM;AAAA,IAC7D;AAEA,eAAW,mBAAmB,UAAU,WAAW;AACnD,eAAW,QAAQ;AACnB,eAAW,WAAW;AAEtB,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,WAAO;AAAA,EACT;AACF;AAEA,IAAO,kBAAQ;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/components/utils/bl/stastic.ts"],"sourcesContent":["const scoresService = null\nconst leaderboardService = null\n\nconst getStatistic = (data: any, scoreId: number, statistic: any) => {\n try {\n const beatSavior = {} as any\n\n const stats = statistic.accuracyTracker\n\n stats.missedNotes =\n data?.missedNotes ??\n (statistic?.hitTracker?.leftMiss ?? 0) +\n (statistic?.hitTracker?.leftMiss ?? 0)\n stats.badCuts =\n data?.badCuts ??\n (statistic?.hitTracker?.leftBadCuts ?? 0) +\n (statistic?.hitTracker?.rightBadCuts ?? 0)\n stats.bombHit =\n data?.bombCuts ??\n (statistic?.hitTracker?.leftBombs ?? 0) +\n (statistic?.hitTracker?.rightBombs ?? 0)\n stats.wallHit = data?.wallsHit ?? 0\n stats.miss = stats.missedNotes + stats.badCuts\n stats.maxCombo = statistic.hitTracker.maxCombo\n stats.maxStreak = statistic.hitTracker.maxStreak\n stats.leftMiss = statistic.hitTracker.leftMiss\n stats.rightMiss = statistic.hitTracker.rightMiss\n stats.leftBadCuts = statistic.hitTracker.leftBadCuts\n stats.rightBadCuts = statistic.hitTracker.rightBadCuts\n stats.leftBombs = statistic.hitTracker.leftBombs\n stats.rightBombs = statistic.hitTracker.rightBombs\n\n stats.won = statistic.winTracker.won\n stats.pauses = statistic.winTracker.nbOfPause\n\n statistic.scoreTracker = {\n rawRatio: data?.unmodifiedAcc ? data.unmodifiedAcc / 100 : null,\n }\n\n beatSavior.songJumpDistance = statistic.winTracker.jumpDistance\n beatSavior.stats = stats\n beatSavior.trackers = statistic\n\n return beatSavior\n } catch (err) {\n return null\n }\n}\n\nexport default getStatistic\n"],"mappings":"AAAA,MAAM,gBAAgB;AACtB,MAAM,qBAAqB;AAE3B,MAAM,eAAe,CAAC,MAAW,SAAiB,cAAmB;AAHrE;AAIE,MAAI;AACF,UAAM,aAAa,CAAC;AAEpB,UAAM,QAAQ,UAAU;AAExB,UAAM,eACJ,kCAAM,gBAAN,cACC,kDAAW,eAAX,mBAAuB,aAAvB,YAAmC,OACjC,kDAAW,eAAX,mBAAuB,aAAvB,YAAmC;AACxC,UAAM,WACJ,kCAAM,YAAN,cACC,kDAAW,eAAX,mBAAuB,gBAAvB,YAAsC,OACpC,kDAAW,eAAX,mBAAuB,iBAAvB,YAAuC;AAC5C,UAAM,WACJ,kCAAM,aAAN,cACC,kDAAW,eAAX,mBAAuB,cAAvB,YAAoC,OAClC,kDAAW,eAAX,mBAAuB,eAAvB,YAAqC;AAC1C,UAAM,WAAU,kCAAM,aAAN,YAAkB;AAClC,UAAM,OAAO,MAAM,cAAc,MAAM;AACvC,UAAM,WAAW,UAAU,WAAW;AACtC,UAAM,YAAY,UAAU,WAAW;AACvC,UAAM,WAAW,UAAU,WAAW;AACtC,UAAM,YAAY,UAAU,WAAW;AACvC,UAAM,cAAc,UAAU,WAAW;AACzC,UAAM,eAAe,UAAU,WAAW;AAC1C,UAAM,YAAY,UAAU,WAAW;AACvC,UAAM,aAAa,UAAU,WAAW;AAExC,UAAM,MAAM,UAAU,WAAW;AACjC,UAAM,SAAS,UAAU,WAAW;AAEpC,cAAU,eAAe;AAAA,MACvB,WAAU,6BAAM,iBAAgB,KAAK,gBAAgB,MAAM;AAAA,IAC7D;AAEA,eAAW,mBAAmB,UAAU,WAAW;AACnD,eAAW,QAAQ;AACnB,eAAW,WAAW;AAEtB,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,WAAO;AAAA,EACT;AACF;AAEA,IAAO,kBAAQ;","names":[]}
@@ -1,7 +1,7 @@
1
1
  import dayjs from "dayjs";
2
- import duration from "dayjs/plugin/duration";
3
- import relativeTime from "dayjs/plugin/relativeTime";
4
- import zh from "dayjs/locale/zh-cn";
2
+ import duration from "dayjs/plugin/duration.js";
3
+ import relativeTime from "dayjs/plugin/relativeTime.js";
4
+ import zh from "dayjs/locale/zh-cn.js";
5
5
  dayjs.extend(duration);
6
6
  dayjs.extend(relativeTime);
7
7
  const formatDuration = (duration2) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/utils/format.ts"],"sourcesContent":["import dayjs from 'dayjs'\nimport duration from 'dayjs/plugin/duration'\nimport relativeTime from 'dayjs/plugin/relativeTime'\nimport zh from 'dayjs/locale/zh-cn'\ndayjs.extend(duration)\ndayjs.extend(relativeTime)\nexport const formatDuration = (duration: number) => {\n const d = dayjs.duration(duration, 'second')\n return d.format('m[m]s[s]')\n}\n\n// export const formatDuration = (duration: number) => {\n// return dayjs.duration(duration,'seconds').format('mm:ss')\n// }\n\nexport const formatTime = (time: string) => {\n return dayjs(time).locale(zh).fromNow()\n}\n\nexport function formatRelativeTimeByDay(time: string | number | Date) {\n let res = dayjs().diff(dayjs(time), 'd')\n let unit = 'd'\n if (res <= 0) {\n res = dayjs().diff(dayjs(time), 'h')\n unit = 'h'\n }\n if (res <= 0) {\n res = dayjs().diff(dayjs(time), 'm')\n unit = 'm'\n }\n return `${res}${unit}`\n}\n\nexport const formatNumber = (number: number) => {\n // 1.11w\n try {\n if (number > 10000) {\n return `${(number / 10000.0).toFixed(2)}w`\n }\n // 1.11k\n if (number > 1000) {\n return `${(number / 1000.0).toFixed(2)}k`\n }\n return number.toString()\n } catch (e) {\n return '0'\n }\n}\n\nexport function numberWithCommas(x: number) {\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\n}\nexport const formatDate = (time: Date | undefined, template?: string) => {\n if (!time) return undefined\n return dayjs(time).format(template ?? 'YYYY-MM-DD')\n}\n"],"mappings":"AAAA,OAAO,WAAW;AAClB,OAAO,cAAc;AACrB,OAAO,kBAAkB;AACzB,OAAO,QAAQ;AACf,MAAM,OAAO,QAAQ;AACrB,MAAM,OAAO,YAAY;AAClB,MAAM,iBAAiB,CAACA,cAAqB;AAClD,QAAM,IAAI,MAAM,SAASA,WAAU,QAAQ;AAC3C,SAAO,EAAE,OAAO,UAAU;AAC5B;AAMO,MAAM,aAAa,CAAC,SAAiB;AAC1C,SAAO,MAAM,IAAI,EAAE,OAAO,EAAE,EAAE,QAAQ;AACxC;AAEO,SAAS,wBAAwB,MAA8B;AACpE,MAAI,MAAM,MAAM,EAAE,KAAK,MAAM,IAAI,GAAG,GAAG;AACvC,MAAI,OAAO;AACX,MAAI,OAAO,GAAG;AACZ,UAAM,MAAM,EAAE,KAAK,MAAM,IAAI,GAAG,GAAG;AACnC,WAAO;AAAA,EACT;AACA,MAAI,OAAO,GAAG;AACZ,UAAM,MAAM,EAAE,KAAK,MAAM,IAAI,GAAG,GAAG;AACnC,WAAO;AAAA,EACT;AACA,SAAO,GAAG,GAAG,GAAG,IAAI;AACtB;AAEO,MAAM,eAAe,CAAC,WAAmB;AAE9C,MAAI;AACF,QAAI,SAAS,KAAO;AAClB,aAAO,IAAI,SAAS,KAAS,QAAQ,CAAC,CAAC;AAAA,IACzC;AAEA,QAAI,SAAS,KAAM;AACjB,aAAO,IAAI,SAAS,KAAQ,QAAQ,CAAC,CAAC;AAAA,IACxC;AACA,WAAO,OAAO,SAAS;AAAA,EACzB,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACF;AAEO,SAAS,iBAAiB,GAAW;AAC1C,SAAO,EAAE,SAAS,EAAE,QAAQ,yBAAyB,GAAG;AAC1D;AACO,MAAM,aAAa,CAAC,MAAwB,aAAsB;AACvE,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,MAAM,IAAI,EAAE,OAAO,8BAAY,YAAY;AACpD;","names":["duration"]}
1
+ {"version":3,"sources":["../../../../src/components/utils/format.ts"],"sourcesContent":["import dayjs from 'dayjs'\nimport duration from 'dayjs/plugin/duration.js'\nimport relativeTime from 'dayjs/plugin/relativeTime.js'\nimport zh from 'dayjs/locale/zh-cn.js'\ndayjs.extend(duration)\ndayjs.extend(relativeTime)\nexport const formatDuration = (duration: number) => {\n const d = dayjs.duration(duration, 'second')\n return d.format('m[m]s[s]')\n}\n\n// export const formatDuration = (duration: number) => {\n// return dayjs.duration(duration,'seconds').format('mm:ss')\n// }\n\nexport const formatTime = (time: string) => {\n return dayjs(time).locale(zh).fromNow()\n}\n\nexport function formatRelativeTimeByDay(time: string | number | Date) {\n let res = dayjs().diff(dayjs(time), 'd')\n let unit = 'd'\n if (res <= 0) {\n res = dayjs().diff(dayjs(time), 'h')\n unit = 'h'\n }\n if (res <= 0) {\n res = dayjs().diff(dayjs(time), 'm')\n unit = 'm'\n }\n return `${res}${unit}`\n}\n\nexport const formatNumber = (number: number) => {\n // 1.11w\n try {\n if (number > 10000) {\n return `${(number / 10000.0).toFixed(2)}w`\n }\n // 1.11k\n if (number > 1000) {\n return `${(number / 1000.0).toFixed(2)}k`\n }\n return number.toString()\n } catch (e) {\n return '0'\n }\n}\n\nexport function numberWithCommas(x: number) {\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\n}\nexport const formatDate = (time: Date | undefined, template?: string) => {\n if (!time) return undefined\n return dayjs(time).format(template ?? 'YYYY-MM-DD')\n}\n"],"mappings":"AAAA,OAAO,WAAW;AAClB,OAAO,cAAc;AACrB,OAAO,kBAAkB;AACzB,OAAO,QAAQ;AACf,MAAM,OAAO,QAAQ;AACrB,MAAM,OAAO,YAAY;AAClB,MAAM,iBAAiB,CAACA,cAAqB;AAClD,QAAM,IAAI,MAAM,SAASA,WAAU,QAAQ;AAC3C,SAAO,EAAE,OAAO,UAAU;AAC5B;AAMO,MAAM,aAAa,CAAC,SAAiB;AAC1C,SAAO,MAAM,IAAI,EAAE,OAAO,EAAE,EAAE,QAAQ;AACxC;AAEO,SAAS,wBAAwB,MAA8B;AACpE,MAAI,MAAM,MAAM,EAAE,KAAK,MAAM,IAAI,GAAG,GAAG;AACvC,MAAI,OAAO;AACX,MAAI,OAAO,GAAG;AACZ,UAAM,MAAM,EAAE,KAAK,MAAM,IAAI,GAAG,GAAG;AACnC,WAAO;AAAA,EACT;AACA,MAAI,OAAO,GAAG;AACZ,UAAM,MAAM,EAAE,KAAK,MAAM,IAAI,GAAG,GAAG;AACnC,WAAO;AAAA,EACT;AACA,SAAO,GAAG,GAAG,GAAG,IAAI;AACtB;AAEO,MAAM,eAAe,CAAC,WAAmB;AAE9C,MAAI;AACF,QAAI,SAAS,KAAO;AAClB,aAAO,IAAI,SAAS,KAAS,QAAQ,CAAC,CAAC;AAAA,IACzC;AAEA,QAAI,SAAS,KAAM;AACjB,aAAO,IAAI,SAAS,KAAQ,QAAQ,CAAC,CAAC;AAAA,IACxC;AACA,WAAO,OAAO,SAAS;AAAA,EACzB,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACF;AAEO,SAAS,iBAAiB,GAAW;AAC1C,SAAO,EAAE,SAAS,EAAE,QAAQ,yBAAyB,GAAG;AAC1D;AACO,MAAM,aAAa,CAAC,MAAwB,aAAsB;AACvE,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,MAAM,IAAI,EAAE,OAAO,8BAAY,YAAY;AACpD;","names":["duration"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/utils/getMods.ts"],"sourcesContent":["import { BSMap } from '@/service/api/interfaces/beatsaver'\n\nexport const getMods = (bsMap: BSMap) => {\n const res: string[] = []\n const publishedVersion = bsMap.versions[0]\n if (publishedVersion.diffs.some((it) => it.chroma)) {\n res.push('Chroma')\n }\n if (publishedVersion.diffs.some((it) => it.cinema)) {\n res.push('Cinema')\n }\n if (publishedVersion.diffs.some((it) => it.me)) {\n res.push('Mapping')\n }\n if (publishedVersion.diffs.some((it) => it.ne)) {\n res.push('Noodle')\n }\n return res\n}\n"],"mappings":"AAEO,MAAM,UAAU,CAAC,UAAiB;AACvC,QAAM,MAAgB,CAAC;AACvB,QAAM,mBAAmB,MAAM,SAAS,CAAC;AACzC,MAAI,iBAAiB,MAAM,KAAK,CAAC,OAAO,GAAG,MAAM,GAAG;AAClD,QAAI,KAAK,QAAQ;AAAA,EACnB;AACA,MAAI,iBAAiB,MAAM,KAAK,CAAC,OAAO,GAAG,MAAM,GAAG;AAClD,QAAI,KAAK,QAAQ;AAAA,EACnB;AACA,MAAI,iBAAiB,MAAM,KAAK,CAAC,OAAO,GAAG,EAAE,GAAG;AAC9C,QAAI,KAAK,SAAS;AAAA,EACpB;AACA,MAAI,iBAAiB,MAAM,KAAK,CAAC,OAAO,GAAG,EAAE,GAAG;AAC9C,QAAI,KAAK,QAAQ;AAAA,EACnB;AACA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/utils/getMods.ts"],"sourcesContent":["import { BSMap } from '@/services/api/interfaces/beatsaver'\n\nexport const getMods = (bsMap: BSMap) => {\n const res: string[] = []\n const publishedVersion = bsMap.versions[0]\n if (publishedVersion.diffs.some((it) => it.chroma)) {\n res.push('Chroma')\n }\n if (publishedVersion.diffs.some((it) => it.cinema)) {\n res.push('Cinema')\n }\n if (publishedVersion.diffs.some((it) => it.me)) {\n res.push('Mapping')\n }\n if (publishedVersion.diffs.some((it) => it.ne)) {\n res.push('Noodle')\n }\n return res\n}\n"],"mappings":"AAEO,MAAM,UAAU,CAAC,UAAiB;AACvC,QAAM,MAAgB,CAAC;AACvB,QAAM,mBAAmB,MAAM,SAAS,CAAC;AACzC,MAAI,iBAAiB,MAAM,KAAK,CAAC,OAAO,GAAG,MAAM,GAAG;AAClD,QAAI,KAAK,QAAQ;AAAA,EACnB;AACA,MAAI,iBAAiB,MAAM,KAAK,CAAC,OAAO,GAAG,MAAM,GAAG;AAClD,QAAI,KAAK,QAAQ;AAAA,EACnB;AACA,MAAI,iBAAiB,MAAM,KAAK,CAAC,OAAO,GAAG,EAAE,GAAG;AAC9C,QAAI,KAAK,SAAS;AAAA,EACpB;AACA,MAAI,iBAAiB,MAAM,KAAK,CAAC,OAAO,GAAG,EAAE,GAAG;AAC9C,QAAI,KAAK,QAAQ;AAAA,EACnB;AACA,SAAO;AACT;","names":[]}
@@ -1,5 +1,5 @@
1
- export * from "./format";
2
- export * from "./tag-format";
1
+ export * from "./format.js";
2
+ export * from "./tag-format.js";
3
3
  const diffConv = (diff) => {
4
4
  if (diff.includes("ExpertPlus")) {
5
5
  return "EX+";
@@ -1 +1,33 @@
1
+ import { z } from "zod/v4";
2
+ import { renderSchema } from "./common/render/index.js";
3
+ import { s3ConfigSchema } from "./common/s3/index.js";
4
+ const cronSchema = z.object({
5
+ enabled: z.boolean().optional().default(false),
6
+ cron: z.string().optional()
7
+ }).optional().default({ enabled: false });
8
+ const configSchema = z.object({
9
+ s3: s3ConfigSchema.default({ enabled: false }).optional(),
10
+ render: renderSchema,
11
+ beatsaver: z.object({
12
+ host: z.string().default("https://api.beatsaver.com").optional(),
13
+ wsURL: z.string().default("wss://ws.beatsaver.com/maps").optional(),
14
+ oauthClientId: z.string().optional(),
15
+ oauthClientSecret: z.string().optional()
16
+ }).default({
17
+ host: "https://api.beatsaver.com",
18
+ wsURL: "wss://ws.beatsaver.com/maps"
19
+ }).optional(),
20
+ beatleader: z.object({
21
+ oauthClientId: z.string().optional(),
22
+ oauthClientSecret: z.string().optional()
23
+ }).default({}).optional(),
24
+ cron: z.object({
25
+ temp: cronSchema
26
+ }).default({
27
+ temp: { enabled: false }
28
+ }).optional()
29
+ });
30
+ export {
31
+ configSchema
32
+ };
1
33
  //# sourceMappingURL=config.js.map