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 🙏

© 2026 – Pkg Stats / Ryan Hefner

uesp-eso-build-wrapper

v0.7.0

Published

Node.js wrapper around the UESP ESO Build Editor math engine. Calculate Elder Scrolls Online character stats (Health, Magicka, Stamina, mitigation, crit, etc.) without rewriting any game formulas.

Readme

uesp-eso-build-wrapper

CI codecov npm Docs License: MIT Node >=24

Read in English.

Um wrapper Node.js/TypeScript em torno do motor de cálculo do UESP ESO Build Editor.

Calcule as Computed Character Statistics de Elder Scrolls Online — Health, Magicka, Stamina, mitigação, chance de crítico, regeneração e mais de 200 — usando as fórmulas da própria UESP. Sem reimplementar nenhuma fórmula.

O que é?

Isto não é um cliente HTTP da UESP. A biblioteca executa o motor de cálculo da UESP localmente, dentro do seu processo Node.js, e expõe os resultados numa API tipada:

Aplicação
    ↓
uesp-eso-build-wrapper (API TypeScript)
    ↓
Camada de compatibilidade Node.js (globals de browser + DOM mínimo)
    ↓
UESP esoEditBuild.js (executado in-process via vm.runInThisContext)
    ↓
Funções de cálculo UESP → ComputedStats

Você injeta os inputs, o próprio código da UESP calcula cada stat, você lê de volta um objeto tipado.

Por que esta biblioteca?

  • Precisão de referência — o mesmo motor esoEditBuild.js do esobuilds.uesp.net, mantido pela UESP e atualizado a cada patch.
  • Sem reimplementar fórmulas — o wrapper contém zero matemática de ESO. Quando um stat parece errado depois de um patch, a correção está sempre nos dados do jogo alimentados ao motor, nunca no código do wrapper. É isso que mantém a precisão entre patches.
  • Local e síncrono — calculateBuild() não faz nenhuma requisição de rede. O motor roda in-process; os dados do jogo e os itens são fornecidos pela sua aplicação (arquivo, banco de dados, dados gerados).
  • Aceita item data da UESP diretamente — equipamentos no formato exportJson.php?table=minedItem plugam direto em BuildInput.items.
  • Nativo TypeScript — inputs/outputs tipados, API Reference documentada com TSDoc, além de funções de catálogo em runtime (listAvailableBuffs, listRacialPassives, …) para descobrir nomes válidos.

Propriedades principais

  • Executa o motor de cálculo UESP vendored localmente (vendor/uesp-esochardata)
  • Sem rede para calcular builds — ver Precisa de internet?
  • Não reimplementa as fórmulas de stats do ESO
  • API síncrona; o motor inicializa uma vez por processo (singleton, chamadas seguintes são no-op)
  • Zero dependências de runtime — Node.js puro
  • 204 computed stats por build

Instalação

npm install uesp-eso-build-wrapper

Quick Start

Os game data não vêm no pacote npm — você os fornece via initEsoEngineFromData (ver Primeiros Passos).

import fs from 'fs';
import { initEsoEngineFromData, calculateBuild } from 'uesp-eso-build-wrapper';
import type { UespInitData } from 'uesp-eso-build-wrapper';

const initData = JSON.parse(
  fs.readFileSync('uesp-game-data.json', 'utf-8'),
) as UespInitData;

initEsoEngineFromData({ initData }); // uma vez por processo

const stats = calculateBuild({
  character: {
    race: 'High Elf',
    class: 'Sorcerer',
    level: 50,
    attributes: { health: 0, magicka: 64, stamina: 0 },
  },
});

console.log(stats.Health);       // 16000
console.log(stats.Magicka);      // 19104
console.log(stats.SpellDamage);  // 1000

Como funciona

  1. initEsoEngineFromData({ initData }) prepara globals de browser, semeia o motor com seus game data e executa os scripts vendored da UESP via vm.runInThisContext — uma vez por processo.
  2. calculateBuild(input) escreve sua build no estado do motor, roda o próprio UpdateEsoComputedStatsList_Real() do motor e lê os resultados de g_EsoComputedStats num objeto tipado ComputedStats.

Detalhes: Arquitetura · Primeiros Passos · Lendo o Resultado.

Documentação

Documentação completa em Português (BR) e English em srtomy.github.io/uesp-eso-build-wrapper:

| Seção | Descrição | | --- | --- | | Introdução | O que é, por que existe, propriedades principais | | Arquitetura | Motor local, política de rede, fluxo de dados | | Primeiros Passos | Instalação, game data, primeiro cálculo | | Guias | Personagem, itens, Champion Points, buffs, skills | | Lendo o Resultado | Os 204 computed stats, debugBuild() | | API Reference | Gerada a partir do TSDoc (em inglês) | | Solução de Problemas | Problemas comuns (Next.js/serverless, stats errados...) | | Contribuindo | Setup dev, testes, atualização após patch do ESO |

Limitações

  • O comportamento segue a versão vendored do motor UESP — suportar um patch novo do ESO significa atualizar os scripts vendored + game data e rodar os testes.
  • O motor foi escrito para browsers em torno de estado global; o wrapper adapta isso para Node.js (init singleton, chamadas síncronas). Sem garantias de concorrência além das que o próprio motor oferece — ver Solução de Problemas.
  • Requer Node.js >= 24. Bundlers/serverless precisam incluir vendor/** explicitamente (documentado em Solução de Problemas).

Licença

MIT © srtomy

Este pacote inclui arquivos de uesp/uesp-esochardata (MIT).
Ver THIRD_PARTY_NOTICES para detalhes.

Elder Scrolls Online é marca registrada de ZeniMax Media Inc. Este projeto não é afiliado nem endossado pela ZeniMax Media Inc.