Aller au contenu principal

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 migration compare 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, et countBy() 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.