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.
1. Instalação
Seção intitulada “1. Instalação”Instale o core e o driver do banco de dados que você irá utilizar:
# PostgreSQLpnpm add mirror-orm pg# MySQL / MariaDBpnpm add mirror-orm mysql2# SQLitepnpm add mirror-orm better-sqlite3# SQL Serverpnpm add mirror-orm mssql2. Configuração do TypeScript
Seção intitulada “2. Configuração do TypeScript”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+.
3. Estabelecendo Conexão
Seção intitulada “3. Estabelecendo Conexão”O Mirror oferece métodos estáticos nomeados para cada banco, aceitando tanto uma Connection String quanto um objeto de configuração detalhado.
1. Postgres
Seção intitulada “1. Postgres”Utiliza o driver pg. Suporta SSL e Read Replicas.
import { Connection } from 'mirror-orm';
// Connection Stringawait Connection.postgres('postgresql://user:password@localhost:5432/dbname');
// Objeto de Configuraçãoawait Connection.postgres({ host: 'localhost', user: 'admin', password: 'password', database: 'mirror_db', port: 5432, ssl: true // Necessário para Neon/Supabase/RDS});2. MySQL
Seção intitulada “2. MySQL”Utiliza o driver mysql2.
import { Connection } from 'mirror-orm';
// Connection Stringawait Connection.mysql('mysql://user:password@localhost:3306/dbname');
// Objeto de Configuraçãoawait Connection.mysql({ host: 'localhost', user: 'root', password: 'password', database: 'mirror_db'});3. SQLite
Seção intitulada “3. SQLite”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' });4. SQL Server (MSSQL)
Seção intitulada “4. SQL Server (MSSQL)”Utiliza o driver mssql.
import { Connection } from 'mirror-orm';
// Connection Stringawait Connection.sqlServer('mssql://user:pass@localhost:1433/db?encrypt=true');
// Objeto de Configuraçãoawait Connection.sqlServer({ server: 'localhost', user: 'sa', password: 'Password123!', database: 'mirror_db', options: { encrypt: true, trustServerCertificate: true }});4. Primeira entidade
Seção intitulada “4. Primeira entidade”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.