fix(medusa): PluginLoaders when loading services should only look for js files (#1473)
This commit is contained in:
committed by
GitHub
parent
525910f72a
commit
c67d6bee30
61
packages/medusa/src/loaders/__tests__/plugins.spec.ts
Normal file
61
packages/medusa/src/loaders/__tests__/plugins.spec.ts
Normal file
@@ -0,0 +1,61 @@
|
||||
import { createContainer, asValue } from "awilix"
|
||||
import { mkdirSync, rmSync, rmdirSync, writeFileSync } from "fs"
|
||||
import { resolve } from "path"
|
||||
import Logger from "../logger"
|
||||
import { registerServices } from "../plugins"
|
||||
import { MedusaContainer } from "../../types/global"
|
||||
|
||||
const distTestTargetDirectorPath = resolve(__dirname, "__pluginsLoaderTest__")
|
||||
const servicesTestTargetDirectoryPath = resolve(distTestTargetDirectorPath, "services")
|
||||
const buildServiceTemplate = (name: string) => {
|
||||
return `
|
||||
import { BaseService } from "medusa-interfaces"
|
||||
export default class ${name}Service extends BaseService {}
|
||||
`
|
||||
}
|
||||
|
||||
describe('plugins loader', () => {
|
||||
const container = createContainer() as MedusaContainer
|
||||
const pluginsDetails = {
|
||||
resolve: resolve(__dirname, "__pluginsLoaderTest__"),
|
||||
name: `project-plugin`,
|
||||
id: "fakeId",
|
||||
options: {},
|
||||
version: '"fakeVersion',
|
||||
}
|
||||
|
||||
describe("registerServices", function() {
|
||||
beforeAll(() => {
|
||||
container.register("logger", asValue(Logger))
|
||||
mkdirSync(servicesTestTargetDirectoryPath, { mode: "777", recursive: true })
|
||||
writeFileSync(resolve(servicesTestTargetDirectoryPath, "test.js"), buildServiceTemplate("test"))
|
||||
writeFileSync(resolve(servicesTestTargetDirectoryPath, "test2.js"), buildServiceTemplate("test2"))
|
||||
writeFileSync(resolve(servicesTestTargetDirectoryPath, "test2.js.map"), "map:file")
|
||||
writeFileSync(resolve(servicesTestTargetDirectoryPath, "test2.d.ts"), "export interface Test {}")
|
||||
})
|
||||
|
||||
afterAll(() => {
|
||||
rmSync(distTestTargetDirectorPath, { recursive: true, force: true })
|
||||
jest.clearAllMocks()
|
||||
})
|
||||
|
||||
it('should load the services from the services directory but only js files', async () => {
|
||||
let err;
|
||||
try {
|
||||
await registerServices(pluginsDetails, container)
|
||||
} catch (e) {
|
||||
err = e
|
||||
}
|
||||
|
||||
expect(err).toBeFalsy()
|
||||
|
||||
const testService: (...args: unknown[]) => any = container.resolve("testService")
|
||||
const test2Service: (...args: unknown[]) => any = container.resolve("test2Service")
|
||||
|
||||
expect(testService).toBeTruthy()
|
||||
expect(testService.constructor.name).toBe("testService")
|
||||
expect(test2Service).toBeTruthy()
|
||||
expect(test2Service.constructor.name).toBe("test2Service")
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -245,8 +245,8 @@ function registerApi(
|
||||
* registered
|
||||
* @return {void}
|
||||
*/
|
||||
async function registerServices(pluginDetails: PluginDetails, container: MedusaContainer): Promise<void> {
|
||||
const files = glob.sync(`${pluginDetails.resolve}/services/[!__]*`, {})
|
||||
export async function registerServices(pluginDetails: PluginDetails, container: MedusaContainer): Promise<void> {
|
||||
const files = glob.sync(`${pluginDetails.resolve}/services/[!__]*.js`, {})
|
||||
await Promise.all(
|
||||
files.map(async (fn) => {
|
||||
const loaded = require(fn).default
|
||||
|
||||
Reference in New Issue
Block a user