@@ -76,29 +76,29 @@ export class CodeTransformer {
7676 /**
7777 * Delete the existing middleware if it exists
7878 */
79- const existingMiddleware = arrayLiteralExpression
79+ const existingMiddlewareIndex = arrayLiteralExpression
8080 . getElements ( )
8181 . findIndex ( ( element ) => element . getText ( ) === middleware )
8282
83- if ( existingMiddleware !== - 1 ) {
84- arrayLiteralExpression . removeElement ( existingMiddleware )
85- }
86-
87- /**
88- * Add the middleware to the top or bottom of the array
89- */
90- if ( middlewareEntry . position === 'before' ) {
91- arrayLiteralExpression . insertElement ( 0 , middleware )
92- } else {
93- arrayLiteralExpression . addElement ( middleware )
83+ if ( existingMiddlewareIndex === - 1 ) {
84+ /**
85+ * Add the middleware to the top or bottom of the array
86+ */
87+ if ( middlewareEntry . position === 'before' ) {
88+ arrayLiteralExpression . insertElement ( 0 , middleware )
89+ } else {
90+ arrayLiteralExpression . addElement ( middleware )
91+ }
9492 }
9593 }
9694
9795 /**
9896 * Add a new middleware to the named middleware of the given file
9997 */
10098 #addToNamedMiddleware( file : SourceFile , middlewareEntry : AddMiddlewareEntry ) {
101- if ( ! middlewareEntry . name ) throw new Error ( 'Named middleware requires a name.' )
99+ if ( ! middlewareEntry . name ) {
100+ throw new Error ( 'Named middleware requires a name.' )
101+ }
102102
103103 const callArguments = file
104104 . getVariableDeclarationOrThrow ( 'middleware' )
@@ -118,20 +118,22 @@ export class CodeTransformer {
118118 * Check if property is already defined. If so, remove it
119119 */
120120 const existingProperty = namedMiddlewareObject . getProperty ( middlewareEntry . name )
121- if ( existingProperty ) existingProperty . remove ( )
122-
123- /**
124- * Add the named middleware
125- */
126- const middleware = ` ${ middlewareEntry . name } : () => import(' ${ middlewareEntry . path } ')`
127- namedMiddlewareObject ! . insertProperty ( 0 , middleware )
121+ if ( ! existingProperty ) {
122+ /**
123+ * Add the named middleware
124+ */
125+ const middleware = ` ${ middlewareEntry . name } : () => import(' ${ middlewareEntry . path } ')`
126+ namedMiddlewareObject ! . insertProperty ( 0 , middleware )
127+ }
128128 }
129129
130130 /**
131131 * Write a leading comment
132132 */
133133 #addLeadingComment( writer : CodeBlockWriter , comment ?: string ) {
134- if ( ! comment ) return writer . blankLine ( )
134+ if ( ! comment ) {
135+ return writer . blankLine ( )
136+ }
135137
136138 return writer
137139 . blankLine ( )
@@ -202,7 +204,7 @@ export class CodeTransformer {
202204 throw new Error ( `The second argument of Env.create is not an object literal.` )
203205 }
204206
205- let firstAdded = false
207+ let shouldAddComment = true
206208
207209 /**
208210 * Add each variable validation
@@ -212,17 +214,32 @@ export class CodeTransformer {
212214 * Check if the variable is already defined. If so, remove it
213215 */
214216 const existingProperty = objectLiteralExpression . getProperty ( variable )
215- if ( existingProperty ) existingProperty . remove ( )
216-
217- objectLiteralExpression . addPropertyAssignment ( {
218- name : variable ,
219- initializer : validation ,
220- leadingTrivia : ( writer ) => {
221- if ( firstAdded ) return
222- firstAdded = true
223- return this . #addLeadingComment( writer , definition . leadingComment )
224- } ,
225- } )
217+
218+ /**
219+ * Do not add leading comment if one or more properties
220+ * already exists
221+ */
222+ if ( existingProperty ) {
223+ shouldAddComment = false
224+ }
225+
226+ /**
227+ * Add property only when the property does not exist
228+ */
229+ if ( ! existingProperty ) {
230+ objectLiteralExpression . addPropertyAssignment ( {
231+ name : variable ,
232+ initializer : validation ,
233+ leadingTrivia : ( writer ) => {
234+ if ( ! shouldAddComment ) {
235+ return
236+ }
237+
238+ shouldAddComment = false
239+ return this . #addLeadingComment( writer , definition . leadingComment )
240+ } ,
241+ } )
242+ }
226243 }
227244
228245 file . formatText ( this . #editorSettings)
0 commit comments