Repolayer
Skriv din dataåtkomst en gång. Börja med SQLite och byt till Postgres, MySQL eller MariaDB genom att ändra en rad. En gemensam testsvit bevisar att alla adaptrar beter sig likadant.

De flesta av mina projekt börjar med en enda SQLite-fil, och en del av dem behöver till slut en riktig databasserver. Repolayer är datalagret jag byggde för att det bytet ska vara en konfigurationsändring i stället för en omskrivning: ett litet TypeScript-bibliotek med ett typat Repo<T>-gränssnitt och fyra adaptrar som beter sig identiskt. Det driver också datalagret på den här sajten.
const repo = await createRepo<Puzzle>({
driver: 'sqlite', // eller 'postgres', 'mysql', 'mariadb'
table: 'puzzles',
schema: puzzleSchema,
connection: { file: './data.db' },
});
await repo.findMany({ where: { solved: false }, limit: 20 });
Höjdpunkter
- Bevisat, inte utlovat. En gemensam testsvit körs mot varje adapter. Ett grönt bygge är beviset på att de beter sig likadant.
- Inga native-beroenden. SQLite körs på Nodes inbyggda
node:sqlite. Drivrutinerna för Postgres och MySQL är valfria och laddas först när de behövs. - Testbart. En minnesbaserad
MemoryRepoklarar samma testsvit, så enhetstester behöver ingen databas. - Byggt för riktiga data. Transaktioner, streaming, keyset-paginering och TypeScript-typer som härleds från ett vanligt schemaobjekt.
Medvetet inte en ORM
Ingen query builder, inga migreringar, inga relationer. Frågeformen hålls liten eftersom det är just den begränsningen som gör att fyra olika databaser kan bete sig likadant.
Läs hela artikeln på dev.to.