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
This commit is contained in:
Oliver Windall Juhl authored and GitHub committed 2023-06-26 13:33:40 +02:00
1 parent 01245ac89e
commit 85eb12883e
4 files changed
+33 -17

No files matched your search

+5
View File
@@ -0,0 +1,5 @@
---
"@medusajs/medusa": patch
---
feat(medusa): Improve error messaging in plugin loader
@@ -10,6 +10,7 @@ import {
} from "medusa-core-utils" } from "medusa-core-utils"
import path from "path" import path from "path"
import { handleConfigError } from "../../loaders/config" import { handleConfigError } from "../../loaders/config"
import { MEDUSA_PROJECT_NAME } from "../../loaders/plugins"
function createFileContentHash(path, files) { function createFileContentHash(path, files) {
return path + files return path + files
@@ -143,10 +144,11 @@ export default (directory, featureFlagRouter) => {
return details return details
}) })
// Resolve user's project as a plugin for loading purposes
resolved.push({ resolved.push({
resolve: `${directory}/dist`, resolve: `${directory}/dist`,
name: `project-plugin`, name: MEDUSA_PROJECT_NAME,
id: createPluginId(`project-plugin`), id: createPluginId(MEDUSA_PROJECT_NAME),
options: {}, options: {},
version: createFileContentHash(process.cwd(), `**`), version: createFileContentHash(process.cwd(), `**`),
}) })
@@ -5,11 +5,11 @@ import {
Resolver, Resolver,
} from "awilix" } from "awilix"
import { mkdirSync, rmSync, writeFileSync } from "fs" 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 { 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 ***** // ***** TEMPLATES *****
const buildServiceTemplate = (name: string): string => { const buildServiceTemplate = (name: string): string => {
@@ -116,7 +116,7 @@ describe("plugins loader", () => {
const pluginsDetails = { const pluginsDetails = {
resolve: resolve(__dirname, "__pluginsLoaderTest__"), resolve: resolve(__dirname, "__pluginsLoaderTest__"),
name: `project-plugin`, name: MEDUSA_PROJECT_NAME,
id: "fakeId", id: "fakeId",
options: {}, options: {},
version: '"fakeVersion', version: '"fakeVersion',
+19 -10
View File
@@ -55,6 +55,8 @@ type PluginDetails = {
export const isSearchEngineInstalledResolutionKey = "isSearchEngineInstalled" export const isSearchEngineInstalledResolutionKey = "isSearchEngineInstalled"
export const MEDUSA_PROJECT_NAME = "project-plugin"
/** /**
* Registers all services in the services directory * Registers all services in the services directory
*/ */
@@ -108,10 +110,11 @@ function getResolvedPlugins(
return details return details
}) })
// Resolve user's project as a plugin for loading purposes
resolved.push({ resolved.push({
resolve: `${rootDirectory}/dist`, resolve: `${rootDirectory}/dist`,
name: `project-plugin`, name: MEDUSA_PROJECT_NAME,
id: createPluginId(`project-plugin`), id: createPluginId(MEDUSA_PROJECT_NAME),
options: configModule, options: configModule,
version: createFileContentHash(process.cwd(), `**`), version: createFileContentHash(process.cwd(), `**`),
}) })
@@ -325,10 +328,12 @@ function registerApi(
activityId: string activityId: string
): Express { ): Express {
const logger = container.resolve<Logger>("logger") const logger = container.resolve<Logger>("logger")
logger.progress( const projectName =
activityId, pluginDetails.name === MEDUSA_PROJECT_NAME
`Registering custom endpoints for ${pluginDetails.name}` ? "your Medusa project"
) : `${pluginDetails.name}`
logger.progress(activityId, `Registering custom endpoints for ${projectName}`)
try { try {
const routes = require(`${pluginDetails.resolve}/api`).default const routes = require(`${pluginDetails.resolve}/api`).default
if (routes) { if (routes) {
@@ -336,12 +341,16 @@ function registerApi(
} }
return app return app
} catch (err) { } catch (err) {
if (err.message !== `Cannot find module '${pluginDetails.resolve}/api'`) { if (err.code !== "MODULE_NOT_FOUND") {
logger.progress( logger.warn(
activityId, `An error occured while registering endpoints in ${projectName}`
`No customer endpoints registered for ${pluginDetails.name}`
) )
if (err.stack) {
logger.warn(`${err.stack}`)
}
} }
return app return app
} }
} }