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.
- package/dist/cjs/cmd/bind/bind-beatleader.js +2 -2
- package/dist/cjs/cmd/bind/bind-beatleader.js.map +1 -1
- package/dist/cjs/cmd/bind/bind-beatsaver.js +2 -2
- package/dist/cjs/cmd/bind/bind-beatsaver.js.map +1 -1
- package/dist/cjs/cmd/bind/bind-id-beatleader.js +3 -3
- package/dist/cjs/cmd/bind/bind-id-beatleader.js.map +1 -1
- package/dist/cjs/cmd/bind/bind-id-beatsaver.js +3 -3
- package/dist/cjs/cmd/bind/bind-id-beatsaver.js.map +1 -1
- package/dist/cjs/cmd/bind/bind-scoresaber.js +3 -3
- package/dist/cjs/cmd/bind/bind-scoresaber.js.map +1 -1
- package/dist/cjs/cmd/bind/index.js +12 -12
- package/dist/cjs/cmd/bind/index.js.map +1 -1
- package/dist/cjs/cmd/bsmap/id-search.js +3 -3
- package/dist/cjs/cmd/bsmap/id-search.js.map +1 -1
- package/dist/cjs/cmd/bsmap/key-search.js +2 -2
- package/dist/cjs/cmd/bsmap/key-search.js.map +1 -1
- package/dist/cjs/cmd/bsmap/latest.js +2 -2
- package/dist/cjs/cmd/bsmap/latest.js.map +1 -1
- package/dist/cjs/cmd/deprecated/tmp.js +4 -4
- package/dist/cjs/cmd/deprecated/tmp.js.map +1 -1
- package/dist/cjs/cmd/index.js +11 -11
- package/dist/cjs/cmd/index.js.map +1 -1
- package/dist/cjs/cmd/rank.js +8 -8
- package/dist/cjs/cmd/rank.js.map +1 -1
- package/dist/cjs/cmd/score.js +16 -20
- package/dist/cjs/cmd/score.js.map +1 -1
- package/dist/cjs/cmd/subscribe/beatleader.js +3 -3
- package/dist/cjs/cmd/subscribe/beatleader.js.map +1 -1
- package/dist/cjs/cmd/subscribe/beatsaver.js +3 -3
- package/dist/cjs/cmd/subscribe/beatsaver.js.map +1 -1
- package/dist/cjs/cmd/subscribe/id-beatleader-score.js +4 -4
- package/dist/cjs/cmd/subscribe/id-beatleader-score.js.map +1 -1
- package/dist/cjs/cmd/subscribe/id-beatsaver-mapper.js +4 -4
- package/dist/cjs/cmd/subscribe/id-beatsaver-mapper.js.map +1 -1
- package/dist/cjs/cmd/subscribe/index.js +8 -8
- package/dist/cjs/cmd/subscribe/index.js.map +1 -1
- package/dist/cjs/cmd/subscribe/subjoin.js +6 -6
- package/dist/cjs/cmd/subscribe/subjoin.js.map +1 -1
- package/dist/cjs/cmd/subscribe/subleave.js +6 -6
- package/dist/cjs/cmd/subscribe/subleave.js.map +1 -1
- package/dist/cjs/cmd/subscribe/unsubscribe.js +8 -8
- package/dist/cjs/cmd/subscribe/unsubscribe.js.map +1 -1
- package/dist/cjs/common/cache.js.map +1 -0
- package/dist/cjs/common/fetch/error.js.map +1 -0
- package/dist/cjs/{infra/support → common}/fetch/index.js +16 -14
- package/dist/cjs/common/fetch/index.js.map +1 -0
- package/dist/cjs/{infra/support → common}/fetch/ofetch.js +5 -12
- package/dist/cjs/common/fetch/ofetch.js.map +1 -0
- package/dist/cjs/common/i18n/index.js +55 -0
- package/dist/cjs/common/i18n/index.js.map +1 -0
- package/dist/cjs/common/i18n/parser.js.map +1 -0
- package/dist/cjs/{infra/i18n/index.js → common/i18n/util.js} +10 -71
- package/dist/cjs/common/i18n/util.js.map +1 -0
- package/dist/cjs/{infra/support → common}/render/index.js +55 -15
- package/dist/cjs/common/render/index.js.map +1 -0
- package/dist/cjs/common/render/puppeteer.js.map +1 -0
- package/dist/cjs/{infra → common}/s3/index.js +34 -13
- package/dist/cjs/common/s3/index.js.map +1 -0
- package/dist/cjs/components/components/RankDifficulty.js +60 -84
- package/dist/cjs/components/components/RankDifficulty.js.map +1 -1
- package/dist/cjs/components/components/base/avatar.js +1 -2
- package/dist/cjs/components/components/base/avatar.js.map +1 -1
- package/dist/cjs/components/components/bl-rank-score-item.js +25 -87
- package/dist/cjs/components/components/bl-rank-score-item.js.map +1 -1
- package/dist/cjs/components/components/bl-score-item.js +28 -69
- package/dist/cjs/components/components/bl-score-item.js.map +1 -1
- package/dist/cjs/components/components/characteristic.js +106 -118
- package/dist/cjs/components/components/characteristic.js.map +1 -1
- package/dist/cjs/components/components/flag.js +6 -14
- package/dist/cjs/components/components/flag.js.map +1 -1
- package/dist/cjs/components/components/icons/BeatLeader.js +55 -71
- package/dist/cjs/components/components/icons/BeatLeader.js.map +1 -1
- package/dist/cjs/components/components/icons/RankIcon.js +3 -7
- package/dist/cjs/components/components/icons/RankIcon.js.map +1 -1
- package/dist/cjs/components/components/icons/ScoreSaberIcon.js +276 -312
- package/dist/cjs/components/components/icons/ScoreSaberIcon.js.map +1 -1
- package/dist/cjs/components/components/progressbar.js +12 -2
- package/dist/cjs/components/components/progressbar.js.map +1 -1
- package/dist/cjs/components/components/scoreItem.js +26 -63
- package/dist/cjs/components/components/scoreItem.js.map +1 -1
- package/dist/cjs/components/components/scoregraph.js +4 -5
- package/dist/cjs/components/components/scoregraph.js.map +1 -1
- package/dist/cjs/components/components/skill-graph.js +147 -164
- package/dist/cjs/components/components/skill-graph.js.map +1 -1
- package/dist/cjs/components/components/socre-badge.js +7 -10
- package/dist/cjs/components/components/socre-badge.js.map +1 -1
- package/dist/cjs/components/components/ss-rank-score-item.js +25 -87
- package/dist/cjs/components/components/ss-rank-score-item.js.map +1 -1
- package/dist/cjs/components/components/ss-score-item.js +38 -65
- package/dist/cjs/components/components/ss-score-item.js.map +1 -1
- package/dist/cjs/components/index.js +3 -43
- package/dist/cjs/components/index.js.map +1 -1
- package/dist/cjs/components/pages/bl-player.js +91 -136
- package/dist/cjs/components/pages/bl-player.js.map +1 -1
- package/dist/cjs/components/pages/bl-score-with-rank.js +114 -221
- package/dist/cjs/components/pages/bl-score-with-rank.js.map +1 -1
- package/dist/cjs/components/pages/bl-score.js +67 -169
- package/dist/cjs/components/pages/bl-score.js.map +1 -1
- package/dist/cjs/components/pages/bs-map.js +95 -166
- package/dist/cjs/components/pages/bs-map.js.map +1 -1
- package/dist/cjs/components/pages/index.js +26 -26
- package/dist/cjs/components/pages/index.js.map +1 -1
- package/dist/cjs/components/pages/ss-player.js +48 -77
- package/dist/cjs/components/pages/ss-player.js.map +1 -1
- package/dist/cjs/components/utils/bl/bsorReplayAcc.js +2 -2
- package/dist/cjs/components/utils/bl/bsorReplayAcc.js.map +1 -1
- package/dist/cjs/components/utils/bl/getPart.js.map +1 -1
- package/dist/cjs/components/utils/bl/stastic.js.map +1 -1
- package/dist/cjs/components/utils/format.js +3 -3
- package/dist/cjs/components/utils/format.js.map +1 -1
- package/dist/cjs/components/utils/getMods.js.map +1 -1
- package/dist/cjs/components/utils/index.js +4 -4
- package/dist/cjs/config.js +40 -0
- package/dist/cjs/config.js.map +1 -1
- package/dist/cjs/{interface → core}/cmd/builder.js +5 -5
- package/dist/cjs/core/cmd/builder.js.map +1 -0
- package/dist/cjs/core/cmd/type.js.map +1 -0
- package/dist/cjs/core/domain.js +16 -0
- package/dist/cjs/core/domain.js.map +1 -0
- package/dist/cjs/core/error.js +38 -0
- package/dist/cjs/core/error.js.map +1 -0
- package/dist/cjs/{interface/bot.js → core/event.js} +3 -3
- package/dist/cjs/core/event.js.map +1 -0
- package/dist/cjs/core/index.js +39 -0
- package/dist/cjs/core/index.js.map +1 -0
- package/dist/cjs/core/logger.js.map +1 -0
- package/dist/cjs/core/session.js +16 -0
- package/dist/cjs/core/session.js.map +1 -0
- package/dist/cjs/{schedules → events/schedules}/index.js +4 -3
- package/dist/cjs/events/schedules/index.js.map +1 -0
- package/dist/cjs/{schedules → events/schedules}/temp.js +7 -3
- package/dist/cjs/events/schedules/temp.js.map +1 -0
- package/dist/cjs/{ws → events/ws}/beatleader.js +6 -6
- package/dist/cjs/events/ws/beatleader.js.map +1 -0
- package/dist/cjs/{ws → events/ws}/beatsaver.js +11 -11
- package/dist/cjs/events/ws/beatsaver.js.map +1 -0
- package/dist/cjs/events/ws/handler.js.map +1 -0
- package/dist/cjs/{ws → events/ws}/index.js +6 -8
- package/dist/cjs/events/ws/index.js.map +1 -0
- package/dist/cjs/index.js +27 -18
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interface/db/index.js +0 -6
- package/dist/cjs/interface/db/index.js.map +1 -1
- package/dist/cjs/interface/db/models.js.map +1 -1
- package/dist/cjs/interface/index.js +12 -21
- package/dist/cjs/interface/index.js.map +1 -1
- package/dist/cjs/{service → services}/api/base/aioclient.js +1 -1
- package/dist/cjs/services/api/base/aioclient.js.map +1 -0
- package/dist/cjs/{service → services}/api/base/blclient.js +1 -1
- package/dist/cjs/services/api/base/blclient.js.map +1 -0
- package/dist/cjs/{service → services}/api/base/bsclient.js +2 -2
- package/dist/cjs/services/api/base/bsclient.js.map +1 -0
- package/dist/cjs/{service → services}/api/base/index.js +8 -8
- package/dist/cjs/services/api/base/index.js.map +1 -0
- package/dist/cjs/{service → services}/api/base/ssclient.js +2 -2
- package/dist/cjs/services/api/base/ssclient.js.map +1 -0
- package/dist/cjs/{service → services}/api/index.js +17 -9
- package/dist/cjs/services/api/index.js.map +1 -0
- package/dist/cjs/services/api/interfaces/aiosaber/index.js.map +1 -0
- package/dist/cjs/services/api/interfaces/beatleader/bsor.js.map +1 -0
- package/dist/cjs/{service → services}/api/interfaces/beatleader/index.js +10 -10
- package/dist/cjs/services/api/interfaces/beatleader/index.js.map +1 -0
- package/dist/cjs/services/api/interfaces/beatleader/req.js.map +1 -0
- package/dist/cjs/services/api/interfaces/beatleader/score.js.map +1 -0
- package/dist/cjs/services/api/interfaces/beatleader/user.js.map +1 -0
- package/dist/cjs/services/api/interfaces/beatleader/ws.js.map +1 -0
- package/dist/cjs/services/api/interfaces/beatsaver/alert.js.map +1 -0
- package/dist/cjs/services/api/interfaces/beatsaver/bsmap.js.map +1 -0
- package/dist/cjs/{service → services}/api/interfaces/beatsaver/index.js +10 -10
- package/dist/cjs/services/api/interfaces/beatsaver/index.js.map +1 -0
- package/dist/cjs/services/api/interfaces/beatsaver/resp.js.map +1 -0
- package/dist/cjs/services/api/interfaces/beatsaver/user.js.map +1 -0
- package/dist/cjs/services/api/interfaces/beatsaver/ws.js.map +1 -0
- package/dist/cjs/services/api/interfaces/index.js.map +1 -0
- package/dist/cjs/{service → services}/api/interfaces/scoresaber/index.js +6 -6
- package/dist/cjs/services/api/interfaces/scoresaber/index.js.map +1 -0
- package/dist/cjs/services/api/interfaces/scoresaber/item.js.map +1 -0
- package/dist/cjs/services/api/interfaces/scoresaber/leaderboard.js.map +1 -0
- package/dist/cjs/services/api/interfaces/scoresaber/resp.js.map +1 -0
- package/dist/cjs/services/api/interfaces/scoresaber/user.js.map +1 -0
- package/dist/cjs/services/api/interfaces/scoresaber/ws.js.map +1 -0
- package/dist/cjs/services/api/sortScore.js.map +1 -0
- package/dist/cjs/{infra → services}/errors/index.js +21 -38
- package/dist/cjs/services/errors/index.js.map +1 -0
- package/dist/cjs/services/i18n/index.js +43 -0
- package/dist/cjs/services/i18n/index.js.map +1 -0
- package/dist/cjs/{infra → services}/i18n/zh-cn.json +1 -1
- package/dist/cjs/{infra → services}/index.js +12 -9
- package/dist/cjs/services/index.js.map +1 -0
- package/dist/cjs/services/preference.js.map +1 -0
- package/dist/cjs/{service → services}/render/index.js +36 -13
- package/dist/cjs/services/render/index.js.map +1 -0
- package/dist/cjs/utils/bsorDecoder.js +329 -0
- package/dist/cjs/utils/bsorDecoder.js.map +1 -0
- package/dist/cjs/utils/index.js +6 -1
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/platform.js +38 -0
- package/dist/cjs/utils/platform.js.map +1 -0
- package/dist/esm/cmd/bind/bind-beatleader.js +2 -2
- package/dist/esm/cmd/bind/bind-beatleader.js.map +1 -1
- package/dist/esm/cmd/bind/bind-beatsaver.js +2 -2
- package/dist/esm/cmd/bind/bind-beatsaver.js.map +1 -1
- package/dist/esm/cmd/bind/bind-id-beatleader.js +3 -3
- package/dist/esm/cmd/bind/bind-id-beatleader.js.map +1 -1
- package/dist/esm/cmd/bind/bind-id-beatsaver.js +3 -3
- package/dist/esm/cmd/bind/bind-id-beatsaver.js.map +1 -1
- package/dist/esm/cmd/bind/bind-scoresaber.js +3 -3
- package/dist/esm/cmd/bind/bind-scoresaber.js.map +1 -1
- package/dist/esm/cmd/bind/index.js +5 -5
- package/dist/esm/cmd/bind/index.js.map +1 -1
- package/dist/esm/cmd/bsmap/id-search.js +2 -2
- package/dist/esm/cmd/bsmap/id-search.js.map +1 -1
- package/dist/esm/cmd/bsmap/key-search.js +1 -1
- package/dist/esm/cmd/bsmap/key-search.js.map +1 -1
- package/dist/esm/cmd/bsmap/latest.js +2 -2
- package/dist/esm/cmd/bsmap/latest.js.map +1 -1
- package/dist/esm/cmd/deprecated/tmp.js +3 -3
- package/dist/esm/cmd/deprecated/tmp.js.map +1 -1
- package/dist/esm/cmd/index.js +11 -11
- package/dist/esm/cmd/index.js.map +1 -1
- package/dist/esm/cmd/rank.js +5 -5
- package/dist/esm/cmd/rank.js.map +1 -1
- package/dist/esm/cmd/score.js +13 -17
- package/dist/esm/cmd/score.js.map +1 -1
- package/dist/esm/cmd/subscribe/beatleader.js +3 -3
- package/dist/esm/cmd/subscribe/beatleader.js.map +1 -1
- package/dist/esm/cmd/subscribe/beatsaver.js +3 -3
- package/dist/esm/cmd/subscribe/beatsaver.js.map +1 -1
- package/dist/esm/cmd/subscribe/id-beatleader-score.js +4 -4
- package/dist/esm/cmd/subscribe/id-beatleader-score.js.map +1 -1
- package/dist/esm/cmd/subscribe/id-beatsaver-mapper.js +4 -4
- package/dist/esm/cmd/subscribe/id-beatsaver-mapper.js.map +1 -1
- package/dist/esm/cmd/subscribe/index.js +7 -7
- package/dist/esm/cmd/subscribe/index.js.map +1 -1
- package/dist/esm/cmd/subscribe/subjoin.js +5 -5
- package/dist/esm/cmd/subscribe/subjoin.js.map +1 -1
- package/dist/esm/cmd/subscribe/subleave.js +5 -5
- package/dist/esm/cmd/subscribe/subleave.js.map +1 -1
- package/dist/esm/cmd/subscribe/unsubscribe.js +7 -7
- package/dist/esm/cmd/subscribe/unsubscribe.js.map +1 -1
- package/dist/esm/common/cache.js.map +1 -0
- package/dist/esm/common/fetch/error.js.map +1 -0
- package/dist/esm/common/fetch/index.js +35 -0
- package/dist/esm/common/fetch/index.js.map +1 -0
- package/dist/esm/{infra/support → common}/fetch/ofetch.js +4 -10
- package/dist/esm/common/fetch/ofetch.js.map +1 -0
- package/dist/esm/common/i18n/index.js +32 -0
- package/dist/esm/common/i18n/index.js.map +1 -0
- package/dist/esm/common/i18n/parser.js.map +1 -0
- package/dist/esm/{infra/i18n/index.js → common/i18n/util.js} +4 -56
- package/dist/esm/common/i18n/util.js.map +1 -0
- package/dist/esm/{infra/support → common}/render/index.js +53 -13
- package/dist/esm/common/render/index.js.map +1 -0
- package/dist/esm/common/render/puppeteer.js.map +1 -0
- package/dist/esm/{infra → common}/s3/index.js +32 -12
- package/dist/esm/common/s3/index.js.map +1 -0
- package/dist/esm/components/components/RankDifficulty.js +60 -84
- package/dist/esm/components/components/RankDifficulty.js.map +1 -1
- package/dist/esm/components/components/base/avatar.js +1 -2
- package/dist/esm/components/components/base/avatar.js.map +1 -1
- package/dist/esm/components/components/bl-rank-score-item.js +25 -87
- package/dist/esm/components/components/bl-rank-score-item.js.map +1 -1
- package/dist/esm/components/components/bl-score-item.js +28 -69
- package/dist/esm/components/components/bl-score-item.js.map +1 -1
- package/dist/esm/components/components/characteristic.js +106 -118
- package/dist/esm/components/components/characteristic.js.map +1 -1
- package/dist/esm/components/components/flag.js +6 -14
- package/dist/esm/components/components/flag.js.map +1 -1
- package/dist/esm/components/components/icons/BeatLeader.js +55 -71
- package/dist/esm/components/components/icons/BeatLeader.js.map +1 -1
- package/dist/esm/components/components/icons/RankIcon.js +3 -7
- package/dist/esm/components/components/icons/RankIcon.js.map +1 -1
- package/dist/esm/components/components/icons/ScoreSaberIcon.js +276 -312
- package/dist/esm/components/components/icons/ScoreSaberIcon.js.map +1 -1
- package/dist/esm/components/components/progressbar.js +2 -2
- package/dist/esm/components/components/progressbar.js.map +1 -1
- package/dist/esm/components/components/scoreItem.js +26 -63
- package/dist/esm/components/components/scoreItem.js.map +1 -1
- package/dist/esm/components/components/scoregraph.js +4 -5
- package/dist/esm/components/components/scoregraph.js.map +1 -1
- package/dist/esm/components/components/skill-graph.js +147 -164
- package/dist/esm/components/components/skill-graph.js.map +1 -1
- package/dist/esm/components/components/socre-badge.js +7 -10
- package/dist/esm/components/components/socre-badge.js.map +1 -1
- package/dist/esm/components/components/ss-rank-score-item.js +25 -87
- package/dist/esm/components/components/ss-rank-score-item.js.map +1 -1
- package/dist/esm/components/components/ss-score-item.js +28 -65
- package/dist/esm/components/components/ss-score-item.js.map +1 -1
- package/dist/esm/components/index.js +3 -43
- package/dist/esm/components/index.js.map +1 -1
- package/dist/esm/components/pages/bl-player.js +91 -136
- package/dist/esm/components/pages/bl-player.js.map +1 -1
- package/dist/esm/components/pages/bl-score-with-rank.js +114 -221
- package/dist/esm/components/pages/bl-score-with-rank.js.map +1 -1
- package/dist/esm/components/pages/bl-score.js +67 -169
- package/dist/esm/components/pages/bl-score.js.map +1 -1
- package/dist/esm/components/pages/bs-map.js +95 -166
- package/dist/esm/components/pages/bs-map.js.map +1 -1
- package/dist/esm/components/pages/index.js +21 -21
- package/dist/esm/components/pages/index.js.map +1 -1
- package/dist/esm/components/pages/ss-player.js +48 -77
- package/dist/esm/components/pages/ss-player.js.map +1 -1
- package/dist/esm/components/utils/bl/bsorReplayAcc.js +2 -2
- package/dist/esm/components/utils/bl/bsorReplayAcc.js.map +1 -1
- package/dist/esm/components/utils/bl/getPart.js.map +1 -1
- package/dist/esm/components/utils/bl/stastic.js.map +1 -1
- package/dist/esm/components/utils/format.js +3 -3
- package/dist/esm/components/utils/format.js.map +1 -1
- package/dist/esm/components/utils/getMods.js.map +1 -1
- package/dist/esm/components/utils/index.js +2 -2
- package/dist/esm/config.js +32 -0
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/{interface → core}/cmd/builder.js +4 -4
- package/dist/esm/core/cmd/builder.js.map +1 -0
- package/dist/esm/core/domain.js +1 -0
- package/dist/esm/core/error.js +16 -0
- package/dist/esm/core/error.js.map +1 -0
- package/dist/esm/core/event.js +1 -0
- package/dist/esm/core/index.js +10 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/core/session.js +1 -0
- package/dist/esm/events/schedules/index.js +16 -0
- package/dist/esm/events/schedules/index.js.map +1 -0
- package/dist/esm/{schedules → events/schedules}/temp.js +7 -3
- package/dist/esm/events/schedules/temp.js.map +1 -0
- package/dist/esm/{ws → events/ws}/beatleader.js +6 -6
- package/dist/esm/events/ws/beatleader.js.map +1 -0
- package/dist/esm/{ws → events/ws}/beatsaver.js +11 -11
- package/dist/esm/events/ws/beatsaver.js.map +1 -0
- package/dist/esm/events/ws/index.js +4 -0
- package/dist/esm/events/ws/index.js.map +1 -0
- package/dist/esm/index.js +15 -10
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interface/db/index.js +0 -1
- package/dist/esm/interface/db/index.js.map +1 -1
- package/dist/esm/interface/index.js +9 -15
- package/dist/esm/interface/index.js.map +1 -1
- package/dist/esm/{service → services}/api/base/aioclient.js +1 -1
- package/dist/esm/services/api/base/aioclient.js.map +1 -0
- package/dist/esm/{service → services}/api/base/blclient.js +1 -1
- package/dist/esm/services/api/base/blclient.js.map +1 -0
- package/dist/esm/{service → services}/api/base/bsclient.js +2 -2
- package/dist/esm/services/api/base/bsclient.js.map +1 -0
- package/dist/esm/services/api/base/index.js +5 -0
- package/dist/esm/services/api/base/index.js.map +1 -0
- package/dist/esm/{service → services}/api/base/ssclient.js +2 -2
- package/dist/esm/services/api/base/ssclient.js.map +1 -0
- package/dist/esm/{service → services}/api/index.js +16 -8
- package/dist/esm/services/api/index.js.map +1 -0
- package/dist/esm/services/api/interfaces/beatleader/index.js +6 -0
- package/dist/esm/services/api/interfaces/beatleader/index.js.map +1 -0
- package/dist/esm/services/api/interfaces/beatsaver/index.js +6 -0
- package/dist/esm/services/api/interfaces/beatsaver/index.js.map +1 -0
- package/dist/esm/services/api/interfaces/scoresaber/index.js +4 -0
- package/dist/esm/services/api/interfaces/scoresaber/index.js.map +1 -0
- package/dist/esm/services/api/sortScore.js.map +1 -0
- package/dist/esm/{infra → services}/errors/index.js +1 -17
- package/dist/esm/services/errors/index.js.map +1 -0
- package/dist/esm/services/i18n/index.js +21 -0
- package/dist/esm/services/i18n/index.js.map +1 -0
- package/dist/esm/services/index.js +9 -0
- package/dist/esm/services/index.js.map +1 -0
- package/dist/esm/services/preference.js.map +1 -0
- package/dist/esm/{service → services}/render/index.js +34 -11
- package/dist/esm/services/render/index.js.map +1 -0
- package/dist/esm/utils/bsorDecoder.js +301 -0
- package/dist/esm/utils/bsorDecoder.js.map +1 -0
- package/dist/esm/utils/index.js +2 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/platform.js +14 -0
- package/dist/esm/utils/platform.js.map +1 -0
- package/dist/types/index.d.ts +1376 -48
- package/package.json +19 -10
- package/dist/cjs/components/utils/canvas.js +0 -2
- package/dist/cjs/components/utils/canvas.js.map +0 -1
- package/dist/cjs/infra/errors/index.js.map +0 -1
- package/dist/cjs/infra/i18n/index.js.map +0 -1
- package/dist/cjs/infra/i18n/parser.js.map +0 -1
- package/dist/cjs/infra/index.js.map +0 -1
- package/dist/cjs/infra/s3/index.js.map +0 -1
- package/dist/cjs/infra/support/cache.js.map +0 -1
- package/dist/cjs/infra/support/fetch/error.js.map +0 -1
- package/dist/cjs/infra/support/fetch/index.js.map +0 -1
- package/dist/cjs/infra/support/fetch/ofetch.js.map +0 -1
- package/dist/cjs/infra/support/render/index.js.map +0 -1
- package/dist/cjs/infra/support/render/puppeteer.js.map +0 -1
- package/dist/cjs/interface/bot.js.map +0 -1
- package/dist/cjs/interface/cmd/builder.js.map +0 -1
- package/dist/cjs/interface/cmd/type.js.map +0 -1
- package/dist/cjs/interface/logger.js.map +0 -1
- package/dist/cjs/schedules/index.js.map +0 -1
- package/dist/cjs/schedules/interface.js +0 -16
- package/dist/cjs/schedules/interface.js.map +0 -1
- package/dist/cjs/schedules/temp.js.map +0 -1
- package/dist/cjs/service/api/base/aioclient.js.map +0 -1
- package/dist/cjs/service/api/base/blclient.js.map +0 -1
- package/dist/cjs/service/api/base/bsclient.js.map +0 -1
- package/dist/cjs/service/api/base/index.js.map +0 -1
- package/dist/cjs/service/api/base/ssclient.js.map +0 -1
- package/dist/cjs/service/api/index.js.map +0 -1
- package/dist/cjs/service/api/interfaces/aiosaber/index.js.map +0 -1
- package/dist/cjs/service/api/interfaces/beatleader/bsor.js.map +0 -1
- package/dist/cjs/service/api/interfaces/beatleader/index.js.map +0 -1
- package/dist/cjs/service/api/interfaces/beatleader/req.js.map +0 -1
- package/dist/cjs/service/api/interfaces/beatleader/score.js.map +0 -1
- package/dist/cjs/service/api/interfaces/beatleader/user.js.map +0 -1
- package/dist/cjs/service/api/interfaces/beatleader/ws.js.map +0 -1
- package/dist/cjs/service/api/interfaces/beatsaver/alert.js.map +0 -1
- package/dist/cjs/service/api/interfaces/beatsaver/bsmap.js.map +0 -1
- package/dist/cjs/service/api/interfaces/beatsaver/index.js.map +0 -1
- package/dist/cjs/service/api/interfaces/beatsaver/resp.js.map +0 -1
- package/dist/cjs/service/api/interfaces/beatsaver/user.js.map +0 -1
- package/dist/cjs/service/api/interfaces/beatsaver/ws.js.map +0 -1
- package/dist/cjs/service/api/interfaces/index.js.map +0 -1
- package/dist/cjs/service/api/interfaces/scoresaber/index.js.map +0 -1
- package/dist/cjs/service/api/interfaces/scoresaber/item.js.map +0 -1
- package/dist/cjs/service/api/interfaces/scoresaber/leaderboard.js.map +0 -1
- package/dist/cjs/service/api/interfaces/scoresaber/resp.js.map +0 -1
- package/dist/cjs/service/api/interfaces/scoresaber/user.js.map +0 -1
- package/dist/cjs/service/api/interfaces/scoresaber/ws.js.map +0 -1
- package/dist/cjs/service/api/sortScore.js.map +0 -1
- package/dist/cjs/service/index.js +0 -16
- package/dist/cjs/service/index.js.map +0 -1
- package/dist/cjs/service/preference.js.map +0 -1
- package/dist/cjs/service/render/index.js.map +0 -1
- package/dist/cjs/service/render/interfaces.js +0 -16
- package/dist/cjs/service/render/interfaces.js.map +0 -1
- package/dist/cjs/ws/beatleader.js.map +0 -1
- package/dist/cjs/ws/beatsaver.js.map +0 -1
- package/dist/cjs/ws/bl-filter.js +0 -1
- package/dist/cjs/ws/handler.js.map +0 -1
- package/dist/cjs/ws/index.js.map +0 -1
- package/dist/cjs/ws/scoresaber.js +0 -75
- package/dist/cjs/ws/scoresaber.js.map +0 -1
- package/dist/esm/components/utils/canvas.js +0 -2
- package/dist/esm/components/utils/canvas.js.map +0 -1
- package/dist/esm/infra/errors/index.js.map +0 -1
- package/dist/esm/infra/i18n/index.js.map +0 -1
- package/dist/esm/infra/i18n/parser.js.map +0 -1
- package/dist/esm/infra/index.js +0 -6
- package/dist/esm/infra/index.js.map +0 -1
- package/dist/esm/infra/s3/index.js.map +0 -1
- package/dist/esm/infra/support/cache.js.map +0 -1
- package/dist/esm/infra/support/fetch/error.js.map +0 -1
- package/dist/esm/infra/support/fetch/index.js +0 -33
- package/dist/esm/infra/support/fetch/index.js.map +0 -1
- package/dist/esm/infra/support/fetch/ofetch.js.map +0 -1
- package/dist/esm/infra/support/render/index.js.map +0 -1
- package/dist/esm/infra/support/render/puppeteer.js.map +0 -1
- package/dist/esm/interface/bot.js +0 -1
- package/dist/esm/interface/cmd/builder.js.map +0 -1
- package/dist/esm/schedules/index.js +0 -15
- package/dist/esm/schedules/index.js.map +0 -1
- package/dist/esm/schedules/interface.js +0 -1
- package/dist/esm/schedules/temp.js.map +0 -1
- package/dist/esm/service/api/base/aioclient.js.map +0 -1
- package/dist/esm/service/api/base/blclient.js.map +0 -1
- package/dist/esm/service/api/base/bsclient.js.map +0 -1
- package/dist/esm/service/api/base/index.js +0 -5
- package/dist/esm/service/api/base/index.js.map +0 -1
- package/dist/esm/service/api/base/ssclient.js.map +0 -1
- package/dist/esm/service/api/index.js.map +0 -1
- package/dist/esm/service/api/interfaces/beatleader/index.js +0 -6
- package/dist/esm/service/api/interfaces/beatleader/index.js.map +0 -1
- package/dist/esm/service/api/interfaces/beatsaver/index.js +0 -6
- package/dist/esm/service/api/interfaces/beatsaver/index.js.map +0 -1
- package/dist/esm/service/api/interfaces/scoresaber/index.js +0 -4
- package/dist/esm/service/api/interfaces/scoresaber/index.js.map +0 -1
- package/dist/esm/service/api/sortScore.js.map +0 -1
- package/dist/esm/service/index.js +0 -1
- package/dist/esm/service/index.js.map +0 -1
- package/dist/esm/service/preference.js.map +0 -1
- package/dist/esm/service/render/index.js.map +0 -1
- package/dist/esm/service/render/interfaces.js +0 -1
- package/dist/esm/service/render/interfaces.js.map +0 -1
- package/dist/esm/ws/beatleader.js.map +0 -1
- package/dist/esm/ws/beatsaver.js.map +0 -1
- package/dist/esm/ws/bl-filter.js +0 -1
- package/dist/esm/ws/bl-filter.js.map +0 -1
- package/dist/esm/ws/index.js +0 -5
- package/dist/esm/ws/index.js.map +0 -1
- package/dist/esm/ws/scoresaber.js +0 -53
- package/dist/esm/ws/scoresaber.js.map +0 -1
- package/dist/types/cmd/bind/bind-beatleader.d.ts +0 -34
- package/dist/types/cmd/bind/bind-beatsaver.d.ts +0 -34
- package/dist/types/cmd/bind/bind-id-beatleader.d.ts +0 -34
- package/dist/types/cmd/bind/bind-id-beatsaver.d.ts +0 -34
- package/dist/types/cmd/bind/bind-scoresaber.d.ts +0 -34
- package/dist/types/cmd/bind/index.d.ts +0 -41
- package/dist/types/cmd/bsmap/id-search.d.ts +0 -41
- package/dist/types/cmd/bsmap/key-search.d.ts +0 -41
- package/dist/types/cmd/bsmap/latest.d.ts +0 -41
- package/dist/types/cmd/config/index.d.ts +0 -2
- package/dist/types/cmd/deprecated/tmp.d.ts +0 -41
- package/dist/types/cmd/index.d.ts +0 -34
- package/dist/types/cmd/rank.d.ts +0 -41
- package/dist/types/cmd/score.d.ts +0 -41
- package/dist/types/cmd/subscribe/beatleader.d.ts +0 -34
- package/dist/types/cmd/subscribe/beatsaver.d.ts +0 -34
- package/dist/types/cmd/subscribe/id-beatleader-score.d.ts +0 -34
- package/dist/types/cmd/subscribe/id-beatsaver-mapper.d.ts +0 -34
- package/dist/types/cmd/subscribe/index.d.ts +0 -41
- package/dist/types/cmd/subscribe/subjoin.d.ts +0 -41
- package/dist/types/cmd/subscribe/subleave.d.ts +0 -41
- package/dist/types/cmd/subscribe/unsubscribe.d.ts +0 -41
- package/dist/types/components/components/RankDifficulty.d.ts +0 -10
- package/dist/types/components/components/base/avatar.d.ts +0 -10
- package/dist/types/components/components/bl-rank-score-item.d.ts +0 -21
- package/dist/types/components/components/bl-score-item.d.ts +0 -10
- package/dist/types/components/components/characteristic.d.ts +0 -9
- package/dist/types/components/components/flag.d.ts +0 -9
- package/dist/types/components/components/icons/BeatLeader.d.ts +0 -6
- package/dist/types/components/components/icons/RankIcon.d.ts +0 -8
- package/dist/types/components/components/icons/ScoreSaberIcon.d.ts +0 -6
- package/dist/types/components/components/progressbar.d.ts +0 -8
- package/dist/types/components/components/scoreItem.d.ts +0 -8
- package/dist/types/components/components/scoregraph.d.ts +0 -15
- package/dist/types/components/components/skill-graph.d.ts +0 -9
- package/dist/types/components/components/socre-badge.d.ts +0 -9
- package/dist/types/components/components/ss-rank-score-item.d.ts +0 -21
- package/dist/types/components/components/ss-score-item.d.ts +0 -8
- package/dist/types/components/index.d.ts +0 -5
- package/dist/types/components/pages/bl-player.d.ts +0 -11
- package/dist/types/components/pages/bl-score-with-rank.d.ts +0 -18
- package/dist/types/components/pages/bl-score.d.ts +0 -15
- package/dist/types/components/pages/bs-map.d.ts +0 -11
- package/dist/types/components/pages/index.d.ts +0 -14
- package/dist/types/components/pages/ss-player.d.ts +0 -13
- package/dist/types/components/utils/bl/beatleader.d.ts +0 -15
- package/dist/types/components/utils/bl/blheadset.d.ts +0 -275
- package/dist/types/components/utils/bl/bsorDecoder.d.ts +0 -189
- package/dist/types/components/utils/bl/bsorReplayAcc.d.ts +0 -38
- package/dist/types/components/utils/bl/getPart.d.ts +0 -9
- package/dist/types/components/utils/bl/stastic.d.ts +0 -3
- package/dist/types/components/utils/canvas.d.ts +0 -2
- package/dist/types/components/utils/format.d.ts +0 -8
- package/dist/types/components/utils/getMods.d.ts +0 -5
- package/dist/types/components/utils/index.d.ts +0 -6
- package/dist/types/components/utils/qrcode.d.ts +0 -3
- package/dist/types/components/utils/sleep.d.ts +0 -3
- package/dist/types/components/utils/tag-format.d.ts +0 -3
- package/dist/types/components/utils/tw-join.d.ts +0 -5
- package/dist/types/config.d.ts +0 -30
- package/dist/types/index-Dagy_c8G.d.ts +0 -74
- package/dist/types/infra/errors/index.d.ts +0 -69
- package/dist/types/infra/i18n/index.d.ts +0 -4
- package/dist/types/infra/i18n/parser.d.ts +0 -16
- package/dist/types/infra/index.d.ts +0 -6
- package/dist/types/infra/s3/index.d.ts +0 -20
- package/dist/types/infra/support/cache.d.ts +0 -6
- package/dist/types/infra/support/fetch/error.d.ts +0 -11
- package/dist/types/infra/support/fetch/index.d.ts +0 -7
- package/dist/types/infra/support/fetch/ofetch.d.ts +0 -24
- package/dist/types/infra/support/render/index.d.ts +0 -38
- package/dist/types/infra/support/render/puppeteer.d.ts +0 -43
- package/dist/types/interface/bot.d.ts +0 -22
- package/dist/types/interface/cmd/builder.d.ts +0 -53
- package/dist/types/interface/cmd/type.d.ts +0 -30
- package/dist/types/interface/db/index.d.ts +0 -45
- package/dist/types/interface/db/models.d.ts +0 -41
- package/dist/types/interface/index.d.ts +0 -30
- package/dist/types/interface/logger.d.ts +0 -8
- package/dist/types/schedules/index.d.ts +0 -40
- package/dist/types/schedules/interface.d.ts +0 -45
- package/dist/types/schedules/temp.d.ts +0 -35
- package/dist/types/service/api/base/aioclient.d.ts +0 -13
- package/dist/types/service/api/base/blclient.d.ts +0 -28
- package/dist/types/service/api/base/bsclient.d.ts +0 -29
- package/dist/types/service/api/base/index.d.ts +0 -19
- package/dist/types/service/api/base/ssclient.d.ts +0 -17
- package/dist/types/service/api/index.d.ts +0 -59
- package/dist/types/service/api/interfaces/aiosaber/index.d.ts +0 -9
- package/dist/types/service/api/interfaces/beatleader/bsor.d.ts +0 -113
- package/dist/types/service/api/interfaces/beatleader/index.d.ts +0 -5
- package/dist/types/service/api/interfaces/beatleader/req.d.ts +0 -22
- package/dist/types/service/api/interfaces/beatleader/score.d.ts +0 -164
- package/dist/types/service/api/interfaces/beatleader/user.d.ts +0 -173
- package/dist/types/service/api/interfaces/beatleader/ws.d.ts +0 -90
- package/dist/types/service/api/interfaces/beatsaver/alert.d.ts +0 -20
- package/dist/types/service/api/interfaces/beatsaver/bsmap.d.ts +0 -70
- package/dist/types/service/api/interfaces/beatsaver/index.d.ts +0 -13
- package/dist/types/service/api/interfaces/beatsaver/resp.d.ts +0 -11
- package/dist/types/service/api/interfaces/beatsaver/user.d.ts +0 -10
- package/dist/types/service/api/interfaces/beatsaver/ws.d.ts +0 -13
- package/dist/types/service/api/interfaces/index.d.ts +0 -14
- package/dist/types/service/api/interfaces/scoresaber/index.d.ts +0 -3
- package/dist/types/service/api/interfaces/scoresaber/item.d.ts +0 -67
- package/dist/types/service/api/interfaces/scoresaber/leaderboard.d.ts +0 -13
- package/dist/types/service/api/interfaces/scoresaber/resp.d.ts +0 -12
- package/dist/types/service/api/interfaces/scoresaber/user.d.ts +0 -35
- package/dist/types/service/api/interfaces/scoresaber/ws.d.ts +0 -80
- package/dist/types/service/api/sortScore.d.ts +0 -5
- package/dist/types/service/index.d.ts +0 -30
- package/dist/types/service/preference.d.ts +0 -38
- package/dist/types/service/render/index.d.ts +0 -43
- package/dist/types/service/render/interfaces.d.ts +0 -30
- package/dist/types/utils/index.d.ts +0 -5
- package/dist/types/ws/beatleader.d.ts +0 -47
- package/dist/types/ws/beatsaver.d.ts +0 -52
- package/dist/types/ws/bl-filter.d.ts +0 -2
- package/dist/types/ws/handler.d.ts +0 -8
- package/dist/types/ws/index.d.ts +0 -36
- package/dist/types/ws/scoresaber.d.ts +0 -47
- /package/dist/cjs/{infra/support → common}/cache.js +0 -0
- /package/dist/cjs/{infra/support → common}/fetch/error.js +0 -0
- /package/dist/cjs/{infra → common}/i18n/parser.js +0 -0
- /package/dist/cjs/{infra/support → common}/render/puppeteer.js +0 -0
- /package/dist/cjs/{interface → core}/cmd/type.js +0 -0
- /package/dist/cjs/{interface → core}/logger.js +0 -0
- /package/dist/cjs/{ws → events/ws}/handler.js +0 -0
- /package/dist/cjs/{service → services}/api/interfaces/aiosaber/index.js +0 -0
- /package/dist/cjs/{service → services}/api/interfaces/beatleader/bsor.js +0 -0
- /package/dist/cjs/{service → services}/api/interfaces/beatleader/req.js +0 -0
- /package/dist/cjs/{service → services}/api/interfaces/beatleader/score.js +0 -0
- /package/dist/cjs/{service → services}/api/interfaces/beatleader/user.js +0 -0
- /package/dist/cjs/{service → services}/api/interfaces/beatleader/ws.js +0 -0
- /package/dist/cjs/{service → services}/api/interfaces/beatsaver/alert.js +0 -0
- /package/dist/cjs/{service → services}/api/interfaces/beatsaver/bsmap.js +0 -0
- /package/dist/cjs/{service → services}/api/interfaces/beatsaver/resp.js +0 -0
- /package/dist/cjs/{service → services}/api/interfaces/beatsaver/user.js +0 -0
- /package/dist/cjs/{service → services}/api/interfaces/beatsaver/ws.js +0 -0
- /package/dist/cjs/{service → services}/api/interfaces/index.js +0 -0
- /package/dist/cjs/{service → services}/api/interfaces/scoresaber/item.js +0 -0
- /package/dist/cjs/{service → services}/api/interfaces/scoresaber/leaderboard.js +0 -0
- /package/dist/cjs/{service → services}/api/interfaces/scoresaber/resp.js +0 -0
- /package/dist/cjs/{service → services}/api/interfaces/scoresaber/user.js +0 -0
- /package/dist/cjs/{service → services}/api/interfaces/scoresaber/ws.js +0 -0
- /package/dist/cjs/{service → services}/api/sortScore.js +0 -0
- /package/dist/cjs/{service → services}/preference.js +0 -0
- /package/dist/esm/{infra/support → common}/cache.js +0 -0
- /package/dist/esm/{infra/support → common}/fetch/error.js +0 -0
- /package/dist/esm/{infra → common}/i18n/parser.js +0 -0
- /package/dist/esm/{infra/support → common}/render/puppeteer.js +0 -0
- /package/dist/esm/{interface → core}/cmd/type.js +0 -0
- /package/dist/esm/{interface → core}/cmd/type.js.map +0 -0
- /package/dist/{cjs/ws/bl-filter.js.map → esm/core/domain.js.map} +0 -0
- /package/dist/esm/{interface/bot.js.map → core/event.js.map} +0 -0
- /package/dist/esm/{interface → core}/logger.js +0 -0
- /package/dist/esm/{interface → core}/logger.js.map +0 -0
- /package/dist/esm/{schedules/interface.js.map → core/session.js.map} +0 -0
- /package/dist/esm/{ws → events/ws}/handler.js +0 -0
- /package/dist/esm/{ws → events/ws}/handler.js.map +0 -0
- /package/dist/esm/{service → services}/api/interfaces/aiosaber/index.js +0 -0
- /package/dist/esm/{service → services}/api/interfaces/aiosaber/index.js.map +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatleader/bsor.js +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatleader/bsor.js.map +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatleader/req.js +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatleader/req.js.map +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatleader/score.js +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatleader/score.js.map +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatleader/user.js +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatleader/user.js.map +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatleader/ws.js +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatleader/ws.js.map +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatsaver/alert.js +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatsaver/alert.js.map +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatsaver/bsmap.js +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatsaver/bsmap.js.map +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatsaver/resp.js +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatsaver/resp.js.map +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatsaver/user.js +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatsaver/user.js.map +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatsaver/ws.js +0 -0
- /package/dist/esm/{service → services}/api/interfaces/beatsaver/ws.js.map +0 -0
- /package/dist/esm/{service → services}/api/interfaces/index.js +0 -0
- /package/dist/esm/{service → services}/api/interfaces/index.js.map +0 -0
- /package/dist/esm/{service → services}/api/interfaces/scoresaber/item.js +0 -0
- /package/dist/esm/{service → services}/api/interfaces/scoresaber/item.js.map +0 -0
- /package/dist/esm/{service → services}/api/interfaces/scoresaber/leaderboard.js +0 -0
- /package/dist/esm/{service → services}/api/interfaces/scoresaber/leaderboard.js.map +0 -0
- /package/dist/esm/{service → services}/api/interfaces/scoresaber/resp.js +0 -0
- /package/dist/esm/{service → services}/api/interfaces/scoresaber/resp.js.map +0 -0
- /package/dist/esm/{service → services}/api/interfaces/scoresaber/user.js +0 -0
- /package/dist/esm/{service → services}/api/interfaces/scoresaber/user.js.map +0 -0
- /package/dist/esm/{service → services}/api/interfaces/scoresaber/ws.js +0 -0
- /package/dist/esm/{service → services}/api/interfaces/scoresaber/ws.js.map +0 -0
- /package/dist/esm/{service → services}/api/sortScore.js +0 -0
- /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":"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","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
|
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
|
8
|
-
return /* @__PURE__ */
|
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
|
18
|
-
return /* @__PURE__ */
|
17
|
+
const SSPlayerComp = (scores, userInfo, bg) => {
|
18
|
+
return /* @__PURE__ */ React.createElement(SSPlayerPage, { scoreUser: userInfo, leaderItems: scores, bg });
|
19
19
|
};
|
20
|
-
const
|
21
|
-
return /* @__PURE__ */
|
20
|
+
const BLPlayerComp = (scores, userInfo, bg) => {
|
21
|
+
return /* @__PURE__ */ React.createElement(BLPlayerPage, { user: userInfo, beatleaderItems: scores, bg });
|
22
22
|
};
|
23
|
-
const
|
24
|
-
return /* @__PURE__ */
|
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
|
36
|
-
return /* @__PURE__ */
|
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
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
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 '@/
|
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
|
2
|
-
import
|
3
|
-
import
|
4
|
-
import
|
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__ */
|
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
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
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":["
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,SAAS,qBAAqB;AAC9B,SAAS,oCAAoC;AAE7C,MAAM,kBAAkB;AAAA,EACtB,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,oBAAoB;AACtB;AAEO,SAAS,sBAAsB,QAAc;AAdpD;AAeE,MAAI,UAAU,KAAM,QAAO;AAE3B,QAAM,SAAS;AAAA,IACb,gBAAgB;AAAA,IAChB,WAAW,CAAC;AAAA,IACZ,QAAQ,CAAC;AAAA,IAET,iBAAiB;AAAA,IACjB,YAAY,CAAC;AAAA,IACb,SAAS,CAAC;AAAA,IAEV,eAAe,CAAC;AAAA,IAEhB,UAAU;AAAA,IACV,OAAO;AAAA,IACP,kBAAkB;AAAA,EACpB;AAEA,MAAI,GAAC,sCAAQ,UAAR,mBAAe,QAAQ,QAAO;AAEnC,QAAM,UAAU,CAAC;AAEjB,WAAS,IAAI,GAAG,KAAK,IAAI,KAAK;AAC5B,WAAO,UAAU,KAAK,CAAG;AACzB,WAAO,OAAO,KAAK,CAAG;AACtB,WAAO,WAAW,KAAK,CAAG;AAC1B,WAAO,QAAQ,KAAK,CAAG;AACvB,WAAO,cAAc,KAAK,CAAG;AAC7B,YAAQ,KAAK,CAAC,CAAC;AAAA,EACjB;AAEA,WAAS,IAAI,GAAG,IAAI,OAAO,MAAM,QAAQ,KAAK;AAC5C,UAAM,OAAO,OAAO,MAAM,CAAC;AAC3B,QAAI,KAAK,cAAc,cAAc,KAAM;AAC3C,UAAM,WAAW,eAAe,KAAK,MAAM;AAC3C,QAAI,SAAS,gBAAgB,gBAAgB,OAAQ;AACrD,UAAM,MAAM,kBAAkB,KAAK,YAAY,mBAAmB;AAClE,UAAM,KAAK,KAAK,IAAI,KAAK,YAAY,UAAU,CAAC;AAEhD,QAAI,KAAK,YAAY,cAAc,GAAG;AACpC,aAAO,kBAAkB;AACzB,aAAO,UAAU,GAAG,KAAK;AACzB,aAAO,OAAO,GAAG,KAAK;AAAA,IACxB,OAAO;AACL,aAAO,mBAAmB;AAC1B,aAAO,WAAW,GAAG,KAAK;AAC1B,aAAO,QAAQ,GAAG,KAAK;AAAA,IACzB;AAEA,WAAO,cAAc,GAAG,KAAK,KAAK,YAAY;AAC9C,YAAQ,GAAG,EAAE,KAAK,KAAK,YAAY,aAAa;AAAA,EAClD;AAEA,WAAS,IAAI,GAAG,KAAK,IAAI,KAAK;AAE5B,UAAM,aAAa,OAAO,WAAW,CAAC,IAAI,OAAO,UAAU,CAAC;AAC5D,WAAO,OAAO,CAAC,IACb,OAAO,UAAU,CAAC,IAAI,IAAI,OAAO,OAAO,CAAC,IAAI,OAAO,UAAU,CAAC,IAAI;AACrE,WAAO,QAAQ,CAAC,IACd,OAAO,WAAW,CAAC,IAAI,IACnB,OAAO,QAAQ,CAAC,IAAI,OAAO,WAAW,CAAC,IACvC;AACN,WAAO,cAAc,CAAC,IACpB,aAAa,IAAI,OAAO,cAAc,CAAC,IAAI,aAAa;AAE1D,WAAO,UAAU,CAAC,KAAK,OAAO;AAC9B,WAAO,WAAW,CAAC,KAAK,OAAO;AAG/B,WAAO,cAAc,CAAC,IAAI;AAAA,MACxB,QAAQ,CAAC;AAAA,MACT,OAAO,cAAc,CAAC;AAAA,IACxB;AAGA,QAAI,OAAO,UAAU,CAAC,IAAI,OAAO;AAC/B,aAAO,WAAW,OAAO,UAAU,CAAC;AACtC,QAAI,OAAO,WAAW,CAAC,IAAI,OAAO;AAChC,aAAO,WAAW,OAAO,WAAW,CAAC;AAEvC,QAAI,OAAO,OAAO,CAAC,IAAI,OAAO,MAAO,QAAO,QAAQ,OAAO,OAAO,CAAC;AACnE,QAAI,OAAO,QAAQ,CAAC,IAAI,OAAO,MAAO,QAAO,QAAQ,OAAO,QAAQ,CAAC;AAErE,QAAI,OAAO,cAAc,CAAC,IAAI,OAAO;AACnC,aAAO,mBAAmB,OAAO,cAAc,CAAC;AAAA,EACpD;AAEA,SAAO;AACT;AAEA,SAAS,eAAe,QAAgB;AACtC,QAAM,SAAS,CAAC;AAEhB,SAAO,eAAe,KAAK,MAAM,SAAS,EAAE;AAC5C,YAAU;AACV,SAAO,YAAY,KAAK,MAAM,SAAS,EAAE;AACzC,YAAU;AACV,SAAO,gBAAgB,KAAK,MAAM,SAAS,EAAE;AAC7C,YAAU;AACV,SAAO,YAAY,KAAK,MAAM,SAAS,EAAE;AACzC,YAAU;AACV,SAAO,cAAc,KAAK,OAAO,UAAU,KAAK,KAAK,SAAS,IAAI,MAAM;AAExE,SAAO;AACT;AAEA,SAAS,kBAAkB,qBAA6B;AACtD,MAAI,MAAM,IAAI,sBAAsB;AACpC,MAAI,MAAM,EAAG,OAAM;AACnB,MAAI,MAAM,EAAG,OAAM;AACnB,SAAO,KAAK,MAAM,KAAO,GAAG;AAC9B;AAEA,MAAM,eAAe;AAAA,EACnB,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,WAAW;AACb;AAEA,SAAS,qBAAqB,UAAoB,MAAc;AAC9D,MAAI,SAAS,WAAW,EAAG,QAAO;AAElC,MAAI,SAAS;AACb,WAAS,QAAQ,CAAC,QAAgB;AAChC,cAAU,KAAK,IAAI,MAAM,MAAM,CAAC;AAAA,EAClC,CAAC;AACD,SAAO,KAAK,KAAK,SAAS,SAAS,MAAM;AAC3C;AAEA,SAAS,SAAS,aAAkB;AAClC,MAAI,QAAQ;AACZ,WAAS,kBAAkB,YAAY,mBAAmB;AAC1D,WAAS,iBAAiB,YAAY,eAAe;AACrD,WAAS,kBAAkB,YAAY,cAAc;AACrD,SAAO;AACT;AAEA,SAAS,iBAAiB,gBAAwB;AAChD,MAAI,iBAAiB,EAAG,kBAAiB;AACzC,MAAI,iBAAiB,EAAG,kBAAiB;AACzC,SAAO,KAAK,MAAM,iBAAiB,EAAE;AACvC;AAEA,SAAS,kBAAkB,iBAAyB;AAClD,MAAI,kBAAkB,EAAG,mBAAkB;AAC3C,MAAI,kBAAkB,EAAG,mBAAkB;AAC3C,SAAO,KAAK,MAAM,kBAAkB,EAAE;AACxC;AAEA,MAAM,qBAAqB;AAC3B,MAAM,yBAAyB;AAC/B,MAAM,0BAA0B;AAEzB,SAAS,iBAAiB,QAAc;AA1K/C;AA2KE,MAAI,UAAU,KAAM,QAAO;AAE3B,QAAM,SAAS;AAAA,IACb,OAAO,CAAC;AAAA,IACR,kBAAkB;AAAA,MAChB,KAAK,CAAC;AAAA,MACN,MAAM,CAAC;AAAA,MACP,OAAO,CAAC;AAAA,IACV;AAAA,IACA,kBAAkB;AAAA,MAChB,KAAK,CAAC;AAAA,MACN,MAAM,CAAC;AAAA,MACP,OAAO,CAAC;AAAA,IACV;AAAA,EACF;AAEA,MAAI,GAAC,sCAAQ,UAAR,mBAAe,QAAQ,QAAO;AAEnC,QAAM,eAAe,OAAO,MAAM,OAAO,MAAM,SAAS,CAAC,EAAE;AAC3D,QAAM,yBAAyB;AAAA,IAC7B,eAAe;AAAA,IACf;AAAA,EACF;AAEA,WAAS,IAAI,GAAK,IAAI,oBAAoB,KAAK,GAAK;AAClD,UAAM,OAAO,gBAAgB,KAAK,qBAAqB;AAEvD,UAAM,cAAc;AAAA,MAClB,KAAK,CAAC,GAAK,CAAG;AAAA,MACd,MAAM,CAAC,GAAK,CAAG;AAAA,MACf,OAAO,CAAC,GAAK,CAAG;AAAA,IAClB;AACA,UAAM,iBAAiB,EAAE,KAAK,GAAK,MAAM,GAAK,OAAO,EAAI;AAEzD,aAAS,IAAI,GAAG,IAAI,OAAO,MAAM,QAAQ,KAAK;AAC5C,YAAM,OAAO,OAAO,MAAM,CAAC;AAC3B,UAAI,KAAK,cAAc,cAAc,KAAM;AAC3C,YAAM,WAAW,eAAe,KAAK,MAAM;AAC3C,UAAI,SAAS,gBAAgB,gBAAgB,OAAQ;AAErD,YAAM,SAAS,uBAAuB,UAAU,KAAK,YAAY,IAAI;AAErE,YAAM,MAAM,kBAAkB,KAAK,YAAY,mBAAmB;AAClE,YAAM,MAAM,iBAAiB,KAAK,YAAY,eAAe;AAC7D,YAAM,OAAO,kBAAkB,KAAK,YAAY,cAAc;AAE9D,YAAM,YAAY,MAAM;AACxB,YAAM,YAAY,MAAM,MAAM;AAE9B,kBAAY,MAAM,CAAC,KAAK,YAAY;AACpC,kBAAY,MAAM,CAAC,KAAK,YAAY;AACpC,qBAAe,SAAS;AAExB,YAAM,YAAY,KAAK,YAAY,cAAc,IAAI,QAAQ;AAC7D,kBAAY,SAAS,EAAE,CAAC,KAAK,YAAY;AACzC,kBAAY,SAAS,EAAE,CAAC,KAAK,YAAY;AACzC,qBAAe,SAAS,KAAK;AAAA,IAC/B;AAEA,WAAO,MAAM,KAAK,IAAI;AAEtB,KAAC,OAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,cAAc;AAC9C,aAAO,iBAAiB,SAAS,EAAE;AAAA,QACjC,eAAe,SAAS,MAAM,IAC1B,IACA,YAAY,SAAS,EAAE,CAAC,IAAI,eAAe,SAAS;AAAA,MAC1D;AACA,aAAO,iBAAiB,SAAS,EAAE;AAAA,QACjC,eAAe,SAAS,MAAM,IAC1B,IACA,YAAY,SAAS,EAAE,CAAC,IAAI,eAAe,SAAS;AAAA,MAC1D;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAMO,SAAS,oBAAoB,QAAa;AA7PjD;AA8PE,MAAI,UAAU,KAAM,QAAO;AAE3B,WAAS,mBAAmB,OAAY;AACtC,WAAO;AAAA,MACL;AAAA,MACA,MAAM,EAAE,OAAO,GAAG,cAAc,GAAK,WAAW,EAAI;AAAA,MACpD,OAAO,EAAE,OAAO,GAAG,cAAc,GAAK,WAAW,EAAI;AAAA,IACvD;AAAA,EACF;AAEA,QAAM,SAAS;AAAA,IACb,mBAAmB,UAAU;AAAA,IAC7B,mBAAmB,YAAY;AAAA,IAC/B,mBAAmB,YAAY;AAAA,IAC/B,mBAAmB,WAAW;AAAA,IAC9B,mBAAmB,WAAW;AAAA,EAChC;AAEA,MAAI,GAAC,sCAAQ,UAAR,mBAAe,QAAQ,QAAO;AAEnC,WAAS,oBAAoB,eAAoB,WAAgB;AAC/D,UAAM,eAAe,oBAAoB,eAAe,SAAS;AACjE,WAAO,cAAc,IACjB,OAAO,YAAY,EAAE,OACrB,OAAO,YAAY,EAAE;AAAA,EAC3B;AAEA,WAAS,sBAAsB,aAA0B,WAAgB;AACvE,UAAM,eAAe,sBAAsB,WAAW;AACtD,WAAO,cAAc,IACjB,OAAO,YAAY,EAAE,OACrB,OAAO,YAAY,EAAE;AAAA,EAC3B;AAEA,WAAS,SAAS,aAAkB,OAAY,IAAS;AACvD,gBAAY,SAAS;AACrB,gBAAY,gBAAgB;AAC5B,gBAAY,aAAa;AAAA,EAC3B;AAEA,WAAS,aAAa,aAAkB;AACtC,QAAI,YAAY,UAAU,EAAG;AAC7B,gBAAY,gBAAgB,YAAY;AACxC,gBAAY,aAAa,YAAY;AAAA,EACvC;AAEA,WAAS,IAAI,GAAG,IAAI,OAAO,MAAM,QAAQ,KAAK;AAC5C,UAAM,OAAO,OAAO,MAAM,CAAC;AAC3B,QAAI,KAAK,cAAc,cAAc,KAAM;AAC3C,UAAM,WAAW,eAAe,KAAK,MAAM;AAC3C,QAAI,SAAS,gBAAgB,gBAAgB,OAAQ;AAErD,UAAM,mBAAmB;AAAA,MACvB,SAAS;AAAA,MACT,KAAK,YAAY;AAAA,IACnB;AACA,UAAM,qBAAqB;AAAA,MACzB,KAAK;AAAA,MACL,KAAK,YAAY;AAAA,IACnB;AAEA,UAAM,QAAQ,SAAS,KAAK,WAAW;AACvC,UAAM,KAAK,KAAK,IAAI,KAAK,YAAY,UAAU,CAAC;AAChD,aAAS,kBAAkB,OAAO,EAAE;AACpC,aAAS,oBAAoB,OAAO,EAAE;AAAA,EACxC;AAEA,SAAO,QAAQ,CAAC,YAAiB;AAC/B,iBAAa,QAAQ,IAAI;AACzB,iBAAa,QAAQ,KAAK;AAAA,EAC5B,CAAC;AAED,SAAO;AACT;AAMO,SAAS,oBAAoB,QAAa;AA7UjD;AA8UE,MAAI,UAAU,KAAM,QAAO;AAE3B,QAAM,SAAS;AAAA,IACb,UAAU,CAAC;AAAA,IACX,cAAc,CAAC;AAAA,EACjB;AAEA,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,UAAM,eAAe;AAAA,MACnB,OAAO;AAAA,MACP,cAAc;AAAA,MACd,MAAM,CAAC;AAAA,MACP,OAAO,CAAC;AAAA,IACV;AACA,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,mBAAa,KAAK,KAAK,EAAE,OAAO,GAAG,cAAc,EAAI,CAAC;AACtD,mBAAa,MAAM,KAAK,EAAE,OAAO,GAAG,cAAc,EAAI,CAAC;AAAA,IACzD;AACA,WAAO,SAAS,KAAK,YAAY;AAAA,EACnC;AAEA,WAAS,eAAe,GAAG,eAAe,GAAG,gBAAgB;AAC3D,UAAM,cAAc,CAAC;AACrB,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,kBAAY,KAAK,EAAE,OAAO,GAAG,cAAc,EAAI,CAAC;AAAA,IAClD;AACA,WAAO,aAAa,KAAK,WAAW;AAAA,EACtC;AAEA,MAAI,GAAC,sCAAQ,UAAR,mBAAe,QAAQ,QAAO;AAEnC,WAAS,SAAS,MAAW,OAAY;AACvC,SAAK,SAAS;AACd,SAAK,gBAAgB;AAAA,EACvB;AAEA,WAAS,kBAAkB,MAAW;AACpC,QAAI,KAAK,UAAU,EAAG;AACtB,SAAK,gBAAgB,KAAK;AAAA,EAC5B;AAEA,WAAS,IAAI,GAAG,IAAI,OAAO,MAAM,QAAQ,KAAK;AAC5C,UAAM,OAAO,OAAO,MAAM,CAAC;AAC3B,QAAI,KAAK,cAAc,cAAc,KAAM;AAC3C,UAAM,WAAW,eAAe,KAAK,MAAM;AAC3C,QAAI,SAAS,gBAAgB,gBAAgB,OAAQ;AAErD,UAAM,gBAAgB;AAAA,MACpB,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AACA,UAAM,qBAAqB,sBAAsB,SAAS,YAAY;AACtE,UAAM,mBAAmB;AAAA,MACvB,SAAS;AAAA,MACT,KAAK,YAAY;AAAA,IACnB;AACA,UAAM,qBAAqB,sBAAsB,KAAK,WAAW;AAEjE,UAAM,WAAW,OAAO,SAAS,aAAa;AAC9C,QAAI;AACJ,QAAI,KAAK,YAAY,cAAc,GAAG;AACpC,sBAAgB,SAAS,KAAK,kBAAkB;AAAA,IAClD,OAAO;AACL,sBAAgB,SAAS,MAAM,kBAAkB;AAAA,IACnD;AACA,UAAM,kBACJ,OAAO,aAAa,gBAAgB,EAAE,aAAa;AACrD,UAAM,oBACJ,OAAO,aAAa,kBAAkB,EAAE,aAAa;AAEvD,UAAM,QAAQ,SAAS,KAAK,WAAW;AACvC,aAAS,UAAU,KAAK;AACxB,aAAS,eAAe,KAAK;AAC7B,aAAS,iBAAiB,KAAK;AAC/B,aAAS,mBAAmB,KAAK;AAAA,EACnC;AAEA,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,UAAM,WAAW,OAAO,SAAS,CAAC;AAClC,sBAAkB,QAAQ;AAE1B,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,wBAAkB,SAAS,KAAK,CAAC,CAAC;AAClC,wBAAkB,SAAS,MAAM,CAAC,CAAC;AAAA,IACrC;AAAA,EACF;AAEA,WAAS,eAAe,GAAG,eAAe,GAAG,gBAAgB;AAC3D,UAAM,cAAc,OAAO,aAAa,YAAY;AACpD,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,wBAAkB,YAAY,CAAC,CAAC;AAAA,IAClC;AAAA,EACF;AAEA,SAAO;AACT;AAEO,MAAM,mBAAmB;AAAA,EAC9B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AAAA,EACV,WAAW;AAAA,EACX,KAAK;AAAA,EACL,MAAM;AACR;AAEO,MAAM,gBAAgB;AAAA,EAC3B,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AACP;AAEO,MAAM,YAAY;AAAA,EACvB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AACV;AACA,SAAS,iBAAiB,eAAoB,eAAoB;AAChE,UAAQ,eAAe;AAAA,IACrB,KAAK,cAAc;AACjB,aAAO;AAAA,IACT,KAAK,cAAc;AACjB,aAAO,gBAAgB;AAAA,IACzB,KAAK,cAAc;AACjB,aAAO,gBAAgB;AAAA,EAC3B;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,kBAAuB;AACpD,UAAQ,kBAAkB;AAAA,IACxB,KAAK,iBAAiB;AACpB,aAAO;AAAA,IACT,KAAK,iBAAiB;AACpB,aAAO;AAAA,IACT,KAAK,iBAAiB;AACpB,aAAO;AAAA,IACT,KAAK,iBAAiB;AACpB,aAAO;AAAA,IACT,KAAK,iBAAiB;AACpB,aAAO;AAAA,IACT,KAAK,iBAAiB;AACpB,aAAO;AAAA,IACT,KAAK,iBAAiB;AACpB,aAAO;AAAA,IACT,KAAK,iBAAiB;AACpB,aAAO;AAAA,IACT,KAAK,iBAAiB;AACpB,aAAO;AAAA,EACX;AACA,SAAO;AACT;AAMA,SAAS,sBAAsB,aAA0B;AACvD,QAAM,aAAa,YAAY,UAAU,IAAI;AAC7C,SAAO,aAAa,aAAa,YAAY,aAAa;AAC5D;AAEA,SAAS,oBAAoB,eAAoB,WAAgB;AAC/D,UAAQ,WAAW;AAAA,IACjB,KAAK;AACH,UAAI,iBAAiB,EAAG,QAAO,aAAa;AAC5C;AAAA,IACF,KAAK;AACH,UAAI,iBAAiB,EAAG,QAAO,aAAa;AAC5C;AAAA,EACJ;AACA,MAAI,kBAAkB,KAAK,kBAAkB,EAAG,QAAO,aAAa;AACpE,SAAO,aAAa;AACtB;AAIA,MAAM,0BAA0B,MAAM;AACpC,QAAM,iBAAiB;AAEvB,MAAI,QAAQ;AACZ,MAAI,WAAW;AAEf,QAAM,MAAM,MAAM;AAChB,QAAI,SAAS,eAAgB,QAAO;AAEpC,QAAI,WAAW,KAAK,QAAQ,GAAG;AAC7B,eAAS;AACT,iBAAW;AAAA,IACb,OAAO;AACL;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACA,QAAM,MAAM,MAAM;AAChB,QAAI,QAAQ,GAAG;AACb,eAAS;AAAA,IACX;AAEA,eAAW;AAEX,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,KAAK,MAAM;AAAA,IACX;AAAA,IACA;AAAA,EACF;AACF;AAEA,MAAM,QAAQ,CAAC,KAAa,KAAa,QACvC,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,GAAG,GAAG;AAElC,MAAM,cAAc,CAAC,WAAmB;AACtC,MAAI,CAAC,OAAO,SAAS,MAAM,KAAK,UAAU,IAAO,QAAO;AAExD,SAAO,KAAK,MAAM,SAAS,GAAK;AAClC;AAEA,MAAM,eAAe,CAAC,UAAe,gBAAqB;AACxD,MAAI,YAAY,GACd,WAAW,GACX,WAAW;AAEb,MAAI,SAAS,gBAAgB,gBAAgB,YAAY;AACvD,gBAAY;AAAA,EACd,WAAW,SAAS,gBAAgB,gBAAgB,oBAAoB;AACtE,gBAAY,KAAK,MAAM,MAAM,YAAY,kBAAkB,IAAI,GAAG,EAAE,CAAC;AAAA,EACvE;AAEA,MAAI,SAAS,gBAAgB,gBAAgB,YAAY;AACvD,eAAW;AAAA,EACb,WACE,CAAC;AAAA,IACC,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,EAClB,EAAE,SAAS,SAAS,WAAW,GAC/B;AACA,eAAW,KAAK,MAAM,MAAM,YAAY,iBAAiB,IAAI,GAAG,EAAE,CAAC;AAAA,EACrE;AAEA,MAAI,SAAS,gBAAgB,gBAAgB,oBAAoB;AAC/D,eAAW;AAAA,EACb,OAAO;AACL,eAAW,KAAK;AAAA,MACd,MAAM,IAAI,MAAM,YAAY,sBAAsB,KAAK,GAAG,CAAC;AAAA,IAC7D;AAAA,EACF;AAEA,SAAO,YAAY,WAAW;AAChC;AAEO,SAAS,mBAAmB,QAAa;AAhlBhD;AAilBE,MAAI,CAAC,OAAQ,QAAO;AAEpB,MAAI,GAAC,sCAAQ,UAAR,mBAAe;AAClB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,KAAK;AAAA,MACL,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,oBAAoB;AAAA,MACpB,OAAO;AAAA,MACP,SAAS;AAAA,MACT,oBAAoB;AAAA,MACpB,sBAAsB;AAAA,MACtB,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAEF,QAAM,aAAa,wBAAwB;AAC3C,QAAM,eAAe,wBAAwB;AAE7C,QAAM,SAAS,CAAC,GAAG,OAAO,OAAO,IAAI,YAAO,UAAP,YAAgB,CAAC,CAAE,EACrD,IAAI,CAAC,GAAG,QAAK;AAtmBlB,QAAAA;AAsmBsB,4CAAK,IAAL,EAAQ,KAAK,YAAWA,MAAA,uBAAG,cAAH,OAAAA,MAAgB,uBAAG,KAAK;AAAA,GAAE,EACnE;AAAA,IAAK,CAAC,GAAG,MACR,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE;AAAA,EAChE,EACC;AAAA,IACC,CAAC,KAAK,UAAU;AACd,UACE,CAAC,OAAO,SAAS,+BAAO,SAAS,KACjC,cAAc,SAAS,MAAM,WAC7B;AACA,YAAI,WAAW,IAAI;AACnB,eAAO;AAAA,MACT;AAEA,YAAM,WAAW,eAAe,MAAM,MAAM;AAC5C,UAAI,WAAW,gBAAgB,OAAQ,QAAO;AAE9C,YAAM,eAAe,aAAa,UAAU;AAAA,QAC1C,qBAAqB;AAAA,QACrB,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,MAClB,CAAC;AAED,cAAQ,MAAM,WAAW;AAAA,QACvB,KAAK,cAAc;AACjB,gBAAM,YAAY,aAAa,UAAU,MAAM,WAAW;AAC1D,gBAAM,YAAY,aAAa,UAAU;AAAA,YACvC,qBAAqB,MAAM,YAAY;AAAA,YACvC,iBAAiB;AAAA,YACjB,gBAAgB;AAAA,UAClB,CAAC;AAED,cAAI;AACJ,cAAI,SAAS,YAAY,WAAW,IAAI;AACxC,cAAI,sBAAsB,YAAY,WAAW,IAAI;AACrD,cAAI,WAAW,YAAY,aAAa,IAAI;AAC5C,cAAI,wBAAwB,YAAY,aAAa,IAAI;AACzD,cAAI,eAAe,eAAe,aAAa,IAAI;AACnD,cAAI,WAAW,IAAI;AACnB;AAAA,QAEF,KAAK,cAAc;AAAA,QACnB,KAAK,cAAc;AACjB,cAAI,WAAW,IAAI;AACnB;AAAA,MACJ;AAEA,UAAI,gBAAgB,eAAe,aAAa,IAAI;AACpD,UAAI,aAAa,IAAI;AAErB,aAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,aAAa;AAAA,MACb,cAAc;AAAA,MACd,OAAO;AAAA,MACP,SAAS;AAAA,MACT,oBAAoB;AAAA,MACpB,sBAAsB;AAAA,MACtB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEF,QAAwD,aAAhD,cAAY,KAAK,cAAc,IAvqBzC,IAuqB0D,IAAT,iBAAS,IAAT,CAAvC,cAAiB;AAEzB,SAAO,iCACF,OADE;AAAA,IAEL,aAAa,OAAO;AAAA,IACpB,cAAc,OAAO;AAAA,IACrB,KAAK,OAAO,eAAgB,OAAO,QAAQ,OAAO,eAAgB,MAAM;AAAA,IACxE,OAAO,OAAO,cAAe,OAAO,UAAU,OAAO,cAAe,MAAM;AAAA,IAC1E,kBAAkB,OAAO,eACpB,OAAO,qBAAqB,OAAO,eAAgB,MACpD;AAAA,IACJ,oBAAoB,OAAO,cACtB,OAAO,uBAAuB,OAAO,cAAe,MACrD;AAAA,EACN;AACF;","names":["_a"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/utils/bl/getPart.ts"],"sourcesContent":["import { BeatLeaderUser } from '@/
|
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\
|
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 '@/
|
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":[]}
|
package/dist/esm/config.js
CHANGED
@@ -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
|