You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
trilogy is a simple Promise-based wrapper for SQLite databases.
It supports both the native C++ sqlite3 driver and the pure
JavaScript sql.js backend — compile natively for speed
when you need it, or use sql.js headache-free in cross-platform environments
and Electron apps.
It's not an ORM and isn't intended to be one — it doesn't have any
relationship features. Instead it focuses on providing a simple, clear API
that's influenced more by Mongoose than by SQL.
🔗 automatically casts data between JavaScript & SQLite types
Define schemas with types like String, Date, or 'increments' —
trilogy will handle all the type-casting involved to map accurately
between JavaScript and the underlying SQLite database.
trilogy uses knex internally to build its queries, but it's also exposed so
you can use it to build your own. No need to mess with ridiculous multi-line
strings.
🔩 supports multiple swappable backends ( plus in-memory storage )
Both the native sqlite3 module andsql.js (pure
JavaScript!) are supported. There is also memory-only storage for fast,
unpersisted data handling, which is great for tests and performance critical
situations.
You can even swap the backend after you've started, with no changes to the
rest of your code!
trilogy is written in and provides a first-class experience for TypeScript.
🔌 lifecycle hooks
Any number of hooks (aka subscribers or listeners) can be attached at several
points in the lifecycle — for example onQuery, beforeCreate, afterUpdate.
These are useful for debugging and extensibility.
Compiling the sqlite3 module for all the platforms you target with Electron
or NW.js can be difficult. That's why trilogy also supports the sql.js backend,
which doesn't need to be compiled at all!
installation
Install trilogy
# using yarnyarn add trilogy
# using npmnpm i trilogy
Install a backend
# using yarnyarn add sqlite3
# using npmnpm i sqlite3
or
# using yarnyarn add sql.js
# using npmnpm i sql.js
usage
Full documentation is available here and includes guides, an API
reference, and more.
Here's a quick overview. It uses async & await but is easily usable with
vanilla Promises.
import{connect}from'trilogy'// defaults to using the `sqlite3` backendconstdb=connect('./file.db')// choose `sql.js` to avoid native compilation :)constdb=connect('./file.db',{client: 'sql.js'})// set the filename to ':memory:' for fast, in-memory storageconstdb=connect(':memory:',{// it works for both clients above!client: 'sql.js'});(asyncfunction(){constgames=awaitdb.model('games',{name: {type: String},genre: String,// type shorthandreleased: Date,awards: Array,id: 'increments'// special type, primary key})awaitgames.create({name: 'Overwatch',genre: 'FPS',released: newDate('May 23, 2016'),awards: ['Game of the Year','Best Multiplayer Game','Best ESports Game']})constoverwatch=awaitgames.findOne({name: 'Overwatch'})console.log(overwatch.awards[1])// -> 'Best Multiplayer Game'})()
contributing
This project is open to contributions of all kinds! Don't worry if you're
not 100% up to speed on the process — there's a short outline in the
Contributor Guide.
You'll also find a reference for the set of labels used to categorize issues,
with descriptions of each.
(Contributor Guide - issue labels)