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/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;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiC;AACjC,qBAAuB;AACvB,2BAAsB;AAEtB,mBAAkB;AASH,SAAR,aAA8B;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkB;AAChB,SACE,6BAAAA,QAAA,2BAAAA,QAAA,gBACE,6BAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,WACE;AAAA,MAEF,IAAG;AAAA;AAAA,IAEH,6BAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,WACE;AAAA;AAAA,MAGF,6BAAAA,QAAA,cAAC,SAAI,WAAW,yBACd,6BAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,UACX,KAAK,UAAU;AAAA,UACf,SAAS;AAAA;AAAA,MAEX,GACA,6BAAAA,QAAA,cAAC,SAAI,WAAW,mCACd,6BAAAA,QAAA,cAAC,UAAK,WAAW,wBAAuB,UAAU,IAAK,GACvD,6BAAAA,QAAA,cAAC,SAAI,WAAW,mDACd,6BAAAA,QAAA,cAAC,UAAK,WAAU,iCACd,6BAAAA,QAAA,cAAC,2BAAU,GACX,6BAAAA,QAAA,cAAC,cAAK,MAAG,UAAU,IAAK,CAC1B,GACA,6BAAAA,QAAA,cAAC,UAAK,WAAU,iCACd,6BAAAA,QAAA,cAAC,YAAAC,SAAA,EAAM,gBAAgB,UAAU,SAAS,GAC1C,6BAAAD,QAAA,cAAC,cAAK,MAAG,UAAU,WAAY,CACjC,CACF,GACA,6BAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA;AAAA,QAEC,UAAU,GAAG,QAAQ,CAAC;AAAA,QAAE;AAAA,MAC3B,CACF,GACA,6BAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,WACE;AAAA;AAAA,QAGF,6BAAAA,QAAA,cAAC,cAAK,yBAAuB;AAAA,MAC/B,CACF;AAAA,MACA,6BAAAA,QAAA,cAAC,SAAI,WAAW,4BACb,YAAY,IAAI,CAAC,MAAM,QACtB,6BAAAA,QAAA,cAAC,qBAAAE,SAAA,EAAU,WAAW,MAAM,KAAK,KAAK,CACvC,CACH;AAAA,IACF;AAAA,IAEA,6BAAAF,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,WACE;AAAA,QAEF,SAAS;AAAA;AAAA,IACX;AAAA,EACF,CACF;AAEJ;","names":["React","Flags","ScoreItem"]}
|
@@ -56,8 +56,8 @@ __export(bsorReplayAcc_exports, {
|
|
56
56
|
processUnderswings: () => processUnderswings
|
57
57
|
});
|
58
58
|
module.exports = __toCommonJS(bsorReplayAcc_exports);
|
59
|
-
var import_bsorDecoder = require("./bsorDecoder");
|
60
|
-
var import_beatleader2 = require("./beatleader");
|
59
|
+
var import_bsorDecoder = require("./bsorDecoder.js");
|
60
|
+
var import_beatleader2 = require("./beatleader.js");
|
61
61
|
const NoteScoringType = {
|
62
62
|
Ignore: -1,
|
63
63
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,yBAA8B;AAC9B,IAAAA,qBAA6C;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,iCAAc,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,6BAAyB;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,iCAAc,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,iCAAc,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,iCAAc,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,QAAAC;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,iCAAc,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,iCAAc;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,iCAAc;AAAA,QACnB,KAAK,iCAAc;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":["import_beatleader","_a"]}
|
1
|
+
{"version":3,"sources":["../../../../../src/components/utils/bl/bsorReplayAcc.ts"],"sourcesContent":["import { BSOR, BSORNote, NoteCutInfo } from \"@/services/api/interfaces/beatleader\";\nimport { NoteEventType } from \"./bsorDecoder\";\nimport { createDistanceWeightFunction } from \"./beatleader\";\n\nconst NoteScoringType = {\n Ignore: -1,\n NoScore: 0,\n Normal: 1,\n SliderHead: 2,\n SliderTail: 3,\n BurstSliderHead: 4,\n BurstSliderElement: 5,\n};\n\nexport function processAccuracySpread(replay: BSOR) {\n if (replay == null) return null;\n\n const result = {\n totalLeftCount: 0.0,\n leftCount: [] as number[],\n leftTD: [] as number[],\n\n totalRightCount: 0.0,\n rightCount: [] as number[],\n rightTD: [] as number[],\n\n timeDeviation: [] as number[],\n\n maxCount: 0,\n maxTD: 0.0,\n maxTimeDeviation: 0.0,\n } as any;\n\n if (!replay?.notes?.length) return result;\n\n const timings = [] as any[];\n\n for (let i = 0; i <= 15; i++) {\n result.leftCount.push(0.0);\n result.leftTD.push(0.0);\n result.rightCount.push(0.0);\n result.rightTD.push(0.0);\n result.timeDeviation.push(0.0);\n timings.push([]);\n }\n\n for (let i = 0; i < replay.notes.length; i++) {\n const note = replay.notes[i] as BSORNote;\n if (note.eventType !== NoteEventType.good) continue;\n const noteData = decodeNoteData(note.noteID);\n if (noteData.scoringType !== NoteScoringType.Normal) continue;\n const acc = getAccForDistance(note.noteCutInfo.cutDistanceToCenter);\n const td = Math.abs(note.noteCutInfo.cutNormal.z);\n\n if (note.noteCutInfo.saberType === 0) {\n result.totalLeftCount += 1.0;\n result.leftCount[acc] += 1.0;\n result.leftTD[acc] += td;\n } else {\n result.totalRightCount += 1.0;\n result.rightCount[acc] += 1.0;\n result.rightTD[acc] += td;\n }\n\n result.timeDeviation[acc] += note.noteCutInfo.timeDeviation;\n timings[acc].push(note.noteCutInfo.timeDeviation);\n }\n\n for (let i = 0; i <= 15; i++) {\n //<-- Averages ---\n const totalCount = result.rightCount[i] + result.leftCount[i];\n result.leftTD[i] =\n result.leftCount[i] > 0 ? result.leftTD[i] / result.leftCount[i] : null;\n result.rightTD[i] =\n result.rightCount[i] > 0\n ? result.rightTD[i] / result.rightCount[i]\n : null;\n result.timeDeviation[i] =\n totalCount > 0 ? result.timeDeviation[i] / totalCount : null;\n\n result.leftCount[i] /= result.totalLeftCount;\n result.rightCount[i] /= result.totalRightCount;\n\n //<-- TimeDeviation ---\n result.timeDeviation[i] = getStandardDeviation(\n timings[i],\n result.timeDeviation[i],\n );\n\n //<-- Min / Max ---\n if (result.leftCount[i] > result.maxCount)\n result.maxCount = result.leftCount[i];\n if (result.rightCount[i] > result.maxCount)\n result.maxCount = result.rightCount[i];\n\n if (result.leftTD[i] > result.maxTD) result.maxTD = result.leftTD[i];\n if (result.rightTD[i] > result.maxTD) result.maxTD = result.rightTD[i];\n\n if (result.timeDeviation[i] > result.maxTimeDeviation)\n result.maxTimeDeviation = result.timeDeviation[i];\n }\n\n return result;\n}\n\nfunction decodeNoteData(noteId: number) {\n const result = {} as any;\n\n result.cutDirection = Math.round(noteId % 10);\n noteId /= 10;\n result.colorType = Math.round(noteId % 10);\n noteId /= 10;\n result.noteLineLayer = Math.round(noteId % 10);\n noteId /= 10;\n result.lineIndex = Math.round(noteId % 10);\n noteId /= 10;\n result.scoringType = Math.round((noteId -= 2) < -1 ? noteId + 3 : noteId);\n\n return result;\n}\n\nfunction getAccForDistance(cutDistanceToCenter: number) {\n let mul = 1 - cutDistanceToCenter / 0.3;\n if (mul > 1) mul = 1;\n if (mul < 0) mul = 0;\n return Math.round(15.0 * mul);\n}\n\nconst SummaryGroup = {\n Midlanes: 0,\n Outerlanes: 1,\n Crossovers: 2,\n Forehands: 3,\n Backhands: 4,\n};\n\nfunction getStandardDeviation(numArray: number[], mean: number) {\n if (numArray.length === 0) return null;\n\n let sqrSum = 0.0;\n numArray.forEach((num: number) => {\n sqrSum += Math.pow(num - mean, 2);\n });\n return Math.sqrt(sqrSum / numArray.length);\n}\n\nfunction getScore(noteCutInfo: any) {\n let score = 0.0;\n score += getAccForDistance(noteCutInfo.cutDistanceToCenter);\n score += getPreSwingScore(noteCutInfo.beforeCutRating);\n score += getPostSwingScore(noteCutInfo.afterCutRating);\n return score;\n}\n\nfunction getPreSwingScore(preSwingRating: number) {\n if (preSwingRating > 1) preSwingRating = 1;\n if (preSwingRating < 0) preSwingRating = 0;\n return Math.round(preSwingRating * 70);\n}\n\nfunction getPostSwingScore(postSwingRating: number) {\n if (postSwingRating > 1) postSwingRating = 1;\n if (postSwingRating < 0) postSwingRating = 0;\n return Math.round(postSwingRating * 30);\n}\n\nconst accGraphResolution = 100;\nconst smoothPeriodPercentage = 0.02;\nconst weightFunctionSteepness = 3.0;\n\nexport function processAccGraphs(replay: BSOR) {\n if (replay == null) return null;\n\n const result = {\n times: [] as any[],\n fullSwingBySaber: {\n red: [] as any[],\n blue: [] as any[],\n total: [] as any[],\n } as any,\n realScoreBySaber: {\n red: [] as any[],\n blue: [] as any[],\n total: [] as any[],\n } as any,\n };\n\n if (!replay?.notes?.length) return result;\n\n const lastNoteTime = replay.notes[replay.notes.length - 1].eventTime;\n const distanceWeightFunction = createDistanceWeightFunction(\n lastNoteTime * smoothPeriodPercentage,\n weightFunctionSteepness,\n );\n\n for (let i = 0.0; i < accGraphResolution; i += 1.0) {\n const time = lastNoteTime * (i / (accGraphResolution - 1));\n\n const sumsBySaber = {\n red: [0.0, 0.0],\n blue: [0.0, 0.0],\n total: [0.0, 0.0],\n } as any;\n const dividerBySaber = { red: 0.0, blue: 0.0, total: 0.0 } as any;\n\n for (let j = 0; j < replay.notes.length; j++) {\n const note = replay.notes[j];\n if (note.eventType !== NoteEventType.good) continue;\n const noteData = decodeNoteData(note.noteID);\n if (noteData.scoringType !== NoteScoringType.Normal) continue;\n\n const weight = distanceWeightFunction.getWeight(note.eventTime - time);\n\n const acc = getAccForDistance(note.noteCutInfo.cutDistanceToCenter);\n const pre = getPreSwingScore(note.noteCutInfo.beforeCutRating);\n const post = getPostSwingScore(note.noteCutInfo.afterCutRating);\n\n const fullSwing = acc + 100;\n const realScore = acc + pre + post;\n\n sumsBySaber.total[0] += fullSwing * weight;\n sumsBySaber.total[1] += realScore * weight;\n dividerBySaber.total += weight;\n\n const saberType = note.noteCutInfo.saberType === 0 ? \"red\" : \"blue\";\n sumsBySaber[saberType][0] += fullSwing * weight;\n sumsBySaber[saberType][1] += realScore * weight;\n dividerBySaber[saberType] += weight;\n }\n\n result.times.push(time);\n\n [\"red\", \"blue\", \"total\"].forEach((saberType) => {\n result.fullSwingBySaber[saberType].push(\n dividerBySaber[saberType] === 0\n ? 0.0\n : sumsBySaber[saberType][0] / dividerBySaber[saberType],\n );\n result.realScoreBySaber[saberType].push(\n dividerBySaber[saberType] === 0\n ? 0.0\n : sumsBySaber[saberType][1] / dividerBySaber[saberType],\n );\n });\n }\n\n return result;\n}\n\n//endregion\n\n//region SliceSummary\n\nexport function processSliceSummary(replay: any) {\n if (replay == null) return null;\n\n function createEmptySummary(label: any) {\n return {\n label,\n left: { count: 0, averageScore: 0.0, averageTD: 0.0 },\n right: { count: 0, averageScore: 0.0, averageTD: 0.0 },\n };\n }\n\n const result = [\n createEmptySummary(\"Midlanes\"),\n createEmptySummary(\"Outerlanes\"),\n createEmptySummary(\"Crossovers\"),\n createEmptySummary(\"Forehands\"),\n createEmptySummary(\"Backhands\"),\n ] as any;\n\n if (!replay?.notes?.length) return result;\n\n function getLaneSummaryEntry(noteLineIndex: any, saberType: any) {\n const summaryGroup = getLaneSummaryGroup(noteLineIndex, saberType);\n return saberType === 0\n ? result[summaryGroup].left\n : result[summaryGroup].right;\n }\n\n function getParitySummaryEntry(noteCutInfo: NoteCutInfo, saberType: any) {\n const summaryGroup = getParitySummaryGroup(noteCutInfo);\n return saberType === 0\n ? result[summaryGroup].left\n : result[summaryGroup].right;\n }\n\n function addScore(handSummary: any, score: any, td: any) {\n handSummary.count += 1;\n handSummary.averageScore += score;\n handSummary.averageTD += td;\n }\n\n function applyAverage(handSummary: any) {\n if (handSummary.count === 0) return;\n handSummary.averageScore /= handSummary.count;\n handSummary.averageTD /= handSummary.count;\n }\n\n for (let i = 0; i < replay.notes.length; i++) {\n const note = replay.notes[i];\n if (note.eventType !== NoteEventType.good) continue;\n const noteData = decodeNoteData(note.noteID);\n if (noteData.scoringType !== NoteScoringType.Normal) continue;\n\n const laneSummaryEntry = getLaneSummaryEntry(\n noteData.lineIndex,\n note.noteCutInfo.saberType,\n );\n const paritySummaryEntry = getParitySummaryEntry(\n note.noteCutInfo,\n note.noteCutInfo.saberType,\n );\n\n const score = getScore(note.noteCutInfo);\n const td = Math.abs(note.noteCutInfo.cutNormal.z);\n addScore(laneSummaryEntry, score, td);\n addScore(paritySummaryEntry, score, td);\n }\n\n result.forEach((summary: any) => {\n applyAverage(summary.left);\n applyAverage(summary.right);\n });\n\n return result;\n}\n\n//endregion\n\n//region SliceDetails\n\nexport function processSliceDetails(replay: any) {\n if (replay == null) return null;\n\n const result = {\n mainGrid: [] as any[],\n summaryGrids: [] as any[],\n };\n\n for (let i = 0; i < 12; i++) {\n const mainGridCell = {\n count: 0,\n averageScore: 0.0,\n left: [] as any[],\n right: [] as any[],\n };\n for (let j = 0; j < 9; j++) {\n mainGridCell.left.push({ count: 0, averageScore: 0.0 });\n mainGridCell.right.push({ count: 0, averageScore: 0.0 });\n }\n result.mainGrid.push(mainGridCell);\n }\n\n for (let summaryGroup = 0; summaryGroup < 5; summaryGroup++) {\n const summaryGrid = [];\n for (let i = 0; i < 12; i++) {\n summaryGrid.push({ count: 0, averageScore: 0.0 });\n }\n result.summaryGrids.push(summaryGrid);\n }\n\n if (!replay?.notes?.length) return result;\n\n function addScore(cell: any, score: any) {\n cell.count += 1;\n cell.averageScore += score;\n }\n\n function applyAverageScore(cell: any) {\n if (cell.count === 0) return;\n cell.averageScore /= cell.count;\n }\n\n for (let i = 0; i < replay.notes.length; i++) {\n const note = replay.notes[i];\n if (note.eventType !== NoteEventType.good) continue;\n const noteData = decodeNoteData(note.noteID);\n if (noteData.scoringType !== NoteScoringType.Normal) continue;\n\n const mainGridIndex = getMainGridIndex(\n noteData.noteLineLayer,\n noteData.lineIndex,\n );\n const secondaryGridIndex = getSecondaryGridIndex(noteData.cutDirection);\n const laneSummaryGroup = getLaneSummaryGroup(\n noteData.lineIndex,\n note.noteCutInfo.saberType,\n );\n const paritySummaryGroup = getParitySummaryGroup(note.noteCutInfo);\n\n const mainCell = result.mainGrid[mainGridIndex];\n let secondaryCell;\n if (note.noteCutInfo.saberType === 0) {\n secondaryCell = mainCell.left[secondaryGridIndex];\n } else {\n secondaryCell = mainCell.right[secondaryGridIndex];\n }\n const laneSummaryCell =\n result.summaryGrids[laneSummaryGroup][mainGridIndex];\n const paritySummaryCell =\n result.summaryGrids[paritySummaryGroup][mainGridIndex];\n\n const score = getScore(note.noteCutInfo);\n addScore(mainCell, score);\n addScore(secondaryCell, score);\n addScore(laneSummaryCell, score);\n addScore(paritySummaryCell, score);\n }\n\n for (let i = 0; i < 12; i++) {\n const mainCell = result.mainGrid[i];\n applyAverageScore(mainCell);\n\n for (let j = 0; j < 9; j++) {\n applyAverageScore(mainCell.left[j]);\n applyAverageScore(mainCell.right[j]);\n }\n }\n\n for (let summaryGroup = 0; summaryGroup < 5; summaryGroup++) {\n const summaryGrid = result.summaryGrids[summaryGroup];\n for (let i = 0; i < 12; i++) {\n applyAverageScore(summaryGrid[i]);\n }\n }\n\n return result;\n}\n\nexport const NoteCutDirection = {\n Up: 0,\n Down: 1,\n Left: 2,\n Right: 3,\n UpLeft: 4,\n UpRight: 5,\n DownLeft: 6,\n DownRight: 7,\n Any: 8,\n None: 9,\n};\n\nexport const NoteLineLayer = {\n Base: 0,\n Upper: 1,\n Top: 2,\n};\n\nexport const ColorType = {\n None: -1,\n ColorA: 0,\n ColorB: 1,\n};\nfunction getMainGridIndex(noteLineLayer: any, noteLineIndex: any) {\n switch (noteLineLayer) {\n case NoteLineLayer.Top:\n return noteLineIndex;\n case NoteLineLayer.Upper:\n return noteLineIndex + 4;\n case NoteLineLayer.Base:\n return noteLineIndex + 8;\n }\n return -1;\n}\n\nfunction getSecondaryGridIndex(noteCutDirection: any) {\n switch (noteCutDirection) {\n case NoteCutDirection.UpLeft:\n return 0;\n case NoteCutDirection.Up:\n return 1;\n case NoteCutDirection.UpRight:\n return 2;\n case NoteCutDirection.Left:\n return 3;\n case NoteCutDirection.Any:\n return 4;\n case NoteCutDirection.Right:\n return 5;\n case NoteCutDirection.DownLeft:\n return 6;\n case NoteCutDirection.Down:\n return 7;\n case NoteCutDirection.DownRight:\n return 8;\n }\n return -1;\n}\n\n//endregion\n\n//region Utils\n\nfunction getParitySummaryGroup(noteCutInfo: NoteCutInfo) {\n const isForehand = noteCutInfo.cutNormal.x < 0;\n return isForehand ? SummaryGroup.Forehands : SummaryGroup.Backhands;\n}\n\nfunction getLaneSummaryGroup(noteLineIndex: any, saberType: any) {\n switch (saberType) {\n case 0:\n if (noteLineIndex >= 2) return SummaryGroup.Crossovers;\n break;\n case 1:\n if (noteLineIndex <= 1) return SummaryGroup.Crossovers;\n break;\n }\n if (noteLineIndex === 1 || noteLineIndex === 2) return SummaryGroup.Midlanes;\n return SummaryGroup.Outerlanes;\n}\n\n//endregion\n\nconst createMultiplierCounter = () => {\n const MAX_MULTIPLIER = 8;\n\n let value = 1;\n let progress = 1;\n\n const inc = () => {\n if (value >= MAX_MULTIPLIER) return MAX_MULTIPLIER;\n\n if (progress + 1 >= value * 2) {\n value *= 2;\n progress = 0;\n } else {\n progress++;\n }\n\n return value;\n };\n const dec = () => {\n if (value > 1) {\n value /= 2;\n }\n\n progress = 1;\n\n return value;\n };\n\n return {\n get: () => value,\n inc,\n dec,\n };\n};\n\nconst clamp = (num: number, min: number, max: number) =>\n Math.min(Math.max(num, min), max);\n\nconst getNoteType = (noteId: number) => {\n if (!Number.isFinite(noteId) || noteId >= 80000) return null;\n\n return Math.floor(noteId / 10000);\n};\n\nconst getNoteScore = (noteData: any, noteCutInfo: any) => {\n let beforeCut = 0,\n accuracy = 0,\n afterCut = 0;\n\n if (noteData.scoringType === NoteScoringType.SliderTail) {\n beforeCut = 70;\n } else if (noteData.scoringType !== NoteScoringType.BurstSliderElement) {\n beforeCut = Math.round(clamp(noteCutInfo.beforeCutRating * 70, 0, 70));\n }\n\n if (noteData.scoringType === NoteScoringType.SliderHead) {\n afterCut = 30;\n } else if (\n ![\n NoteScoringType.BurstSliderElement,\n NoteScoringType.BurstSliderHead,\n ].includes(noteData.scoringType)\n ) {\n afterCut = Math.round(clamp(noteCutInfo.afterCutRating * 30, 0, 30));\n }\n\n if (noteData.scoringType === NoteScoringType.BurstSliderElement) {\n accuracy = 20;\n } else {\n accuracy = Math.round(\n 15 * (1 - clamp(noteCutInfo.cutDistanceToCenter / 0.3, 0, 1)),\n );\n }\n\n return beforeCut + accuracy + afterCut;\n};\n\nexport function processUnderswings(replay: any) {\n if (!replay) return null;\n\n if (!replay?.notes?.length)\n return {\n count: 0,\n acc: 0,\n fcAcc: 0,\n noUnderswingsAcc: 0,\n noUnderswingsFcAcc: 0,\n score: 0,\n fcScore: 0,\n noUnderswingsScore: 0,\n noUnderswingsFcScore: 0,\n maxCutScore: 0,\n maxSongScore: 0,\n };\n\n const multiplier = createMultiplierCounter();\n const fcMultiplier = createMultiplierCounter();\n\n const result = [...replay.notes, ...(replay.walls ?? [])]\n .map((e, idx) => ({ ...e, idx, eventTime: e?.eventTime ?? e?.time }))\n .sort((a, b) =>\n a.eventTime === b.eventTime ? a.idx - b.idx : a.eventTime - b.eventTime,\n )\n .reduce(\n (acc, event) => {\n if (\n !Number.isFinite(event?.eventType) ||\n NoteEventType.bomb === event.eventType\n ) {\n acc.multiplier.dec();\n return acc;\n }\n\n const noteData = decodeNoteData(event.noteID);\n if (noteData < NoteScoringType.Normal) return acc;\n\n const maxNoteScore = getNoteScore(noteData, {\n cutDistanceToCenter: 0,\n beforeCutRating: 1,\n afterCutRating: 1,\n });\n\n switch (event.eventType) {\n case NoteEventType.good:\n const realScore = getNoteScore(noteData, event.noteCutInfo);\n const fullSwing = getNoteScore(noteData, {\n cutDistanceToCenter: event.noteCutInfo.cutDistanceToCenter,\n beforeCutRating: 1,\n afterCutRating: 1,\n });\n\n acc.count++;\n acc.score += realScore * multiplier.get();\n acc.noUnderswingsScore += fullSwing * multiplier.get();\n acc.fcScore += realScore * fcMultiplier.get();\n acc.noUnderswingsFcScore += fullSwing * fcMultiplier.get();\n acc.maxCutScore += maxNoteScore * fcMultiplier.get();\n acc.multiplier.inc();\n break;\n\n case NoteEventType.bad:\n case NoteEventType.miss:\n acc.multiplier.dec();\n break;\n }\n\n acc.maxSongScore += maxNoteScore * fcMultiplier.get();\n acc.fcMultiplier.inc();\n\n return acc;\n },\n {\n count: 0,\n maxCutScore: 0,\n maxSongScore: 0,\n score: 0,\n fcScore: 0,\n noUnderswingsScore: 0,\n noUnderswingsFcScore: 0,\n multiplier,\n fcMultiplier,\n },\n );\n\n const { multiplier: foo, fcMultiplier: bar, ...rest } = result;\n\n return {\n ...rest,\n maxCutScore: result.maxCutScore,\n maxSongScore: result.maxSongScore,\n acc: result.maxSongScore ? (result.score / result.maxSongScore) * 100 : 0,\n fcAcc: result.maxCutScore ? (result.fcScore / result.maxCutScore) * 100 : 0,\n noUnderswingsAcc: result.maxSongScore\n ? (result.noUnderswingsScore / result.maxSongScore) * 100\n : 0,\n noUnderswingsFcAcc: result.maxCutScore\n ? (result.noUnderswingsFcScore / result.maxCutScore) * 100\n : 0,\n };\n}\n"],"mappings":"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","names":["import_beatleader","_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":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;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":[]}
|
@@ -36,9 +36,9 @@ __export(format_exports, {
|
|
36
36
|
});
|
37
37
|
module.exports = __toCommonJS(format_exports);
|
38
38
|
var import_dayjs = __toESM(require("dayjs"));
|
39
|
-
var import_duration = __toESM(require("dayjs/plugin/duration"));
|
40
|
-
var import_relativeTime = __toESM(require("dayjs/plugin/relativeTime"));
|
41
|
-
var import_zh_cn = __toESM(require("dayjs/locale/zh-cn"));
|
39
|
+
var import_duration = __toESM(require("dayjs/plugin/duration.js"));
|
40
|
+
var import_relativeTime = __toESM(require("dayjs/plugin/relativeTime.js"));
|
41
|
+
var import_zh_cn = __toESM(require("dayjs/locale/zh-cn.js"));
|
42
42
|
import_dayjs.default.extend(import_duration.default);
|
43
43
|
import_dayjs.default.extend(import_relativeTime.default);
|
44
44
|
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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,sBAAqB;AACrB,0BAAyB;AACzB,mBAAe;AACf,aAAAA,QAAM,OAAO,gBAAAC,OAAQ;AACrB,aAAAD,QAAM,OAAO,oBAAAE,OAAY;AAClB,MAAM,iBAAiB,CAACD,cAAqB;AAClD,QAAM,IAAI,aAAAD,QAAM,SAASC,WAAU,QAAQ;AAC3C,SAAO,EAAE,OAAO,UAAU;AAC5B;AAMO,MAAM,aAAa,CAAC,SAAiB;AAC1C,aAAO,aAAAD,SAAM,IAAI,EAAE,OAAO,aAAAG,OAAE,EAAE,QAAQ;AACxC;AAEO,SAAS,wBAAwB,MAA8B;AACpE,MAAI,UAAM,aAAAH,SAAM,EAAE,SAAK,aAAAA,SAAM,IAAI,GAAG,GAAG;AACvC,MAAI,OAAO;AACX,MAAI,OAAO,GAAG;AACZ,cAAM,aAAAA,SAAM,EAAE,SAAK,aAAAA,SAAM,IAAI,GAAG,GAAG;AACnC,WAAO;AAAA,EACT;AACA,MAAI,OAAO,GAAG;AACZ,cAAM,aAAAA,SAAM,EAAE,SAAK,aAAAA,SAAM,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,aAAO,aAAAA,SAAM,IAAI,EAAE,OAAO,8BAAY,YAAY;AACpD;","names":["dayjs","duration","relativeTime","zh"]}
|
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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,sBAAqB;AACrB,0BAAyB;AACzB,mBAAe;AACf,aAAAA,QAAM,OAAO,gBAAAC,OAAQ;AACrB,aAAAD,QAAM,OAAO,oBAAAE,OAAY;AAClB,MAAM,iBAAiB,CAACD,cAAqB;AAClD,QAAM,IAAI,aAAAD,QAAM,SAASC,WAAU,QAAQ;AAC3C,SAAO,EAAE,OAAO,UAAU;AAC5B;AAMO,MAAM,aAAa,CAAC,SAAiB;AAC1C,aAAO,aAAAD,SAAM,IAAI,EAAE,OAAO,aAAAG,OAAE,EAAE,QAAQ;AACxC;AAEO,SAAS,wBAAwB,MAA8B;AACpE,MAAI,UAAM,aAAAH,SAAM,EAAE,SAAK,aAAAA,SAAM,IAAI,GAAG,GAAG;AACvC,MAAI,OAAO;AACX,MAAI,OAAO,GAAG;AACZ,cAAM,aAAAA,SAAM,EAAE,SAAK,aAAAA,SAAM,IAAI,GAAG,GAAG;AACnC,WAAO;AAAA,EACT;AACA,MAAI,OAAO,GAAG;AACZ,cAAM,aAAAA,SAAM,EAAE,SAAK,aAAAA,SAAM,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,aAAO,aAAAA,SAAM,IAAI,EAAE,OAAO,8BAAY,YAAY;AACpD;","names":["dayjs","duration","relativeTime","zh"]}
|
@@ -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":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;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":[]}
|
@@ -21,8 +21,8 @@ __export(utils_exports, {
|
|
21
21
|
diffConv: () => diffConv
|
22
22
|
});
|
23
23
|
module.exports = __toCommonJS(utils_exports);
|
24
|
-
__reExport(utils_exports, require("./format"), module.exports);
|
25
|
-
__reExport(utils_exports, require("./tag-format"), module.exports);
|
24
|
+
__reExport(utils_exports, require("./format.js"), module.exports);
|
25
|
+
__reExport(utils_exports, require("./tag-format.js"), module.exports);
|
26
26
|
const diffConv = (diff) => {
|
27
27
|
if (diff.includes("ExpertPlus")) {
|
28
28
|
return "EX+";
|
@@ -38,7 +38,7 @@ const diffConv = (diff) => {
|
|
38
38
|
// Annotate the CommonJS export names for ESM import in node:
|
39
39
|
0 && (module.exports = {
|
40
40
|
diffConv,
|
41
|
-
...require("./format"),
|
42
|
-
...require("./tag-format")
|
41
|
+
...require("./format.js"),
|
42
|
+
...require("./tag-format.js")
|
43
43
|
});
|
44
44
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/config.js
CHANGED
@@ -2,6 +2,10 @@ var __defProp = Object.defineProperty;
|
|
2
2
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
3
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
5
|
+
var __export = (target, all) => {
|
6
|
+
for (var name in all)
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
8
|
+
};
|
5
9
|
var __copyProps = (to, from, except, desc) => {
|
6
10
|
if (from && typeof from === "object" || typeof from === "function") {
|
7
11
|
for (let key of __getOwnPropNames(from))
|
@@ -12,5 +16,41 @@ var __copyProps = (to, from, except, desc) => {
|
|
12
16
|
};
|
13
17
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
14
18
|
var config_exports = {};
|
19
|
+
__export(config_exports, {
|
20
|
+
configSchema: () => configSchema
|
21
|
+
});
|
15
22
|
module.exports = __toCommonJS(config_exports);
|
23
|
+
var import_v4 = require("zod/v4");
|
24
|
+
var import_render = require("./common/render/index.js");
|
25
|
+
var import_s3 = require("./common/s3/index.js");
|
26
|
+
const cronSchema = import_v4.z.object({
|
27
|
+
enabled: import_v4.z.boolean().optional().default(false),
|
28
|
+
cron: import_v4.z.string().optional()
|
29
|
+
}).optional().default({ enabled: false });
|
30
|
+
const configSchema = import_v4.z.object({
|
31
|
+
s3: import_s3.s3ConfigSchema.default({ enabled: false }).optional(),
|
32
|
+
render: import_render.renderSchema,
|
33
|
+
beatsaver: import_v4.z.object({
|
34
|
+
host: import_v4.z.string().default("https://api.beatsaver.com").optional(),
|
35
|
+
wsURL: import_v4.z.string().default("wss://ws.beatsaver.com/maps").optional(),
|
36
|
+
oauthClientId: import_v4.z.string().optional(),
|
37
|
+
oauthClientSecret: import_v4.z.string().optional()
|
38
|
+
}).default({
|
39
|
+
host: "https://api.beatsaver.com",
|
40
|
+
wsURL: "wss://ws.beatsaver.com/maps"
|
41
|
+
}).optional(),
|
42
|
+
beatleader: import_v4.z.object({
|
43
|
+
oauthClientId: import_v4.z.string().optional(),
|
44
|
+
oauthClientSecret: import_v4.z.string().optional()
|
45
|
+
}).default({}).optional(),
|
46
|
+
cron: import_v4.z.object({
|
47
|
+
temp: cronSchema
|
48
|
+
}).default({
|
49
|
+
temp: { enabled: false }
|
50
|
+
}).optional()
|
51
|
+
});
|
52
|
+
// Annotate the CommonJS export names for ESM import in node:
|
53
|
+
0 && (module.exports = {
|
54
|
+
configSchema
|
55
|
+
});
|
16
56
|
//# sourceMappingURL=config.js.map
|
package/dist/cjs/config.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/config.ts"],"sourcesContent":["import
|
1
|
+
{"version":3,"sources":["../../src/config.ts"],"sourcesContent":["import {z} from 'zod/v4'\nimport {renderSchema} from \"@/common/render\";\nimport {s3ConfigSchema} from \"@/common/s3\";\n\nconst cronSchema = z.object({\n enabled: z.boolean().optional().default(false),\n cron: z.string().optional(),\n}).optional().default({ enabled: false })\n\nexport const configSchema = z.object({\n s3: s3ConfigSchema.default({ enabled: false }).optional(),\n render: renderSchema,\n beatsaver: z.object({\n host: z.string().default('https://api.beatsaver.com').optional(),\n wsURL: z.string().default('wss://ws.beatsaver.com/maps').optional(),\n oauthClientId: z.string().optional(),\n oauthClientSecret: z.string().optional(),\n }).default({\n host: 'https://api.beatsaver.com',\n wsURL: 'wss://ws.beatsaver.com/maps',\n }).optional(),\n beatleader: z.object({\n oauthClientId: z.string().optional(),\n oauthClientSecret: z.string().optional(),\n }).default({}).optional(),\n cron: z.object({\n temp: cronSchema,\n }).default({\n temp: {enabled: false},\n }).optional()\n})\n\nexport type Config = z.infer<typeof configSchema>\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAgB;AAChB,oBAA2B;AAC3B,gBAA6B;AAE7B,MAAM,aAAa,YAAE,OAAO;AAAA,EAC1B,SAAS,YAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,EAC7C,MAAM,YAAE,OAAO,EAAE,SAAS;AAC5B,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,MAAM,CAAC;AAEjC,MAAM,eAAe,YAAE,OAAO;AAAA,EACnC,IAAI,yBAAe,QAAQ,EAAE,SAAS,MAAM,CAAC,EAAE,SAAS;AAAA,EACxD,QAAQ;AAAA,EACR,WAAW,YAAE,OAAO;AAAA,IAClB,MAAM,YAAE,OAAO,EAAE,QAAQ,2BAA2B,EAAE,SAAS;AAAA,IAC/D,OAAO,YAAE,OAAO,EAAE,QAAQ,6BAA6B,EAAE,SAAS;AAAA,IAClE,eAAe,YAAE,OAAO,EAAE,SAAS;AAAA,IACnC,mBAAmB,YAAE,OAAO,EAAE,SAAS;AAAA,EACzC,CAAC,EAAE,QAAQ;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EACT,CAAC,EAAE,SAAS;AAAA,EACZ,YAAY,YAAE,OAAO;AAAA,IACnB,eAAe,YAAE,OAAO,EAAE,SAAS;AAAA,IACnC,mBAAmB,YAAE,OAAO,EAAE,SAAS;AAAA,EACzC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,SAAS;AAAA,EACxB,MAAM,YAAE,OAAO;AAAA,IACb,MAAM;AAAA,EACR,CAAC,EAAE,QAAQ;AAAA,IACT,MAAM,EAAC,SAAS,MAAK;AAAA,EACvB,CAAC,EAAE,SAAS;AACd,CAAC;","names":[]}
|
@@ -42,7 +42,7 @@ __export(builder_exports, {
|
|
42
42
|
CommandBuilder: () => CommandBuilder
|
43
43
|
});
|
44
44
|
module.exports = __toCommonJS(builder_exports);
|
45
|
-
var
|
45
|
+
var import_error = require("../error.js");
|
46
46
|
class CommandBuilder {
|
47
47
|
constructor() {
|
48
48
|
__publicField(this, "name");
|
@@ -50,9 +50,9 @@ class CommandBuilder {
|
|
50
50
|
__publicField(this, "options", []);
|
51
51
|
__publicField(this, "aliases", []);
|
52
52
|
}
|
53
|
-
static create(name) {
|
54
|
-
|
55
|
-
}
|
53
|
+
// static create<Service, Config, OPT extends {} = {}>(name: string) {
|
54
|
+
// return new CommandBuilder<Service, Config, OPT> ().setName(name)
|
55
|
+
// }
|
56
56
|
addOption(name, description) {
|
57
57
|
this.options.push({
|
58
58
|
name,
|
@@ -80,7 +80,7 @@ class CommandBuilder {
|
|
80
80
|
try {
|
81
81
|
yield executor2(c);
|
82
82
|
} catch (e) {
|
83
|
-
if (e instanceof
|
83
|
+
if (e instanceof import_error.BizError) {
|
84
84
|
yield c.session.send(c.session.text(e.id, e.params));
|
85
85
|
} else {
|
86
86
|
c.logger.error(
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/cmd/builder.ts"],"sourcesContent":["import type { CmdAlias, CmdContext, CmdExecutor, CmdOption, OptionType, Extend } from './type'\nimport { BizError } from '../error'\n\nexport class CommandBuilder<Service, Config, OPT extends {} = {}> {\n private name: string\n private description: string\n private options: CmdOption[] = []\n private aliases: CmdAlias[] = []\n\n constructor() {}\n // static create<Service, Config, OPT extends {} = {}>(name: string) {\n // return new CommandBuilder<Service, Config, OPT> ().setName(name)\n // }\n\n addOption<N extends string, D extends string>(name: N, description: D) {\n this.options.push({\n name: name,\n description: description,\n type: 'string',\n })\n return this as CommandBuilder<Service, Config, Extend<OPT, N, OptionType<D>>>\n }\n\n addAlias(alias: string, option?: object) {\n this.aliases.push({ alias, option })\n return this\n }\n\n setName<T extends string>(name: T) {\n this.name = name\n return this\n }\n setDescription(description: string) {\n this.description = description\n return this\n }\n\n setExecutor(executor: CmdExecutor<Service, Config, OPT>) {\n const that = this\n const errorHandler = (executor: CmdExecutor<Service, Config, OPT>) => {\n return async (c: CmdContext<Service, Config, OPT>) => {\n try {\n await executor(c)\n } catch (e: any) {\n if (e instanceof BizError) {\n await c.session.send(c.session.text(e.id, e.params))\n } else {\n c.logger.error(\n `unexpectError occur during cmd 「${that.name}」executing`,\n e\n )\n c.session.send(\n 'An unexpected error occurs, reporting it may help to fix it.'\n )\n }\n }\n }\n }\n\n return {\n name: this.name,\n description: this.description,\n aliases: this.aliases,\n options: this.options,\n callback: errorHandler(executor),\n children: [],\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAyB;AAElB,MAAM,eAAqD;AAAA,EAMhE,cAAc;AALd,wBAAQ;AACR,wBAAQ;AACR,wBAAQ,WAAuB,CAAC;AAChC,wBAAQ,WAAsB,CAAC;AAAA,EAEhB;AAAA;AAAA;AAAA;AAAA,EAKf,UAA8C,MAAS,aAAgB;AACrE,SAAK,QAAQ,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IACR,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,OAAe,QAAiB;AACvC,SAAK,QAAQ,KAAK,EAAE,OAAO,OAAO,CAAC;AACnC,WAAO;AAAA,EACT;AAAA,EAEA,QAA0B,MAAS;AACjC,SAAK,OAAO;AACZ,WAAO;AAAA,EACT;AAAA,EACA,eAAe,aAAqB;AAClC,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,UAA6C;AACvD,UAAM,OAAO;AACb,UAAM,eAAe,CAACA,cAAgD;AACpE,aAAO,CAAO,MAAwC;AACpD,YAAI;AACF,gBAAMA,UAAS,CAAC;AAAA,QAClB,SAAS,GAAQ;AACf,cAAI,aAAa,uBAAU;AACzB,kBAAM,EAAE,QAAQ,KAAK,EAAE,QAAQ,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;AAAA,UACrD,OAAO;AACL,cAAE,OAAO;AAAA,cACP,wCAAmC,KAAK,IAAI;AAAA,cAC5C;AAAA,YACF;AACA,cAAE,QAAQ;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,SAAS,KAAK;AAAA,MACd,SAAS,KAAK;AAAA,MACd,UAAU,aAAa,QAAQ;AAAA,MAC/B,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AACF;","names":["executor"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/cmd/type.ts"],"sourcesContent":["import { Logger } from \"../logger\";\nimport {PassiveSession} from \"../session\";\n\nexport interface CmdContext<Service, Cfg, OPT> {\n logger: Logger\n session: PassiveSession\n config: Cfg\n services: Service\n options: OPT\n input?: string\n}\n\nexport type CmdExecutor<Service, Cfg, OPT> = (\n c: CmdContext<Service, Cfg, OPT>\n) => Promise<void>\n\nexport interface CmdOption {\n type: 'boolean' | 'number' | 'string'\n name: string\n short?: string\n description?: string\n required?: boolean\n}\n\nexport type CmdAlias = {\n alias: string\n option?: {}\n}\n\nexport interface Command<Service, Cfg, OPT> {\n name: string\n description: string\n aliases: CmdAlias[]\n options: CmdOption[]\n callback: CmdExecutor<Service, Cfg, OPT>\n}\n\nexport type Extend<BASE extends {}, N extends string, D> = {\n [P in N | keyof BASE]?: (P extends keyof BASE ? BASE[P] : unknown) &\n (P extends N ? D : unknown)\n}\n\ntype ExtractType<T extends string> = T extends 'string'\n ? string\n : T extends 'boolean'\n ? boolean\n : T extends 'number'\n ? number\n : any\n\ntype Nullable<T> = T | null\n\ntype ExtractNullSafeType<T extends string> = T extends `${infer Type}?`\n ? Nullable<ExtractType<Type>>\n : ExtractType<T>\n// paramName:typename?\n// eg: online:boolean?\nexport type OptionType<T extends string> = T extends `${infer L}:${infer R}`\n ? ExtractNullSafeType<R>\n : unknown\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
var __defProp = Object.defineProperty;
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
5
|
+
var __copyProps = (to, from, except, desc) => {
|
6
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
7
|
+
for (let key of __getOwnPropNames(from))
|
8
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
9
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
10
|
+
}
|
11
|
+
return to;
|
12
|
+
};
|
13
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
14
|
+
var domain_exports = {};
|
15
|
+
module.exports = __toCommonJS(domain_exports);
|
16
|
+
//# sourceMappingURL=domain.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../src/core/domain.ts"],"sourcesContent":["export type User = {\n id: string;\n name: string;\n createdAt?: Date;\n updatedAt?: Date;\n}\n\n// 比如同一个channel 中的不同 Topic,乃至于不同子区,算不算同一个 channel?\n// 注意,不同 Agent 视角下,可能面对的同一个 Session,因此需要结合 AgentToSession 才能对应到一个独立的,完整的 Session 信息\nexport type Channel = {\n id: string;\n channelId: string;\n providerId: string;\n}\n\nexport type Account = {\n id: string;\n userId: string;\n providerId: string;\n accountId: string;\n}\n\n\n// 内存状态?\nexport type SessionAgent = {\n id: string;\n providerId: string;\n accountId: string;\n // active,offline?\n status: string;\n enabled: boolean;\n // other status\n}\n\nexport type AgentToChannel = {\n agentId: string;\n sessionId: string;\n}\n\ntype Message = {\n id: string;\n // 发送消息的 UserID\n senderId: string;\n // 收到消息的会话ID\n channelId: string;\n // 平台\n providerId: string;\n // 代行收发职责的 AgentId\n agentId: string;\n // 收发内容序号等平台数据\n providerMsgSeq: string;\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
var __defProp = Object.defineProperty;
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
6
|
+
var __export = (target, all) => {
|
7
|
+
for (var name in all)
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
9
|
+
};
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
12
|
+
for (let key of __getOwnPropNames(from))
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
15
|
+
}
|
16
|
+
return to;
|
17
|
+
};
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
19
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
20
|
+
var error_exports = {};
|
21
|
+
__export(error_exports, {
|
22
|
+
BizError: () => BizError
|
23
|
+
});
|
24
|
+
module.exports = __toCommonJS(error_exports);
|
25
|
+
class BizError extends Error {
|
26
|
+
constructor() {
|
27
|
+
super(...arguments);
|
28
|
+
__publicField(this, "id");
|
29
|
+
__publicField(this, "code");
|
30
|
+
__publicField(this, "layer");
|
31
|
+
__publicField(this, "params");
|
32
|
+
}
|
33
|
+
}
|
34
|
+
// Annotate the CommonJS export names for ESM import in node:
|
35
|
+
0 && (module.exports = {
|
36
|
+
BizError
|
37
|
+
});
|
38
|
+
//# sourceMappingURL=error.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../src/core/error.ts"],"sourcesContent":["export class BizError extends Error {\n id: string\n code: string\n layer?: string\n params?: any\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,iBAAiB,MAAM;AAAA,EAA7B;AAAA;AACL;AACA;AACA;AACA;AAAA;AACF;","names":[]}
|
@@ -11,6 +11,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
11
11
|
return to;
|
12
12
|
};
|
13
13
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
14
|
-
var
|
15
|
-
module.exports = __toCommonJS(
|
16
|
-
//# sourceMappingURL=
|
14
|
+
var event_exports = {};
|
15
|
+
module.exports = __toCommonJS(event_exports);
|
16
|
+
//# sourceMappingURL=event.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../src/core/event.ts"],"sourcesContent":["import {Logger} from \"@/core/logger\";\nimport { AgentService, PassiveSession } from \"@/core/session\";\n\n\nexport type EventHandlerCtx<Service, Config> = {\n config: Config\n logger: Logger\n services: Service\n agentService: AgentService\n}\n\nexport type CmdHandlerCtx<Service, Config> = {\n config: Config\n logger: Logger\n services: Service\n session: PassiveSession\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
var __defProp = Object.defineProperty;
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
5
|
+
var __export = (target, all) => {
|
6
|
+
for (var name in all)
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
8
|
+
};
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
11
|
+
for (let key of __getOwnPropNames(from))
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
14
|
+
}
|
15
|
+
return to;
|
16
|
+
};
|
17
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
19
|
+
var core_exports = {};
|
20
|
+
__export(core_exports, {
|
21
|
+
CommandBuilder: () => import_builder.CommandBuilder
|
22
|
+
});
|
23
|
+
module.exports = __toCommonJS(core_exports);
|
24
|
+
var import_builder = require("./cmd/builder.js");
|
25
|
+
__reExport(core_exports, require("./domain.js"), module.exports);
|
26
|
+
__reExport(core_exports, require("./logger.js"), module.exports);
|
27
|
+
__reExport(core_exports, require("./error.js"), module.exports);
|
28
|
+
__reExport(core_exports, require("./session.js"), module.exports);
|
29
|
+
__reExport(core_exports, require("./event.js"), module.exports);
|
30
|
+
// Annotate the CommonJS export names for ESM import in node:
|
31
|
+
0 && (module.exports = {
|
32
|
+
CommandBuilder,
|
33
|
+
...require("./domain.js"),
|
34
|
+
...require("./logger.js"),
|
35
|
+
...require("./error.js"),
|
36
|
+
...require("./session.js"),
|
37
|
+
...require("./event.js")
|
38
|
+
});
|
39
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../src/core/index.ts"],"sourcesContent":["export { CommandBuilder } from './cmd/builder'\nexport * from './domain'\nexport * from './logger'\nexport * from './error'\nexport * from './session'\nexport * from './event'\n\nexport type { CmdContext } from \"./cmd/type\";\nexport type { Command } from \"./cmd/type\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA+B;AAC/B,yBAAc,qBADd;AAEA,yBAAc,qBAFd;AAGA,yBAAc,oBAHd;AAIA,yBAAc,sBAJd;AAKA,yBAAc,oBALd;","names":[]}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../src/core/logger.ts"],"sourcesContent":["export interface Logger {\n info(msg: string, ...args): void\n warn(msg: string, ...args): void\n error(msg: string, ...args): void\n debug(msg: string, ...args): void\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
var __defProp = Object.defineProperty;
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
5
|
+
var __copyProps = (to, from, except, desc) => {
|
6
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
7
|
+
for (let key of __getOwnPropNames(from))
|
8
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
9
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
10
|
+
}
|
11
|
+
return to;
|
12
|
+
};
|
13
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
14
|
+
var session_exports = {};
|
15
|
+
module.exports = __toCommonJS(session_exports);
|
16
|
+
//# sourceMappingURL=session.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../src/core/session.ts"],"sourcesContent":["import {User, Account, SessionAgent, Channel} from \"./domain\";\n\ntype Message = string\n\n\n// 被动session\nexport interface ISession {\n // 被动 Session,对方有用户\n sendImgBuffer(content: any, mimeType?: string): Promise<void>\n sendImgByUrl(url: string): Promise<void>\n sendAudioByUrl(url: string): Promise<void>\n send(msg: Message): Promise<void>\n sendQueued(msg: Message): Promise<void>\n sendQuote(msg: Message): Promise<void>\n text(path: string, args?): Message\n prompt(timeout?: number): Promise<Message | undefined>\n}\n\nexport interface PassiveSession extends ISession {\n user: User\n channel: Channel\n mentions: User[]\n agent: SessionAgent\n}\n\n\nexport interface AgentService {\n getAgentSessionByChannelInfo(channel: Channel): PositiveSession\n}\n\nexport interface PositiveSession extends ISession {\n channel: Channel\n agent: SessionAgent\n}\n// 例如定时任务。或者监控数据的产生的事件。\n\n// NotificationAgent\n//\n\n\n// 主动Session\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
@@ -20,14 +20,15 @@ __export(schedules_exports, {
|
|
20
20
|
getScheduleTasks: () => getScheduleTasks
|
21
21
|
});
|
22
22
|
module.exports = __toCommonJS(schedules_exports);
|
23
|
-
var import_temp = require("
|
23
|
+
var import_temp = require("./temp.js");
|
24
24
|
const getScheduleTasks = (config) => {
|
25
|
+
var _a, _b, _c, _d, _e;
|
25
26
|
return [
|
26
27
|
{
|
27
28
|
name: "lb-rank-notifier",
|
28
29
|
handler: import_temp.LBScoreMonitor,
|
29
|
-
cron: config.
|
30
|
-
|
30
|
+
cron: (_b = (_a = config.cron) == null ? void 0 : _a.temp) == null ? void 0 : _b.cron,
|
31
|
+
enabled: (_e = (_d = (_c = config.cron) == null ? void 0 : _c.temp) == null ? void 0 : _d.enabled) != null ? _e : false
|
31
32
|
}
|
32
33
|
];
|
33
34
|
};
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../../src/events/schedules/index.ts"],"sourcesContent":["import { Config } from '@/config'\nimport { LBScoreMonitor } from './temp'\n\nexport const getScheduleTasks = (config: Config) => {\n return [\n {\n name: 'lb-rank-notifier',\n handler: LBScoreMonitor,\n cron: config.cron?.temp?.cron,\n enabled: config.cron?.temp?.enabled ?? false,\n },\n ]\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAA+B;AAExB,MAAM,mBAAmB,CAAC,WAAmB;AAHpD;AAIE,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,MACT,OAAM,kBAAO,SAAP,mBAAa,SAAb,mBAAmB;AAAA,MACzB,UAAS,wBAAO,SAAP,mBAAa,SAAb,mBAAmB,YAAnB,YAA8B;AAAA,IACzC;AAAA,EACF;AACF;","names":[]}
|
@@ -46,11 +46,15 @@ const LBScoreMonitor = (c) => __async(null, null, function* () {
|
|
46
46
|
return;
|
47
47
|
}
|
48
48
|
const [hitbuf, scorebuf] = yield Promise.all([
|
49
|
-
c.services.render.renderUrl("https://aiobs.ktlab.io/tmp/lb/hitcnt"
|
50
|
-
|
49
|
+
c.services.render.renderUrl("https://aiobs.ktlab.io/tmp/lb/hitcnt", {
|
50
|
+
selector: "#render-result"
|
51
|
+
}),
|
52
|
+
c.services.render.renderUrl("https://aiobs.ktlab.io/tmp/lb/score", {
|
53
|
+
selector: "#render-result"
|
54
|
+
})
|
51
55
|
]);
|
52
56
|
for (const group of channels) {
|
53
|
-
const session = c.
|
57
|
+
const session = c.agentService.getAgentSessionByChannelInfo(group.channel);
|
54
58
|
if (!session) {
|
55
59
|
continue;
|
56
60
|
}
|