import { EmbeddedDatabaseLocationMigration, type IEmbeddedDatabaseLocationMigrationOptions, type IEmbeddedDatabaseLocationMigrationResult, } from './v1_embeddeddatabaselocation.js'; export class EmbeddedDatabaseMigrationRunner { private readonly migrations: EmbeddedDatabaseLocationMigration[]; constructor(optionsArg: IEmbeddedDatabaseLocationMigrationOptions) { this.migrations = [new EmbeddedDatabaseLocationMigration(optionsArg)]; } public get hasOwnedResources(): boolean { return this.migrations.some((migration) => migration.hasOwnedResources); } public async run(): Promise { let result: IEmbeddedDatabaseLocationMigrationResult | undefined; for (const migration of this.migrations) { result = await migration.run() ?? result; } return result; } public async stop(): Promise { const errors: unknown[] = []; for (const migration of [...this.migrations].reverse()) { try { await migration.stop(); } catch (errorArg) { errors.push(errorArg); } } if (errors.length === 1) throw errors[0]; if (errors.length > 1) { throw new AggregateError(errors, 'Embedded database migration runner cleanup failed.'); } } }