fix(medusa, modules-sdk): Fix migrate command and fix revert support (#7340)

This commit is contained in:
Adrien de Peretti
2024-05-15 15:46:23 +02:00
committed by GitHub
parent bb2b041954
commit 13ce60b999
4 changed files with 163 additions and 73 deletions

View File

@@ -149,7 +149,7 @@ async function initializeLinks({
moduleExports,
}) {
try {
const { initialize, runMigrations } =
const { initialize, runMigrations, revertMigrations } =
moduleExports ?? (await import(LinkModulePackage))
const linkResolution = await initialize(
@@ -158,7 +158,12 @@ async function initializeLinks({
injectedDependencies
)
return { remoteLink: new RemoteLink(), linkResolution, runMigrations }
return {
remoteLink: new RemoteLink(),
linkResolution,
runMigrations,
revertMigrations,
}
} catch (err) {
console.warn("Error initializing link modules.", err)
@@ -209,6 +214,7 @@ export type MedusaAppOutput = {
entitiesMap?: Record<string, any>
notFound?: Record<string, Record<string, string>>
runMigrations: RunMigrationFn
revertMigrations: RunMigrationFn
onApplicationShutdown: () => Promise<void>
onApplicationPrepareShutdown: () => Promise<void>
}
@@ -333,6 +339,9 @@ async function MedusaApp_({
runMigrations: async () => {
throw new Error("Migrations not allowed in loaderOnly mode")
},
revertMigrations: async () => {
throw new Error("Revert migrations not allowed in loaderOnly mode")
},
}
}
@@ -342,13 +351,16 @@ async function MedusaApp_({
allowUnregistered: true,
})
const { remoteLink, runMigrations: linkModuleMigration } =
await initializeLinks({
config: linkModuleOptions,
linkModules,
injectedDependencies,
moduleExports: isMedusaModule(linkModule) ? linkModule : undefined,
})
const {
remoteLink,
runMigrations: linkModuleMigration,
revertMigrations: revertLinkModuleMigration,
} = await initializeLinks({
config: linkModuleOptions,
linkModules,
injectedDependencies,
moduleExports: isMedusaModule(linkModule) ? linkModule : undefined,
})
const loadedSchema = getLoadedSchema()
const { schema, notFound } = cleanAndMergeSchema(loadedSchema)
@@ -366,9 +378,7 @@ async function MedusaApp_({
return await remoteQuery.query(query, variables, options)
}
const runMigrations: RunMigrationFn = async (
linkModuleOptions
): Promise<void> => {
const applyMigration = async (linkModuleOptions, revert = false) => {
for (const moduleName of Object.keys(allModules)) {
const moduleResolution = MedusaModule.getModuleResolutions(moduleName)
@@ -379,12 +389,21 @@ async function MedusaApp_({
}
}
await MedusaModule.migrateUp(
moduleResolution.definition.key,
moduleResolution.resolutionPath as string,
moduleResolution.options,
moduleResolution.moduleExports
)
if (!revert) {
await MedusaModule.migrateUp(
moduleResolution.definition.key,
moduleResolution.resolutionPath as string,
moduleResolution.options,
moduleResolution.moduleExports
)
} else {
await MedusaModule.migrateDown(
moduleResolution.definition.key,
moduleResolution.resolutionPath as string,
moduleResolution.options,
moduleResolution.moduleExports
)
}
}
const linkModuleOpt = { ...(linkModuleOptions ?? {}) }
@@ -392,11 +411,31 @@ async function MedusaApp_({
...(sharedResourcesConfig?.database ?? {}),
}
linkModuleMigration &&
(await linkModuleMigration({
options: linkModuleOpt,
injectedDependencies,
}))
if (!revert) {
linkModuleMigration &&
(await linkModuleMigration({
options: linkModuleOpt,
injectedDependencies,
}))
} else {
revertLinkModuleMigration &&
(await revertLinkModuleMigration({
options: linkModuleOpt,
injectedDependencies,
}))
}
}
const runMigrations: RunMigrationFn = async (
linkModuleOptions
): Promise<void> => {
await applyMigration(linkModuleOptions)
}
const revertMigrations: RunMigrationFn = async (
linkModuleOptions
): Promise<void> => {
await applyMigration(linkModuleOptions, true)
}
return {
@@ -408,6 +447,7 @@ async function MedusaApp_({
entitiesMap: schema.getTypeMap(),
notFound,
runMigrations,
revertMigrations,
}
}
@@ -433,3 +473,16 @@ export async function MedusaAppMigrateUp(
await runMigrations().finally(MedusaModule.clearInstances)
}
export async function MedusaAppMigrateDown(
options: MedusaAppOptions = {}
): Promise<void> {
const migrationOnly = true
const { revertMigrations } = await MedusaApp_({
...options,
migrationOnly,
})
await revertMigrations().finally(MedusaModule.clearInstances)
}