mod-engine
Version:
A TypeScript library for typed attributes and modifiers with deterministic evaluation
104 lines (79 loc) • 3.7 kB
Markdown
<p align="center"><img src="https://storage.googleapis.com/public-irving/apps/mod-engine/_moddy_driving.png" width="60%" alt="Mod Engine logo" /></p>
<div align="center">
<h1>Mod Engine</h1>
</h1>
</div>
<p>A lightweight, type-safe TypeScript library for building item modification systems with deterministic evaluation.</p>
[](https://www.npmjs.com/package/mod-engine)
[](https://www.typescriptlang.org/)
[](https://opensource.org/licenses/MIT)
[](https://brandon-irving.github.io/mod-engine/)
## ✨ Why Mod-Engine?
**🔒 Type-Safe** - Complete compile-time validation with TypeScript inference
**⚡ Performant** - Zero runtime dependencies, efficient evaluation algorithms
**🎯 Deterministic** - Consistent results with predictable modifier stacking
**🧩 Flexible** - Works with any domain: games, configuration systems, calculations
**🛠️ Developer-Friendly** - Fluent API with comprehensive error handling
## 🚀 Quick Example
```typescript
import { defineConfig, createEngine } from "mod-engine";
// Define your domain
const config = defineConfig({
metrics: ["Health", "Damage", "Speed"] as const,
operations: ["sum", "multiply"] as const,
attributes: [
{
key: "Rarity",
kind: "enum",
values: ["Common", "Rare", "Epic"] as const,
},
{ key: "Level", kind: "number", min: 1, max: 100 },
] as const,
});
const engine = createEngine(config);
// Prefer initializing attributes from a defaults object
const attributeDefaults = {
Rarity: "Epic" as const,
Level: 50,
};
// Build items with modifiers using native bulk attribute setter
const epicSword = engine
.builder("Epic Sword")
.setAttributes(attributeDefaults)
.increase("Damage")
.by(100)
.when({ op: "eq", attr: "Rarity", value: "Epic" })
.multiply("Damage")
.by(1.5)
.build();
// Get final stats
const result = engine.evaluate(epicSword);
console.log(result.metrics); // { Health: 0, Damage: 150, Speed: 0 }
```
## 🎮 Perfect For
- **RPG Systems** - Character stats, equipment modifiers, skill bonuses
- **Configuration Engines** - Dynamic settings with conditional logic
- **Financial Modeling** - Fee calculations, discount rules, tax modifiers
- **Game Balancing** - Predictable buff/debuff systems
- **Any System** requiring conditional numeric modifications
## 📚 Documentation
**[📖 Complete Documentation](https://brandon-irving.github.io/mod-engine/)**
- **[Quick Start Guide](https://brandon-irving.github.io/mod-engine/docs/quick-start)** - Get up and running in minutes
- **[API Reference](https://brandon-irving.github.io/mod-engine/docs/api/overview)** - Detailed function documentation
- **[Interactive Demo](https://brandon-irving.github.io/mod-engine/docs/examples/nextjs-demo)** - Try it in your browser
- **[Core Concepts](https://brandon-irving.github.io/mod-engine/docs/concepts/overview)** - Understanding the system
## 🛠️ Installation
```bash
npm install mod-engine
```
## 🎯 Try the Demo
```bash
npx create-mod-engine-app my-app
# or
git clone https://github.com/brandon-irving/mod-engine
cd mod-engine && npm start
```
## 📝 License
MIT - Build amazing systems with confidence!
---
**[⭐ Star us on GitHub](https://github.com/brandon-irving/mod-engine)** | **[📖 Read the Docs](https://brandon-irving.github.io/mod-engine/)** | **[🐛 Report Issues](https://github.com/brandon-irving/mod-engine/issues)**