fix(medusa, modules-sdk, modules): Module loading missing dependencies + remote query reference issue (#5468)

This commit is contained in:
Adrien de Peretti
2023-10-26 20:24:38 +02:00
committed by GitHub
parent 725ba9bb9b
commit a45da9215d
15 changed files with 371 additions and 226 deletions
+39 -11
View File
@@ -6,6 +6,7 @@ import {
InternalModuleDeclaration,
LoadedModule,
LoaderOptions,
MedusaContainer,
MODULE_RESOURCE_TYPE,
MODULE_SCOPE,
ModuleDefinition,
@@ -15,14 +16,20 @@ import {
} from "@medusajs/types"
import {
ContainerRegistrationKeys,
ModulesSdkUtils,
createMedusaContainer,
isObject,
ModulesSdkUtils,
} from "@medusajs/utils"
import { MODULE_PACKAGE_NAMES, Modules } from "./definitions"
import {
MODULE_PACKAGE_NAMES,
ModuleRegistrationName,
Modules,
} from "./definitions"
import { MedusaModule } from "./medusa-module"
import { RemoteLink } from "./remote-link"
import { RemoteQuery } from "./remote-query"
import { cleanGraphQLSchema } from "./utils"
import { asValue } from "awilix"
const LinkModulePackage = "@medusajs/link-modules"
@@ -57,7 +64,7 @@ export type SharedResources = {
}
}
async function loadModules(modulesConfig, injectedDependencies) {
async function loadModules(modulesConfig, sharedContainer) {
const allModules = {}
await Promise.all(
@@ -85,14 +92,18 @@ async function loadModules(modulesConfig, injectedDependencies) {
declaration.resources = MODULE_RESOURCE_TYPE.SHARED
}
const loaded = (await MedusaModule.bootstrap(
moduleName,
path,
const loaded = (await MedusaModule.bootstrap({
moduleKey: moduleName,
defaultPath: path,
declaration,
undefined,
injectedDependencies,
definition
)) as LoadedModule
sharedContainer,
moduleDefinition: definition,
})) as LoadedModule
const service = loaded[moduleName]
sharedContainer.register({
[service.__definition.registrationName]: asValue(service),
})
if (allModules[moduleName] && !Array.isArray(allModules[moduleName])) {
allModules[moduleName] = []
@@ -153,6 +164,7 @@ function registerCustomJoinerConfigs(servicesConfig: ModuleJoinerConfig[]) {
export async function MedusaApp(
{
sharedContainer,
sharedResourcesConfig,
servicesConfig,
modulesConfigPath,
@@ -162,6 +174,7 @@ export async function MedusaApp(
remoteFetchData,
injectedDependencies,
}: {
sharedContainer?: MedusaContainer
sharedResourcesConfig?: SharedResources
loadedModules?: LoadedModule[]
servicesConfig?: ModuleJoinerConfig[]
@@ -185,6 +198,8 @@ export async function MedusaApp(
notFound?: Record<string, Record<string, string>>
runMigrations: RunMigrationFn
}> {
const sharedContainer_ = createMedusaContainer({}, sharedContainer)
const modules: MedusaModuleConfig =
modulesConfig ??
(
@@ -222,7 +237,20 @@ export async function MedusaApp(
linkModuleOptions = linkModule
}
const allModules = await loadModules(modules, injectedDependencies)
for (const injectedDependency of Object.keys(injectedDependencies)) {
sharedContainer_.register({
[injectedDependency]: asValue(injectedDependencies[injectedDependency]),
})
}
const allModules = await loadModules(modules, sharedContainer_)
// Share Event bus with link modules
injectedDependencies[ModuleRegistrationName.EVENT_BUS] =
sharedContainer_.resolve(ModuleRegistrationName.EVENT_BUS, {
allowUnregistered: true,
})
const {
remoteLink,
linkResolution,