beatsaber-bot-core 0.2.0-rc.13 → 0.2.0-rc.14
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-id-beatleader.js +1 -1
- package/dist/cjs/cmd/bind/bind-id-beatsaver.js +1 -1
- package/dist/cjs/cmd/bind/bind-scoresaber.js +1 -1
- package/dist/cjs/cmd/bind/index.js +4 -4
- package/dist/cjs/cmd/bsmap/id-search.js +2 -2
- package/dist/cjs/cmd/bsmap/key-search.js +1 -1
- package/dist/cjs/cmd/bsmap/latest.js +1 -1
- package/dist/cjs/cmd/deprecated/tmp.js +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 +3 -3
- package/dist/cjs/cmd/score.js +5 -5
- package/dist/cjs/cmd/subscribe/beatleader.js +1 -1
- package/dist/cjs/cmd/subscribe/beatsaver.js +1 -1
- package/dist/cjs/cmd/subscribe/id-beatleader-score.js +1 -1
- package/dist/cjs/cmd/subscribe/id-beatsaver-mapper.js +1 -1
- package/dist/cjs/cmd/subscribe/index.js +5 -5
- package/dist/cjs/cmd/subscribe/subjoin.js +2 -2
- package/dist/cjs/cmd/subscribe/subleave.js +1 -1
- package/dist/cjs/cmd/subscribe/unsubscribe.js +2 -2
- package/dist/cjs/components/components/RankDifficulty.js +1 -1
- package/dist/cjs/components/components/bl-rank-score-item.js +3 -3
- package/dist/cjs/components/components/bl-score-item.js +1 -1
- package/dist/cjs/components/components/bl-score-item.js.map +1 -1
- package/dist/cjs/components/components/flag.js +1 -1
- package/dist/cjs/components/components/icons/RankIcon.js +2 -2
- package/dist/cjs/components/components/scoreItem.js +1 -1
- package/dist/cjs/components/components/scoreItem.js.map +1 -1
- package/dist/cjs/components/components/scoregraph.js +2 -2
- package/dist/cjs/components/components/ss-rank-score-item.js +3 -3
- package/dist/cjs/components/components/ss-score-item.js +1 -1
- package/dist/cjs/components/components/ss-score-item.js.map +1 -1
- package/dist/cjs/components/index.js +1 -1
- package/dist/cjs/components/pages/bl-player.js +5 -5
- package/dist/cjs/components/pages/bl-score-with-rank.js +6 -6
- package/dist/cjs/components/pages/bl-score.js +2 -2
- package/dist/cjs/components/pages/bs-map.js +3 -3
- package/dist/cjs/components/pages/index.js +4 -4
- package/dist/cjs/components/pages/ss-player.js +2 -2
- package/dist/cjs/components/utils/format.js +4 -4
- package/dist/cjs/components/utils/format.js.map +1 -1
- package/dist/cjs/config.js +39 -0
- package/dist/cjs/config.js.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/infra/index.js +3 -3
- package/dist/cjs/infra/index.js.map +1 -1
- package/dist/cjs/infra/s3/index.js +34 -3
- package/dist/cjs/infra/s3/index.js.map +1 -1
- package/dist/cjs/infra/support/fetch/index.js +13 -4
- package/dist/cjs/infra/support/fetch/index.js.map +1 -1
- package/dist/cjs/infra/support/fetch/ofetch.js +5 -12
- package/dist/cjs/infra/support/fetch/ofetch.js.map +1 -1
- package/dist/cjs/infra/support/render/index.js +48 -14
- package/dist/cjs/infra/support/render/index.js.map +1 -1
- package/dist/cjs/interface/cmd/builder.js +1 -1
- package/dist/cjs/schedules/index.js +3 -2
- package/dist/cjs/schedules/index.js.map +1 -1
- package/dist/cjs/service/api/base/aioclient.js +1 -1
- package/dist/cjs/service/api/base/blclient.js +1 -1
- package/dist/cjs/service/api/base/bsclient.js +2 -2
- package/dist/cjs/service/api/base/ssclient.js +2 -2
- package/dist/cjs/service/api/index.js +14 -5
- package/dist/cjs/service/api/index.js.map +1 -1
- package/dist/cjs/service/render/index.js +21 -8
- package/dist/cjs/service/render/index.js.map +1 -1
- package/dist/cjs/ws/beatsaver.js +1 -1
- package/dist/esm/cmd/bind/bind-id-beatleader.js +1 -1
- package/dist/esm/cmd/bind/bind-id-beatsaver.js +1 -1
- package/dist/esm/cmd/bind/bind-scoresaber.js +1 -1
- package/dist/esm/cmd/bind/index.js +5 -5
- package/dist/esm/cmd/bsmap/id-search.js +2 -2
- package/dist/esm/cmd/bsmap/key-search.js +1 -1
- package/dist/esm/cmd/bsmap/latest.js +1 -1
- package/dist/esm/cmd/deprecated/tmp.js +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 +3 -3
- package/dist/esm/cmd/score.js +5 -5
- package/dist/esm/cmd/subscribe/beatleader.js +1 -1
- package/dist/esm/cmd/subscribe/beatsaver.js +1 -1
- package/dist/esm/cmd/subscribe/id-beatleader-score.js +1 -1
- package/dist/esm/cmd/subscribe/id-beatsaver-mapper.js +1 -1
- package/dist/esm/cmd/subscribe/index.js +5 -5
- package/dist/esm/cmd/subscribe/subjoin.js +2 -2
- package/dist/esm/cmd/subscribe/subleave.js +1 -1
- package/dist/esm/cmd/subscribe/unsubscribe.js +2 -2
- package/dist/esm/components/components/RankDifficulty.js +1 -1
- package/dist/esm/components/components/bl-rank-score-item.js +2 -2
- package/dist/esm/components/components/bl-score-item.js +2 -2
- package/dist/esm/components/components/bl-score-item.js.map +1 -1
- package/dist/esm/components/components/icons/RankIcon.js +2 -2
- package/dist/esm/components/components/scoreItem.js +1 -1
- package/dist/esm/components/components/scoreItem.js.map +1 -1
- package/dist/esm/components/components/scoregraph.js +3 -3
- package/dist/esm/components/components/socre-badge.js +1 -1
- package/dist/esm/components/components/ss-rank-score-item.js +2 -2
- package/dist/esm/components/components/ss-score-item.js +2 -2
- package/dist/esm/components/components/ss-score-item.js.map +1 -1
- package/dist/esm/components/pages/bl-player.js +7 -7
- package/dist/esm/components/pages/bl-score-with-rank.js +6 -6
- package/dist/esm/components/pages/bl-score.js +3 -3
- package/dist/esm/components/pages/bs-map.js +5 -5
- package/dist/esm/components/pages/index.js +5 -5
- package/dist/esm/components/pages/ss-player.js +3 -3
- package/dist/esm/components/utils/bl/bsorReplayAcc.js +2 -2
- package/dist/esm/components/utils/format.js +3 -3
- package/dist/esm/components/utils/format.js.map +1 -1
- package/dist/esm/components/utils/index.js +2 -2
- package/dist/esm/config.js +31 -0
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/index.js +10 -10
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/infra/i18n/index.js +2 -2
- package/dist/esm/infra/index.js +5 -5
- package/dist/esm/infra/index.js.map +1 -1
- package/dist/esm/infra/s3/index.js +31 -1
- package/dist/esm/infra/s3/index.js.map +1 -1
- package/dist/esm/infra/support/fetch/index.js +16 -7
- package/dist/esm/infra/support/fetch/index.js.map +1 -1
- package/dist/esm/infra/support/fetch/ofetch.js +4 -10
- package/dist/esm/infra/support/fetch/ofetch.js.map +1 -1
- package/dist/esm/infra/support/render/index.js +47 -13
- package/dist/esm/infra/support/render/index.js.map +1 -1
- package/dist/esm/interface/cmd/builder.js +1 -1
- package/dist/esm/interface/index.js +4 -4
- package/dist/esm/schedules/index.js +4 -3
- package/dist/esm/schedules/index.js.map +1 -1
- package/dist/esm/service/api/base/aioclient.js +1 -1
- package/dist/esm/service/api/base/blclient.js +1 -1
- package/dist/esm/service/api/base/bsclient.js +2 -2
- package/dist/esm/service/api/base/index.js +4 -4
- package/dist/esm/service/api/base/ssclient.js +2 -2
- package/dist/esm/service/api/index.js +16 -7
- package/dist/esm/service/api/index.js.map +1 -1
- package/dist/esm/service/api/interfaces/beatleader/index.js +5 -5
- package/dist/esm/service/api/interfaces/beatsaver/index.js +5 -5
- package/dist/esm/service/api/interfaces/scoresaber/index.js +3 -3
- package/dist/esm/service/index.js +2 -2
- package/dist/esm/service/render/index.js +22 -9
- package/dist/esm/service/render/index.js.map +1 -1
- package/dist/esm/ws/beatsaver.js +1 -1
- package/dist/esm/ws/index.js +3 -3
- package/dist/types/index.d.ts +205 -123
- package/package.json +17 -7
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/service/api/index.ts"],"sourcesContent":["import {AIOSaberClient, BeatLeaderClient, BeatSaverClient, ScoreSaberClient} from \"./base\";\nimport {Config} from \"@/config\";\nimport {Logger} from \"@/interface\";\nimport {BLIDNotFoundError, MapIdNotFoundError, SSIDNotFoundError} from \"@/infra/errors\";\nimport {BSMap, HashResponse} from \"./interfaces/beatsaver\";\nimport {ScoreSaberItem} from \"./interfaces/scoresaber\";\nimport {Leaderboard} from \"./interfaces/beatleader\";\nimport {NotFoundError} from \"@/infra/support/fetch/error\";\nimport {sortScore} from \"./sortScore\";\nimport {decode} from \"@/components/utils/bl/bsorDecoder\";\n\ntype MapDiffOption = {\n difficulty?: string\n mode?: string\n}\n\n\nexport class APIService {\n BeatLeader: BeatLeaderClient\n ScoreSaber: ScoreSaberClient\n BeatSaver: BeatSaverClient\n AIOSaber: AIOSaberClient\n constructor(cfg: Config, logger: Logger) {\n this.BeatSaver = new BeatSaverClient({logger})\n this.BeatLeader = new BeatLeaderClient({logger})\n this.ScoreSaber = new ScoreSaberClient(logger)\n this.AIOSaber = new AIOSaberClient(logger)\n }\n async getBLPlayerScoresWithUserInfo(accountId: string) {\n const [userInfo, playerScores, pinnedScores] = await Promise.all([\n this.BeatLeader.getPlayerInfo(accountId),\n this.BeatLeader.getPlayerScores(accountId),\n this.BeatLeader.getPlayerPinnedScores(accountId),\n ])\n if (!(userInfo && playerScores)) {\n throw new BLIDNotFoundError({ accountId })\n }\n const filteredScores = playerScores.data.filter(\n (item) => !pinnedScores.some((pinned) => pinned.id === item.id)\n )\n const scores = pinnedScores.concat(filteredScores).slice(0, 24)\n return {\n scores: scores,\n userInfo: userInfo,\n }\n }\n async getSSPlayerScoresWithUserInfo(accountId: string) {\n\n }\n async getScoreByPlayerIdAndMapId(\n playerId: string,\n mapId: string,\n option?: MapDiffOption\n ): Promise<Leaderboard> {\n const map = await this.BeatSaver.searchMapById(mapId)\n if (!map) {\n throw new MapIdNotFoundError()\n }\n const hash = map.versions[0].hash\n let reqs = map.versions[0].diffs.map((it) => ({\n diff: it.difficulty,\n mode: it.characteristic,\n hash: hash,\n playerID: playerId,\n leaderboardContext: 'general',\n }))\n if (option && option.difficulty) {\n reqs = reqs.filter((item) => item.diff == option.difficulty)\n }\n if (option && option.mode) {\n reqs = reqs.filter((item) => item.mode == option.mode)\n }\n const res = await Promise.allSettled(reqs.map(\n (it) => this.BeatLeader.getPlayerScore(it)))\n const scores = res\n .filter((item) => item.status === 'fulfilled')\n .map(<T>(it: PromiseFulfilledResult<T>) => it.value)\n if (scores.length < 1) {\n throw new NotFoundError()\n }\n scores.sort(sortScore)\n return scores[0]\n }\n\n async getAroundScoreAndRegionScoreByRankAndPage(\n leaderboardId: string,\n rank: number,\n regionCode: string\n ) {\n const page = Math.ceil(rank / 10)\n const rest = rank % 10\n let startIndex = 0\n if (rest > 7) {\n startIndex = 2\n }\n const [regionScore, aroundScore] = await Promise.all([\n this.BeatLeader.getLeaderboard(leaderboardId, {\n leaderboardContext: 'general',\n page: 1,\n sortBy: 'rank',\n order: 'desc',\n countries: regionCode,\n }),\n this.BeatLeader.getLeaderboard(leaderboardId, {\n leaderboardContext: 'general',\n page: page,\n sortBy: 'rank',\n order: 'desc',\n }),\n ])\n const difficulties = regionScore.song.difficulties\n return {\n difficulties: difficulties,\n aroundScores: aroundScore.scores.slice(startIndex, startIndex + 7),\n regionTopScores: regionScore.scores,\n }\n }\n async getScoreAndBSMapByScoreId(scoreId: string) {\n const res = await this.BeatLeader.getBeatScore(scoreId)\n const bsorLink = res.replay\n const bsorContent = await fetch(bsorLink)\n const bsor = await new Promise((resolve, reject) => {\n bsorContent.arrayBuffer().then((res) => decode(res, resolve))\n setTimeout(() => reject('timeout exceed'), 5000)\n })\n const statistic = await fetch(\n `https://cdn.scorestats.beatleader.xyz/${scoreId}.json`\n ).then((res) => res.json())\n const id = res.song.id.split('x')?.[0]\n const bsMap = await this.BeatSaver.searchMapById(id)\n return {\n score: res,\n bsMap: bsMap,\n statistic: statistic,\n bsor: bsor,\n }\n }\n async getSSPlayerRecentScoreWithUserInfo(uid: string) {\n const [userInfo, scores] = await Promise.all([\n this.ScoreSaber.getScoreUserById(uid),\n this.ScoreSaber.getScoreItemsById(uid, 1, 24)\n .then((res) => res?.playerScores),\n ])\n if (!scores || !userInfo) {\n throw new SSIDNotFoundError({ accountId: uid })\n }\n const hashes = scores.map((it) => it.leaderboard.songHash)\n\n let hashInfo = await this.BeatSaver.getMapsByHashes(hashes)\n if (hashInfo.id) {\n const map = hashInfo as BSMap\n hashInfo = {} as HashResponse\n hashInfo[map.versions[0].hash] = map\n }\n const res = scores.map(\n (it) =>\n ({\n mapId: (hashInfo as HashResponse)[\n it.leaderboard.songHash.toLowerCase()\n ]?.id,\n ...it,\n }) as ScoreSaberItem\n )\n return {\n scores: res,\n userInfo: userInfo,\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAkF;AAGlF,oBAAuE;AAIvE,mBAA4B;AAC5B,uBAAwB;AACxB,yBAAqB;AAQd,MAAM,WAAW;AAAA,EAKtB,YAAY,KAAa,QAAgB;AAJzC;AACA;AACA;AACA;AAEE,SAAK,YAAY,IAAI,4BAAgB,
|
1
|
+
{"version":3,"sources":["../../../../src/service/api/index.ts"],"sourcesContent":["import {AIOSaberClient, BeatLeaderClient, BeatSaverClient, ScoreSaberClient} from \"./base\";\nimport {Config} from \"@/config\";\nimport {Logger} from \"@/interface\";\nimport {BLIDNotFoundError, MapIdNotFoundError, SSIDNotFoundError} from \"@/infra/errors\";\nimport {BSMap, HashResponse} from \"./interfaces/beatsaver\";\nimport {ScoreSaberItem} from \"./interfaces/scoresaber\";\nimport {Leaderboard} from \"./interfaces/beatleader\";\nimport {NotFoundError} from \"@/infra/support/fetch/error\";\nimport {sortScore} from \"./sortScore\";\nimport {decode} from \"@/components/utils/bl/bsorDecoder\";\n\ntype MapDiffOption = {\n difficulty?: string\n mode?: string\n}\n\n\nexport class APIService {\n BeatLeader: BeatLeaderClient\n ScoreSaber: ScoreSaberClient\n BeatSaver: BeatSaverClient\n AIOSaber: AIOSaberClient\n constructor(cfg: Config, logger: Logger) {\n this.BeatSaver = new BeatSaverClient({\n logger,\n host: cfg.beatsaver.host,\n client_id: cfg.beatsaver.oauthClientId,\n client_secret: cfg.beatsaver.oauthClientSecret\n })\n this.BeatLeader = new BeatLeaderClient({\n logger,\n client_id: cfg.beatleader.oauthClientId,\n client_secret: cfg.beatleader.oauthClientSecret\n })\n this.ScoreSaber = new ScoreSaberClient(logger)\n this.AIOSaber = new AIOSaberClient(logger)\n }\n async getBLPlayerScoresWithUserInfo(accountId: string) {\n const [userInfo, playerScores, pinnedScores] = await Promise.all([\n this.BeatLeader.getPlayerInfo(accountId),\n this.BeatLeader.getPlayerScores(accountId),\n this.BeatLeader.getPlayerPinnedScores(accountId),\n ])\n if (!(userInfo && playerScores)) {\n throw new BLIDNotFoundError({ accountId })\n }\n const filteredScores = playerScores.data.filter(\n (item) => !pinnedScores.some((pinned) => pinned.id === item.id)\n )\n const scores = pinnedScores.concat(filteredScores).slice(0, 24)\n return {\n scores: scores,\n userInfo: userInfo,\n }\n }\n async getSSPlayerScoresWithUserInfo(accountId: string) {\n\n }\n async getScoreByPlayerIdAndMapId(\n playerId: string,\n mapId: string,\n option?: MapDiffOption\n ): Promise<Leaderboard> {\n const map = await this.BeatSaver.searchMapById(mapId)\n if (!map) {\n throw new MapIdNotFoundError()\n }\n const hash = map.versions[0].hash\n let reqs = map.versions[0].diffs.map((it) => ({\n diff: it.difficulty,\n mode: it.characteristic,\n hash: hash,\n playerID: playerId,\n leaderboardContext: 'general',\n }))\n if (option && option.difficulty) {\n reqs = reqs.filter((item) => item.diff == option.difficulty)\n }\n if (option && option.mode) {\n reqs = reqs.filter((item) => item.mode == option.mode)\n }\n const res = await Promise.allSettled(reqs.map(\n (it) => this.BeatLeader.getPlayerScore(it)))\n const scores = res\n .filter((item) => item.status === 'fulfilled')\n .map(<T>(it: PromiseFulfilledResult<T>) => it.value)\n if (scores.length < 1) {\n throw new NotFoundError()\n }\n scores.sort(sortScore)\n return scores[0]\n }\n\n async getAroundScoreAndRegionScoreByRankAndPage(\n leaderboardId: string,\n rank: number,\n regionCode: string\n ) {\n const page = Math.ceil(rank / 10)\n const rest = rank % 10\n let startIndex = 0\n if (rest > 7) {\n startIndex = 2\n }\n const [regionScore, aroundScore] = await Promise.all([\n this.BeatLeader.getLeaderboard(leaderboardId, {\n leaderboardContext: 'general',\n page: 1,\n sortBy: 'rank',\n order: 'desc',\n countries: regionCode,\n }),\n this.BeatLeader.getLeaderboard(leaderboardId, {\n leaderboardContext: 'general',\n page: page,\n sortBy: 'rank',\n order: 'desc',\n }),\n ])\n const difficulties = regionScore.song.difficulties\n return {\n difficulties: difficulties,\n aroundScores: aroundScore.scores.slice(startIndex, startIndex + 7),\n regionTopScores: regionScore.scores,\n }\n }\n async getScoreAndBSMapByScoreId(scoreId: string) {\n const res = await this.BeatLeader.getBeatScore(scoreId)\n const bsorLink = res.replay\n const bsorContent = await fetch(bsorLink)\n const bsor = await new Promise((resolve, reject) => {\n bsorContent.arrayBuffer().then((res) => decode(res, resolve))\n setTimeout(() => reject('timeout exceed'), 5000)\n })\n const statistic = await fetch(\n `https://cdn.scorestats.beatleader.xyz/${scoreId}.json`\n ).then((res) => res.json())\n const id = res.song.id.split('x')?.[0]\n const bsMap = await this.BeatSaver.searchMapById(id)\n return {\n score: res,\n bsMap: bsMap,\n statistic: statistic,\n bsor: bsor,\n }\n }\n async getSSPlayerRecentScoreWithUserInfo(uid: string) {\n const [userInfo, scores] = await Promise.all([\n this.ScoreSaber.getScoreUserById(uid),\n this.ScoreSaber.getScoreItemsById(uid, 1, 24)\n .then((res) => res?.playerScores),\n ])\n if (!scores || !userInfo) {\n throw new SSIDNotFoundError({ accountId: uid })\n }\n const hashes = scores.map((it) => it.leaderboard.songHash)\n\n let hashInfo = await this.BeatSaver.getMapsByHashes(hashes)\n if (hashInfo.id) {\n const map = hashInfo as BSMap\n hashInfo = {} as HashResponse\n hashInfo[map.versions[0].hash] = map\n }\n const res = scores.map(\n (it) =>\n ({\n mapId: (hashInfo as HashResponse)[\n it.leaderboard.songHash.toLowerCase()\n ]?.id,\n ...it,\n }) as ScoreSaberItem\n )\n return {\n scores: res,\n userInfo: userInfo,\n }\n }\n}\n"],"mappings":"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","names":["res"]}
|
@@ -18,6 +18,18 @@ var __spreadValues = (a, b) => {
|
|
18
18
|
}
|
19
19
|
return a;
|
20
20
|
};
|
21
|
+
var __objRest = (source, exclude) => {
|
22
|
+
var target = {};
|
23
|
+
for (var prop in source)
|
24
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
25
|
+
target[prop] = source[prop];
|
26
|
+
if (source != null && __getOwnPropSymbols)
|
27
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
28
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
29
|
+
target[prop] = source[prop];
|
30
|
+
}
|
31
|
+
return target;
|
32
|
+
};
|
21
33
|
var __export = (target, all) => {
|
22
34
|
for (var name in all)
|
23
35
|
__defProp(target, name, { get: all[name], enumerable: true });
|
@@ -64,14 +76,14 @@ __export(render_exports, {
|
|
64
76
|
RenderService: () => RenderService
|
65
77
|
});
|
66
78
|
module.exports = __toCommonJS(render_exports);
|
67
|
-
var import_components = require("
|
79
|
+
var import_components = require("@/components");
|
68
80
|
var import_puppeteer_core = require("puppeteer-core");
|
69
|
-
var import_interface = require("
|
70
|
-
var import_pages = require("
|
81
|
+
var import_interface = require("@/interface");
|
82
|
+
var import_pages = require("@/components/pages");
|
71
83
|
var import_preference = require("../preference");
|
72
|
-
var import_errors = require("
|
73
|
-
var import_qrcode = __toESM(require("
|
74
|
-
var import_render = require("
|
84
|
+
var import_errors = require("@/infra/errors");
|
85
|
+
var import_qrcode = __toESM(require("@/components/utils/qrcode"), 1);
|
86
|
+
var import_render = require("@/infra/support/render");
|
75
87
|
const getPreferenceKey = (platform) => {
|
76
88
|
return platform == import_interface.Platform.SS ? import_preference.preferenceKey.ssProfileRenderImg.key : import_preference.preferenceKey.blProfileRenderImg.key;
|
77
89
|
};
|
@@ -80,8 +92,9 @@ class RenderService {
|
|
80
92
|
this.api = api;
|
81
93
|
this.imageRender = imageRender;
|
82
94
|
}
|
83
|
-
static create(imgRenderConfig
|
84
|
-
|
95
|
+
static create(imgRenderConfig) {
|
96
|
+
const _a = imgRenderConfig, { api } = _a, config = __objRest(_a, ["api"]);
|
97
|
+
return new RenderService(api, (0, import_render.getImageRender)(config));
|
85
98
|
}
|
86
99
|
renderRank(accountId, platform, renderOpts) {
|
87
100
|
return __async(this, null, function* () {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/service/render/index.ts"],"sourcesContent":["import {IRenderService, RenderOption} from './interfaces'\nimport { getHtml } from '@/components'\nimport { PuppeteerError, TimeoutError } from 'puppeteer-core'\nimport { Platform } from '@/interface'\nimport {getBLPlayerComp, getBLRankScoreComp, getBSMapComp, getSSPlayerComp} from '@/components/pages'\nimport {preferenceKey} from \"../preference\";\nimport {ImageRenderError, RequestError} from \"@/infra/errors\";\nimport createQrcode from \"@/components/utils/qrcode\";\nimport {APIService} from \"../api\";\nimport {BSMap} from \"../api/interfaces/beatsaver\";\nimport {CreateImageRenderOption, getImageRender, ImageRender} from \"@/infra/support/render\";\n\n\nconst getPreferenceKey = (platform: string) => {\n return platform == Platform.SS\n ? preferenceKey.ssProfileRenderImg.key\n : preferenceKey.blProfileRenderImg.key\n}\n\nexport class RenderService implements IRenderService {\n constructor(\n private api: APIService,\n private imageRender: ImageRender\n ) {}\n\n static create(imgRenderConfig: CreateImageRenderOption
|
1
|
+
{"version":3,"sources":["../../../../src/service/render/index.ts"],"sourcesContent":["import {IRenderService, RenderOption} from './interfaces'\nimport { getHtml } from '@/components'\nimport { PuppeteerError, TimeoutError } from 'puppeteer-core'\nimport { Platform } from '@/interface'\nimport {getBLPlayerComp, getBLRankScoreComp, getBSMapComp, getSSPlayerComp} from '@/components/pages'\nimport {preferenceKey} from \"../preference\";\nimport {ImageRenderError, RequestError} from \"@/infra/errors\";\nimport createQrcode from \"@/components/utils/qrcode\";\nimport {APIService} from \"../api\";\nimport {BSMap} from \"../api/interfaces/beatsaver\";\nimport {CreateImageRenderOption, getImageRender, ImageRender} from \"@/infra/support/render\";\n\n\nconst getPreferenceKey = (platform: string) => {\n return platform == Platform.SS\n ? preferenceKey.ssProfileRenderImg.key\n : preferenceKey.blProfileRenderImg.key\n}\n\nexport class RenderService implements IRenderService {\n private constructor(\n private api: APIService,\n private imageRender: ImageRender\n ) {}\n\n static create(imgRenderConfig: CreateImageRenderOption & { api: APIService }) {\n const { api, ...config} = imgRenderConfig\n return new RenderService(api, getImageRender(config))\n }\n\n async renderRank(\n accountId: string,\n platform: Platform,\n renderOpts?: RenderOption\n ) {\n try {\n let bg = (await renderOpts?.userPreference?.get<string>(getPreferenceKey(platform)))\n bg = bg || 'https://www.loliapi.com/acg/pc/'\n let html: string\n if (platform == Platform.BL) {\n const { scores, userInfo } = await this.api.getBLPlayerScoresWithUserInfo(accountId)\n html = getHtml(getBLPlayerComp(scores, userInfo, bg))\n } else {\n const { scores, userInfo } = await this.api.getSSPlayerRecentScoreWithUserInfo(accountId)\n html = getHtml(getSSPlayerComp(scores, userInfo, bg))\n }\n return this.imageRender.html2img(html, {selector: '#render-result', ...renderOpts})\n }catch (e) {\n if (e instanceof TimeoutError || e instanceof PuppeteerError) {\n throw new ImageRenderError()\n }\n throw e\n }\n }\n\n async renderScore(\n scoreId: string,\n renderOpts?: RenderOption\n ) {\n const bg = (await renderOpts?.userPreference?.get<string>(preferenceKey.blScoreImg.key))\n ?? 'https://www.loliapi.com/acg/pc/'\n try {\n const { score, statistic, bsor, bsMap } =\n await this.api.getScoreAndBSMapByScoreId(scoreId)\n\n const { aroundScores, regionTopScores, difficulties } =\n await this.api.getAroundScoreAndRegionScoreByRankAndPage(\n score.leaderboardId,\n score.rank,\n score.player.country\n )\n return this.imageRender.html2img(\n getHtml(getBLRankScoreComp(score, aroundScores, regionTopScores, difficulties, bsMap, statistic, bsor, bg)),\n {selector: '#render-result', ...renderOpts}\n )\n }catch (e) {\n if (e instanceof RequestError) {\n throw e\n }\n throw new ImageRenderError()\n }\n }\n\n async renderMapById(\n mapId: string,\n renderOption: RenderOption\n ) {\n const map = await this.api.BeatSaver.searchMapById(mapId)\n return this.renderMap(map, renderOption)\n }\n\n async renderMap(\n bsMap: BSMap,\n renderOption?: RenderOption\n ) {\n const previewQrUrl = await createQrcode(`https://allpoland.github.io/ArcViewer/?id=${bsMap.id}`)\n const bsMapQrUrl = await createQrcode(`https://beatsaver.com/maps/${bsMap.id}`)\n return this.imageRender.html2img(\n getHtml(getBSMapComp(bsMap, bsMapQrUrl, previewQrUrl)), {selector: '#render-result', ...renderOption}\n )\n }\n\n async renderUrl(url: string, renderOption?: RenderOption) {\n renderOption.onRenderStart?.()\n try {\n return this.imageRender.url2img(url, renderOption)\n }catch (e) {\n renderOption?.onRenderError?.(e)\n }\n }\n}\n"],"mappings":"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","names":["createQrcode"]}
|
package/dist/cjs/ws/beatsaver.js
CHANGED
@@ -42,7 +42,7 @@ __export(beatsaver_exports, {
|
|
42
42
|
BeatSaverWSHandler: () => BeatSaverWSHandler
|
43
43
|
});
|
44
44
|
module.exports = __toCommonJS(beatsaver_exports);
|
45
|
-
var import_utils = require("
|
45
|
+
var import_utils = require("@/utils");
|
46
46
|
class BeatSaverWSHandler {
|
47
47
|
constructor(db, render, logger, config, botService) {
|
48
48
|
__publicField(this, "logger");
|
@@ -22,7 +22,7 @@ import {
|
|
22
22
|
BLIDNotFoundError,
|
23
23
|
SessionPromotionCancelError,
|
24
24
|
SessionPromotionTimeoutError
|
25
|
-
} from "../../infra/errors";
|
25
|
+
} from "../../infra/errors/index.js";
|
26
26
|
const handleBeatLeaderIDBind = (c) => __async(null, null, function* () {
|
27
27
|
const player = yield c.services.api.BeatLeader.getPlayerInfo(c.input);
|
28
28
|
if (!player) {
|
@@ -22,7 +22,7 @@ import {
|
|
22
22
|
BSIDNotFoundError,
|
23
23
|
SessionPromotionCancelError,
|
24
24
|
SessionPromotionTimeoutError
|
25
|
-
} from "../../infra/errors";
|
25
|
+
} from "../../infra/errors/index.js";
|
26
26
|
const handleBeatSaverIDBind = (c) => __async(null, null, function* () {
|
27
27
|
const mapper = yield c.services.api.BeatSaver.getBSMapperById(c.input);
|
28
28
|
if (!mapper) {
|
@@ -22,7 +22,7 @@ import {
|
|
22
22
|
SessionPromotionCancelError,
|
23
23
|
SessionPromotionTimeoutError,
|
24
24
|
SSIDNotFoundError
|
25
|
-
} from "../../infra/errors";
|
25
|
+
} from "../../infra/errors/index.js";
|
26
26
|
const handleScoreSaberBind = (c) => __async(null, null, function* () {
|
27
27
|
const scoreSaberUser = yield c.services.api.ScoreSaber.getScoreUserById(c.input);
|
28
28
|
if (!scoreSaberUser) {
|
@@ -18,11 +18,11 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { handleScoreSaberBind } from "./bind-scoresaber";
|
22
|
-
import { Platform } from "../../interface";
|
23
|
-
import { handleBeatLeaderIDBind } from "../../cmd/bind/bind-id-beatleader";
|
24
|
-
import { handleBeatSaverIDBind } from "../../cmd/bind/bind-id-beatsaver";
|
25
|
-
import { CommandBuilder } from "../../interface/cmd/builder";
|
21
|
+
import { handleScoreSaberBind } from "./bind-scoresaber.js";
|
22
|
+
import { Platform } from "../../interface/index.js";
|
23
|
+
import { handleBeatLeaderIDBind } from "../../cmd/bind/bind-id-beatleader.js";
|
24
|
+
import { handleBeatSaverIDBind } from "../../cmd/bind/bind-id-beatsaver.js";
|
25
|
+
import { CommandBuilder } from "../../interface/cmd/builder.js";
|
26
26
|
var bind_default = () => new CommandBuilder().setName("bind").addOption("p", "platform:string").addAlias("bbbind").addAlias("bindbs", { options: { p: "bs" } }).addAlias("bindbl", { options: { p: "bl" } }).addAlias("bindss", { options: { p: "ss" } }).addAlias("bbbindbs", { options: { p: "bs" } }).addAlias("bbbindbl", { options: { p: "bl" } }).addAlias("bbbindss", { options: { p: "ss" } }).addAlias("ssbind", { options: { p: "ss" } }).addAlias("blbind", { options: { p: "bl" } }).addAlias("bsbind", { options: { p: "bs" } }).setDescription("clear an auth account relate info").setExecutor((c) => __async(null, null, function* () {
|
27
27
|
if (!c.options.p) {
|
28
28
|
c.options.p = "ss";
|
@@ -18,8 +18,8 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { InvalidMapIdError, MapIdNotFoundError } from "../../infra/errors";
|
22
|
-
import { CommandBuilder } from "../../interface/cmd/builder";
|
21
|
+
import { InvalidMapIdError, MapIdNotFoundError } from "../../infra/errors/index.js";
|
22
|
+
import { CommandBuilder } from "../../interface/cmd/builder.js";
|
23
23
|
const mapIdReg = /^[a-fA-F0-9]{1,6}$/;
|
24
24
|
var id_search_default = () => new CommandBuilder().setName("id").addAlias("/id").addAlias("bbid").addAlias("/bbid").addAlias("!bsr").setDescription("clear an auth account relate info").setExecutor((c) => __async(null, null, function* () {
|
25
25
|
if (!c.input || c.input && c.input.length < 1) {
|
@@ -18,7 +18,7 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { CommandBuilder } from "../../interface/cmd/builder";
|
21
|
+
import { CommandBuilder } from "../../interface/cmd/builder.js";
|
22
22
|
var key_search_default = () => new CommandBuilder().setName("search").addAlias("bbsou").addAlias("bbsearch").addAlias("bbmap").setDescription("search beatmap by keyword").setExecutor((c) => __async(null, null, function* () {
|
23
23
|
let key = c.input;
|
24
24
|
if (key.length > 15) {
|
@@ -18,7 +18,7 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { CommandBuilder } from "../../interface/cmd/builder";
|
21
|
+
import { CommandBuilder } from "../../interface/cmd/builder.js";
|
22
22
|
var latest_default = () => new CommandBuilder().setName("latest").addAlias("bbnew").addAlias("blnew").addAlias("ssnew").addAlias("bsnew").addAlias("/blnew").addAlias("/ssnew").addAlias("/bsnew").setDescription("get latest 3 beatmap").setExecutor((c) => __async(null, null, function* () {
|
23
23
|
const res = yield c.services.api.BeatSaver.getLatestMaps(3);
|
24
24
|
const text = c.session.text("commands.bsbot.latest.info");
|
@@ -18,7 +18,7 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { CommandBuilder } from "../../interface/cmd/builder";
|
21
|
+
import { CommandBuilder } from "../../interface/cmd/builder.js";
|
22
22
|
var tmp_default = () => new CommandBuilder().setName("lb").addAlias("/lb").addAlias("bblb").addAlias("\u4E50\u56E2\u65B0\u8D5B\u5B63").addAlias("\u4E50\u56E2\u699C\u5355").setExecutor((c) => __async(null, null, function* () {
|
23
23
|
const [hit, score] = yield Promise.all([
|
24
24
|
c.services.render.renderUrl("https://aiobs.ktlab.io/tmp/lb/hitcnt", {
|
package/dist/esm/cmd/index.js
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
import IdSearch from "
|
2
|
-
import KeySearch from "
|
3
|
-
import Latest from "
|
4
|
-
import Rank from "
|
5
|
-
import Score from "
|
6
|
-
import Subscribe from "
|
7
|
-
import Subjoin from "
|
8
|
-
import Subleave from "
|
9
|
-
import Unsubscribe from "
|
10
|
-
import Bind from "
|
11
|
-
import Tmp from "
|
1
|
+
import IdSearch from "./bsmap/id-search.js";
|
2
|
+
import KeySearch from "./bsmap/key-search.js";
|
3
|
+
import Latest from "./bsmap/latest.js";
|
4
|
+
import Rank from "./rank.js";
|
5
|
+
import Score from "./score.js";
|
6
|
+
import Subscribe from "./subscribe/index.js";
|
7
|
+
import Subjoin from "./subscribe/subjoin.js";
|
8
|
+
import Subleave from "./subscribe/subleave.js";
|
9
|
+
import Unsubscribe from "./subscribe/unsubscribe.js";
|
10
|
+
import Bind from "./bind/index.js";
|
11
|
+
import Tmp from "./deprecated/tmp.js";
|
12
12
|
function applyCommand(...fns) {
|
13
13
|
return fns.map((fn) => fn());
|
14
14
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/cmd/index.ts"],"sourcesContent":["\nimport IdSearch from '
|
1
|
+
{"version":3,"sources":["../../../src/cmd/index.ts"],"sourcesContent":["\nimport IdSearch from './bsmap/id-search'\nimport KeySearch from './bsmap/key-search'\nimport Latest from './bsmap/latest'\nimport Rank from './rank'\nimport Score from './score'\nimport Subscribe from './subscribe'\nimport Subjoin from './subscribe/subjoin'\nimport Subleave from './subscribe/subleave'\nimport Unsubscribe from './subscribe/unsubscribe'\nimport Bind from './bind'\nimport Tmp from './deprecated/tmp'\nimport {Command} from \"@/interface\";\n\nfunction applyCommand<CHANNEL>(...fns: (() => Command<CHANNEL>)[]) {\n return fns.map((fn) => fn())\n}\n\nexport const botCommands = <CHANNEL>() =>\n applyCommand<CHANNEL>(\n IdSearch,\n KeySearch,\n Latest,\n Rank,\n Score,\n Bind,\n Subscribe,\n Subjoin,\n Subleave,\n Unsubscribe,\n Tmp,\n // Config\n )\n\n//transport\n"],"mappings":"AACA,OAAO,cAAc;AACrB,OAAO,eAAe;AACtB,OAAO,YAAY;AACnB,OAAO,UAAU;AACjB,OAAO,WAAW;AAClB,OAAO,eAAe;AACtB,OAAO,aAAa;AACpB,OAAO,cAAc;AACrB,OAAO,iBAAiB;AACxB,OAAO,UAAU;AACjB,OAAO,SAAS;AAGhB,SAAS,gBAAyB,KAAiC;AACjE,SAAO,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC;AAC7B;AAEO,MAAM,cAAc,MACzB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAEF;","names":[]}
|
package/dist/esm/cmd/rank.js
CHANGED
@@ -18,9 +18,9 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { CommandBuilder } from "../interface/cmd/builder";
|
22
|
-
import { parsePlatform, Platform } from "../interface";
|
23
|
-
import { UnknownUserIDError } from "../infra/errors";
|
21
|
+
import { CommandBuilder } from "../interface/cmd/builder.js";
|
22
|
+
import { parsePlatform, Platform } from "../interface/index.js";
|
23
|
+
import { UnknownUserIDError } from "../infra/errors/index.js";
|
24
24
|
var rank_default = () => CommandBuilder.create("rank").addOption("p", "platform:string").setDescription("clear an auth account relate info").setExecutor((c) => __async(null, null, function* () {
|
25
25
|
let uid = c.session.u.id;
|
26
26
|
if (c.session.mentions && c.session.mentions.length > 0) {
|
package/dist/esm/cmd/score.js
CHANGED
@@ -18,14 +18,14 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { CommandBuilder } from "../interface/cmd/builder";
|
22
|
-
import { Platform } from "../interface";
|
23
|
-
import { convertDiff } from "../utils";
|
21
|
+
import { CommandBuilder } from "../interface/cmd/builder.js";
|
22
|
+
import { Platform } from "../interface/index.js";
|
23
|
+
import { convertDiff } from "../utils/index.js";
|
24
24
|
import {
|
25
25
|
AccountBindingNotFoundError,
|
26
26
|
ScoreNotFoundError
|
27
|
-
} from "../infra/errors";
|
28
|
-
import { NotFoundError } from "../infra/support/fetch/error";
|
27
|
+
} from "../infra/errors/index.js";
|
28
|
+
import { NotFoundError } from "../infra/support/fetch/error.js";
|
29
29
|
var score_default = () => new CommandBuilder().setName("score").addOption("d", "difficulty:string").addOption("m", "mode:string").addAlias("bbscore").addAlias("/score").setExecutor((c) => __async(null, null, function* () {
|
30
30
|
var _a;
|
31
31
|
let uid = c.session.u.id;
|
@@ -37,7 +37,7 @@ var __async = (__this, __arguments, generator) => {
|
|
37
37
|
step((generator = generator.apply(__this, __arguments)).next());
|
38
38
|
});
|
39
39
|
};
|
40
|
-
import { SubscriptionExistError } from "../../infra/errors";
|
40
|
+
import { SubscriptionExistError } from "../../infra/errors/index.js";
|
41
41
|
const beatleader = (c) => __async(null, null, function* () {
|
42
42
|
const { blSub } = yield c.services.db.getSubscriptionsByGID(c.session.g.id);
|
43
43
|
if (blSub) {
|
@@ -37,7 +37,7 @@ var __async = (__this, __arguments, generator) => {
|
|
37
37
|
step((generator = generator.apply(__this, __arguments)).next());
|
38
38
|
});
|
39
39
|
};
|
40
|
-
import { SubscriptionExistError } from "../../infra/errors";
|
40
|
+
import { SubscriptionExistError } from "../../infra/errors/index.js";
|
41
41
|
const beatsaver = (c) => __async(null, null, function* () {
|
42
42
|
const { bsMapSub } = yield c.services.db.getSubscriptionsByGID(c.session.g.id);
|
43
43
|
if (bsMapSub) {
|
@@ -37,7 +37,7 @@ var __async = (__this, __arguments, generator) => {
|
|
37
37
|
step((generator = generator.apply(__this, __arguments)).next());
|
38
38
|
});
|
39
39
|
};
|
40
|
-
import { BLIDNotFoundError, SubscriptionExistError } from "../../infra/errors";
|
40
|
+
import { BLIDNotFoundError, SubscriptionExistError } from "../../infra/errors/index.js";
|
41
41
|
const idBeatleaderScore = (c) => __async(null, null, function* () {
|
42
42
|
if (!c.input) {
|
43
43
|
return;
|
@@ -37,7 +37,7 @@ var __async = (__this, __arguments, generator) => {
|
|
37
37
|
step((generator = generator.apply(__this, __arguments)).next());
|
38
38
|
});
|
39
39
|
};
|
40
|
-
import { BSIDNotFoundError, SubscriptionExistError } from "../../infra/errors";
|
40
|
+
import { BSIDNotFoundError, SubscriptionExistError } from "../../infra/errors/index.js";
|
41
41
|
const idBeatsaverMapper = (c) => __async(null, null, function* () {
|
42
42
|
if (!c.input) {
|
43
43
|
return;
|
@@ -18,11 +18,11 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { CommandBuilder } from "../../interface/cmd/builder";
|
22
|
-
import { beatleader } from "../../cmd/subscribe/beatleader";
|
23
|
-
import { beatsaver } from "../../cmd/subscribe/beatsaver";
|
24
|
-
import { NoneSubscriptionExistError } from "../../infra/errors";
|
25
|
-
import { idBeatsaverMapper } from "../../cmd/subscribe/id-beatsaver-mapper";
|
21
|
+
import { CommandBuilder } from "../../interface/cmd/builder.js";
|
22
|
+
import { beatleader } from "../../cmd/subscribe/beatleader.js";
|
23
|
+
import { beatsaver } from "../../cmd/subscribe/beatsaver.js";
|
24
|
+
import { NoneSubscriptionExistError } from "../../infra/errors/index.js";
|
25
|
+
import { idBeatsaverMapper } from "../../cmd/subscribe/id-beatsaver-mapper.js";
|
26
26
|
var subscribe_default = () => new CommandBuilder().setName("subscribe").addAlias("bbsub").addAlias("/subbl", { options: { type: "beatleader" } }).addAlias("/subbs", { options: { type: "beatsaver" } }).addAlias("blsub", { options: { type: "beatleader" } }).addAlias("bssub", { options: { type: "beatsaver" } }).addAlias("subbl", { options: { type: "beatleader" } }).addAlias("subbs", { options: { type: "beatsaver" } }).addAlias("subbl", { options: { type: "beatleader" } }).addAlias("submapper", { options: { type: "bsmapper" } }).addOption("type", "type:string").setDescription("clear an auth account relate info").setExecutor((c) => __async(null, null, function* () {
|
27
27
|
var _a, _b;
|
28
28
|
if (c.options.type === "beatsaver") {
|
@@ -18,8 +18,8 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { CommandBuilder } from "../../interface/cmd/builder";
|
22
|
-
import { SubscriptionNotExistError } from "../../infra/errors";
|
21
|
+
import { CommandBuilder } from "../../interface/cmd/builder.js";
|
22
|
+
import { SubscriptionNotExistError } from "../../infra/errors/index.js";
|
23
23
|
var subjoin_default = () => new CommandBuilder().setName("subjoin").addAlias("bbjoin").addAlias("/joinbl", { options: { type: "beatleader" } }).addAlias("/joinbs", { options: { type: "beatsaver" } }).addAlias("bljoin", { options: { type: "beatleader" } }).addAlias("bsjoin", { options: { type: "beatsaver" } }).addOption("type", "type:string").setDescription("").setExecutor((c) => __async(null, null, function* () {
|
24
24
|
const { blSub, bsMapSub } = yield c.services.db.getSubscriptionsByGID(
|
25
25
|
c.session.g.id
|
@@ -18,7 +18,7 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { CommandBuilder } from "../../interface/cmd/builder";
|
21
|
+
import { CommandBuilder } from "../../interface/cmd/builder.js";
|
22
22
|
var subleave_default = () => new CommandBuilder().setName("subleave").addAlias("bbleave").addAlias("/leavebl", { options: { type: "beatleader" } }).addAlias("/leavebs", { options: { type: "beatsaver" } }).addAlias("leavebl", { options: { type: "beatleader" } }).addAlias("leavebs", { options: { type: "beatsaver" } }).addOption("type", "type:string").setDescription("").setExecutor((c) => __async(null, null, function* () {
|
23
23
|
const subs = yield c.services.db.getSubscriptionInfoByUGID(
|
24
24
|
c.session.g.id,
|
@@ -37,11 +37,11 @@ var __async = (__this, __arguments, generator) => {
|
|
37
37
|
step((generator = generator.apply(__this, __arguments)).next());
|
38
38
|
});
|
39
39
|
};
|
40
|
-
import { CommandBuilder } from "../../interface/cmd/builder";
|
40
|
+
import { CommandBuilder } from "../../interface/cmd/builder.js";
|
41
41
|
import {
|
42
42
|
BSMapperSubscriptionNotExistError,
|
43
43
|
SubscriptionNotExistError
|
44
|
-
} from "../../infra/errors";
|
44
|
+
} from "../../infra/errors/index.js";
|
45
45
|
var unsubscribe_default = () => new CommandBuilder().setName("unsubscribe").addAlias("bbunsub").addAlias("/unsubbl", { options: { type: "beatleader" } }).addAlias("/unsubbs", { options: { type: "beatsaver" } }).addAlias("unsubbl", { options: { type: "beatleader" } }).addAlias("unsubbs", { options: { type: "beatsaver" } }).addOption("type", "type:string").setDescription("").setExecutor((c) => __async(null, null, function* () {
|
46
46
|
const { blSub, bsMapSub, bsAlertSub } = yield c.services.db.getSubscriptionsByGID(
|
47
47
|
c.session.g.id
|
@@ -19,7 +19,7 @@ var __spreadValues = (a, b) => {
|
|
19
19
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
20
20
|
import { jsx, jsxs } from "react/jsx-runtime";
|
21
21
|
import { BarChart } from "lucide-react";
|
22
|
-
import { diffConv } from "../../components/utils";
|
22
|
+
import { diffConv } from "../../components/utils/index.js";
|
23
23
|
function RankDifficulty({
|
24
24
|
difficulty,
|
25
25
|
star,
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
2
2
|
import dayjs from "dayjs";
|
3
|
-
import Flags, { EarchIcon } from "../../components/components/flag";
|
4
|
-
import { formatDate, numberWithCommas } from "../../components/utils";
|
3
|
+
import Flags, { EarchIcon } from "../../components/components/flag.js";
|
4
|
+
import { formatDate, numberWithCommas } from "../../components/utils/index.js";
|
5
5
|
function BlRankScoreItem(props) {
|
6
6
|
return /* @__PURE__ */ jsx(
|
7
7
|
"div",
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
2
2
|
import { BarChart, Key, Pin, Star, Wrench } from "lucide-react";
|
3
|
-
import { diffConv, formatRelativeTimeByDay } from "../utils";
|
3
|
+
import { diffConv, formatRelativeTimeByDay } from "../utils/index.js";
|
4
4
|
const getModifiers = (modifiers) => {
|
5
5
|
return modifiers ? modifiers.split(",") : [];
|
6
6
|
};
|
@@ -12,7 +12,7 @@ function BeatLeaderItem({
|
|
12
12
|
/* @__PURE__ */ jsxs(
|
13
13
|
"div",
|
14
14
|
{
|
15
|
-
className: "rounded-lg flex bg-black/[.4] space-x-2 backdrop-blur-
|
15
|
+
className: "rounded-lg flex bg-black/[.4] space-x-2 backdrop-blur-none",
|
16
16
|
children: [
|
17
17
|
/* @__PURE__ */ jsx(
|
18
18
|
"img",
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/components/bl-score-item.tsx"],"sourcesContent":["import { BarChart, Key, Pin, Star, Wrench } from 'lucide-react'\nimport { diffConv, formatRelativeTimeByDay } from '../utils'\nimport {Score} from \"@/service/api/interfaces/beatleader\";\n\nconst getModifiers = (modifiers: string) => {\n return modifiers ? modifiers.split(',') : []\n}\n\nexport default function BeatLeaderItem({\n item,\n}: {\n item: Score & {\n pinned?: boolean\n }\n}) {\n return (\n <div className=\"relative overflow-hidden\">\n <div\n className={'rounded-lg flex bg-black/[.4] space-x-2 backdrop-blur-
|
1
|
+
{"version":3,"sources":["../../../../src/components/components/bl-score-item.tsx"],"sourcesContent":["import { BarChart, Key, Pin, Star, Wrench } from 'lucide-react'\nimport { diffConv, formatRelativeTimeByDay } from '../utils'\nimport {Score} from \"@/service/api/interfaces/beatleader\";\n\nconst getModifiers = (modifiers: string) => {\n return modifiers ? modifiers.split(',') : []\n}\n\nexport default function BeatLeaderItem({\n item,\n}: {\n item: Score & {\n pinned?: boolean\n }\n}) {\n return (\n <div className=\"relative overflow-hidden\">\n <div\n className={'rounded-lg flex bg-black/[.4] space-x-2 backdrop-blur-none'}\n >\n <img\n loading={'eager'}\n src={item.leaderboard.song.coverImage}\n className={'rounded-md h-20 w-20'}\n alt={'score item cover'}\n />\n <div className={'flex flex-col space-y-1 py-0.5'}>\n <div\n className={\n 'font-semibold text-xs text-ellipsis overflow-hidden line-clamp-1 break-all'\n }\n >\n {item.leaderboard.song.name}\n </div>\n <div\n className={\n 'text-xs flex items-center space-x-2 *:flex *:items-center *:space-x-1 '\n }\n >\n <div>\n <span>\n <BarChart className={'w-3 h-3'} />\n </span>\n <span>\n {diffConv(item.leaderboard.difficulty.difficultyName)}\n </span>\n </div>\n <div>\n <span>\n <Star className={'w-3 h-3'} />\n </span>\n <span>\n {item.leaderboard.difficulty.stars?.toFixed(2) ?? 'none'}{' '}\n </span>\n </div>\n <div>\n <span>\n <Key className={'w-3 h-3'} />\n </span>\n <span>\n {item.leaderboard.song.id.toLowerCase().replaceAll('x', '')}\n </span>\n </div>\n </div>\n <div className={'flex space-x-2 text-xs items-center'}>\n <span>\n {(\n (item.baseScore / item.leaderboard.difficulty.maxScore) *\n 100\n ).toFixed(2)}\n %\n </span>\n <span className={'text-orange-200'}>{item.pp.toFixed(2)}PP</span>\n <span className={'text-xs opacity-70'}>\n {formatRelativeTimeByDay(item.timepost * 1000)}\n </span>\n </div>\n <div className={'flex items-center space-x-2'}>\n {getModifiers(item.modifiers).length > 0 && (\n <div className=\"text-xs flex flex-wrap space-x-2 items-center\">\n <Wrench className=\"h-3 w-3\" />\n {getModifiers(item.modifiers).map((modifier) => (\n <span key={modifier}>{modifier}</span>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n\n <div className=\"absolute right-1 bottom-1 text-white flex text-xs space-x-1 items-center\">\n {item.fullCombo && (\n <span className=\"from-blue-300 to-red-300 bg-gradient-to-r bg-clip-text text-transparent\">\n FC\n </span>\n )}\n {item.pinned && <Pin className=\"rotate-45 h-3 w-3 my-auto\" />}\n </div>\n </div>\n )\n}\n"],"mappings":"AAoBQ,cAmBI,YAnBJ;AApBR,SAAS,UAAU,KAAK,KAAK,MAAM,cAAc;AACjD,SAAS,UAAU,+BAA+B;AAGlD,MAAM,eAAe,CAAC,cAAsB;AAC1C,SAAO,YAAY,UAAU,MAAM,GAAG,IAAI,CAAC;AAC7C;AAEe,SAAR,eAAgC;AAAA,EACrC;AACF,GAIG;AAdH;AAeE,SACE,qBAAC,SAAI,WAAU,6BACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,QAEX;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS;AAAA,cACT,KAAK,KAAK,YAAY,KAAK;AAAA,cAC3B,WAAW;AAAA,cACX,KAAK;AAAA;AAAA,UACP;AAAA,UACA,qBAAC,SAAI,WAAW,kCACd;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WACE;AAAA,gBAGD,eAAK,YAAY,KAAK;AAAA;AAAA,YACzB;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,WACE;AAAA,gBAGF;AAAA,uCAAC,SACC;AAAA,wCAAC,UACC,8BAAC,YAAS,WAAW,WAAW,GAClC;AAAA,oBACA,oBAAC,UACE,mBAAS,KAAK,YAAY,WAAW,cAAc,GACtD;AAAA,qBACF;AAAA,kBACA,qBAAC,SACC;AAAA,wCAAC,UACC,8BAAC,QAAK,WAAW,WAAW,GAC9B;AAAA,oBACA,qBAAC,UACE;AAAA,uCAAK,YAAY,WAAW,UAA5B,mBAAmC,QAAQ,OAA3C,YAAiD;AAAA,sBAAQ;AAAA,uBAC5D;AAAA,qBACF;AAAA,kBACA,qBAAC,SACC;AAAA,wCAAC,UACC,8BAAC,OAAI,WAAW,WAAW,GAC7B;AAAA,oBACA,oBAAC,UACE,eAAK,YAAY,KAAK,GAAG,YAAY,EAAE,WAAW,KAAK,EAAE,GAC5D;AAAA,qBACF;AAAA;AAAA;AAAA,YACF;AAAA,YACA,qBAAC,SAAI,WAAW,uCACd;AAAA,mCAAC,UAEI;AAAA,sBAAK,YAAY,KAAK,YAAY,WAAW,WAC9C,KACA,QAAQ,CAAC;AAAA,gBAAE;AAAA,iBAEf;AAAA,cACA,qBAAC,UAAK,WAAW,mBAAoB;AAAA,qBAAK,GAAG,QAAQ,CAAC;AAAA,gBAAE;AAAA,iBAAE;AAAA,cAC1D,oBAAC,UAAK,WAAW,sBACd,kCAAwB,KAAK,WAAW,GAAI,GAC/C;AAAA,eACF;AAAA,YACA,oBAAC,SAAI,WAAW,+BACb,uBAAa,KAAK,SAAS,EAAE,SAAS,KACrC,qBAAC,SAAI,WAAU,iDACb;AAAA,kCAAC,UAAO,WAAU,WAAU;AAAA,cAC3B,aAAa,KAAK,SAAS,EAAE,IAAI,CAAC,aACjC,oBAAC,UAAqB,sBAAX,QAAoB,CAChC;AAAA,eACH,GAEJ;AAAA,aACF;AAAA;AAAA;AAAA,IACF;AAAA,IAEA,qBAAC,SAAI,WAAU,4EACZ;AAAA,WAAK,aACJ,oBAAC,UAAK,WAAU,2EAA0E,gBAE1F;AAAA,MAED,KAAK,UAAU,oBAAC,OAAI,WAAU,6BAA4B;AAAA,OAC7D;AAAA,KACF;AAEJ;","names":[]}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
2
|
-
import BeatLeaderIcon from "./BeatLeader";
|
3
|
-
import ScoreSaberIcon from "./ScoreSaberIcon";
|
2
|
+
import BeatLeaderIcon from "./BeatLeader.js";
|
3
|
+
import ScoreSaberIcon from "./ScoreSaberIcon.js";
|
4
4
|
function RankIcon({
|
5
5
|
blrank,
|
6
6
|
ssrank
|
@@ -23,7 +23,7 @@ function ScoreItem({
|
|
23
23
|
/* @__PURE__ */ jsxs(
|
24
24
|
"div",
|
25
25
|
{
|
26
|
-
className: "rounded-lg flex bg-black/[.4] space-x-2 backdrop-blur-
|
26
|
+
className: "rounded-lg flex bg-black/[.4] space-x-2 backdrop-blur-none overflow-hidden",
|
27
27
|
children: [
|
28
28
|
/* @__PURE__ */ jsx(
|
29
29
|
"img",
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/components/scoreItem.tsx"],"sourcesContent":["/** @jsxImportSource react */\nimport { BarChart, Key, Star, Wrench } from 'lucide-react'\nimport { ScoreSaberItem } from '@/service/api/interfaces/scoresaber'\n\nconst diffConv = (diff: string) => {\n if (diff.includes('ExpertPlus')) {\n return 'E+'\n } else if (diff.includes('Expert')) {\n return 'EX'\n } else if (diff.includes('Hard')) {\n return 'H'\n } else if (diff.includes('Normal')) {\n return 'N'\n }\n return 'E'\n}\nconst getModifiers = (modifiers: string) => {\n return modifiers ? modifiers.split(',') : []\n}\nexport default function ScoreItem({\n scoreItem,\n}: {\n scoreItem: ScoreSaberItem\n}) {\n return (\n <div className={'relative'}>\n <div\n className={\n 'rounded-lg flex bg-black/[.4] space-x-2 backdrop-blur-
|
1
|
+
{"version":3,"sources":["../../../../src/components/components/scoreItem.tsx"],"sourcesContent":["/** @jsxImportSource react */\nimport { BarChart, Key, Star, Wrench } from 'lucide-react'\nimport { ScoreSaberItem } from '@/service/api/interfaces/scoresaber'\n\nconst diffConv = (diff: string) => {\n if (diff.includes('ExpertPlus')) {\n return 'E+'\n } else if (diff.includes('Expert')) {\n return 'EX'\n } else if (diff.includes('Hard')) {\n return 'H'\n } else if (diff.includes('Normal')) {\n return 'N'\n }\n return 'E'\n}\nconst getModifiers = (modifiers: string) => {\n return modifiers ? modifiers.split(',') : []\n}\nexport default function ScoreItem({\n scoreItem,\n}: {\n scoreItem: ScoreSaberItem\n}) {\n return (\n <div className={'relative'}>\n <div\n className={\n 'rounded-lg flex bg-black/[.4] space-x-2 backdrop-blur-none overflow-hidden'\n }\n >\n <img\n loading={'eager'}\n src={scoreItem.leaderboard.coverImage}\n className={'rounded-md h-20 w-20'}\n />\n <div className={'flex flex-col space-y-1 py-0.5'}>\n <div\n className={\n 'font-semibold text-xs text-ellipsis overflow-hidden line-clamp-1 break-all'\n }\n >\n {scoreItem.leaderboard.songName}\n </div>\n <div\n className={\n 'text-xs flex items-center space-x-2 *:flex *:items-center *:space-x-1 '\n }\n >\n <div>\n <span>\n <BarChart className={'w-3 h-3'} />\n </span>\n <span>\n {diffConv(scoreItem.leaderboard.difficulty.difficultyRaw)}\n </span>\n </div>\n <div>\n <span>\n <Star className={'w-3 h-3'} />\n </span>\n <span>{scoreItem.leaderboard.stars} </span>\n </div>\n <div>\n <span>\n <Key className={'w-3 h-3'} />\n </span>\n <span>{scoreItem.mapId ?? 'unknown'}</span>\n </div>\n </div>\n <div className={'flex space-x-2 text-xs'}>\n <span>\n {(\n (scoreItem.score.baseScore / scoreItem.leaderboard.maxScore) *\n 100\n ).toFixed(2)}\n %\n </span>\n <span className={'text-orange-200'}>\n {scoreItem.score.pp.toFixed(1)}\n PP\n </span>\n </div>\n {getModifiers(scoreItem.score.modifiers).length > 0 && (\n <div className=\"text-xs flex flex-wrap space-x-2 items-center\">\n <Wrench className=\"h-3 w-3\" />\n {getModifiers(scoreItem.score.modifiers).map((modifier) => (\n <span key={modifier}>{modifier}</span>\n ))}\n </div>\n )}\n </div>\n </div>\n <div className=\"absolute right-1 bottom-1 text-white flex text-xs space-x-1 items-center\">\n {scoreItem.score.fullCombo && (\n <span className=\"from-blue-300 to-red-300 bg-gradient-to-r bg-clip-text text-transparent\">\n FC\n </span>\n )}\n </div>\n </div>\n )\n}\n"],"mappings":"AA+BQ,cAkBI,YAlBJ;AA9BR,SAAS,UAAU,KAAK,MAAM,cAAc;AAG5C,MAAM,WAAW,CAAC,SAAiB;AACjC,MAAI,KAAK,SAAS,YAAY,GAAG;AAC/B,WAAO;AAAA,EACT,WAAW,KAAK,SAAS,QAAQ,GAAG;AAClC,WAAO;AAAA,EACT,WAAW,KAAK,SAAS,MAAM,GAAG;AAChC,WAAO;AAAA,EACT,WAAW,KAAK,SAAS,QAAQ,GAAG;AAClC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AACA,MAAM,eAAe,CAAC,cAAsB;AAC1C,SAAO,YAAY,UAAU,MAAM,GAAG,IAAI,CAAC;AAC7C;AACe,SAAR,UAA2B;AAAA,EAChC;AACF,GAEG;AAvBH;AAwBE,SACE,qBAAC,SAAI,WAAW,YACd;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WACE;AAAA,QAGF;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS;AAAA,cACT,KAAK,UAAU,YAAY;AAAA,cAC3B,WAAW;AAAA;AAAA,UACb;AAAA,UACA,qBAAC,SAAI,WAAW,kCACd;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WACE;AAAA,gBAGD,oBAAU,YAAY;AAAA;AAAA,YACzB;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,WACE;AAAA,gBAGF;AAAA,uCAAC,SACC;AAAA,wCAAC,UACC,8BAAC,YAAS,WAAW,WAAW,GAClC;AAAA,oBACA,oBAAC,UACE,mBAAS,UAAU,YAAY,WAAW,aAAa,GAC1D;AAAA,qBACF;AAAA,kBACA,qBAAC,SACC;AAAA,wCAAC,UACC,8BAAC,QAAK,WAAW,WAAW,GAC9B;AAAA,oBACA,qBAAC,UAAM;AAAA,gCAAU,YAAY;AAAA,sBAAM;AAAA,uBAAC;AAAA,qBACtC;AAAA,kBACA,qBAAC,SACC;AAAA,wCAAC,UACC,8BAAC,OAAI,WAAW,WAAW,GAC7B;AAAA,oBACA,oBAAC,UAAM,0BAAU,UAAV,YAAmB,WAAU;AAAA,qBACtC;AAAA;AAAA;AAAA,YACF;AAAA,YACA,qBAAC,SAAI,WAAW,0BACd;AAAA,mCAAC,UAEI;AAAA,2BAAU,MAAM,YAAY,UAAU,YAAY,WACnD,KACA,QAAQ,CAAC;AAAA,gBAAE;AAAA,iBAEf;AAAA,cACA,qBAAC,UAAK,WAAW,mBACd;AAAA,0BAAU,MAAM,GAAG,QAAQ,CAAC;AAAA,gBAAE;AAAA,iBAEjC;AAAA,eACF;AAAA,YACC,aAAa,UAAU,MAAM,SAAS,EAAE,SAAS,KAChD,qBAAC,SAAI,WAAU,iDACb;AAAA,kCAAC,UAAO,WAAU,WAAU;AAAA,cAC3B,aAAa,UAAU,MAAM,SAAS,EAAE,IAAI,CAAC,aAC5C,oBAAC,UAAqB,sBAAX,QAAoB,CAChC;AAAA,eACH;AAAA,aAEJ;AAAA;AAAA;AAAA,IACF;AAAA,IACA,oBAAC,SAAI,WAAU,4EACZ,oBAAU,MAAM,aACf,oBAAC,UAAK,WAAU,2EAA0E,gBAE1F,GAEJ;AAAA,KACF;AAEJ;","names":[]}
|
@@ -1,10 +1,10 @@
|
|
1
1
|
import { Fragment, jsx } from "react/jsx-runtime";
|
2
|
-
import { processAccGraphs, processUnderswings } from "../utils/bl/bsorReplayAcc";
|
2
|
+
import { processAccGraphs, processUnderswings } from "../utils/bl/bsorReplayAcc.js";
|
3
3
|
import {
|
4
4
|
createDistanceWeightFunction,
|
5
5
|
createMinMaxCounter
|
6
|
-
} from "../utils/bl/beatleader";
|
7
|
-
import getStatistic from "../utils/bl/stastic";
|
6
|
+
} from "../utils/bl/beatleader.js";
|
7
|
+
import getStatistic from "../utils/bl/stastic.js";
|
8
8
|
import Chart from "chart.js/auto";
|
9
9
|
import { createCanvas } from "@napi-rs/canvas";
|
10
10
|
function formatNumber(num, digits = 2, addSign = false, notANumber = null) {
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
2
2
|
import dayjs from "dayjs";
|
3
|
-
import Flags, { EarchIcon } from "../../components/components/flag";
|
4
|
-
import { formatDate, numberWithCommas } from "../../components/utils";
|
3
|
+
import Flags, { EarchIcon } from "../../components/components/flag.js";
|
4
|
+
import { formatDate, numberWithCommas } from "../../components/utils/index.js";
|
5
5
|
function SSRankScoreItem(props) {
|
6
6
|
return /* @__PURE__ */ jsx(
|
7
7
|
"div",
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
2
2
|
import { BarChart, Key, Star, Wrench } from "lucide-react";
|
3
|
-
import { diffConv, formatRelativeTimeByDay } from "../utils";
|
3
|
+
import { diffConv, formatRelativeTimeByDay } from "../utils/index.js";
|
4
4
|
const getModifiers = (modifiers) => {
|
5
5
|
return modifiers ? modifiers.split(",") : [];
|
6
6
|
};
|
@@ -12,7 +12,7 @@ function SsScoreItem({
|
|
12
12
|
/* @__PURE__ */ jsxs(
|
13
13
|
"div",
|
14
14
|
{
|
15
|
-
className: "rounded-lg flex bg-black/[.4] space-x-2 backdrop-blur-
|
15
|
+
className: "rounded-lg flex bg-black/[.4] space-x-2 backdrop-blur-none overflow-hidden",
|
16
16
|
children: [
|
17
17
|
/* @__PURE__ */ jsx(
|
18
18
|
"img",
|