{"version":3,"file":"migrator.cjs","names":["sql"],"sources":["../../src/mysql-proxy/migrator.ts"],"sourcesContent":["import type { MigrationConfig, MigratorInitFailResponse } from '~/migrator.ts';\nimport { readMigrationFiles } from '~/migrator.ts';\nimport { getMigrationsToRun } from '~/migrator.utils.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport { sql } from '~/sql/sql.ts';\nimport { upgradeIfNeeded } from '~/up-migrations/mysql-proxy.ts';\nimport type { MySqlRemoteDatabase } from './driver.ts';\n\nexport type ProxyMigrator = (migrationQueries: string[]) => Promise<void>;\n\nexport async function migrate<TRelations extends AnyRelations>(\n\tdb: MySqlRemoteDatabase<TRelations>,\n\tcallback: ProxyMigrator,\n\tconfig: MigrationConfig,\n): Promise<void | MigratorInitFailResponse> {\n\tconst migrations = readMigrationFiles(config);\n\n\tconst migrationsTable = config.migrationsTable ?? '__drizzle_migrations';\n\n\t// Detect DB version and upgrade table schema if needed\n\tconst { newDb } = await upgradeIfNeeded(migrationsTable, db, callback, migrations);\n\n\tif (newDb) {\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash TEXT NOT NULL,\n\t\t\t\tcreated_at BIGINT,\n\t\t\t\tname TEXT,\n\t\t\t\tapplied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n\t\t\t)\n\t\t`;\n\t\tawait db.session.execute(migrationTableCreate);\n\t}\n\n\tconst dbMigrations = await db.select({\n\t\tid: sql.raw('id'),\n\t\thash: sql.raw('hash'),\n\t\tcreated_at: sql.raw('created_at'),\n\t\tname: sql.raw('name'),\n\t}).from(sql.identifier(migrationsTable).getSQL()) as {\n\t\tid: number;\n\t\thash: string;\n\t\tcreated_at: string;\n\t\tname: string | null;\n\t}[];\n\n\tif (typeof config === 'object' && config.init) {\n\t\tif (dbMigrations.length) {\n\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t}\n\n\t\tif (migrations.length > 1) {\n\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t}\n\n\t\tconst [migration] = migrations;\n\n\t\tif (!migration) return;\n\n\t\tawait callback([\n\t\t\tdb.dialect.sqlToQuery(\n\t\t\t\tsql`insert into ${\n\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t} (\\`hash\\`, \\`created_at\\`, \\`name\\`) values(${migration.hash}, '${migration.folderMillis}', ${migration.name})`\n\t\t\t\t\t.inlineParams(),\n\t\t\t).sql,\n\t\t]);\n\n\t\treturn;\n\t}\n\n\tconst migrationsToRun = getMigrationsToRun({ localMigrations: migrations, dbMigrations });\n\tconst queriesToRun: string[] = [];\n\tfor (const migration of migrationsToRun) {\n\t\tqueriesToRun.push(\n\t\t\t...migration.sql,\n\t\t\tdb.dialect.sqlToQuery(\n\t\t\t\tsql`insert into ${\n\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t} (\\`hash\\`, \\`created_at\\`, \\`name\\`) values(${migration.hash}, '${migration.folderMillis}', ${migration.name})`\n\t\t\t\t\t.inlineParams(),\n\t\t\t).sql,\n\t\t);\n\t}\n\n\tawait callback(queriesToRun);\n}\n"],"mappings":";;;;;;;;AAUA,eAAsB,QACrB,IACA,UACA,QAC2C;CAC3C,MAAM,mDAAgC,OAAO;CAE7C,MAAM,kBAAkB,OAAO,mBAAmB;CAGlD,MAAM,EAAE,UAAU,0DAAsB,iBAAiB,IAAI,UAAU,WAAW;AAElF,KAAI,OAAO;EACV,MAAM,uBAAuB,gBAAG;gCACFA,iBAAI,WAAW,gBAAgB,CAAC;;;;;;;;AAQ9D,QAAM,GAAG,QAAQ,QAAQ,qBAAqB;;CAG/C,MAAM,eAAe,MAAM,GAAG,OAAO;EACpC,IAAIA,iBAAI,IAAI,KAAK;EACjB,MAAMA,iBAAI,IAAI,OAAO;EACrB,YAAYA,iBAAI,IAAI,aAAa;EACjC,MAAMA,iBAAI,IAAI,OAAO;EACrB,CAAC,CAAC,KAAKA,iBAAI,WAAW,gBAAgB,CAAC,QAAQ,CAAC;AAOjD,KAAI,OAAO,WAAW,YAAY,OAAO,MAAM;AAC9C,MAAI,aAAa,OAChB,QAAO,EAAE,UAAU,sBAA+B;AAGnD,MAAI,WAAW,SAAS,EACvB,QAAO,EAAE,UAAU,mBAA4B;EAGhD,MAAM,CAAC,aAAa;AAEpB,MAAI,CAAC,UAAW;AAEhB,QAAM,SAAS,CACd,GAAG,QAAQ,WACV,gBAAG,eACFA,iBAAI,WAAW,gBAAgB,CAC/B,+CAA+C,UAAU,KAAK,KAAK,UAAU,aAAa,KAAK,UAAU,KAAK,GAC7G,cAAc,CAChB,CAAC,IACF,CAAC;AAEF;;CAGD,MAAM,8DAAqC;EAAE,iBAAiB;EAAY;EAAc,CAAC;CACzF,MAAM,eAAyB,EAAE;AACjC,MAAK,MAAM,aAAa,gBACvB,cAAa,KACZ,GAAG,UAAU,KACb,GAAG,QAAQ,WACV,gBAAG,eACFA,iBAAI,WAAW,gBAAgB,CAC/B,+CAA+C,UAAU,KAAK,KAAK,UAAU,aAAa,KAAK,UAAU,KAAK,GAC7G,cAAc,CAChB,CAAC,IACF;AAGF,OAAM,SAAS,aAAa"}