diff --git a/packages/core/modules-sdk/src/definitions.ts b/packages/core/modules-sdk/src/definitions.ts index bf8e5d8f82..687d4d58a4 100644 --- a/packages/core/modules-sdk/src/definitions.ts +++ b/packages/core/modules-sdk/src/definitions.ts @@ -96,7 +96,6 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } = { [Modules.EVENT_BUS]: { key: Modules.EVENT_BUS, - isLegacy: true, registrationName: ModuleRegistrationName.EVENT_BUS, defaultPackage: MODULE_PACKAGE_NAMES[Modules.EVENT_BUS], label: upperCaseFirst(ModuleRegistrationName.EVENT_BUS), @@ -109,7 +108,6 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } = }, [Modules.STOCK_LOCATION]: { key: Modules.STOCK_LOCATION, - isLegacy: true, registrationName: ModuleRegistrationName.STOCK_LOCATION, defaultPackage: false, label: upperCaseFirst(ModuleRegistrationName.STOCK_LOCATION), @@ -123,7 +121,6 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } = }, [Modules.INVENTORY]: { key: Modules.INVENTORY, - isLegacy: true, registrationName: ModuleRegistrationName.INVENTORY, defaultPackage: false, label: upperCaseFirst(ModuleRegistrationName.INVENTORY), @@ -137,7 +134,6 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } = }, [Modules.CACHE]: { key: Modules.CACHE, - isLegacy: true, registrationName: ModuleRegistrationName.CACHE, defaultPackage: MODULE_PACKAGE_NAMES[Modules.CACHE], label: upperCaseFirst(ModuleRegistrationName.CACHE), diff --git a/packages/core/modules-sdk/src/loaders/__tests__/register-modules.ts b/packages/core/modules-sdk/src/loaders/__tests__/register-modules.ts index 0eec63aacc..d0215a59b4 100644 --- a/packages/core/modules-sdk/src/loaders/__tests__/register-modules.ts +++ b/packages/core/modules-sdk/src/loaders/__tests__/register-modules.ts @@ -16,7 +16,6 @@ describe("module definitions loader", () => { registrationName: "testService", defaultPackage: "@medusajs/test-service", label: "TestService", - isLegacy: true, isRequired: false, defaultModuleDeclaration: { scope: MODULE_SCOPE.INTERNAL, diff --git a/packages/core/modules-sdk/src/loaders/module-loader.ts b/packages/core/modules-sdk/src/loaders/module-loader.ts index 5c84e7f013..96ee81b8e7 100644 --- a/packages/core/modules-sdk/src/loaders/module-loader.ts +++ b/packages/core/modules-sdk/src/loaders/module-loader.ts @@ -55,6 +55,13 @@ async function loadModule( loaderOnly?: boolean ): Promise<{ error?: Error } | void> { const modDefinition = resolution.definition + + if (!modDefinition.key) { + throw new Error(`Module definition is missing property "key"`) + } + + modDefinition.registrationName ??= modDefinition.key + const registrationName = modDefinition.registrationName const { scope, resources } = resolution.moduleDeclaration ?? ({} as any) diff --git a/packages/core/types/src/modules-sdk/index.ts b/packages/core/types/src/modules-sdk/index.ts index 736e5ac161..78072a3c4b 100644 --- a/packages/core/types/src/modules-sdk/index.ts +++ b/packages/core/types/src/modules-sdk/index.ts @@ -34,11 +34,19 @@ export enum MODULE_RESOURCE_TYPE { ISOLATED = "isolated", } +export type CustomModuleDefinition = { + key?: string + registrationName?: string + label?: string + isQueryable?: boolean // If the module is queryable via Remote Joiner + dependencies?: string[] +} + export type InternalModuleDeclaration = { scope: MODULE_SCOPE.INTERNAL resources: MODULE_RESOURCE_TYPE dependencies?: string[] - definition?: Partial // That represent the definition of the module, such as the one we have for the medusa supported modules. This property is used for custom made modules. + definition?: CustomModuleDefinition // That represent the definition of the module, such as the one we have for the medusa supported modules. This property is used for custom made modules. resolve?: string | ModuleExports options?: Record /** @@ -54,7 +62,7 @@ export type InternalModuleDeclaration = { export type ExternalModuleDeclaration = { scope: MODULE_SCOPE.EXTERNAL - definition?: Partial // That represent the definition of the module, such as the one we have for the medusa supported modules. This property is used for custom made modules. + definition?: CustomModuleDefinition // That represent the definition of the module, such as the one we have for the medusa supported modules. This property is used for custom made modules. server?: { type: "http" url: string @@ -87,7 +95,6 @@ export type ModuleDefinition = { label: string isRequired?: boolean isQueryable?: boolean // If the module is queryable via Remote Joiner - isLegacy?: boolean // If the module is a legacy module TODO: Remove once all the legacy modules are migrated dependencies?: string[] defaultModuleDeclaration: | InternalModuleDeclaration diff --git a/packages/medusa/src/loaders/medusa-app.ts b/packages/medusa/src/loaders/medusa-app.ts index 9e67ddb7a1..117a81a608 100644 --- a/packages/medusa/src/loaders/medusa-app.ts +++ b/packages/medusa/src/loaders/medusa-app.ts @@ -18,6 +18,7 @@ import { ContainerRegistrationKeys, FlagRouter, isObject, + upperCaseFirst, } from "@medusajs/utils" import { asValue } from "awilix" @@ -38,6 +39,23 @@ export function mergeDefaultModules( configModules[defaultModule.key] ??= defaultModule.defaultModuleDeclaration } + for (const [key, value] of Object.entries( + configModules as Record + )) { + const def = {} as ModuleDefinition + def.key ??= key + def.registrationName ??= key + def.label ??= upperCaseFirst(key) + + const orignalDef = value?.definition + if (isObject(orignalDef)) { + value.definition = { + ...orignalDef, + ...def, + } + } + } + return configModules } @@ -75,28 +93,6 @@ export async function migrateMedusaApp( } const configModules = mergeDefaultModules(configModule.modules) - // Apply default options to legacy modules - for (const moduleKey of Object.keys(configModules)) { - if (!ModulesDefinition[moduleKey]?.isLegacy) { - continue - } - - if (isObject(configModules[moduleKey])) { - ;( - configModules[moduleKey] as Partial - ).options ??= { - database: { - type: "postgres", - url: sharedResourcesConfig.database.clientUrl, - clientUrl: sharedResourcesConfig.database.clientUrl, - extra: configModule.projectConfig.database_extra, - schema: configModule.projectConfig.database_schema, - logging: configModule.projectConfig.database_logging, - }, - } - } - } - await MedusaAppMigrateUp({ modulesConfig: configModules, remoteFetchData: remoteQueryFetchData(container), @@ -141,27 +137,6 @@ export const loadMedusaApp = async ( const configModules = mergeDefaultModules(configModule.modules) - // Apply default options to legacy modules - for (const moduleKey of Object.keys(configModules)) { - if (!ModulesDefinition[moduleKey]?.isLegacy) { - continue - } - - if (isObject(configModules[moduleKey])) { - ;( - configModules[moduleKey] as Partial - ).options ??= { - database: { - type: "postgres", - url: configModule.projectConfig.database_url, - extra: configModule.projectConfig.database_extra, - schema: configModule.projectConfig.database_schema, - logging: configModule.projectConfig.database_logging, - }, - } - } - } - const medusaApp = await MedusaApp({ workerMode: configModule.projectConfig.worker_mode, modulesConfig: configModules, @@ -261,27 +236,6 @@ export async function runModulesLoader({ const configModules = mergeDefaultModules(configModule.modules) - // Apply default options to legacy modules - for (const moduleKey of Object.keys(configModules)) { - if (!ModulesDefinition[moduleKey]?.isLegacy) { - continue - } - - if (isObject(configModules[moduleKey])) { - ;( - configModules[moduleKey] as Partial - ).options ??= { - database: { - type: "postgres", - url: configModule.projectConfig.database_url, - extra: configModule.projectConfig.database_extra, - schema: configModule.projectConfig.database_schema, - logging: configModule.projectConfig.database_logging, - }, - } - } - } - await MedusaApp({ modulesConfig: configModules, remoteFetchData: remoteQueryFetchData(container), diff --git a/packages/medusa/src/utils/merge-modules-config.ts b/packages/medusa/src/utils/merge-modules-config.ts index e6f6793fae..d6b54df770 100644 --- a/packages/medusa/src/utils/merge-modules-config.ts +++ b/packages/medusa/src/utils/merge-modules-config.ts @@ -1,7 +1,5 @@ import { ConfigModule } from "@medusajs/types" -import { ModulesDefinition } from "@medusajs/modules-sdk" - /** * Merge the modules config from the medusa-config file with the modules config from medusa package * @param modules @@ -24,12 +22,6 @@ export function mergeModulesConfig( for (const moduleName of allModulesKeys) { const internalModuleConfig = medusaInternalModulesConfig[moduleName] - const moduleDefinition = ModulesDefinition[moduleName] - - if (moduleDefinition?.isLegacy) { - continue - } - modules_[moduleName] ??= internalModuleConfig }