From f49139b20ffda436d81058ef488e2aca8e08b7a8 Mon Sep 17 00:00:00 2001 From: Adrien de Peretti Date: Thu, 4 Jul 2024 16:50:53 +0200 Subject: [PATCH] fix: custom link resolution in medusa app (#7950) * fix custom link resolution in medusa app * improve * fix duplicate --- packages/core/modules-sdk/src/medusa-app.ts | 10 ++-------- packages/core/utils/src/modules-sdk/define-link.ts | 4 +++- .../src/loaders/helpers/resolve-plugins-links.ts | 14 +++++++++++--- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/packages/core/modules-sdk/src/medusa-app.ts b/packages/core/modules-sdk/src/medusa-app.ts index 449ba127c7..535782b6b1 100644 --- a/packages/core/modules-sdk/src/medusa-app.ts +++ b/packages/core/modules-sdk/src/medusa-app.ts @@ -435,12 +435,6 @@ async function MedusaApp_({ ...(sharedResourcesConfig?.database ?? {}), } - const customLinks = MedusaModule.getCustomLinks().map((link) => { - return typeof link === "function" - ? link(MedusaModule.getAllJoinerConfigs()) - : link - }) - if (revert) { revertLinkModuleMigration && (await revertLinkModuleMigration( @@ -448,7 +442,7 @@ async function MedusaApp_({ options: linkModuleOpt, injectedDependencies, }, - customLinks + linkModules )) } else { linkModuleMigration && @@ -457,7 +451,7 @@ async function MedusaApp_({ options: linkModuleOpt, injectedDependencies, }, - customLinks + linkModules )) } } diff --git a/packages/core/utils/src/modules-sdk/define-link.ts b/packages/core/utils/src/modules-sdk/define-link.ts index 8c06729b4a..6242d71372 100644 --- a/packages/core/utils/src/modules-sdk/define-link.ts +++ b/packages/core/utils/src/modules-sdk/define-link.ts @@ -2,6 +2,8 @@ import { LinkModulesExtraFields, ModuleJoinerConfig } from "@medusajs/types" import { isObject, pluralize, toPascalCase } from "../common" import { composeLinkName } from "../link" +export const DefineLinkSymbol = Symbol.for("DefineLink") + type InputSource = { serviceName: string field: string @@ -116,7 +118,7 @@ export function defineLink( throw new Error(`Invalid linkable passed for the second argument`) } - const output = { serviceName: "" } + const output = { [DefineLinkSymbol]: true, serviceName: "" } const register = function ( modules: ModuleJoinerConfig[] diff --git a/packages/medusa/src/loaders/helpers/resolve-plugins-links.ts b/packages/medusa/src/loaders/helpers/resolve-plugins-links.ts index cd9e485e5a..4d159bf274 100644 --- a/packages/medusa/src/loaders/helpers/resolve-plugins-links.ts +++ b/packages/medusa/src/loaders/helpers/resolve-plugins-links.ts @@ -4,7 +4,11 @@ import { ModuleJoinerConfig, PluginDetails, } from "@medusajs/types" -import { ContainerRegistrationKeys, isObject } from "@medusajs/utils" +import { + ContainerRegistrationKeys, + DefineLinkSymbol, + isObject, +} from "@medusajs/utils" /** * import files from the links directory to retrieve the links to be loaded @@ -42,8 +46,12 @@ export async function resolvePluginsLinks( return import_.default }) ) - ).filter(Boolean) + ).filter((value) => { + return isObject(value) && !value[DefineLinkSymbol] + }) }) ) - ).flat(Infinity) + ) + .flat(Infinity) + .filter(Boolean) }