fix(medusa, modules-sdk): Fix migrate command and fix revert support (#7340)
This commit is contained in:
committed by
GitHub
parent
bb2b041954
commit
13ce60b999
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user