UNPKG

leaguejs

Version:

Wrapper for the League of Legends API

138 lines (121 loc) 4.56 kB
const ErrorUtil = require('./ErrorUtil'); class MatchUtil { /** * * @param {string} gameVersion Versioning string from MatchDto.gameVersion * @param {string[]} versions Array with valid ddragon version {@link StaticDataEndpoint.gettingVersions} * @return {string} The data dragon version correlating to the gameVersion */ static getVersionForGameVersion(gameVersion, versions) { let gameVersionMajorMinor = MatchUtil.getPatchFromGameVersion(gameVersion); let ddVersion = versions.find(version => { return version.indexOf(gameVersionMajorMinor + '.') === 0; }); if (!ddVersion) { const sortedVersions = versions.slice().sort(MatchUtil.sortVersionsDescending); ddVersion = sortedVersions[0]; // TODO: add global debug mode // console.log('MatchUtil#getVersionForGameVersion: Version could not be matched, using latest version ' + ddVersion); } // TODO: add global debug mode // console.log(`MatchUtil#getVersionForGameVersion: version is resolved: ${ddVersion} gameVersion: ${gameVersion} majorMinor: ${gameVersionMajorMinor}`); return ddVersion; } /** * * @param {string} gameVersion Versioning string from MatchDto.gameVersion * @return {string} The major.minor versioning string */ static getPatchFromGameVersion(gameVersion) { const numbers = gameVersion.match(/\d+/g).map(s => parseInt(s)); return `${numbers[0]}.${numbers[1]}`; } /** * @param {Object} param * @param {InfoDTO} param.matchInfoDto * @param {number} param.puuid * @return {undefined} undefined because v5 removed accountId * * @deprecated use getParticipantByPuuid */ static getParticipantByPuuid({matchInfoDto, puuid}) { ErrorUtil.throwIfNotObject(matchInfoDto, 'matchInfoDto'); ErrorUtil.checkPuuid(puuid); let participants = matchInfoDto.participants; return participants.find((player) => { return player.puuid === puuid; }); } /** * @param {MatchDto} matchDto * @param {number} championId * @returns {ParticipantDto[] || CurrentGameParticipant[] } * Array with ParticipantDto if the given match is from match endpoint, * CurrentGameParticipant if it's from spectator endpoint. * For ranked matches the array will contain only a single element, * for non-ranked matches there can be more then one Players with the given champion. */ static getParticipantsByChampion(matchDto, championId) { const participants = matchDto.participants; return participants.filter(participant => { return participant.championId === championId; }); } /** * Sorting function to sort version strings by using major.minor.patch. * Version numbers with more divisions can be passed, but only the first three will be used. * * Only versioning up to patch level is accounted for, all remaining versioning * divisions are ignored for the comparisson * * @param a string in format [major].[minor].[patch][....] * @param b string in format [major].[minor].[patch][....] * @return {number} * result is < 0 if the first given version is BIGGER, * > 0 if first version is LOWER, * 0 if they are equal (up to patch level) */ static sortVersionsDescending(a, b) { let [major1, minor1, patch1] = a.match(/\d+/g).map(s => parseInt(s)); let [major2, minor2, patch2] = b.match(/\d+/g).map(s => parseInt(s)); patch1 = patch1 || 0; patch2 = patch2 || 0; minor1 = minor1 || 0; minor2 = minor2 || 0; major1 = major1 || 0; major2 = major2 || 0; // sorting by version number if (major1 !== major2) { return major2 - major1; } else if (minor1 !== minor2) { return minor2 - minor1; } else { return patch2 - patch1; } } /** * @param {Object} param * @param {InfoDTO} param.matchInfoDto * @param {number} param.accountId * @return {undefined} undefined because v5 removed accountId * * @deprecated use getParticipantByPuuid */ static getParticipantIdentityByAccountId({matchInfoDto, accountId}) { ErrorUtil.throwIfNotObject(matchInfoDto, 'matchInfoDto'); ErrorUtil.checkAccountId(accountId); let participants = matchDto.info.participants; return participants.find((player) => { return player.accountId === accountId; }); } /** * @param {Object} param * @param param.accountId * @param param.matchInfoDto * @return {undefined} undefined because v5 removed accountId * @deprecated use getParticipantByPuuid */ static getParticipantIdentityByAccountAndPlatformId({matchInfoDto, accountId}) { return this.getParticipantIdentityByAccountId({matchInfoDto, accountId}) } } module.exports = MatchUtil;