league-wrapper
Version:
REST API Wrapper for the League of Legends API
229 lines (201 loc) • 6.4 kB
JavaScript
'use strict';
const convert = require('./util/convert.js');
const ChampData = require('./constant/champ-data.js');
const GameMode = require('./constant/game-mode.js');
const GameType = require('./constant/game-type.js');
const ItemData = require('./constant/item-data.js');
const Lane = require('./constant/lane.js');
const LeagueTier = require('./constant/league-tier.js');
const Map = require('./constant/map.js');
const MasteryData = require('./constant/mastery-data.js');
const MasteryTree = require('./constant/mastery-tree.js');
const PlayerPosition = require('./constant/player-position.js');
const PlayerRole = require('./constant/player-role.js');
const PlayerStatSummaryType = require('./constant/player-stat-summary-type.js');
const Playstyle = require('./constant/playstyle.js');
const QueueType = require('./constant/queue-type.js');
const Region = require('./constant/region.js');
const Role = require('./constant/role.js');
const RuneData = require('./constant/rune-data.js');
const Season = require('./constant/season.js');
const ShardEnum = require('./constant/shard-enum.js');
const SpellData = require('./constant/spell-data.js');
const SubType = require('./constant/sub-type.js');
const Team = require('./constant/team.js');
const ChampionService = require('./service/champion.js');
const ChampionmasteryService = require('./service/championmastery.js');
const CurrentGameService = require('./service/current-game.js');
const FeaturedGamesService = require('./service/featured-games');
const GameService = require('./service/game.js');
const LeagueService = require('./service/league.js');
const LolStaticDataService = require('./service/lol-static-data.js');
const LolStatusService = require('./service/lol-status.js');
const MatchService = require('./service/match.js');
const MatchlistService = require('./service/matchlist.js');
const StatsService = require('./service/stats.js');
const SummonerService = require('./service/summoner.js');
const TeamService = require('./service/team.js');
const RateLimit = require('./rate-limit.js');
const LeagueWrapperOptions = require('./options/league-wrapper.js');
// @todo: Work on good cache implementation
// @todo: Validate Summoner Names
/**
* @class
* @alias module:LeagueWrapper~LeagueWrapper
*/
class LeagueWrapper {
/**
* @param {string} apiKey - API Key provided by RiotGames
* @param {module:LeagueWrapper/options~LeagueWrapperOptions} [options]
*/
constructor(apiKey, options) {
this.apiKey = apiKey;
this.options = convert(options, LeagueWrapperOptions);
this.rateLimits = {};
this.services = {};
}
/**
* @param {string} name
* @param {function} serviceClass
* @returns {*}
* @private
*/
_service(name, serviceClass) {
if (!this.services[name]) {
this.services[name] = new serviceClass(this);
}
return this.services[name];
}
/**
* @returns {ChampionService}
*/
get champion() {
return this._service('champion', ChampionService);
}
/**
* @returns {ChampionmasteryService}
*/
get championmastery() {
return this._service('championmastery', ChampionmasteryService);
}
/**
* @returns {CurrentGameService}
*/
get currentGame() {
return this._service('currentGame', CurrentGameService);
}
/**
* @returns {FeaturedGamesService}
*/
get featuredGames() {
return this._service('featuredGames', FeaturedGamesService);
}
/**
* @returns {GameService}
*/
get game() {
return this._service('game', GameService);
}
/**
* @returns {LeagueService}
*/
get league() {
return this._service('league', LeagueService);
}
/**
* @returns {LolStaticDataService}
*/
get lolStaticData() {
return this._service('lolStaticData', LolStaticDataService);
}
/**
* @returns {LolStatusService}
*/
get lolStatus() {
return this._service('lolStatus', LolStatusService);
}
/**
* @returns {MatchService}
*/
get match() {
return this._service('match', MatchService);
}
/**
* @returns {MatchlistService}
*/
get matchlist() {
return this._service('matchlist', MatchlistService);
}
/**
* @returns {StatsService}
*/
get stats() {
return this._service('stats', StatsService);
}
/**
* @returns {SummonerService}
*/
get summoner() {
return this._service('summoner', SummonerService);
}
/**
* @returns {TeamService}
*/
get team() {
return this._service('team', TeamService);
}
/**
* @param {Region} region - Set default region to fall back to if none provided
* @returns {LeagueWrapper}
*/
setRegion(region) {
this.options.region = region;
return this;
}
/**
* @returns {Region}
*/
getRegion() {
return this.options.region;
}
/**
* @param {module:LeagueWrapper/constant~Region} region
* @returns {Array.<RateLimit>}
*/
getRateLimits(region) {
region = convert(region, Region);
region = region.region;
if (!this.rateLimits[region]) {
let rateLimits = this.options.rateLimits;
if (!Array.isArray(rateLimits)) {
rateLimits = [rateLimits];
}
this.rateLimits[region.region] = rateLimits;
}
return this.rateLimits[region];
}
}
LeagueWrapper.ChampData = ChampData;
LeagueWrapper.GameMode = GameMode;
LeagueWrapper.GameType = GameType;
LeagueWrapper.ItemData = ItemData;
LeagueWrapper.Lane = Lane;
LeagueWrapper.LeagueTier = LeagueTier;
LeagueWrapper.Map = Map; // @todo: Check what to do with this
LeagueWrapper.MasteryTree = MasteryTree;
LeagueWrapper.MasteryData = MasteryData;
LeagueWrapper.PlayerPosition = PlayerPosition;
LeagueWrapper.PlayerRole = PlayerRole;
LeagueWrapper.PlayerStatSummaryType = PlayerStatSummaryType;
LeagueWrapper.Playstyle = Playstyle;
LeagueWrapper.QueueType = QueueType;
LeagueWrapper.Region = Region;
LeagueWrapper.Role = Role;
LeagueWrapper.RuneData = RuneData;
LeagueWrapper.Season = Season;
LeagueWrapper.ShardEnum = ShardEnum;
LeagueWrapper.SpellData = SpellData;
LeagueWrapper.SubType = SubType;
LeagueWrapper.Team = Team;
LeagueWrapper.RateLimit = RateLimit;
exports = module.exports = LeagueWrapper;