npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

lol-constants

v3.0.5

Published

League of Legends constants, functions, and types. Provides a plathera of functions to easily convert between ID, Name, and Key for champions, items, summoner spells, and runes.

Downloads

353

Readme

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 tscompiled).

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