Skip to content

3.0.0 (28 Sep 2024)

Latest
Compare
Choose a tag to compare
@kd0010 kd0010 released this 28 Sep 13:31
· 6 commits to main since this release

lol-constants

Provides constants, helper functions, types (and type validator functions) for League of Legends game data, primarily in the context of Riot API.

In this library, you will find the main advantage to be: the ability to ‘convert’ between Keys, IDs, and Names of various game objects, namely champions, items, runes, and spells. Here's an example:

import {lol, ChampionName} from 'lol-constants'

let championName: ChampionName = 'Wukong'

lol.champion.get(championName).id   // 62
lol.champion.get(championName).key  // 'MonkeyKing'
lol.champion.get(championName).name // 'Wukong'

/* Alternatively... */

import {getChampion} from 'lol-constants'

getChampion(championName).id   // 62
getChampion(championName).key  // 'MonkeyKing'
getChampion(championName).name // 'Wukong'

That's not all. Such a getter function is also designed to be able to accept not only names, but also keys and ids. Here's how:

import {getRune, RuneName, RuneKey, RuneId} from 'lol-constants'

let runeName: RuneName = 'Cosmic Insight'
let runeKey: RuneKey = 'CosmicInsight'
let runeId: RuneId = 8347

getRune(runeName) // ..
getRune(runeKey) // ..
getRune(runeId) // ..
// All return the same rune object: {id: 8347, key: 'CosmicInsight', name: 'Cosmic Insight', ...}

This paradigm applies to 4 game areas: champions, items, runes (including stat runes and rune trees), and spells. Functions: getChampion, getItem, getRune (plus getStatRune and getRuneTree), and getSpell. Plus a few other areas.

Constants

Whilst working with the Riot API, you will encounter many fields which have an exact type of value. As the library name suggests, these constants are a core part of it. So are their types and type validation functions which arise from each constant, like so:

const DragonTypes = {...}
type DragonType // "EARTH_DRAGON" | "CHEMTECH_DRAGON" | "AIR_DRAGON" | "HEXTECH_DRAGON" | "WATER_DRAGON" | "FIRE_DRAGON" | "ELDER_DRAGON"
function isDragonType(type: string): type is DragonType {...}

See actual code behind this constant
See type validator usage example

Armed with these tools, you may effectively and fearlessly use types in your interfaces or elsewhere.

Why the lol object?

In part, it is meant to be an introductory entry point object for the library. You can explore all the different amenities this library provides without a hassle of looking for them outside of your code editor. When you have discovered a certain method, such as lol.region.get, you may start using its shorthand function, in this case getRegion. Additionally, you may look into the examples file for all equivalents laid out.

Anything that you may find in the lol object can also be imported as a standalone constant, enum, or function.

Key, ID, Name

While the various JSONs provided by DataDragon, such as champion.json or runesReforged.json and so on, organize keys, ids, and names haphazardly, lol-constants offers a simpler approach that relies on the following principles:

ID Numerical identifier (primary entry point)
Key Alias or reference (secondary entry point)
Name Display name of artifact (user-friendly)

Examples

Category ID Key Name lol getter standalone
Champion 62 'MonkeyKing' 'Wukong' lol.champion.get getChampion
Item 1038 n/a 'B. F. Sword' lol.item.get getItem
Rune 8347 'CosmicInsight' 'Cosmic Insight' lol.rune.get getRune
Spell 4 'SummonerFlash' 'Flash' lol.spell.get getSpell
————
Stat Rune 5008 n/a 'Adaptive Force' lol.rune.stat.get getStatRune
Rune Tree 8000 'Precision' 'Precision' lol.rune.tree.get getRuneTree

Types

If you're working with TypeScript, you're gonna want types. Here are some useful types that are exported from the library:

import {
  // ### Basic constants
  MonsterType,    // "HORDE" | "DRAGON" | "RIFTHERALD" | "BARON_NASHOR"
  DragonType,     // "EARTH_DRAGON" | "CHEMTECH_DRAGON" | "AIR_DRAGON" | ...
  KillType,       // "KILL_FIRST_BLOOD" | "KILL_MULTI" | "KILL_ACE"
  BuildingType,   // "TOWER_BUILDING" | "INHIBITOR_BUILDING"
  TowerType,      // "OUTER_TURRET" | "INNER_TURRET" | "BASE_TURRET" | "NEXUS_TURRET"
  RankedTier,     // "CHALLENGER" | "GRANDMASTER" | "MASTER" | "DIAMOND" | ...
  RankedRank,     // "I" | "II" | "III" | "IV"
  Locale,         // "cs_CZ" | "el_GR" | "pl_PL" | "ro_RO" | "en_GB" | ...
  Position,       // "TOP" | "JUNGLE" | "MIDDLE" | "BOTTOM" | "UTILITY"
  // etc.
  // ### Maps, Queues, Regions
  QueueId,        // 0 | 420 | 2010 | 2020 | 400 | 430 | 440 | 450 | 700 | ...
  Platform,       // "BR1" | "EUN1" | "EUW1" | "JP1" | "KR" | "LA1" | "LA2" | ...
  Region,         // "BR" | "EUNE" | "EUW" | "JP" | "KR" | "LAN" | "LAS" | ...
  // ### Champions, Items, Runes, Spells
  ChampionId,     // 1 | 2 | 3 | 11 | 12 | 13 | 4 | 5 | 6 | 7 | 8 | 9 | ...
  ChampionName,   // "Annie" | "Olaf" | "Galio" | "Twisted Fate" | "Xin Zhao" | ...
  ItemId,         // 1001 | 1004 | 1006 | 1011 | 1018 | 1026 | 1027 | 1028 | ...
  ItemName,       // "Boots" | "Faerie Charm" | "Rejuvenation Bead" | "Giant's Belt" | ...
  RuneId,         // 8005 | 8021 | 8010 | 8009 | 9101 | 9111 | 8014 | 8017 | ...
  RuneName,       // "Press the Attack" | "Presence of Mind" | "Conqueror" | ...
  SpellId,        // 1 | 3 | 11 | 12 | 13 | 4 | 6 | 7 | 14 | 21 | 30 | 31 | ...
  SpellName,      // "Cleanse" | "Exhaust" | "Flash" | "Ghost" | "Heal" | ...
} from 'lol-constants'

More types can be found here: examples/

Future plans

Besides being an easy-to-update library with each League patch and to stay updated whenever a new patch does come out, there are several areas of interest for this library moving forward:

  • Provide tools (functions and such) for front-end work: getting icons and such.
  • Enable total backwards compatibility with older patches (i.e. no missing items or something for last couple of patches, preferably two years, which is the limit set by Riot API)
  • Fulfill any missing types and constants within the context of Riot API. Perhaps provide interfaces for Riot API responses.
  • More detailed champions, items, runes, and spells information. Would require using an own database of those instead of relying on DataDragon.
  • Optimized library size/splitting (currently library should be around ~100KB).

So, why not give this library a star and see where it goes?