@@ -53,7 +53,7 @@ export class SourceComponent implements MetadataComponent {
53
53
private readonly forceIgnore : ForceIgnore ;
54
54
private markedForDelete = false ;
55
55
private destructiveChangesType ?: DestructiveChangesType ;
56
- private pathContentMap = new Map < string , string > ( ) ;
56
+ private pathContentMap = new Map < string , JsonMap > ( ) ;
57
57
58
58
public constructor (
59
59
props : ComponentProperties ,
@@ -188,35 +188,32 @@ export class SourceComponent implements MetadataComponent {
188
188
public async parseXml < T extends JsonMap > ( xmlFilePath ?: string ) : Promise < T > {
189
189
const xml = xmlFilePath ?? this . xml ;
190
190
if ( xml ) {
191
- let contents : string ;
192
191
if ( this . pathContentMap . has ( xml ) ) {
193
- contents = this . pathContentMap . get ( xml ) as string ;
192
+ return this . pathContentMap . get ( xml ) as T ;
194
193
} else {
195
- contents = ( await this . tree . readFile ( xml ) ) . toString ( ) ;
196
- this . pathContentMap . set ( xml , contents ) ;
194
+ const replacements = this . replacements ?. [ xml ] ?? this . parent ?. replacements ?. [ xml ] ;
195
+ const contents = ( await this . tree . readFile ( xml ) ) . toString ( ) ;
196
+ const value = this . parseAndValidateXML < T > (
197
+ replacements ? await replacementIterations ( contents , replacements ) : contents ,
198
+ xml
199
+ ) ;
200
+ this . pathContentMap . set ( xml , value ) ;
201
+ return value ;
197
202
}
198
-
199
- const replacements = this . replacements ?. [ xml ] ?? this . parent ?. replacements ?. [ xml ] ;
200
- return this . parseAndValidateXML < T > (
201
- replacements ? await replacementIterations ( contents , replacements ) : contents ,
202
- xml
203
- ) ;
204
203
}
205
204
return { } as T ;
206
205
}
207
206
208
207
public parseXmlSync < T extends JsonMap > ( xmlFilePath ?: string ) : T {
209
208
const xml = xmlFilePath ?? this . xml ;
210
209
if ( xml ) {
211
- let contents : string ;
212
210
if ( this . pathContentMap . has ( xml ) ) {
213
- contents = this . pathContentMap . get ( xml ) as string ;
211
+ return this . pathContentMap . get ( xml ) as T ;
214
212
} else {
215
- contents = this . tree . readFileSync ( xml ) . toString ( ) ;
213
+ const contents = this . parseAndValidateXML ( this . tree . readFileSync ( xml ) . toString ( ) , xml ) ;
216
214
this . pathContentMap . set ( xml , contents ) ;
215
+ return contents as T ;
217
216
}
218
-
219
- return this . parseAndValidateXML ( contents , xml ) ;
220
217
}
221
218
return { } as T ;
222
219
}
@@ -287,7 +284,7 @@ export class SourceComponent implements MetadataComponent {
287
284
}
288
285
289
286
private parse < T extends JsonMap > ( contents : string ) : T {
290
- const parsed = parser . parse ( String ( contents ) ) as T ;
287
+ const parsed = parser . parse ( contents ) as T ;
291
288
const [ firstElement ] = Object . keys ( parsed ) ;
292
289
if ( firstElement === this . type . name ) {
293
290
return parsed ;
0 commit comments