UNPKG

lol-js

Version:

Node.js bindings for the Riot API, with caching and rate limiting

173 lines (164 loc) 6.41 kB
// Generated by CoffeeScript 1.9.2 (function() { var api, assert, ld, lolStaticDataApi, pb, summonerApi; assert = require('assert'); ld = require('lodash'); pb = require('promise-breaker'); summonerApi = require('./summoner'); lolStaticDataApi = require('./lolStaticData'); api = exports.api = { fullname: "match-v2.2", name: "match", version: "v2.2" }; exports.methods = { getMatch: pb["break"](function(region, matchId, options) { var cacheParams, requestOptions, requestParams; if (options == null) { options = {}; } options = ld.defaults({}, options, { includeTimeline: false }); requestParams = { caller: "getMatch", region: region, url: (this._makeUrl(region, api)) + "/" + matchId, queryParams: { includeTimeline: options.includeTimeline } }; cacheParams = { key: api.fullname + "-match-" + region + "-" + matchId + "-" + options.includeTimeline, region: region, api: api, ttl: this.cacheTTL.long, objectType: 'match', params: { matchId: matchId, includeTimeline: options.includeTimeline } }; requestOptions = {}; if (options.players != null) { requestOptions.preCache = (function(_this) { return function(match) { if (match == null) { return match; } return _this.populateMatch(region, match, options.players, options).then(function() { return match; }); }; })(this); } return this._riotRequestWithCache(requestParams, cacheParams, requestOptions); }), populateMatch: pb["break"](function(region, match, players, options) { if (options == null) { options = {}; } assert(ld.isArray(players), "'players' must be an array!"); if (ld.every(match.participantIdentities, "player")) { return this.Promise.resolve(0); } return this._loadPlayers(region, players, options).then(function(playerData) { var i, len, participant, participantIdentitiesById, participantIdentity, player, populated, ref; populated = 0; participantIdentitiesById = ld.indexBy(match.participantIdentities, "participantId"); ref = match.participants; for (i = 0, len = ref.length; i < len; i++) { participant = ref[i]; participantIdentity = participantIdentitiesById[participant.participantId]; if (!participantIdentity.player) { player = ld.find(playerData, function(p) { return p.championId === participant.championId && p.teamId === participant.teamId; }); if (player != null) { populated++; participantIdentity.player = { profileIcon: player.summoner.profileIconId, matchHistoryUri: null, summonerName: player.summoner.name, summonerId: player.summoner.id }; } } } return populated; }); }), _loadPlayers: function(region, players, options) { var client; if (options == null) { options = {}; } client = this; return this.Promise.resolve().then((function(_this) { return function() { var summonerIds, summonerNames, summonersById, summonersByIdPromise, summonersByNamePromise; players.forEach(function(player) { if ((player.summonerId == null) && (player.summonerName == null)) { throw new Error("player record has no summonerId and no summonerName"); } }); assert.equal(summonerApi.api.version, "v1.4", "Can't load players - summoner API version has changed."); assert.equal(lolStaticDataApi.api.version, "v1.2", "Can't load players - lol-static-data API version has changed."); summonerIds = ld(players).filter('summonerId').map('summonerId').value(); summonersByIdPromise = summonerIds.length > 0 ? _this.getSummonersById(region, summonerIds) : _this.Promise.resolve({}); summonerNames = ld(players).reject('summonerId').map("summonerName").value(); summonersByNamePromise = summonerNames.length > 0 ? _this.getSummonersByName(region, summonerNames) : _this.Promise.resolve({}); summonersById = null; return summonersByIdPromise.then(function(result) { summonersById = result; return summonersByNamePromise; }).then(function(summonersByName) { return _this.Promise.all(players.map(function(player) { var summoner; summoner = null; return _this.Promise.resolve().then(function() { summoner = player.summonerId != null ? summonersById[player.summonerId] : summonersByName[player.summonerName]; return (player.championId != null ? { id: player.championId } : _this.getChampionByName(region, player.championKey, options)); }).then(function(champion) { var ref; if ((summoner != null) && (champion != null)) { return { summoner: summoner, championId: champion.id, teamId: (ref = player.teamId) != null ? ref : _this.teamNameToId(player.team) }; } else { return null; } }); })).then(function(answer) { return answer.filter(function(x) { return x !== null; }); }); }); }; })(this)); }, getTeamIdForSummonerId: function(match, summonerId) { var answer, participant, participantId, participantIdentity; participantIdentity = ld.find(match.participantIdentities, { player: { summonerId: summonerId } }); if (participantIdentity == null) { answer = null; } else { participantId = participantIdentity.participantId; participant = ld.find(match.participants, { participantId: participantId }); answer = participant.teamId; } return answer; } }; }).call(this);