UNPKG

@mikro-orm/migrations

Version:

TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.

38 lines (37 loc) 1.43 kB
/** Base class for generating migration source files from schema diffs. */ export class MigrationGenerator { driver; namingStrategy; options; constructor(driver, namingStrategy, options) { this.driver = driver; this.namingStrategy = namingStrategy; this.options = options; } /** * @inheritDoc */ async generate(diff, path, name) { const { fs } = await import('@mikro-orm/core/fs-utils'); /* v8 ignore next */ const defaultPath = this.options.emit === 'ts' && this.options.pathTs ? this.options.pathTs : this.options.path; path = fs.normalizePath(this.driver.config.get('baseDir'), path ?? defaultPath); fs.ensureDir(path); const timestamp = new Date().toISOString().replace(/[-T:]|\.\d{3}z$/gi, ''); const className = this.namingStrategy.classToMigrationName(timestamp, name); const fileName = `${this.options.fileName(timestamp, name)}.${this.options.emit}`; const ret = await this.generateMigrationFile(className, diff); await fs.writeFile(path + '/' + fileName, ret, { flush: true }); return [ret, fileName]; } /** * @inheritDoc */ createStatement(sql, padLeft) { if (sql) { const padding = ' '.repeat(padLeft); return `${padding}this.addSql(\`${sql.replace(/[`$\\]/g, '\\$&')}\`);\n`; } return '\n'; } }