@@ -76,29 +76,29 @@ export class CodeTransformer {
76
76
/**
77
77
* Delete the existing middleware if it exists
78
78
*/
79
- const existingMiddleware = arrayLiteralExpression
79
+ const existingMiddlewareIndex = arrayLiteralExpression
80
80
. getElements ( )
81
81
. findIndex ( ( element ) => element . getText ( ) === middleware )
82
82
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
+ }
94
92
}
95
93
}
96
94
97
95
/**
98
96
* Add a new middleware to the named middleware of the given file
99
97
*/
100
98
#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
+ }
102
102
103
103
const callArguments = file
104
104
. getVariableDeclarationOrThrow ( 'middleware' )
@@ -118,20 +118,22 @@ export class CodeTransformer {
118
118
* Check if property is already defined. If so, remove it
119
119
*/
120
120
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
+ }
128
128
}
129
129
130
130
/**
131
131
* Write a leading comment
132
132
*/
133
133
#addLeadingComment( writer : CodeBlockWriter , comment ?: string ) {
134
- if ( ! comment ) return writer . blankLine ( )
134
+ if ( ! comment ) {
135
+ return writer . blankLine ( )
136
+ }
135
137
136
138
return writer
137
139
. blankLine ( )
@@ -202,7 +204,7 @@ export class CodeTransformer {
202
204
throw new Error ( `The second argument of Env.create is not an object literal.` )
203
205
}
204
206
205
- let firstAdded = false
207
+ let shouldAddComment = true
206
208
207
209
/**
208
210
* Add each variable validation
@@ -212,17 +214,32 @@ export class CodeTransformer {
212
214
* Check if the variable is already defined. If so, remove it
213
215
*/
214
216
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
+ }
226
243
}
227
244
228
245
file . formatText ( this . #editorSettings)
0 commit comments