Pular para o conteúdo

Iniciando

O Mirror ORM é um Data Mapper de ultra-alta performance para Node.js, focado em overhead próximo de zero e tipagem estrita. Ele utiliza JIT (Just-In-Time) compilation para garantir que a hidratação de entidades seja a mais rápida do ecossistema.

Instale o core e o driver do banco de dados que você irá utilizar:

Terminal window
# PostgreSQL
pnpm add mirror-orm pg
Terminal window
# MySQL / MariaDB
pnpm add mirror-orm mysql2
Terminal window
# SQLite
pnpm add mirror-orm better-sqlite3
Terminal window
# SQL Server
pnpm add mirror-orm mssql

O Mirror utiliza Stage 3 Decorators nativos (TS 5.0+). Diferente de outros ORMs, não ative experimentalDecorators, pois o Mirror segue o padrão TC39 nativo.

No seu tsconfig.json:

{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "bundler"
}
}

Nota sobre o Node 20: O Mirror injeta automaticamente o polyfill para Symbol.metadata. Você não precisa de configurações extras para que os decorators funcionem no Node.js v20.20.1+.

O Mirror oferece métodos estáticos nomeados para cada banco, aceitando tanto uma Connection String quanto um objeto de configuração detalhado.

Utiliza o driver pg. Suporta SSL e Read Replicas.

import { Connection } from 'mirror-orm';
// Connection String
await Connection.postgres('postgresql://user:password@localhost:5432/dbname');
// Objeto de Configuração
await Connection.postgres({
host: 'localhost',
user: 'admin',
password: 'password',
database: 'mirror_db',
port: 5432,
ssl: true // Necessário para Neon/Supabase/RDS
});

Utiliza o driver mysql2.

import { Connection } from 'mirror-orm';
// Connection String
await Connection.mysql('mysql://user:password@localhost:3306/dbname');
// Objeto de Configuração
await Connection.mysql({
host: 'localhost',
user: 'root',
password: 'password',
database: 'mirror_db'
});

Utiliza o driver better-sqlite3. Como o SQLite é um arquivo local, a URL é o caminho do arquivo.

const conn = await Connection.sqlite({ database: './app.db' });

Utiliza o driver mssql.

import { Connection } from 'mirror-orm';
// Connection String
await Connection.sqlServer('mssql://user:pass@localhost:1433/db?encrypt=true');
// Objeto de Configuração
await Connection.sqlServer({
server: 'localhost',
user: 'sa',
password: 'Password123!',
database: 'mirror_db',
options: { encrypt: true, trustServerCertificate: true }
});

O mapeamento no Mirror é explícito para garantir que o JIT Hydrator saiba exatamente o que processar.

import { Entity, Column, PrimaryColumn, CreatedAt, UpdatedAt } from 'mirror-orm';
@Entity('users')
class User {
@PrimaryColumn({ strategy: 'identity' })
id!: number;
@Column()
name!: string;
@Column({ nullable: true })
email!: string | null;
@CreatedAt()
createdAt!: Date;
@UpdatedAt()
updatedAt!: Date;
}

Próximos passos: Veja a referência completa de decorators em Entidades e Decorators de Coluna. Para fazer sua primeira query, veja o Repository API.