diff --git a/packages/core/modules-sdk/src/definitions.ts b/packages/core/modules-sdk/src/definitions.ts index fc88a41199..6e2bad5e19 100644 --- a/packages/core/modules-sdk/src/definitions.ts +++ b/packages/core/modules-sdk/src/definitions.ts @@ -42,6 +42,7 @@ export const ModulesDefinition: { defaultPackage: MODULE_PACKAGE_NAMES[Modules.EVENT_BUS], label: upperCaseFirst(ModuleRegistrationName.EVENT_BUS), isRequired: true, + isQueryable: false, dependencies: ["logger"], defaultModuleDeclaration: { scope: MODULE_SCOPE.INTERNAL, @@ -80,6 +81,7 @@ export const ModulesDefinition: { defaultPackage: MODULE_PACKAGE_NAMES[Modules.CACHE], label: upperCaseFirst(ModuleRegistrationName.CACHE), isRequired: true, + isQueryable: false, defaultModuleDeclaration: { scope: MODULE_SCOPE.INTERNAL, resources: MODULE_RESOURCE_TYPE.SHARED, diff --git a/packages/core/modules-sdk/src/medusa-module.ts b/packages/core/modules-sdk/src/medusa-module.ts index 9f6d2dc29e..bb4091e56f 100644 --- a/packages/core/modules-sdk/src/medusa-module.ts +++ b/packages/core/modules-sdk/src/medusa-module.ts @@ -387,9 +387,19 @@ class MedusaModule { services[keyName].__definition = resolution.definition if (resolution.definition.isQueryable) { - const joinerConfig: ModuleJoinerConfig = await services[ - keyName - ].__joinerConfig() + let joinerConfig!: ModuleJoinerConfig + + try { + joinerConfig = await services[keyName].__joinerConfig?.() + } catch { + // noop + } + + if (!joinerConfig) { + throw new Error( + `Your module is missing a joiner config: ${keyName}. If this module is not queryable, please set { definition: { isQueryable: false } } in your module configuration.` + ) + } if (!joinerConfig.primaryKeys) { logger_.warn( @@ -513,9 +523,19 @@ class MedusaModule { services[keyName].__definition = resolution.definition if (resolution.definition.isQueryable) { - const joinerConfig: ModuleJoinerConfig = await services[ - keyName - ].__joinerConfig() + let joinerConfig!: ModuleJoinerConfig + + try { + joinerConfig = await services[keyName].__joinerConfig?.() + } catch { + // noop + } + + if (!joinerConfig) { + throw new Error( + `Your module is missing a joiner config: ${keyName}. If this module is not queryable, please set { definition: { isQueryable: false } } in your module configuration.` + ) + } services[keyName].__joinerConfig = joinerConfig MedusaModule.setJoinerConfig(keyName, joinerConfig) diff --git a/packages/medusa/src/loaders/medusa-app.ts b/packages/medusa/src/loaders/medusa-app.ts index 2c1c316095..9d2ce7f234 100644 --- a/packages/medusa/src/loaders/medusa-app.ts +++ b/packages/medusa/src/loaders/medusa-app.ts @@ -17,7 +17,9 @@ import { } from "@medusajs/types" import { ContainerRegistrationKeys, + isBoolean, isObject, + isPresent, upperCaseFirst, } from "@medusajs/utils" @@ -43,11 +45,15 @@ export function mergeDefaultModules( )) { const def = {} as ModuleDefinition def.key ??= key - def.registrationName ??= key - def.label ??= upperCaseFirst(key) + def.registrationName ??= ModulesDefinition[key]?.registrationName ?? key + def.label ??= ModulesDefinition[key]?.label ?? upperCaseFirst(key) + def.isQueryable = ModulesDefinition[key]?.isQueryable ?? true - const orignalDef = value?.definition - if (isObject(orignalDef)) { + const orignalDef = value?.definition ?? ModulesDefinition[key] + if ( + !isBoolean(value) && + (isObject(orignalDef) || !isPresent(value.definition)) + ) { value.definition = { ...def, ...orignalDef,