diff --git a/packages/cli/medusa-dev-cli/src/index.js b/packages/cli/medusa-dev-cli/src/index.js index acc33f0aa7..d551a6a091 100644 --- a/packages/cli/medusa-dev-cli/src/index.js +++ b/packages/cli/medusa-dev-cli/src/index.js @@ -1,5 +1,11 @@ #!/usr/bin/env node +try { + require("ts-node").register({}) + require("tsconfig-paths").register({}) +} catch {} +require("dotenv").config() + const Configstore = require(`configstore`) const pkg = require(`../package.json`) const _ = require(`lodash`) diff --git a/packages/core/framework/src/config/__tests__/index.spec.ts b/packages/core/framework/src/config/__tests__/index.spec.ts index b38b5556ad..4020c9b9dd 100644 --- a/packages/core/framework/src/config/__tests__/index.spec.ts +++ b/packages/core/framework/src/config/__tests__/index.spec.ts @@ -13,14 +13,14 @@ describe("configLoader", () => { expect(configModule).toBeUndefined() - configLoader(entryDirectory, "medusa-config") + await configLoader(entryDirectory, "medusa-config") configModule = container.resolve(ContainerRegistrationKeys.CONFIG_MODULE) expect(configModule).toBeDefined() expect(configModule.projectConfig.databaseName).toBeUndefined() - configLoader(entryDirectory, "medusa-config-2") + await configLoader(entryDirectory, "medusa-config-2") configModule = container.resolve(ContainerRegistrationKeys.CONFIG_MODULE) @@ -30,7 +30,7 @@ describe("configLoader", () => { process.env.MEDUSA_WORKER_MODE = "worker" - configLoader(entryDirectory, "medusa-config-2") + await configLoader(entryDirectory, "medusa-config-2") configModule = container.resolve(ContainerRegistrationKeys.CONFIG_MODULE) diff --git a/packages/core/framework/src/config/loader.ts b/packages/core/framework/src/config/loader.ts index 698b64a761..18c555ff84 100644 --- a/packages/core/framework/src/config/loader.ts +++ b/packages/core/framework/src/config/loader.ts @@ -26,11 +26,14 @@ container.register( * @param entryDirectory The directory to find the config file from * @param configFileName The name of the config file to search for in the entry directory */ -export function configLoader( +export async function configLoader( entryDirectory: string, configFileName: string -): ConfigModule { - const config = getConfigFile(entryDirectory, configFileName) +): Promise { + const config = await getConfigFile( + entryDirectory, + configFileName + ) if (config.error) { handleConfigError(config.error) diff --git a/packages/core/utils/src/common/get-config-file.ts b/packages/core/utils/src/common/get-config-file.ts index 1983f781b7..3438f312a6 100644 --- a/packages/core/utils/src/common/get-config-file.ts +++ b/packages/core/utils/src/common/get-config-file.ts @@ -1,4 +1,5 @@ import { join } from "path" +import { dynamicImport } from "./dynamic-import" /** * Attempts to resolve the config file in a given root directory. @@ -6,22 +7,23 @@ import { join } from "path" * @param {string} configName - the name of the config file. * @return {object} an object containing the config module and its path as well as an error property if the config couldn't be loaded. */ -export function getConfigFile( +export async function getConfigFile( rootDir: string, configName: string -): +): Promise< | { configModule: null; configFilePath: string; error: Error } - | { configModule: TConfig; configFilePath: string; error: null } { + | { configModule: TConfig; configFilePath: string; error: null } +> { const configPath = join(rootDir, configName) try { - const configFilePath = require.resolve(configPath) - const configExports = require(configFilePath) + const configFilePath = join(process.cwd(), rootDir, configName) + const resolvedExports = await dynamicImport(configPath) return { configModule: - configExports && "default" in configExports - ? configExports.default - : configExports, + "default" in resolvedExports && resolvedExports.default + ? resolvedExports.default + : resolvedExports, configFilePath, error: null, } diff --git a/packages/medusa-test-utils/src/medusa-test-runner-utils/config.ts b/packages/medusa-test-utils/src/medusa-test-runner-utils/config.ts index c4b2ee68a2..a617c3d8de 100644 --- a/packages/medusa-test-utils/src/medusa-test-runner-utils/config.ts +++ b/packages/medusa-test-utils/src/medusa-test-runner-utils/config.ts @@ -5,7 +5,7 @@ export async function configLoaderOverride( override: { clientUrl: string; debug?: boolean } ) { const { configManager } = await import("@medusajs/framework/config") - const { configModule, error } = getConfigFile< + const { configModule, error } = await getConfigFile< ReturnType >(entryDirectory, "medusa-config") diff --git a/packages/medusa/src/commands/build.ts b/packages/medusa/src/commands/build.ts index 79d080e8fd..53839e19a4 100644 --- a/packages/medusa/src/commands/build.ts +++ b/packages/medusa/src/commands/build.ts @@ -1,5 +1,5 @@ import path from "path" -import { rm, copyFile, access, constants } from "node:fs/promises" +import { access, constants, copyFile, rm } from "node:fs/promises" import type tsStatic from "typescript" import { logger } from "@medusajs/framework/logger" import { ConfigModule } from "@medusajs/framework/types" @@ -39,15 +39,13 @@ async function clean(path: string) { /** * Loads the medusa config file or exits with an error */ -function loadMedusaConfig(directory: string) { +async function loadMedusaConfig(directory: string) { /** * Parsing the medusa config file to ensure it is error * free */ - const { configModule, configFilePath, error } = getConfigFile( - directory, - "medusa-config" - ) + const { configModule, configFilePath, error } = + await getConfigFile(directory, "medusa-config") if (error) { console.error(`Failed to load medusa-config.js`) console.error(error) @@ -199,7 +197,7 @@ async function buildBackend(projectRoot: string): Promise { */ async function buildFrontend(projectRoot: string): Promise { const startTime = process.hrtime() - const configFile = loadMedusaConfig(projectRoot) + const configFile = await loadMedusaConfig(projectRoot) if (!configFile) { return false } diff --git a/packages/medusa/src/loaders/index.ts b/packages/medusa/src/loaders/index.ts index a3ec7c14b3..dfc27634cd 100644 --- a/packages/medusa/src/loaders/index.ts +++ b/packages/medusa/src/loaders/index.ts @@ -118,7 +118,7 @@ async function loadEntrypoints( export async function initializeContainer( rootDirectory: string ): Promise { - configLoader(rootDirectory, "medusa-config") + await configLoader(rootDirectory, "medusa-config") await featureFlagsLoader(join(__dirname, "feature-flags")) container.register({ diff --git a/packages/modules/index/integration-tests/__tests__/index-engine-module.spec.ts b/packages/modules/index/integration-tests/__tests__/index-engine-module.spec.ts index 9ea6f476c7..31cc6e7919 100644 --- a/packages/modules/index/integration-tests/__tests__/index-engine-module.spec.ts +++ b/packages/modules/index/integration-tests/__tests__/index-engine-module.spec.ts @@ -100,7 +100,10 @@ let index!: IndexTypes.IIndexService const beforeAll_ = async () => { try { - configLoader(path.join(__dirname, "./../__fixtures__"), "medusa-config") + await configLoader( + path.join(__dirname, "./../__fixtures__"), + "medusa-config" + ) console.log(`Creating database ${dbName}`) await dbUtils.create(dbName) diff --git a/packages/modules/index/integration-tests/__tests__/query-builder.spec.ts b/packages/modules/index/integration-tests/__tests__/query-builder.spec.ts index b7482c466e..b99e418062 100644 --- a/packages/modules/index/integration-tests/__tests__/query-builder.spec.ts +++ b/packages/modules/index/integration-tests/__tests__/query-builder.spec.ts @@ -33,7 +33,10 @@ let medusaAppLoader!: MedusaAppLoader const beforeAll_ = async () => { try { - configLoader(path.join(__dirname, "./../__fixtures__"), "medusa-config") + await configLoader( + path.join(__dirname, "./../__fixtures__"), + "medusa-config" + ) console.log(`Creating database ${dbName}`) await dbUtils.create(dbName)