@blakearoberts/ldragon
TypeScript icon, indicating that this package has built-in type declarations

0.1.6 • Public • Published

LDragon

LDragon uses Chevrotain to define a lexer/parser capable of compiling a League of Legends champion spell description template into an abstract syntax tree (AST).

LDragon can run in the browser, checkout the live demo!

Installation

npm

npm install @blakearoberts/ldragon --save

Getting Started

import { ChampionBin, FontConfig, visit } from '@blakearoberts/ldragon';

const f = async <T,>(url: string) => {
  const response = await fetch(url, options)
  if (!response.ok) {
    throw new Error(response.statusText);
  }
  return (await response.json()) as T;
}

const bin = await f<ChampionBin>(
  'https://raw.communitydragon.org/latest/game/data/characters/aatrox/aatrox.bin.json');

const fontConfig = await f<FontConfig>(
  'https://raw.communitydragon.org/latest/game/data/menu/main_en_us.stringtable.json');

const championId = 'Aatrox',
  spellKey = 'Characters/Aatrox/Spells/AatroxPassiveAbility/AatroxPassive',
  tooltip = fontConfig.entries['passive_aatroxpassive_tooltip'];

const ast = visit(championId, spellKey, bin, fontConfig, tooltip);

console.log(ast);

React Example

Checkout the example React app for a simple way to render an LDragon AST to the DOM. This example is built into a static site and hosted via this project's GitHub Pages.

AST Nodes

The AST returned from parsing a spell is comprised of nodes with relationships demonstrated by the following directed acyclic graph:

graph LR;
  D[DescriptionNode]
  TX[TextNode]
  B[BreakNode]
  EL[ElementNode]
  EX[ExpressionNode]
  TP[TemplateNode]

  DV[DataValueIdentifier]
  GC[GameCalculationIdentifier]
  GM[GameCalculationModifiedIdentifier]
  EF[EffectIdentifier]

  C[ConstantValue]
  A[AbilityLevelValue]
  CL[CharLevelValue]
  CB[CharLevelBreakpointsValue]

  subgraph Nodes
  D  --> TX & B & EL & EX & TP
  EL --> TX & EX & TP
  end

  subgraph Identifiers
  EX --> DV & GC & GM & EF
  GC --> DV & EF
  GM --> GC
  end

  subgraph Values
  DV --> C & A
  EF --> C & A
  GC -- part --> C & A & CL & CB
  GM -- multiplier --> C
  end

Contributing

Contributions are welcome! There are plenty of edge cases this library fails to parse. Issues and pull requests would be greatly appreciated!

To build and compile the TypeScript sources to JavaScript use:

npm run build

To run the unit tests use:

npm test

License

This project is licensed under the terms of the MIT license.

Package Sidebar

Install

npm i @blakearoberts/ldragon

Weekly Downloads

1

Version

0.1.6

License

MIT

Unpacked Size

131 kB

Total Files

35

Last publish

Collaborators

  • blakearoberts