fix: load custom modules by path (#6312)
What:
medusa-config.js loading custom modules by their path.
```typescript
{
modules: {
internalModule: {
scope: MODULE_SCOPE.INTERNAL,
resources: MODULE_RESOURCE_TYPE.SHARED,
resolve: "./internal_module",
definition: {
key: "internalModule",
registrationName: "internalModule",
},
},
}
}
```
This commit is contained in:
committed by
GitHub
parent
58baead34e
commit
96ba49329b
@@ -5,7 +5,6 @@ export const InventoryModule = {
|
||||
defaultPackage: false,
|
||||
label: "InventoryService",
|
||||
isRequired: false,
|
||||
canOverride: true,
|
||||
isQueryable: true,
|
||||
dependencies: [],
|
||||
defaultModuleDeclaration: {
|
||||
|
||||
@@ -4,7 +4,6 @@ export const InventoryStockLocationLink = {
|
||||
registrationName: "inventoryStockLocationLink",
|
||||
defaultPackage: "",
|
||||
label: "inventoryStockLocationLink",
|
||||
canOverride: true,
|
||||
isRequired: false,
|
||||
isQueryable: true,
|
||||
defaultModuleDeclaration: {
|
||||
|
||||
@@ -4,7 +4,6 @@ export const ProductInventoryLinkModule = {
|
||||
registrationName: "productVariantInventoryInventoryItemLink",
|
||||
defaultPackage: "",
|
||||
label: "productVariantInventoryInventoryItemLink",
|
||||
canOverride: true,
|
||||
isRequired: false,
|
||||
isQueryable: true,
|
||||
defaultModuleDeclaration: {
|
||||
|
||||
@@ -5,7 +5,6 @@ export const ProductModule = {
|
||||
defaultPackage: false,
|
||||
label: "ProductModuleService",
|
||||
isRequired: false,
|
||||
canOverride: true,
|
||||
isQueryable: true,
|
||||
dependencies: ["eventBusModuleService"],
|
||||
defaultModuleDeclaration: {
|
||||
|
||||
@@ -5,7 +5,6 @@ export const StockLocationModule = {
|
||||
defaultPackage: false,
|
||||
label: "StockLocationService",
|
||||
isRequired: false,
|
||||
canOverride: true,
|
||||
isQueryable: true,
|
||||
dependencies: ["eventBusService"],
|
||||
defaultModuleDeclaration: {
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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<ModuleDefinition> | 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
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user