diff --git a/.changeset/gorgeous-pianos-refuse.md b/.changeset/gorgeous-pianos-refuse.md new file mode 100644 index 0000000000..6987a78dc6 --- /dev/null +++ b/.changeset/gorgeous-pianos-refuse.md @@ -0,0 +1,6 @@ +--- +"@medusajs/modules-sdk": patch +"@medusajs/types": patch +--- + +Load custom modules by path diff --git a/packages/modules-sdk/src/__mocks__/inventory-module.ts b/packages/modules-sdk/src/__mocks__/inventory-module.ts index 1fc6e934e4..8af1b7b0fb 100644 --- a/packages/modules-sdk/src/__mocks__/inventory-module.ts +++ b/packages/modules-sdk/src/__mocks__/inventory-module.ts @@ -5,7 +5,6 @@ export const InventoryModule = { defaultPackage: false, label: "InventoryService", isRequired: false, - canOverride: true, isQueryable: true, dependencies: [], defaultModuleDeclaration: { diff --git a/packages/modules-sdk/src/__mocks__/inventory-stock-location-link.ts b/packages/modules-sdk/src/__mocks__/inventory-stock-location-link.ts index 46d6c58283..c25a79a8f6 100644 --- a/packages/modules-sdk/src/__mocks__/inventory-stock-location-link.ts +++ b/packages/modules-sdk/src/__mocks__/inventory-stock-location-link.ts @@ -4,7 +4,6 @@ export const InventoryStockLocationLink = { registrationName: "inventoryStockLocationLink", defaultPackage: "", label: "inventoryStockLocationLink", - canOverride: true, isRequired: false, isQueryable: true, defaultModuleDeclaration: { diff --git a/packages/modules-sdk/src/__mocks__/product-inventory-link.ts b/packages/modules-sdk/src/__mocks__/product-inventory-link.ts index 71eeac5ced..9c24013631 100644 --- a/packages/modules-sdk/src/__mocks__/product-inventory-link.ts +++ b/packages/modules-sdk/src/__mocks__/product-inventory-link.ts @@ -4,7 +4,6 @@ export const ProductInventoryLinkModule = { registrationName: "productVariantInventoryInventoryItemLink", defaultPackage: "", label: "productVariantInventoryInventoryItemLink", - canOverride: true, isRequired: false, isQueryable: true, defaultModuleDeclaration: { diff --git a/packages/modules-sdk/src/__mocks__/product-module.ts b/packages/modules-sdk/src/__mocks__/product-module.ts index f2ba682121..ea64540781 100644 --- a/packages/modules-sdk/src/__mocks__/product-module.ts +++ b/packages/modules-sdk/src/__mocks__/product-module.ts @@ -5,7 +5,6 @@ export const ProductModule = { defaultPackage: false, label: "ProductModuleService", isRequired: false, - canOverride: true, isQueryable: true, dependencies: ["eventBusModuleService"], defaultModuleDeclaration: { diff --git a/packages/modules-sdk/src/__mocks__/stock-location-module.ts b/packages/modules-sdk/src/__mocks__/stock-location-module.ts index 0ce20373b6..97137c4e73 100644 --- a/packages/modules-sdk/src/__mocks__/stock-location-module.ts +++ b/packages/modules-sdk/src/__mocks__/stock-location-module.ts @@ -5,7 +5,6 @@ export const StockLocationModule = { defaultPackage: false, label: "StockLocationService", isRequired: false, - canOverride: true, isQueryable: true, dependencies: ["eventBusService"], defaultModuleDeclaration: { diff --git a/packages/modules-sdk/src/definitions.ts b/packages/modules-sdk/src/definitions.ts index f8024d5d33..2bd73a32bd 100644 --- a/packages/modules-sdk/src/definitions.ts +++ b/packages/modules-sdk/src/definitions.ts @@ -64,7 +64,6 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } = registrationName: ModuleRegistrationName.EVENT_BUS, defaultPackage: MODULE_PACKAGE_NAMES[Modules.EVENT_BUS], label: upperCaseFirst(ModuleRegistrationName.EVENT_BUS), - canOverride: true, isRequired: true, dependencies: ["logger"], defaultModuleDeclaration: { @@ -79,7 +78,6 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } = defaultPackage: false, label: upperCaseFirst(ModuleRegistrationName.STOCK_LOCATION), isRequired: false, - canOverride: true, isQueryable: true, dependencies: ["eventBusService"], defaultModuleDeclaration: { @@ -94,7 +92,6 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } = defaultPackage: false, label: upperCaseFirst(ModuleRegistrationName.INVENTORY), isRequired: false, - canOverride: true, isQueryable: true, dependencies: ["eventBusService"], defaultModuleDeclaration: { @@ -109,7 +106,6 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } = defaultPackage: MODULE_PACKAGE_NAMES[Modules.CACHE], label: upperCaseFirst(ModuleRegistrationName.CACHE), isRequired: true, - canOverride: true, defaultModuleDeclaration: { scope: MODULE_SCOPE.INTERNAL, resources: MODULE_RESOURCE_TYPE.SHARED, @@ -121,7 +117,6 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } = defaultPackage: false, label: upperCaseFirst(ModuleRegistrationName.PRODUCT), isRequired: false, - canOverride: true, isQueryable: true, dependencies: [ModuleRegistrationName.EVENT_BUS, "logger"], defaultModuleDeclaration: { @@ -135,7 +130,6 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } = defaultPackage: false, label: upperCaseFirst(ModuleRegistrationName.PRICING), isRequired: false, - canOverride: true, isQueryable: true, dependencies: ["logger"], defaultModuleDeclaration: { @@ -149,7 +143,6 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } = defaultPackage: false, label: upperCaseFirst(ModuleRegistrationName.PROMOTION), isRequired: false, - canOverride: true, isQueryable: true, dependencies: ["logger"], defaultModuleDeclaration: { @@ -163,7 +156,6 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } = defaultPackage: false, label: upperCaseFirst(ModuleRegistrationName.AUTH), isRequired: false, - canOverride: true, isQueryable: true, dependencies: ["logger"], defaultModuleDeclaration: { @@ -177,7 +169,6 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } = defaultPackage: false, label: upperCaseFirst(ModuleRegistrationName.WORKFLOW_ENGINE), isRequired: false, - canOverride: true, isQueryable: true, dependencies: ["logger"], defaultModuleDeclaration: { @@ -191,7 +182,6 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } = defaultPackage: false, label: upperCaseFirst(ModuleRegistrationName.SALES_CHANNEL), isRequired: false, - canOverride: true, isQueryable: true, dependencies: ["logger"], defaultModuleDeclaration: { @@ -205,7 +195,6 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } = defaultPackage: false, label: upperCaseFirst(ModuleRegistrationName.CART), isRequired: false, - canOverride: true, isQueryable: true, dependencies: ["logger"], defaultModuleDeclaration: { @@ -219,7 +208,6 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } = defaultPackage: false, label: upperCaseFirst(ModuleRegistrationName.CUSTOMER), isRequired: false, - canOverride: true, isQueryable: true, dependencies: ["logger"], defaultModuleDeclaration: { @@ -233,7 +221,6 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } = defaultPackage: false, label: upperCaseFirst(ModuleRegistrationName.PAYMENT), isRequired: false, - canOverride: true, isQueryable: true, dependencies: ["logger"], defaultModuleDeclaration: { diff --git a/packages/modules-sdk/src/loaders/__tests__/register-modules.ts b/packages/modules-sdk/src/loaders/__tests__/register-modules.ts index 147d955627..a0d61bfc6f 100644 --- a/packages/modules-sdk/src/loaders/__tests__/register-modules.ts +++ b/packages/modules-sdk/src/loaders/__tests__/register-modules.ts @@ -18,7 +18,6 @@ describe("module definitions loader", () => { label: "TestService", isLegacy: true, isRequired: false, - canOverride: true, defaultModuleDeclaration: { scope: MODULE_SCOPE.INTERNAL, resources: MODULE_RESOURCE_TYPE.SHARED, diff --git a/packages/modules-sdk/src/loaders/register-modules.ts b/packages/modules-sdk/src/loaders/register-modules.ts index af0ebdc609..becced07f7 100644 --- a/packages/modules-sdk/src/loaders/register-modules.ts +++ b/packages/modules-sdk/src/loaders/register-modules.ts @@ -94,7 +94,7 @@ function getInternalModuleResolution( // If user added a module and it's overridable, we resolve that instead const isString = typeof moduleConfig === "string" - if (definition.canOverride && (isString || (isObj && moduleConfig.resolve))) { + if (isString || (isObj && moduleConfig.resolve)) { resolutionPath = !moduleExports ? resolveCwd(isString ? moduleConfig : (moduleConfig.resolve as string)) : // Explicitly assign an empty string, later, we will check if the value is exactly false. diff --git a/packages/modules-sdk/src/loaders/utils/load-internal.ts b/packages/modules-sdk/src/loaders/utils/load-internal.ts index 778efe0119..0d71bcf07f 100644 --- a/packages/modules-sdk/src/loaders/utils/load-internal.ts +++ b/packages/modules-sdk/src/loaders/utils/load-internal.ts @@ -29,12 +29,12 @@ export async function loadInternalModule( // the exports. This is useful when a package export an initialize function which will bootstrap itself and therefore // does not need to import the package that is currently being loaded as it would create a // circular reference. - const path = resolution.resolutionPath as string + const modulePath = resolution.resolutionPath as string if (resolution.moduleExports) { loadedModule = resolution.moduleExports } else { - loadedModule = await import(path) + loadedModule = await import(modulePath) loadedModule = (loadedModule as any).default } } catch (error) { diff --git a/packages/modules-sdk/src/medusa-app.ts b/packages/modules-sdk/src/medusa-app.ts index fff2bf0fec..f449911aab 100644 --- a/packages/modules-sdk/src/medusa-app.ts +++ b/packages/modules-sdk/src/medusa-app.ts @@ -74,7 +74,7 @@ async function loadModules(modulesConfig, sharedContainer) { let path: string let moduleExports: ModuleExports | undefined = undefined let declaration: any = {} - let definition: ModuleDefinition | undefined = undefined + let definition: Partial | undefined = undefined if (isObject(mod)) { const mod_ = mod as unknown as InternalModuleDeclaration @@ -102,7 +102,7 @@ async function loadModules(modulesConfig, sharedContainer) { defaultPath: path, declaration, sharedContainer, - moduleDefinition: definition, + moduleDefinition: definition as ModuleDefinition, moduleExports, })) as LoadedModule diff --git a/packages/modules-sdk/src/medusa-module.ts b/packages/modules-sdk/src/medusa-module.ts index fe1eb240bd..21b044ba32 100644 --- a/packages/modules-sdk/src/medusa-module.ts +++ b/packages/modules-sdk/src/medusa-module.ts @@ -86,7 +86,7 @@ export class MedusaModule { return MedusaModule.getModuleInstance(key) }) } - + public static onApplicationStart(): void { for (const instances of MedusaModule.instances_.values()) { for (const instance of Object.values(instances) as IModuleService[]) { @@ -354,7 +354,6 @@ export class MedusaModule { dependencies: definition.dependencies, defaultPackage: "", label: definition.label, - canOverride: true, isRequired: false, isQueryable: true, defaultModuleDeclaration: definition.defaultModuleDeclaration, diff --git a/packages/types/src/modules-sdk/index.ts b/packages/types/src/modules-sdk/index.ts index 8780aa80ec..86a34ae375 100644 --- a/packages/types/src/modules-sdk/index.ts +++ b/packages/types/src/modules-sdk/index.ts @@ -36,7 +36,7 @@ export type InternalModuleDeclaration = { scope: MODULE_SCOPE.INTERNAL resources: MODULE_RESOURCE_TYPE dependencies?: string[] - definition?: ModuleDefinition // 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?: 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. resolve?: string | ModuleExports options?: Record /** @@ -51,7 +51,7 @@ export type InternalModuleDeclaration = { export type ExternalModuleDeclaration = { scope: MODULE_SCOPE.EXTERNAL - definition?: ModuleDefinition // 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?: 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. server?: { type: "http" url: string @@ -82,13 +82,6 @@ export type ModuleDefinition = { registrationName: string defaultPackage: string | false label: string - /** - * @deprecated property will be removed in future versions - */ - canOverride?: boolean - /** - * @deprecated property will be removed in future versions - */ 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