import { checkedSource, configuredOrAsked, migrateDatabase, reportCleanupError, requiredAnswer, runMigrationTask, type TursoMigrationDeps, } from "#scripts/turso-migration-steps.ts"; import { tursoDatabaseSlug } from "#shared/config.ts"; export const MIGRATE_TURSO_USAGE = "Usage: deno task migrate:turso"; export type { TursoMigrationDeps } from "#scripts/turso-migration-steps.ts"; /** Run the interactive source-to-Turso database migration. */ export const runMigrateTursoCli = (deps: TursoMigrationDeps): Promise => runMigrationTask(deps, MIGRATE_TURSO_USAGE, async () => { const dbUrl = requiredAnswer( deps.prompt("Source database URL:"), "Source database URL", ); const dbToken = requiredAnswer( deps.promptSecret("Source database password or token (DB_TOKEN):"), "Source database password or token", ); const requestedName = requiredAnswer( deps.prompt("Destination Turso database name:"), "Destination Turso database name", ); const name = tursoDatabaseSlug(requestedName); const apiToken = configuredOrAsked( deps, "TURSO_API_TOKEN", "Destination Turso API key:", ); const source = checkedSource({ dbToken, dbUrl }); const api = deps.createApi(apiToken, deps.signal); const outcome = await migrateDatabase(deps, api, source, name); deps.stdout( "Keep using the source DB_ENCRYPTION_KEY. It is not stored in the database file.", ); return reportCleanupError(deps, outcome) ? 1 : 0; });