From bca1f80dd501d878455e1ad4f5091cf20ef900ea Mon Sep 17 00:00:00 2001 From: "Carlos R. L. Rodrigues" <37986729+carlos-r-l-rodrigues@users.noreply.github.com> Date: Tue, 28 Mar 2023 12:43:20 -0300 Subject: [PATCH] chore(medusa, modules-sdk): default module error message (#3605) * default module error message * changeset * unit test --- .changeset/strong-ducks-change.md | 6 ++++ packages/medusa/src/loaders/index.ts | 1 + .../src/loaders/__tests__/module-loader.ts | 32 +++++++++++++++++++ .../src/loaders/utils/load-internal.ts | 11 +++++++ 4 files changed, 50 insertions(+) create mode 100644 .changeset/strong-ducks-change.md diff --git a/.changeset/strong-ducks-change.md b/.changeset/strong-ducks-change.md new file mode 100644 index 0000000000..2f1179700f --- /dev/null +++ b/.changeset/strong-ducks-change.md @@ -0,0 +1,6 @@ +--- +"@medusajs/modules-sdk": patch +"@medusajs/medusa": patch +--- + +Improved error message if default module is not installed diff --git a/packages/medusa/src/loaders/index.ts b/packages/medusa/src/loaders/index.ts index 9aa98c2e8b..c17db5cc68 100644 --- a/packages/medusa/src/loaders/index.ts +++ b/packages/medusa/src/loaders/index.ts @@ -94,6 +94,7 @@ export default async ({ moduleResolutions: registerModules(configModule?.modules), logger: Logger, }) + Logger.activity(`${EOL}`) const modAct = Logger.success(modulesActivity, "Modules initialized") || {} track("MODULES_INIT_COMPLETED", { duration: modAct.duration }) diff --git a/packages/modules-sdk/src/loaders/__tests__/module-loader.ts b/packages/modules-sdk/src/loaders/__tests__/module-loader.ts index 51069aaa1c..400fddd3ae 100644 --- a/packages/modules-sdk/src/loaders/__tests__/module-loader.ts +++ b/packages/modules-sdk/src/loaders/__tests__/module-loader.ts @@ -190,6 +190,38 @@ describe("modules loader", () => { } }) + it("throws error if default package isn't found and module is required", async () => { + expect.assertions(1) + const moduleResolutions: Record = { + testService: { + resolutionPath: "@medusajs/testService", + definition: { + registrationName: "testService", + key: "testService", + defaultPackage: "@medusajs/testService", + label: "TestService", + isRequired: true, + defaultModuleDeclaration: { + scope: MODULE_SCOPE.INTERNAL, + resources: MODULE_RESOURCE_TYPE.SHARED, + }, + }, + moduleDeclaration: { + scope: MODULE_SCOPE.INTERNAL, + resources: MODULE_RESOURCE_TYPE.SHARED, + }, + }, + } + + try { + await moduleLoader({ container, moduleResolutions, logger }) + } catch (err) { + expect(err.message).toEqual( + `Make sure you have installed the default package: @medusajs/testService` + ) + } + }) + it("throws error if no scope is defined to the module", async () => { expect.assertions(1) const moduleResolutions: Record = { diff --git a/packages/modules-sdk/src/loaders/utils/load-internal.ts b/packages/modules-sdk/src/loaders/utils/load-internal.ts index f631408dfb..e22f5d71da 100644 --- a/packages/modules-sdk/src/loaders/utils/load-internal.ts +++ b/packages/modules-sdk/src/loaders/utils/load-internal.ts @@ -26,6 +26,17 @@ export async function loadInternalModule( try { loadedModule = (await import(resolution.resolutionPath as string)).default } catch (error) { + if ( + resolution.definition.isRequired && + resolution.definition.defaultPackage + ) { + return { + error: new Error( + `Make sure you have installed the default package: ${resolution.definition.defaultPackage}` + ), + } + } + return { error } }