0.1.6 • Published 10 months ago

@blakearoberts/ldragon v0.1.6

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

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.

0.1.6

10 months ago

0.1.5

10 months ago

0.1.4

10 months ago

0.1.3

10 months ago

0.1.2

10 months ago

0.1.1

10 months ago

0.1.0

10 months ago

0.0.2

10 months ago

0.0.1

10 months ago

0.1.9

10 months ago

0.1.7

10 months ago