flumix
v1.0.0
Published
Mix classes fluently
Readme
Flumix
A lightweight, type-safe mixin library for TypeScript that enables composable class inheritance with a fluent API.
Installation
npm install flumixFeatures
- 🔒 Type-safe: Full TypeScript support with proper type inference
- 🧩 Composable: Easily combine multiple mixins with a fluent API
- 🪶 Lightweight: Zero dependencies, minimal footprint
- 🔧 Flexible: Works with any class hierarchy
Usage
Basic Example
import { mix } from "flumix";
// Base class
class Animal {
isAlive = true;
}
// Mixin functions
function Swimming(Base) {
return class extends Base {
swim() {
return "Swimming!";
}
};
}
function Flying(Base) {
return class extends Base {
fly() {
return "Flying!";
}
};
}
// Create a class that combines Animal with Swimming and Flying abilities
const Duck = mix(Animal).with(Swimming).with(Flying).build();
// Use the composed class
const duck = new Duck();
console.log(duck.isAlive); // true
console.log(duck.swim()); // "Swimming!"
console.log(duck.fly()); // "Flying!"With Constructor Parameters
// Base class with constructor
class Person {
name: string;
constructor(name: string) {
this.name = name;
}
}
// Mixin with options
function Aged(Base, defaultAge: number) {
return class extends Base {
age: number;
constructor(...args: any[]) {
super(...args);
this.age = defaultAge;
}
getAge() {
return this.age;
}
};
}
// Create a composed class with parameters
const AgedPerson = mix(Person).with(Aged, 30).build();
const person = new AgedPerson("John");
console.log(person.name); // "John"
console.log(person.getAge()); // 30API
mix(BaseClass) / extend(BaseClass)
Both functions are identical and create a new MixinBuilder for the given base class.
MixinBuilder.with(mixinFn, ...options)
Applies a mixin function to the current base class, optionally with additional parameters.
MixinBuilder.build()
Finalizes the mixin chain and returns the resulting class.
Compatibility
- Works with ES6+ environments
- Full TypeScript support (4.0+)
License
MIT © José F. Romaniello
