feat(migrations): CLI generate command (#8103)

This commit is contained in:
Adrien de Peretti
2024-07-12 13:12:49 +02:00
committed by GitHub
parent 4c2e9a3239
commit 104b00d4e9
14 changed files with 341 additions and 164 deletions

View File

@@ -1,3 +1,4 @@
export * from "./migration-down"
export * from "./migration-up"
export * from "./migration-generate"
export * from "./seed"

View File

@@ -0,0 +1,63 @@
import { LoaderOptions, Logger, ModulesSdkTypes } from "@medusajs/types"
import { mikroOrmCreateConnection } from "../../dal"
import { loadDatabaseConfig } from "../load-module-database-config"
import { Migrations } from "../../migrations"
import { toMikroOrmEntities } from "../../dml"
const TERMINAL_SIZE = process.stdout.columns
/**
* Utility function to build a migration generation script that will generate the migrations.
* Only used in mikro orm based modules.
* @param moduleName
* @param models
* @param pathToMigrations
*/
export function buildGenerateMigrationScript({
moduleName,
models,
pathToMigrations,
}) {
/**
* This script is only valid for mikro orm managers. If a user provide a custom manager
* he is in charge of running the migrations.
* @param options
* @param logger
* @param moduleDeclaration
*/
return async function ({
options,
logger,
}: Pick<
LoaderOptions<ModulesSdkTypes.ModuleServiceInitializeOptions>,
"options" | "logger"
> = {}) {
logger ??= console as unknown as Logger
console.log(new Array(TERMINAL_SIZE).join("-"))
console.log("")
logger.info(`MODULE: ${moduleName}`)
const dbData = loadDatabaseConfig(moduleName, options)!
const normalizedModels = toMikroOrmEntities(models)
const orm = await mikroOrmCreateConnection(
dbData,
normalizedModels,
pathToMigrations
)
const migrations = new Migrations(orm)
try {
const { fileName } = await migrations.generate()
if (fileName) {
logger.info(`Generated successfully (${fileName}).`)
} else {
logger.info(`Skipped. No changes detected in your models.`)
}
} catch (error) {
logger.error(`Failed with error ${error.message}`, error)
}
}
}