From a3d516b597906981021c9a878d04783ed6a76e11 Mon Sep 17 00:00:00 2001 From: Merlin Beutlberger Date: Thu, 10 Oct 2019 16:47:20 +0200 Subject: [PATCH] [FEATURE] Custom Middleware Extensibility: Allow multiple definitions of the same custom middleware Similar to the implementation for custom tasks: https://github.com/SAP/ui5-builder/blob/d60c67dafc6d96a8345da2004972cd4b839eece6/lib/types/AbstractBuilder.js#L81-L89 Resolves #222 --- lib/middleware/MiddlewareManager.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/middleware/MiddlewareManager.js b/lib/middleware/MiddlewareManager.js index e3c6b04d..11e3d120 100644 --- a/lib/middleware/MiddlewareManager.js +++ b/lib/middleware/MiddlewareManager.js @@ -154,12 +154,17 @@ class MiddlewareManager { `defines neither a "beforeMiddleware" nor an "afterMiddleware" parameter. One must be defined.`); } + let middlewareName = middlewareDef.name; if (this.middleware[middlewareDef.name]) { // Middleware is already known - throw new Error(`Failed to add custom middleware ${middlewareDef.name}. ` + - `A middleware with the same name is already known.`); + // => add a suffix to allow for multiple configurations of the same middleware + let suffixCounter = 0; + while (this.middleware[middlewareName]) { + suffixCounter++; // Start at 1 + middlewareName = `${middlewareDef.name}--${suffixCounter}`; + } } - await this.addMiddleware(middlewareDef.name, { + await this.addMiddleware(middlewareName, { wrapperCallback: (middleware) => { return ({resources}) => { const options = {