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:
1 parent
01245ac89e
commit
85eb12883e
4 files changed
+33
-17
No files matched your search
@@ -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',
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user