ORM
@fca.gg/orm est un ORM (mapping objet-relationnel) TypeScript pour Node.js, construit sur Knex.js. Les tables se décrivent par des classes décorées, et la CLI génère les migrations en comparant ces classes à la base.
En cours de développement
L'ORM est encore en chantier. Son API peut changer, et il est surtout utilisé avec MySQL : voir l'état du projet avant de l'adopter.
- Des modèles par décorateurs :
@Table,@Column.String(255),@ColumnOption.Unique()… - Le modèle Active Record :
user.create(),user.update(),User.findOneBy({email}). - Des jointures déclaratives avec
@Join, hydratées automatiquement. - Des migrations générées :
orm migrationcompare vos classes au schéma de la base et écrit les fichiers de migration Knex. - Des transformations à la lecture et à l'écriture avec
@Transform.
Exemple
import {Column, ColumnOption, KnexInstance, QueryRow, Table} from '@fca.gg/orm';
@Table('users')
export class User extends QueryRow {
@Column.Increment()
@ColumnOption.Primary()
private id!: number;
@Column.String(255)
@ColumnOption.NotNullable()
private name!: string;
public getId(): number {
return this.id;
}
public setName(name: string): this {
this.name = name;
return this;
}
}
await KnexInstance.init();
const user = await User.new().setName('Alice').create();
const alice = await User.findOneBy({name: 'Alice'});
Pour démarrer, suivez l'installation.
État du projet
Ce que nous avons relevé dans le code actuel :
- les méthodes de requête ne lèvent pas d'erreur en cas d'échec SQL : elles l'écrivent dans les logs et renvoient
undefined; create()relit la ligne créée à partir de l'identifiant renvoyé par l'insertion, etcountBy()lit le résultat au format de MySQL (count(*)). Sur PostgreSQL, ces deux méthodes peuvent ne pas renvoyer le résultat attendu ;- l'ORM ne fournit pas encore d'aide pour les transactions : passez par Knex directement, voir les requêtes.
Licence
L'ORM est distribué sous licence AGPL v3 avec une exception de liaison : l'utiliser comme dépendance n'oblige pas votre application à être open source. Le code source est sur GitHub.