{"version":3,"file":"migrator.cjs","names":["sql"],"sources":["../../src/sqlite-cloud/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 { type SQL, sql } from '~/sql/sql.ts';\nimport { upgradeAsyncIfNeeded } from '~/up-migrations/sqlite.ts';\nimport type { SQLiteCloudDatabase } from './driver.ts';\n\nexport async function migrate<TRelations extends AnyRelations>(\n\tdb: SQLiteCloudDatabase<TRelations>,\n\tconfig: MigrationConfig,\n): Promise<void | MigratorInitFailResponse> {\n\tconst migrations = readMigrationFiles(config);\n\tconst { session } = db;\n\n\tconst migrationsTable = config === undefined\n\t\t? '__drizzle_migrations'\n\t\t: typeof config === 'string'\n\t\t? '__drizzle_migrations'\n\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\n\t// Detect DB version and upgrade table schema if needed\n\tconst { newDb } = await upgradeAsyncIfNeeded(migrationsTable, db, 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 INTEGER PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric,\n\t\t\t\tname text,\n\t\t\t\tapplied_at TEXT\n\t\t)\n\t\t`;\n\t\tawait session.run(migrationTableCreate);\n\t}\n\n\tconst dbMigrations = await session.objects<{ id: number; hash: string; created_at: string; name: string | null }>(\n\t\tsql`SELECT id, hash, created_at, name FROM ${sql.identifier(migrationsTable)}`,\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 session.run(\n\t\t\tsql`insert into ${\n\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t} (\"hash\", \"created_at\", \"name\", \"applied_at\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${\n\t\t\t\tnew Date().toISOString()\n\t\t\t})`\n\t\t\t\t.inlineParams(),\n\t\t);\n\n\t\treturn;\n\t}\n\n\tconst migrationsToRun = getMigrationsToRun({ localMigrations: migrations, dbMigrations });\n\tawait session.run(sql`BEGIN TRANSACTION`);\n\ttry {\n\t\tconst stmts = sql.join(\n\t\t\tmigrationsToRun.reduce(\n\t\t\t\t(statements, migration) => {\n\t\t\t\t\tstatements.push(\n\t\t\t\t\t\tsql.raw(migration.sql.join('')),\n\t\t\t\t\t\tsql`INSERT INTO ${\n\t\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t\t} (\"hash\", \"created_at\", \"name\", \"applied_at\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${\n\t\t\t\t\t\t\tnew Date().toISOString()\n\t\t\t\t\t\t});`\n\t\t\t\t\t\t\t.inlineParams(),\n\t\t\t\t\t);\n\n\t\t\t\t\treturn statements;\n\t\t\t\t},\n\t\t\t\t[] as SQL[],\n\t\t\t),\n\t\t);\n\n\t\tawait session.run(stmts);\n\n\t\tawait session.run(sql`COMMIT`);\n\t} catch (error) {\n\t\tawait session.run(sql`ROLLBACK`);\n\t\tthrow error;\n\t}\n}\n"],"mappings":";;;;;;;;AAQA,eAAsB,QACrB,IACA,QAC2C;CAC3C,MAAM,mDAAgC,OAAO;CAC7C,MAAM,EAAE,YAAY;CAEpB,MAAM,kBAAkB,WAAW,SAChC,yBACA,OAAO,WAAW,WAClB,yBACA,OAAO,mBAAmB;CAG7B,MAAM,EAAE,UAAU,0DAA2B,iBAAiB,IAAI,WAAW;AAE7E,KAAI,OAAO;EACV,MAAM,uBAAuB,gBAAG;gCACFA,iBAAI,WAAW,gBAAgB,CAAC;;;;;;;;AAQ9D,QAAM,QAAQ,IAAI,qBAAqB;;CAGxC,MAAM,eAAe,MAAM,QAAQ,QAClC,gBAAG,0CAA0CA,iBAAI,WAAW,gBAAgB,GAC5E;AAED,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,QAAQ,IACb,gBAAG,eACFA,iBAAI,WAAW,gBAAgB,CAC/B,uDAAuD,UAAU,KAAK,IAAI,UAAU,aAAa,IAAI,UAAU,KAAK,qBACpH,IAAI,MAAM,EAAC,aAAa,CACxB,GACC,cAAc,CAChB;AAED;;CAGD,MAAM,8DAAqC;EAAE,iBAAiB;EAAY;EAAc,CAAC;AACzF,OAAM,QAAQ,IAAI,gBAAG,oBAAoB;AACzC,KAAI;EACH,MAAM,QAAQA,iBAAI,KACjB,gBAAgB,QACd,YAAY,cAAc;AAC1B,cAAW,KACVA,iBAAI,IAAI,UAAU,IAAI,KAAK,GAAG,CAAC,EAC/B,gBAAG,eACFA,iBAAI,WAAW,gBAAgB,CAC/B,uDAAuD,UAAU,KAAK,IAAI,UAAU,aAAa,IAAI,UAAU,KAAK,qBACpH,IAAI,MAAM,EAAC,aAAa,CACxB,IACC,cAAc,CAChB;AAED,UAAO;KAER,EAAE,CACF,CACD;AAED,QAAM,QAAQ,IAAI,MAAM;AAExB,QAAM,QAAQ,IAAI,gBAAG,SAAS;UACtB,OAAO;AACf,QAAM,QAAQ,IAAI,gBAAG,WAAW;AAChC,QAAM"}