UNPKG

@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
"use strict"; 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;