@crowdin/app-project-module
Version:
Module that generates for you all common endpoints for serving standalone Crowdin App
49 lines (48 loc) • 2.64 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.migrateD1 = void 0;
exports.initD1 = initD1;
const d1_1 = require("drizzle-orm/d1");
const init_1 = require("./migrations/init");
const types_1 = require("./types");
function initD1({ database, additionalSchema, }) {
return (0, d1_1.drizzle)(database, { schema: Object.assign(Object.assign({}, types_1.D1_SCHEMA), additionalSchema) });
}
const migrations = [init_1.INIT_MIGRATION];
const migrationHistoryTableName = '__drizzle_migrations';
const migrateD1 = (db_1, ...args_1) => __awaiter(void 0, [db_1, ...args_1], void 0, function* (db, additionalMigrations = []) {
const allMigrations = [...migrations, ...additionalMigrations];
const uniqueMigrationNames = new Set(allMigrations.map((migration) => migration.name));
if (uniqueMigrationNames.size !== allMigrations.length) {
throw new Error('Migration names must be unique');
}
// Ensure migration history table exists
yield db.$client
.prepare(`CREATE TABLE IF NOT EXISTS ${migrationHistoryTableName} (
name varchar not null primary key,
created_at varchar not null
)`)
.run();
// Get list of applied migrations
const appliedMigrationsResult = yield db.$client.prepare(`SELECT name FROM ${migrationHistoryTableName}`).all();
const appliedMigrations = new Set(appliedMigrationsResult.results.map((row) => row.name));
// Filter out migrations that have already been applied
const pendingMigrations = allMigrations.filter((migration) => !appliedMigrations.has(migration.name));
for (const migration of pendingMigrations) {
yield migration.run(db);
yield db.$client
.prepare(`INSERT INTO ${migrationHistoryTableName} (name, created_at) VALUES (?, ?)`)
.bind(migration.name, Date.now().toString())
.run();
}
});
exports.migrateD1 = migrateD1;