Skip to content

Commit

Permalink
Merge branch 'develop' into oas/improve-oas-schemas-21
Browse files Browse the repository at this point in the history
  • Loading branch information
olivermrbl authored Sep 26, 2024
2 parents 0fe027a + ef15c60 commit 3fe3068
Show file tree
Hide file tree
Showing 3 changed files with 353 additions and 163 deletions.
160 changes: 88 additions & 72 deletions packages/core/modules-sdk/src/medusa-app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import { MODULE_PACKAGE_NAMES } from "./definitions"
import {
MedusaModule,
MigrationOptions,
ModuleBootstrapOptions,
RegisterModuleJoinerConfig,
} from "./medusa-module"
import { RemoteLink } from "./remote-link"
Expand Down Expand Up @@ -97,89 +98,104 @@ export async function loadModules(args: {
sharedResourcesConfig,
migrationOnly = false,
loaderOnly = false,
workerMode = "server",
workerMode = "server" as ModuleBootstrapOptions["workerMode"],
} = args

const allModules = {}

await Promise.all(
Object.keys(modulesConfig).map(async (moduleName) => {
const mod = modulesConfig[moduleName]
let path: string
let moduleExports: ModuleExports | undefined = undefined
let declaration: any = {}
let definition: Partial<ModuleDefinition> | undefined = undefined
const allModules = {} as any

const modulesToLoad: {
moduleKey: string
defaultPath: string
declaration: InternalModuleDeclaration | ExternalModuleDeclaration
sharedContainer: MedusaContainer
moduleDefinition: ModuleDefinition
moduleExports?: ModuleExports
}[] = []

for (const moduleName of Object.keys(modulesConfig)) {
const mod = modulesConfig[moduleName]
let path: string
let moduleExports: ModuleExports | undefined = undefined
let declaration: any = {}
let definition: Partial<ModuleDefinition> | undefined = undefined

if (mod === false) {
continue
}

// Skip disabled modules
if (mod === false) {
return
}
if (isObject(mod)) {
const mod_ = mod as unknown as InternalModuleDeclaration
path = mod_.resolve ?? MODULE_PACKAGE_NAMES[moduleName]
definition = mod_.definition
moduleExports = !isString(mod_.resolve)
? (mod_.resolve as ModuleExports)
: undefined
declaration = { ...mod }
delete declaration.definition
} else {
path = MODULE_PACKAGE_NAMES[moduleName]
}

if (isObject(mod)) {
const mod_ = mod as unknown as InternalModuleDeclaration
path = mod_.resolve ?? MODULE_PACKAGE_NAMES[moduleName]
definition = mod_.definition
moduleExports = !isString(mod_.resolve)
? (mod_.resolve as ModuleExports)
: undefined
declaration = { ...mod }
delete declaration.definition
} else {
path = MODULE_PACKAGE_NAMES[moduleName]
}
declaration.scope ??= MODULE_SCOPE.INTERNAL
if (declaration.scope === MODULE_SCOPE.INTERNAL && !declaration.resources) {
declaration.resources = MODULE_RESOURCE_TYPE.SHARED
}

declaration.scope ??= MODULE_SCOPE.INTERNAL
if (
declaration.scope === MODULE_SCOPE.INTERNAL &&
!declaration.resources
) {
declaration.resources = MODULE_RESOURCE_TYPE.SHARED
if (
declaration.scope === MODULE_SCOPE.INTERNAL &&
declaration.resources === MODULE_RESOURCE_TYPE.SHARED
) {
declaration.options ??= {}
declaration.options.database ??= {
...sharedResourcesConfig?.database,
}
declaration.options.database.debug ??=
sharedResourcesConfig?.database?.debug
}

if (
declaration.scope === MODULE_SCOPE.INTERNAL &&
declaration.resources === MODULE_RESOURCE_TYPE.SHARED
) {
declaration.options ??= {}
declaration.options.database ??= {
...sharedResourcesConfig?.database,
}
declaration.options.database.debug ??=
sharedResourcesConfig?.database?.debug
}
modulesToLoad.push({
moduleKey: moduleName,
defaultPath: path,
declaration,
sharedContainer,
moduleDefinition: definition as ModuleDefinition,
moduleExports,
})
}

const loaded = (await MedusaModule.bootstrap({
moduleKey: moduleName,
defaultPath: path,
declaration,
sharedContainer,
moduleDefinition: definition as ModuleDefinition,
moduleExports,
migrationOnly,
loaderOnly,
workerMode,
})) as LoadedModule

if (loaderOnly) {
return
}
const loaded = (await MedusaModule.bootstrapAll(modulesToLoad, {
migrationOnly,
loaderOnly,
workerMode,
})) as LoadedModule[]

const service = loaded[moduleName]
sharedContainer.register({
[service.__definition.key]: asValue(service),
})
if (loaderOnly) {
return allModules
}

if (allModules[moduleName] && !Array.isArray(allModules[moduleName])) {
allModules[moduleName] = []
}
for (const { moduleKey } of modulesToLoad) {
const service = loaded.find((loadedModule) => loadedModule[moduleKey])?.[
moduleKey
]
if (!service) {
throw new Error(`Module ${moduleKey} could not be loaded.`)
}

if (allModules[moduleName]) {
;(allModules[moduleName] as LoadedModule[]).push(loaded[moduleName])
} else {
allModules[moduleName] = loaded[moduleName]
}
sharedContainer.register({
[service.__definition.key]: asValue(service),
})
)

if (allModules[moduleKey] && !Array.isArray(allModules[moduleKey])) {
allModules[moduleKey] = []
}

if (allModules[moduleKey]) {
;(allModules[moduleKey] as LoadedModule[]).push(service)
} else {
allModules[moduleKey] = service
}
}

return allModules
}

Expand Down Expand Up @@ -374,7 +390,7 @@ async function MedusaApp_({
const allModules = await loadModules({
modulesConfig: modules,
sharedContainer: sharedContainer_,
sharedResourcesConfig,
sharedResourcesConfig: { database: dbData },
migrationOnly,
loaderOnly,
workerMode,
Expand Down
Loading

0 comments on commit 3fe3068

Please sign in to comment.