From a838ebae1b2d6863219f562d70797264d9333178 Mon Sep 17 00:00:00 2001 From: Sebastian Rindom Date: Sat, 9 Mar 2024 16:09:06 +0100 Subject: [PATCH] fix: make v2 with modules run (#6636) --- packages/customer/package.json | 2 +- packages/medusa/package.json | 2 +- .../src/api-v2/admin/campaigns/[id]/route.ts | 2 -- .../src/api-v2/admin/promotions/[id]/route.ts | 3 -- packages/medusa/src/commands/migrate.js | 28 +++++++++++++++---- packages/medusa/src/loaders/index.ts | 26 ++++++++--------- packages/payment/package.json | 1 - packages/promotion/package.json | 2 +- packages/utils/src/common/deep-copy.ts | 5 ---- yarn.lock | 11 ++++---- 10 files changed, 43 insertions(+), 39 deletions(-) diff --git a/packages/customer/package.json b/packages/customer/package.json index 34f9834975..e8ff6ba499 100644 --- a/packages/customer/package.json +++ b/packages/customer/package.json @@ -55,7 +55,7 @@ "@mikro-orm/migrations": "5.9.7", "@mikro-orm/postgresql": "5.9.7", "awilix": "^8.0.0", - "dotenv": "16.3.1", + "dotenv": "^16.4.5", "knex": "2.4.2" } } diff --git a/packages/medusa/package.json b/packages/medusa/package.json index 83b95d2fe2..310a3c20b2 100644 --- a/packages/medusa/package.json +++ b/packages/medusa/package.json @@ -70,7 +70,7 @@ "core-js": "^3.6.5", "cors": "^2.8.5", "cross-spawn": "^7.0.3", - "dotenv": "^16.0.3", + "dotenv": "^16.4.5", "express": "^4.18.2", "express-session": "^1.17.3", "fs-exists-cached": "^1.0.0", diff --git a/packages/medusa/src/api-v2/admin/campaigns/[id]/route.ts b/packages/medusa/src/api-v2/admin/campaigns/[id]/route.ts index 2093bfbd52..98cf3297e5 100644 --- a/packages/medusa/src/api-v2/admin/campaigns/[id]/route.ts +++ b/packages/medusa/src/api-v2/admin/campaigns/[id]/route.ts @@ -61,12 +61,10 @@ export const DELETE = async ( res: MedusaResponse ) => { const id = req.params.id - const manager = req.scope.resolve("manager") const deleteCampaigns = deleteCampaignsWorkflow(req.scope) const { errors } = await deleteCampaigns.run({ input: { ids: [id] }, - context: { manager }, throwOnError: false, }) diff --git a/packages/medusa/src/api-v2/admin/promotions/[id]/route.ts b/packages/medusa/src/api-v2/admin/promotions/[id]/route.ts index 3919d30424..d4136aae60 100644 --- a/packages/medusa/src/api-v2/admin/promotions/[id]/route.ts +++ b/packages/medusa/src/api-v2/admin/promotions/[id]/route.ts @@ -10,7 +10,6 @@ import { import { AdminPostPromotionsPromotionReq } from "../validators" import { IPromotionModuleService } from "@medusajs/types" import { ModuleRegistrationName } from "@medusajs/modules-sdk" -import { UpdateApplicationMethodDTO } from "@medusajs/types" import { UpdatePromotionDTO } from "@medusajs/types" export const GET = async ( @@ -58,12 +57,10 @@ export const DELETE = async ( res: MedusaResponse ) => { const id = req.params.id - const manager = req.scope.resolve("manager") const deletePromotions = deletePromotionsWorkflow(req.scope) const { errors } = await deletePromotions.run({ input: { ids: [id] }, - context: { manager }, throwOnError: false, }) diff --git a/packages/medusa/src/commands/migrate.js b/packages/medusa/src/commands/migrate.js index 5238182201..2182065e05 100644 --- a/packages/medusa/src/commands/migrate.js +++ b/packages/medusa/src/commands/migrate.js @@ -8,12 +8,14 @@ import getMigrations, { import { ContainerRegistrationKeys, createMedusaContainer, + MedusaV2Flag, + promiseAll, } from "@medusajs/utils" import configModuleLoader from "../loaders/config" import databaseLoader from "../loaders/database" import featureFlagLoader from "../loaders/feature-flags" import Logger from "../loaders/logger" -import { loadMedusaApp } from "../loaders/medusa-app" +import { migrateMedusaApp, loadMedusaApp } from "../loaders/medusa-app" import pgConnectionLoader from "../loaders/pg-connection" const getDataSource = async (directory) => { @@ -70,15 +72,31 @@ const main = async function ({ directory }) { args.shift() args.shift() + const featureFlagRouter = featureFlagLoader(configModule) const configModule = configModuleLoader(directory) const dataSource = await getDataSource(directory) if (args[0] === "run") { - await dataSource.runMigrations() - await dataSource.destroy() - await runIsolatedModulesMigration(configModule) + if (featureFlagRouter.isFeatureEnabled(MedusaV2Flag.key)) { + const container = createMedusaContainer() + const pgConnection = await pgConnectionLoader({ configModule, container }) + container.register({ + [ContainerRegistrationKeys.CONFIG_MODULE]: asValue(configModule), + [ContainerRegistrationKeys.LOGGER]: asValue(Logger), + [ContainerRegistrationKeys.PG_CONNECTION]: asValue(pgConnection), + featureFlagRouter: asValue(featureFlagRouter), + }) + await migrateMedusaApp( + { configModule, container }, + { registerInContainer: false } + ) + } else { + await dataSource.runMigrations() + await dataSource.destroy() + await runIsolatedModulesMigration(configModule) - await runLinkMigrations(directory) + await runLinkMigrations(directory) + } process.exit() Logger.info("Migrations completed.") diff --git a/packages/medusa/src/loaders/index.ts b/packages/medusa/src/loaders/index.ts index e96bf6198e..bca7a787fe 100644 --- a/packages/medusa/src/loaders/index.ts +++ b/packages/medusa/src/loaders/index.ts @@ -3,7 +3,11 @@ import { ModulesDefinition, } from "@medusajs/modules-sdk" import { MODULE_RESOURCE_TYPE } from "@medusajs/types" -import { ContainerRegistrationKeys, isString } from "@medusajs/utils" +import { + ContainerRegistrationKeys, + isString, + MedusaV2Flag, +} from "@medusajs/utils" import { asValue } from "awilix" import { Express, NextFunction, Request, Response } from "express" import { createMedusaContainer } from "medusa-core-utils" @@ -77,9 +81,7 @@ async function loadLegacyModulesEntities(configModules, container) { } } -async function loadMedusaV2({ directory, expressApp }) { - const configModule = loadConfig(directory) - +async function loadMedusaV2({ configModule, featureFlagRouter, expressApp }) { const container = createMedusaContainer() // Add additional information to context of request @@ -91,12 +93,9 @@ async function loadMedusaV2({ directory, expressApp }) { next() }) - const featureFlagRouter = featureFlagsLoader(configModule, Logger) - const pgConnection = await pgConnectionLoader({ container, configModule }) container.register({ - [ContainerRegistrationKeys.MANAGER]: asValue(dataSource.manager), [ContainerRegistrationKeys.LOGGER]: asValue(Logger), featureFlagRouter: asValue(featureFlagRouter), [ContainerRegistrationKeys.CONFIG_MODULE]: asValue(configModule), @@ -142,11 +141,13 @@ export default async ({ app: Express pgConnection: unknown }> => { - if (process.env.MEDUSA_FF_MEDUSA_V2 == "true") { - return await loadMedusaV2({ directory: rootDirectory, expressApp }) - } - const configModule = loadConfig(rootDirectory) + const featureFlagRouter = featureFlagsLoader(configModule, Logger) + track("FEATURE_FLAGS_LOADED") + + if (featureFlagRouter.isFeatureEnabled(MedusaV2Flag.key)) { + return await loadMedusaV2({ configModule, featureFlagRouter, expressApp }) + } const container = createMedusaContainer() container.register( @@ -163,9 +164,6 @@ export default async ({ next() }) - const featureFlagRouter = featureFlagsLoader(configModule, Logger) - track("FEATURE_FLAGS_LOADED") - container.register({ [ContainerRegistrationKeys.LOGGER]: asValue(Logger), featureFlagRouter: asValue(featureFlagRouter), diff --git a/packages/payment/package.json b/packages/payment/package.json index d676aeeb57..efa5ff385d 100644 --- a/packages/payment/package.json +++ b/packages/payment/package.json @@ -51,7 +51,6 @@ "@medusajs/modules-sdk": "^1.12.5", "@medusajs/types": "^1.11.9", "@medusajs/utils": "^1.11.2", - "@medusajs/workflows-sdk": "workspace:^", "@mikro-orm/core": "5.9.7", "@mikro-orm/migrations": "5.9.7", "@mikro-orm/postgresql": "5.9.7", diff --git a/packages/promotion/package.json b/packages/promotion/package.json index ebe0d87d34..5d46aea8a8 100644 --- a/packages/promotion/package.json +++ b/packages/promotion/package.json @@ -55,7 +55,7 @@ "@mikro-orm/migrations": "5.9.7", "@mikro-orm/postgresql": "5.9.7", "awilix": "^8.0.0", - "dotenv": "16.3.1", + "dotenv": "^16.4.5", "knex": "2.4.2" } } diff --git a/packages/utils/src/common/deep-copy.ts b/packages/utils/src/common/deep-copy.ts index a22431b778..035b22d13a 100644 --- a/packages/utils/src/common/deep-copy.ts +++ b/packages/utils/src/common/deep-copy.ts @@ -3,17 +3,12 @@ import { isObject } from "./is-object" /** * In most casees, JSON.parse(JSON.stringify(obj)) is enough to deep copy an object. * But in some cases, it's not enough. For example, if the object contains a function or a proxy, it will be lost after JSON.parse(JSON.stringify(obj)). - * Furthermore, structuredClone is not present in all environments, such as with jest so we need to use a custom deepCopy function. * * @param obj */ export function deepCopy = Record>( obj: T | T[] ): T | T[] { - if (typeof structuredClone != "undefined") { - return structuredClone(obj) - } - if (obj === null || typeof obj !== "object") { return obj } diff --git a/yarn.lock b/yarn.lock index 5ee725b72b..3eda1edccb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8122,7 +8122,7 @@ __metadata: "@mikro-orm/postgresql": 5.9.7 awilix: ^8.0.0 cross-env: ^5.2.1 - dotenv: 16.3.1 + dotenv: ^16.4.5 jest: ^29.6.3 knex: 2.4.2 medusa-test-utils: ^1.1.40 @@ -8499,7 +8499,7 @@ __metadata: cors: ^2.8.5 cross-env: ^5.2.1 cross-spawn: ^7.0.3 - dotenv: ^16.0.3 + dotenv: ^16.4.5 express: ^4.18.2 express-session: ^1.17.3 fs-exists-cached: ^1.0.0 @@ -8683,7 +8683,6 @@ __metadata: "@medusajs/modules-sdk": ^1.12.5 "@medusajs/types": ^1.11.9 "@medusajs/utils": ^1.11.2 - "@medusajs/workflows-sdk": "workspace:^" "@mikro-orm/cli": 5.9.7 "@mikro-orm/core": 5.9.7 "@mikro-orm/migrations": 5.9.7 @@ -8775,7 +8774,7 @@ __metadata: "@mikro-orm/postgresql": 5.9.7 awilix: ^8.0.0 cross-env: ^5.2.1 - dotenv: 16.3.1 + dotenv: ^16.4.5 jest: ^29.6.3 knex: 2.4.2 medusa-test-utils: ^1.1.40 @@ -9194,7 +9193,7 @@ __metadata: languageName: unknown linkType: soft -"@medusajs/workflows-sdk@^0.1.2, @medusajs/workflows-sdk@^0.1.3, @medusajs/workflows-sdk@workspace:^, @medusajs/workflows-sdk@workspace:packages/workflows-sdk": +"@medusajs/workflows-sdk@^0.1.2, @medusajs/workflows-sdk@^0.1.3, @medusajs/workflows-sdk@workspace:packages/workflows-sdk": version: 0.0.0-use.local resolution: "@medusajs/workflows-sdk@workspace:packages/workflows-sdk" dependencies: @@ -25870,7 +25869,7 @@ __metadata: languageName: node linkType: hard -"dotenv@npm:16.4.5": +"dotenv@npm:16.4.5, dotenv@npm:^16.4.5": version: 16.4.5 resolution: "dotenv@npm:16.4.5" checksum: 48d92870076832af0418b13acd6e5a5a3e83bb00df690d9812e94b24aff62b88ade955ac99a05501305b8dc8f1b0ee7638b18493deb6fe93d680e5220936292f