A simple, powerful and flexible event management system for Node.js with built-in validation.
- 🚀 Simple and intuitive API
- ✅ Built-in validation system
- 🔄 Async/await support
- 📝 Event history
- 🐛 Debug mode
- 💪 Type checking
- 🎯 Custom validation rules
- 🔍 Detailed error messages
npm install @rache/event-manager-plus
const { EventManager } = require("event-manager-plus");
// Create an event group
const userEvents = EventManager.createGroup("user", { debug: true });
// Define an event with validation
userEvents.define("createUser", {
validation: {
username: {
type: "string",
minLength: 3,
pattern: /^[a-zA-Z0-9_]+$/,
},
email: {
type: "string",
pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
required: true,
},
},
});
// Add event handlers
userEvents.on("createUser", async (data) => {
console.log("Creating user:", data);
// ... database operations
});
userEvents.on("createUser", async (data) => {
console.log("Sending welcome email to:", data.email);
// ... email operations
});
// Emit event
await userEvents.emit("createUser", {
username: "john_doe",
email: "john@example.com",
});
string
number
boolean
object
array
{
username: {
type: "string",
minLength: 3,
maxLength: 20,
pattern: /^[a-zA-Z0-9_]+$/,
required: true,
},
}
{
age: {
type: "number",
min: 18,
max: 100,
required: true,
},
}
{
password: {
type: "string",
required: true,
custom: (value) => {
if (value.length < 8) return "Password too short";
if (!/[A-Z]/.test(value)) return "Need uppercase";
if (!/[0-9]/.test(value)) return "Need number";
return true;
},
},
}
// Get last 10 events
const history = userEvents.getHistory(10);
const userEvents = EventManager.createGroup("user", {
debug: true,
maxHistorySize: 100,
});
try {
await userEvents.emit("createUser", {
username: 123, // Wrong type
email: "invalid-email", // Invalid format
});
} catch (error) {
console.error("Validation failed:", error.message);
}
-
createGroup(name, options)
: Create a new event group
-
define(eventName, options)
: Define a new event -
on(eventName, handler)
: Add event handler -
emit(eventName, data)
: Emit an event -
getHistory(limit)
: Get event history
MIT
Furkan
Contributions, issues and feature requests are welcome!
If you have any problems or questions, please open an issue.