From 87fc18137d9792643a532a15126bad50b30505fb Mon Sep 17 00:00:00 2001 From: Philip Korsholm <88927411+pKorsholm@users.noreply.github.com> Date: Tue, 2 Aug 2022 19:43:55 +0700 Subject: [PATCH] Feat(medusa): Convert middleware service to typescript (#1936) Fixes CORE-351 --- .../src/services/__tests__/middleware.js | 4 +- .../services/{middleware.js => middleware.ts} | 49 +++++++++++++------ 2 files changed, 37 insertions(+), 16 deletions(-) rename packages/medusa/src/services/{middleware.js => middleware.ts} (68%) diff --git a/packages/medusa/src/services/__tests__/middleware.js b/packages/medusa/src/services/__tests__/middleware.js index ca9fb56ca4..dcbe724b54 100644 --- a/packages/medusa/src/services/__tests__/middleware.js +++ b/packages/medusa/src/services/__tests__/middleware.js @@ -41,7 +41,7 @@ describe("MiddlewareService", () => { it("calls middleware", () => { // This doesn't reflect how middleware works but does suffice in our // testing situation - const mid = args => args + const mid = (args) => args middlewareService.addPostAuthentication(mid, { data: "yes" }) @@ -62,7 +62,7 @@ describe("MiddlewareService", () => { it("calls middleware", () => { // This doesn't reflect how middleware works but does suffice in our // testing situation - const mid = args => args + const mid = (args) => args middlewareService.addPreAuthentication(mid, { data: "yes" }) diff --git a/packages/medusa/src/services/middleware.js b/packages/medusa/src/services/middleware.ts similarity index 68% rename from packages/medusa/src/services/middleware.js rename to packages/medusa/src/services/middleware.ts index 889f2caace..103e1c77f0 100644 --- a/packages/medusa/src/services/middleware.js +++ b/packages/medusa/src/services/middleware.ts @@ -1,31 +1,46 @@ +import { RequestHandler, Router } from "express" import { MedusaError } from "medusa-core-utils" +type middlewareHandlerType = ( + options: Record +) => RequestHandler + +type middlewareType = { + middleware: middlewareHandlerType + options: Record +} + /** * Orchestrates dynamic middleware registered through the Medusa Middleware API */ class MiddlewareService { - constructor(container) { + protected readonly postAuthentication_: middlewareType[] + protected readonly preAuthentication_: middlewareType[] + protected readonly preCartCreation_: RequestHandler[] + protected readonly routers: Record + + constructor() { this.postAuthentication_ = [] this.preAuthentication_ = [] this.preCartCreation_ = [] this.routers = {} } - addRouter(path, router) { + addRouter(path: string, router: Router): void { const existing = this.routers[path] || [] this.routers[path] = [...existing, router] } - getRouters(path) { - const routers = this.routers[path] || [] - return routers + getRouters(path: string): Router[] { + return this.routers[path] || [] } /** * Validates a middleware function, throws if fn is not of type function. * @param {function} fn - the middleware function to validate. + * @returns nothing if the middleware is a function */ - validateMiddleware_(fn) { + validateMiddleware_(fn: unknown): void { if (typeof fn !== "function") { throw new MedusaError( MedusaError.Types.NOT_ALLOWED, @@ -40,9 +55,12 @@ class MiddlewareService { * middleware function. * @param {object} options - the arguments that will be passed to the * middleware - * @return {void} + * @return void */ - addPostAuthentication(middleware, options) { + addPostAuthentication( + middleware: middlewareHandlerType, + options: Record + ): void { this.validateMiddleware_(middleware) this.postAuthentication_.push({ middleware, @@ -56,9 +74,12 @@ class MiddlewareService { * middleware function. * @param {object} options - the arguments that will be passed to the * middleware - * @return {void} + * @return void */ - addPreAuthentication(middleware, options) { + addPreAuthentication( + middleware: middlewareHandlerType, + options: Record + ): void { this.validateMiddleware_(middleware) this.preAuthentication_.push({ middleware, @@ -72,7 +93,7 @@ class MiddlewareService { * middleware function. * @return {void} */ - addPreCartCreation(middleware) { + addPreCartCreation(middleware: RequestHandler): void { this.validateMiddleware_(middleware) this.preCartCreation_.push(middleware) } @@ -82,7 +103,7 @@ class MiddlewareService { * @param {ExpressApp} app - the express app to add the middleware to * @return {void} */ - usePostAuthentication(app) { + usePostAuthentication(app: Router): void { for (const object of this.postAuthentication_) { app.use(object.middleware(object.options)) } @@ -93,13 +114,13 @@ class MiddlewareService { * @param {ExpressApp} app - the express app to add the middleware to * @return {void} */ - usePreAuthentication(app) { + usePreAuthentication(app: Router): void { for (const object of this.preAuthentication_) { app.use(object.middleware(object.options)) } } - usePreCartCreation() { + usePreCartCreation(): RequestHandler[] { return this.preCartCreation_ } }