chore(modules-sdk): throw when failing to load module (#7431)

This commit is contained in:
Carlos R. L. Rodrigues
2024-05-23 13:16:36 -03:00
committed by GitHub
parent e3beaf5a29
commit 7b0cfe3b77
3 changed files with 16 additions and 28 deletions

View File

@@ -4,7 +4,6 @@ import {
ModuleResolution, ModuleResolution,
} from "@medusajs/types" } from "@medusajs/types"
import { createMedusaContainer } from "@medusajs/utils" import { createMedusaContainer } from "@medusajs/utils"
import { EOL } from "os"
import { moduleLoader } from "../module-loader" import { moduleLoader } from "../module-loader"
const logger = { const logger = {
@@ -114,11 +113,9 @@ describe("modules loader", () => {
}, },
} }
await moduleLoader({ container, moduleResolutions, logger }) expect(
moduleLoader({ container, moduleResolutions, logger })
expect(logger.warn).toHaveBeenCalledWith( ).rejects.toThrow("Loaders for module TestService failed: loader")
`Could not resolve module: TestService. Error: Loaders for module TestService failed: loader${EOL}`
)
}) })
it("should log the errors if no service is defined", async () => { it("should log the errors if no service is defined", async () => {
@@ -142,15 +139,14 @@ describe("modules loader", () => {
}, },
} }
await moduleLoader({ container, moduleResolutions, logger }) expect(
moduleLoader({ container, moduleResolutions, logger })
expect(logger.warn).toHaveBeenCalledWith( ).rejects.toThrow(
`Could not resolve module: TestService. Error: No service found in module. Make sure your module exports a service.${EOL}` "No service found in module TestService. Make sure your module exports a service."
) )
}) })
it("should throw an error if no service is defined and the module is required", async () => { it("should throw an error if no service is defined and the module is required", async () => {
expect.assertions(1)
const moduleResolutions: Record<string, ModuleResolution> = { const moduleResolutions: Record<string, ModuleResolution> = {
testService: { testService: {
resolutionPath: "@modules/no-service", resolutionPath: "@modules/no-service",
@@ -172,13 +168,11 @@ describe("modules loader", () => {
}, },
} }
try { expect(
await moduleLoader({ container, moduleResolutions, logger }) moduleLoader({ container, moduleResolutions, logger })
} catch (err) { ).rejects.toThrow(
expect(err.message).toEqual( "No service found in module TestService. Make sure your module exports a service."
"No service found in module. Make sure your module exports a service."
) )
}
}) })
it("should throw an error if the default package isn't found and the module is required", async () => { it("should throw an error if the default package isn't found and the module is required", async () => {

View File

@@ -33,16 +33,10 @@ export const moduleLoader = async ({
if (registrationResult?.error) { if (registrationResult?.error) {
const { error } = registrationResult const { error } = registrationResult
if (resolution.definition.isRequired) {
logger?.error( logger?.error(
`Could not resolve required module: ${resolution.definition.label}. Error: ${error.message}${EOL}`
)
throw error
}
logger?.warn(
`Could not resolve module: ${resolution.definition.label}. Error: ${error.message}${EOL}` `Could not resolve module: ${resolution.definition.label}. Error: ${error.message}${EOL}`
) )
throw error
} }
} }
} }

View File

@@ -15,9 +15,9 @@ import {
ModulesSdkUtils, ModulesSdkUtils,
} from "@medusajs/utils" } from "@medusajs/utils"
import { asFunction, asValue } from "awilix" import { asFunction, asValue } from "awilix"
import { join, resolve } from "path"
import { statSync } from "fs" import { statSync } from "fs"
import { readdir } from "fs/promises" import { readdir } from "fs/promises"
import { join, resolve } from "path"
type ModuleResource = { type ModuleResource = {
services: Function[] services: Function[]
@@ -90,7 +90,7 @@ export async function loadInternalModule(
return { return {
error: new Error( error: new Error(
"No service found in module. Make sure your module exports a service." `No service found in module ${resolution?.definition?.label}. Make sure your module exports a service.`
), ),
} }
} }