From 85eb12883e0571d494687e7a7e2f310c878f721d Mon Sep 17 00:00:00 2001 From: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com> Date: Mon, 26 Jun 2023 13:33:40 +0200 Subject: [PATCH] feat(medusa): Improve error messaging in plugin loader (#4410) * feat(medusa): Improve error messaging in plugin loader * Create fair-kids-tease.md * pr comments * pr comments --- .changeset/fair-kids-tease.md | 5 ++++ .../src/commands/utils/get-migrations.js | 6 ++-- .../src/loaders/__tests__/plugins.spec.ts | 10 +++---- packages/medusa/src/loaders/plugins.ts | 29 ++++++++++++------- 4 files changed, 33 insertions(+), 17 deletions(-) create mode 100644 .changeset/fair-kids-tease.md diff --git a/.changeset/fair-kids-tease.md b/.changeset/fair-kids-tease.md new file mode 100644 index 0000000000..b28eb52927 --- /dev/null +++ b/.changeset/fair-kids-tease.md @@ -0,0 +1,5 @@ +--- +"@medusajs/medusa": patch +--- + +feat(medusa): Improve error messaging in plugin loader diff --git a/packages/medusa/src/commands/utils/get-migrations.js b/packages/medusa/src/commands/utils/get-migrations.js index 38daf0ac52..c4dc61e219 100644 --- a/packages/medusa/src/commands/utils/get-migrations.js +++ b/packages/medusa/src/commands/utils/get-migrations.js @@ -10,6 +10,7 @@ import { } from "medusa-core-utils" import path from "path" import { handleConfigError } from "../../loaders/config" +import { MEDUSA_PROJECT_NAME } from "../../loaders/plugins" function createFileContentHash(path, files) { return path + files @@ -143,10 +144,11 @@ export default (directory, featureFlagRouter) => { return details }) + // Resolve user's project as a plugin for loading purposes resolved.push({ resolve: `${directory}/dist`, - name: `project-plugin`, - id: createPluginId(`project-plugin`), + name: MEDUSA_PROJECT_NAME, + id: createPluginId(MEDUSA_PROJECT_NAME), options: {}, version: createFileContentHash(process.cwd(), `**`), }) diff --git a/packages/medusa/src/loaders/__tests__/plugins.spec.ts b/packages/medusa/src/loaders/__tests__/plugins.spec.ts index 06bc62d48a..9ae20ab702 100644 --- a/packages/medusa/src/loaders/__tests__/plugins.spec.ts +++ b/packages/medusa/src/loaders/__tests__/plugins.spec.ts @@ -5,11 +5,11 @@ import { Resolver, } from "awilix" import { mkdirSync, rmSync, writeFileSync } from "fs" -import { resolve } from "path" -import Logger from "../logger" -import { registerServices, registerStrategies } from "../plugins" -import { DataSource, EntityManager } from "typeorm" import { createMedusaContainer } from "medusa-core-utils" +import { resolve } from "path" +import { DataSource, EntityManager } from "typeorm" +import Logger from "../logger" +import { MEDUSA_PROJECT_NAME, registerServices, registerStrategies } from "../plugins" // ***** TEMPLATES ***** const buildServiceTemplate = (name: string): string => { @@ -116,7 +116,7 @@ describe("plugins loader", () => { const pluginsDetails = { resolve: resolve(__dirname, "__pluginsLoaderTest__"), - name: `project-plugin`, + name: MEDUSA_PROJECT_NAME, id: "fakeId", options: {}, version: '"fakeVersion', diff --git a/packages/medusa/src/loaders/plugins.ts b/packages/medusa/src/loaders/plugins.ts index 52fcdbd9bb..6e4960db72 100644 --- a/packages/medusa/src/loaders/plugins.ts +++ b/packages/medusa/src/loaders/plugins.ts @@ -55,6 +55,8 @@ type PluginDetails = { export const isSearchEngineInstalledResolutionKey = "isSearchEngineInstalled" +export const MEDUSA_PROJECT_NAME = "project-plugin" + /** * Registers all services in the services directory */ @@ -108,10 +110,11 @@ function getResolvedPlugins( return details }) + // Resolve user's project as a plugin for loading purposes resolved.push({ resolve: `${rootDirectory}/dist`, - name: `project-plugin`, - id: createPluginId(`project-plugin`), + name: MEDUSA_PROJECT_NAME, + id: createPluginId(MEDUSA_PROJECT_NAME), options: configModule, version: createFileContentHash(process.cwd(), `**`), }) @@ -325,10 +328,12 @@ function registerApi( activityId: string ): Express { const logger = container.resolve("logger") - logger.progress( - activityId, - `Registering custom endpoints for ${pluginDetails.name}` - ) + const projectName = + pluginDetails.name === MEDUSA_PROJECT_NAME + ? "your Medusa project" + : `${pluginDetails.name}` + + logger.progress(activityId, `Registering custom endpoints for ${projectName}`) try { const routes = require(`${pluginDetails.resolve}/api`).default if (routes) { @@ -336,12 +341,16 @@ function registerApi( } return app } catch (err) { - if (err.message !== `Cannot find module '${pluginDetails.resolve}/api'`) { - logger.progress( - activityId, - `No customer endpoints registered for ${pluginDetails.name}` + if (err.code !== "MODULE_NOT_FOUND") { + logger.warn( + `An error occured while registering endpoints in ${projectName}` ) + + if (err.stack) { + logger.warn(`${err.stack}`) + } } + return app } }