[!NOTE] Projet archivé: Modella est un framework historique minimaliste pour Node.js et navigateurs. Pour les projets récents, préférez Zod ou Prisma.
Modella est une bibliothèque épurée de modélisation de données conçue pour être enrichie via des plugins.
Définition de modèle
const Modella = require('modella');
const validators = require('modella-validators');
const User = Modella('User')
.attr('id')
.attr('name')
.attr('email', { required: true })
.use(validators);
// Règle de validation personnalisée
User.validate((user) => {
if (!user.name()) {
user.error('name', 'Name is required');
}
});
Instances et propriétés
// Instanciation
const user = new User({ name: 'Alice', email: '[email protected]' });
// Getters et Setters
user.name(); // -> "Alice"
user.name('Bob'); // Sets name to "Bob"
user.set({ name: 'Charlie' });
// Prédicats d état
user.has('name'); // -> true
user.isNew(); // -> true (not yet saved)
user.isValid(); // Runs sync validators -> true/false
Événements de cycle de vie
// Événements de persistance
user.on('save', () => console.log('Saved'));
user.on('create', () => console.log('Created'));
user.on('remove', () => console.log('Removed'));
// Hooks asynchrones
user.on('saving', (instance, done) => {
done();
});
// Événements de modification d attributs
user.on('change', () => console.log('Attributes modified'));
user.on('change email', () => console.log('Email changed'));
Architecture des plugins
Un plugin Modella est une fonction d ordre supérieur qui décore le modèle :
const TimestampsPlugin = () => {
return (Model) => {
Model
.attr('createdAt')
.attr('updatedAt');
Model.on('saving', (record, done) => {
const now = new Date();
if (record.isNew()) record.createdAt(now);
record.updatedAt(now);
done();
});
return Model;
};
};
User.use(TimestampsPlugin());