lightweight React Native and Expo migrations library
npm install expo-sqlite-migrate``sh`
npm install expo-sqlite-migrate
`ts
import { Database } from "sqlite3";
import { Migrator } from "expo-sqlite-migrate";
import { Constraint, DropTable, Table } from "expo-sqlite-migrate";
const db = new Database(":memory:");
const migrator = await Migrator.create(db, "sqlite3");
await migrator.migrate([
{
id: "create-users",
up: () => [
new Table("users")
.addField("id", "int", Constraint.PRIMARY_KEY)
.addField("name", "text", Constraint.NOT_NULL)
.create(),
],
down: () => [DropTable("users")],
},
]);
await migrator.rollback();
`
`ts
import * as SQLite from "expo-sqlite";
import { Migrator } from "expo-sqlite-migrate";
import { Constraint, DropTable, Table } from "expo-sqlite-migrate";
const db = SQLite.openDatabase("app.db");
const migrator = await Migrator.create(db, "expo-sqlite");
await migrator.migrate([
{
id: "create-users",
up: () => [
new Table("users")
.addField("id", "int", Constraint.PRIMARY_KEY)
.addField("name", "text", Constraint.NOT_NULL)
.create(),
],
down: () => [DropTable("users")],
},
]);
`
See examples/expo-integration for a minimal Expo app that runs an
integration test on launch and displays PASS/FAIL.
- Migrator.create(db, type) → Promise: initializes the migrations table.migrator.migrate(migrations)
- → Promise: applies pending migrations in order.migrator.rollback()
- → Promise: rolls back the latest applied migration from the current session.
Each migration object must include:
- id: unique string identifierup()
- : returns an array of SQL queries or prepared statementsdown()
- : returns an array of SQL queries or prepared statements
- new Table(name).addField(name, type, ...constraints)
- .addForeignKey(parentTableOrName, childToParentMap, options?)
- .create()
- → SQL
- Constraint.PRIMARY_KEYConstraint.NOT_NULL
- Constraint.UNIQUE
-
- DropTable(name)` → SQL