From 0bd46c97b7da3d9d645ae93816c140793aec3e30 Mon Sep 17 00:00:00 2001 From: Harminder Virk Date: Thu, 25 Jul 2024 12:53:35 +0530 Subject: [PATCH] breaking: remove loading middlewares file in favor of routes-config files (#8274) --- .../api/{middlewares.ts => routes-config.ts} | 112 +++++++++--------- .../{middlewares.ts => routes-config.ts} | 6 +- .../{middlewares.ts => routes-config.ts} | 46 ++++--- .../src/loaders/helpers/routing/index.ts | 20 ++-- .../medusa/src/utils/define-routes-config.ts | 10 +- 5 files changed, 99 insertions(+), 95 deletions(-) rename packages/medusa/src/api/{middlewares.ts => routes-config.ts} (65%) rename packages/medusa/src/loaders/helpers/routing/__fixtures__/routers-error-handler/{middlewares.ts => routes-config.ts} (87%) rename packages/medusa/src/loaders/helpers/routing/__fixtures__/routers-middleware/{middlewares.ts => routes-config.ts} (52%) diff --git a/packages/medusa/src/api/middlewares.ts b/packages/medusa/src/api/routes-config.ts similarity index 65% rename from packages/medusa/src/api/middlewares.ts rename to packages/medusa/src/api/routes-config.ts index 738ca8d15d..f66361ef43 100644 --- a/packages/medusa/src/api/middlewares.ts +++ b/packages/medusa/src/api/routes-config.ts @@ -1,4 +1,4 @@ -import { MiddlewaresConfig } from "../loaders/helpers/routing/types" +import { defineRoutesConfig } from "../utils/define-routes-config" import { adminApiKeyRoutesMiddlewares } from "./admin/api-keys/middlewares" import { adminCampaignRoutesMiddlewares } from "./admin/campaigns/middlewares" import { adminCollectionRoutesMiddlewares } from "./admin/collections/middlewares" @@ -50,59 +50,57 @@ import { storeReturnReasonRoutesMiddlewares } from "./store/return-reasons/middl import { storeShippingOptionRoutesMiddlewares } from "./store/shipping-options/middlewares" import { adminReturnRoutesMiddlewares } from "./admin/returns/middlewares" -export const config: MiddlewaresConfig = { - routes: [ - ...adminCustomerGroupRoutesMiddlewares, - ...adminCustomerRoutesMiddlewares, - ...adminPromotionRoutesMiddlewares, - ...adminCampaignRoutesMiddlewares, - ...storeCartRoutesMiddlewares, - ...storeCustomerRoutesMiddlewares, - ...storeCartRoutesMiddlewares, - ...storeCollectionRoutesMiddlewares, - ...storeProductCategoryRoutesMiddlewares, - ...storePaymentProvidersMiddlewares, - ...storeShippingOptionRoutesMiddlewares, - ...storePaymentCollectionsMiddlewares, - ...storeOrderRoutesMiddlewares, - ...authRoutesMiddlewares, - ...adminWorkflowsExecutionsMiddlewares, - ...adminReturnRoutesMiddlewares, - ...storeRegionRoutesMiddlewares, - ...adminRegionRoutesMiddlewares, - ...adminReturnRoutesMiddlewares, - ...adminUserRoutesMiddlewares, - ...adminInviteRoutesMiddlewares, - ...adminTaxRateRoutesMiddlewares, - ...adminTaxRegionRoutesMiddlewares, - ...adminApiKeyRoutesMiddlewares, - ...hooksRoutesMiddlewares, - ...adminStoreRoutesMiddlewares, - ...adminCurrencyRoutesMiddlewares, - ...storeCurrencyRoutesMiddlewares, - ...adminProductRoutesMiddlewares, - ...adminPaymentRoutesMiddlewares, - ...adminPriceListsRoutesMiddlewares, - ...adminPricePreferencesRoutesMiddlewares, - ...adminInventoryRoutesMiddlewares, - ...adminCollectionRoutesMiddlewares, - ...adminShippingOptionRoutesMiddlewares, - ...adminDraftOrderRoutesMiddlewares, - ...adminSalesChannelRoutesMiddlewares, - ...adminStockLocationRoutesMiddlewares, - ...adminProductTypeRoutesMiddlewares, - ...adminProductTagRoutesMiddlewares, - ...adminUploadRoutesMiddlewares, - ...adminFulfillmentSetsRoutesMiddlewares, - ...adminNotificationRoutesMiddlewares, - ...adminOrderRoutesMiddlewares, - ...adminReservationRoutesMiddlewares, - ...adminProductCategoryRoutesMiddlewares, - ...adminShippingProfilesMiddlewares, - ...adminFulfillmentsRoutesMiddlewares, - ...adminFulfillmentProvidersRoutesMiddlewares, - ...storeProductRoutesMiddlewares, - ...storeReturnReasonRoutesMiddlewares, - ...adminReturnReasonRoutesMiddlewares, - ], -} +export default defineRoutesConfig([ + ...adminCustomerGroupRoutesMiddlewares, + ...adminCustomerRoutesMiddlewares, + ...adminPromotionRoutesMiddlewares, + ...adminCampaignRoutesMiddlewares, + ...storeCartRoutesMiddlewares, + ...storeCustomerRoutesMiddlewares, + ...storeCartRoutesMiddlewares, + ...storeCollectionRoutesMiddlewares, + ...storeProductCategoryRoutesMiddlewares, + ...storePaymentProvidersMiddlewares, + ...storeShippingOptionRoutesMiddlewares, + ...storePaymentCollectionsMiddlewares, + ...storeOrderRoutesMiddlewares, + ...authRoutesMiddlewares, + ...adminWorkflowsExecutionsMiddlewares, + ...adminReturnRoutesMiddlewares, + ...storeRegionRoutesMiddlewares, + ...adminRegionRoutesMiddlewares, + ...adminReturnRoutesMiddlewares, + ...adminUserRoutesMiddlewares, + ...adminInviteRoutesMiddlewares, + ...adminTaxRateRoutesMiddlewares, + ...adminTaxRegionRoutesMiddlewares, + ...adminApiKeyRoutesMiddlewares, + ...hooksRoutesMiddlewares, + ...adminStoreRoutesMiddlewares, + ...adminCurrencyRoutesMiddlewares, + ...storeCurrencyRoutesMiddlewares, + ...adminProductRoutesMiddlewares, + ...adminPaymentRoutesMiddlewares, + ...adminPriceListsRoutesMiddlewares, + ...adminPricePreferencesRoutesMiddlewares, + ...adminInventoryRoutesMiddlewares, + ...adminCollectionRoutesMiddlewares, + ...adminShippingOptionRoutesMiddlewares, + ...adminDraftOrderRoutesMiddlewares, + ...adminSalesChannelRoutesMiddlewares, + ...adminStockLocationRoutesMiddlewares, + ...adminProductTypeRoutesMiddlewares, + ...adminProductTagRoutesMiddlewares, + ...adminUploadRoutesMiddlewares, + ...adminFulfillmentSetsRoutesMiddlewares, + ...adminNotificationRoutesMiddlewares, + ...adminOrderRoutesMiddlewares, + ...adminReservationRoutesMiddlewares, + ...adminProductCategoryRoutesMiddlewares, + ...adminShippingProfilesMiddlewares, + ...adminFulfillmentsRoutesMiddlewares, + ...adminFulfillmentProvidersRoutesMiddlewares, + ...storeProductRoutesMiddlewares, + ...storeReturnReasonRoutesMiddlewares, + ...adminReturnReasonRoutesMiddlewares, +]) diff --git a/packages/medusa/src/loaders/helpers/routing/__fixtures__/routers-error-handler/middlewares.ts b/packages/medusa/src/loaders/helpers/routing/__fixtures__/routers-error-handler/routes-config.ts similarity index 87% rename from packages/medusa/src/loaders/helpers/routing/__fixtures__/routers-error-handler/middlewares.ts rename to packages/medusa/src/loaders/helpers/routing/__fixtures__/routers-error-handler/routes-config.ts index 1344a0190c..7653c55588 100644 --- a/packages/medusa/src/loaders/helpers/routing/__fixtures__/routers-error-handler/middlewares.ts +++ b/packages/medusa/src/loaders/helpers/routing/__fixtures__/routers-error-handler/routes-config.ts @@ -1,6 +1,6 @@ -import { MiddlewaresConfig } from "../../types" +import { defineRoutesConfig } from "../../../../../utils/define-routes-config" -export const config: MiddlewaresConfig = { +export default defineRoutesConfig({ errorHandler: (err, _req, res, _next) => { const { code, message } = err @@ -36,4 +36,4 @@ export const config: MiddlewaresConfig = { }) } }, -} +}) diff --git a/packages/medusa/src/loaders/helpers/routing/__fixtures__/routers-middleware/middlewares.ts b/packages/medusa/src/loaders/helpers/routing/__fixtures__/routers-middleware/routes-config.ts similarity index 52% rename from packages/medusa/src/loaders/helpers/routing/__fixtures__/routers-middleware/middlewares.ts rename to packages/medusa/src/loaders/helpers/routing/__fixtures__/routers-middleware/routes-config.ts index d8a6b022b9..1b47438b04 100644 --- a/packages/medusa/src/loaders/helpers/routing/__fixtures__/routers-middleware/middlewares.ts +++ b/packages/medusa/src/loaders/helpers/routing/__fixtures__/routers-middleware/routes-config.ts @@ -1,10 +1,10 @@ import { NextFunction, Request, Response, raw } from "express" -import { MiddlewaresConfig } from "../../types" import { customersCreateMiddlewareMock, customersGlobalMiddlewareMock, storeGlobalMiddlewareMock, } from "../mocks" +import { defineRoutesConfig } from "../../../../../utils/define-routes-config" const customersGlobalMiddleware = ( req: Request, @@ -29,26 +29,24 @@ const storeGlobal = (req: Request, res: Response, next: NextFunction) => { next() } -export const config: MiddlewaresConfig = { - routes: [ - { - matcher: "/customers", - middlewares: [customersGlobalMiddleware], - }, - { - method: "POST", - matcher: "/customers", - middlewares: [customersCreateMiddleware], - }, - { - matcher: "/store/*", - middlewares: [storeGlobal], - }, - { - matcher: "/webhooks/*", - method: "POST", - bodyParser: false, - middlewares: [raw({ type: "application/json" })], - }, - ], -} +export default defineRoutesConfig([ + { + matcher: "/customers", + middlewares: [customersGlobalMiddleware], + }, + { + method: "POST", + matcher: "/customers", + middlewares: [customersCreateMiddleware], + }, + { + matcher: "/store/*", + middlewares: [storeGlobal], + }, + { + matcher: "/webhooks/*", + method: "POST", + bodyParser: false, + middlewares: [raw({ type: "application/json" })], + }, +]) diff --git a/packages/medusa/src/loaders/helpers/routing/index.ts b/packages/medusa/src/loaders/helpers/routing/index.ts index 3f1489545c..60189b4575 100644 --- a/packages/medusa/src/loaders/helpers/routing/index.ts +++ b/packages/medusa/src/loaders/helpers/routing/index.ts @@ -49,7 +49,7 @@ const AUTHTHENTICATE = "AUTHENTICATE" /** * File name for the global middlewares file */ -const MIDDLEWARES_NAME = "middlewares" +const ROUTES_CONFIG_FILENAME = "routes-config" const pathSegmentReplacer = { "\\[\\.\\.\\.\\]": () => `*`, @@ -216,7 +216,7 @@ export class RoutesLoader { if (!config?.routes && !config?.errorHandler) { log({ activityId: this.activityId, - message: `Empty middleware config. Skipping middleware application.`, + message: `Empty routes config. Skipping configuration.`, }) return @@ -419,7 +419,7 @@ export class RoutesLoader { }) { const files = await readdir(dirPath) - const middlewareFilePath = files + const routesConfigFiles = files .filter((path) => { if ( this.excludes.length && @@ -431,29 +431,29 @@ export class RoutesLoader { return true }) .find((file) => { - return file.replace(/\.[^/.]+$/, "") === MIDDLEWARES_NAME + return file.replace(/\.[^/.]+$/, "") === ROUTES_CONFIG_FILENAME }) - if (!middlewareFilePath) { + if (!routesConfigFiles) { log({ activityId: this.activityId, - message: `No middleware files found in ${dirPath}. Skipping middleware configuration.`, + message: `No routes config file found in ${dirPath}. Skipping configuration.`, }) return } - const absolutePath = join(dirPath, middlewareFilePath) + const absolutePath = join(dirPath, routesConfigFiles) try { await import(absolutePath).then((import_) => { - const middlewaresConfig = import_.config as + const middlewaresConfig = import_.default as | MiddlewaresConfig | undefined if (!middlewaresConfig) { log({ activityId: this.activityId, - message: `No middleware configuration found in ${absolutePath}. Skipping middleware configuration.`, + message: `No routes config file found in ${absolutePath}. Skipping configuration.`, }) return } @@ -476,7 +476,7 @@ export class RoutesLoader { } catch (error) { log({ activityId: this.activityId, - message: `Failed to load middleware configuration in ${absolutePath}. Skipping middleware configuration.`, + message: `Failed to load routes configuration from ${absolutePath}. Skipping configuration.`, }) return diff --git a/packages/medusa/src/utils/define-routes-config.ts b/packages/medusa/src/utils/define-routes-config.ts index 835c82402c..803d5aad99 100644 --- a/packages/medusa/src/utils/define-routes-config.ts +++ b/packages/medusa/src/utils/define-routes-config.ts @@ -32,8 +32,16 @@ export function defineRoutesConfig< next: MedusaNextFunction ) => any)[] } ->(routes: Route[]): MiddlewaresConfig { +>( + config: + | Route[] + | { routes?: Route[]; errorHandler?: MiddlewaresConfig["errorHandler"] } +): MiddlewaresConfig { + const routes = Array.isArray(config) ? config : config.routes || [] + const errorHandler = Array.isArray(config) ? undefined : config.errorHandler + return { + errorHandler, routes: routes.map((route) => { const { middlewares, extendedValidators, ...rest } = route const customMiddleware: MedusaRequestHandler[] = []