@@ -274,29 +274,7 @@ export class ResourceController<T extends StringIndexedObject> {
274274 await this . applyTransformParameters ( parameters ) ;
275275
276276 // Use refresh parameters if specified, otherwise try to refresh as many parameters as possible here
277- const parametersToRefresh = this . settings . importAndDestroy ?. refreshKeys
278- ? {
279- ...Object . fromEntries (
280- this . settings . importAndDestroy ?. refreshKeys . map ( ( k ) => [ k , null ] )
281- ) ,
282- ...this . settings . importAndDestroy ?. defaultRefreshValues ,
283- ...parameters ,
284- ...( Object . fromEntries ( // If a default value was used, but it was also declared in the defaultRefreshValues, prefer the defaultRefreshValue instead
285- Object . entries ( parameters ) . filter ( ( [ k , v ] ) =>
286- this . parsedSettings . defaultValues [ k ] !== undefined
287- && v === this . parsedSettings . defaultValues [ k ]
288- && context . originalDesiredConfig ?. [ k ] === undefined
289- && this . settings . importAndDestroy ?. defaultRefreshValues ?. [ k ] !== undefined
290- ) . map ( ( [ k ] ) => [ k , this . settings . importAndDestroy ! . defaultRefreshValues ! [ k ] ] )
291- ) )
292- }
293- : {
294- ...Object . fromEntries (
295- this . getAllParameterKeys ( ) . map ( ( k ) => [ k , null ] )
296- ) ,
297- ...this . settings . importAndDestroy ?. defaultRefreshValues ,
298- ...parameters ,
299- } ;
277+ const parametersToRefresh = this . getParametersToRefreshForImport ( parameters , context ) ;
300278
301279 // Parse data from the user supplied config
302280 const parsedConfig = new ConfigParser ( parametersToRefresh , null , this . parsedSettings . statefulParameters )
@@ -320,7 +298,7 @@ export class ResourceController<T extends StringIndexedObject> {
320298 ?. map ( ( r , idx ) => ( { ...r , ...statefulCurrentParameters [ idx ] } ) )
321299
322300 for ( const result of resultParametersArray ) {
323- await this . applyTransformParameters ( result , true ) ;
301+ await this . applyTransformParameters ( result , { original : parameters } ) ;
324302 this . removeDefaultValues ( result , parameters ) ;
325303 }
326304
@@ -403,7 +381,7 @@ ${JSON.stringify(refresh, null, 2)}
403381 }
404382 }
405383
406- private async applyTransformParameters ( config : Partial < T > | null , reverse = false ) : Promise < void > {
384+ private async applyTransformParameters ( config : Partial < T > | null , reverse ?: { original : Partial < T > } ) : Promise < void > {
407385 if ( ! config ) {
408386 return ;
409387 }
@@ -414,13 +392,13 @@ ${JSON.stringify(refresh, null, 2)}
414392 }
415393
416394 ( config as Record < string , unknown > ) [ key ] = reverse
417- ? await inputTransformation . from ( config [ key ] )
395+ ? await inputTransformation . from ( config [ key ] , reverse . original ?. [ key ] )
418396 : await inputTransformation . to ( config [ key ] ) ;
419397 }
420398
421399 if ( this . settings . transformation ) {
422400 const transformed = reverse
423- ? await this . settings . transformation . from ( { ...config } )
401+ ? await this . settings . transformation . from ( { ...config } , reverse . original )
424402 : await this . settings . transformation . to ( { ...config } )
425403
426404 Object . keys ( config ) . forEach ( ( k ) => delete config [ k ] )
@@ -523,5 +501,35 @@ ${JSON.stringify(refresh, null, 2)}
523501 ? Object . keys ( ( this . settings . schema as any ) ?. properties )
524502 : Object . keys ( this . parsedSettings . parameterSettings ) ;
525503 }
504+
505+ private getParametersToRefreshForImport ( parameters : Partial < T > , context : RefreshContext < T > ) : Partial < T > {
506+ if ( this . settings . importAndDestroy ?. refreshMapper ) {
507+ return this . settings . importAndDestroy ?. refreshMapper ( parameters , context ) ;
508+ }
509+
510+ return this . settings . importAndDestroy ?. refreshKeys
511+ ? {
512+ ...Object . fromEntries (
513+ this . settings . importAndDestroy ?. refreshKeys . map ( ( k ) => [ k , null ] )
514+ ) ,
515+ ...this . settings . importAndDestroy ?. defaultRefreshValues ,
516+ ...parameters ,
517+ ...( Object . fromEntries ( // If a default value was used, but it was also declared in the defaultRefreshValues, prefer the defaultRefreshValue instead
518+ Object . entries ( parameters ) . filter ( ( [ k , v ] ) =>
519+ this . parsedSettings . defaultValues [ k ] !== undefined
520+ && v === this . parsedSettings . defaultValues [ k ]
521+ && context . originalDesiredConfig ?. [ k ] === undefined
522+ && this . settings . importAndDestroy ?. defaultRefreshValues ?. [ k ] !== undefined
523+ ) . map ( ( [ k ] ) => [ k , this . settings . importAndDestroy ! . defaultRefreshValues ! [ k ] ] )
524+ ) )
525+ }
526+ : {
527+ ...Object . fromEntries (
528+ this . getAllParameterKeys ( ) . map ( ( k ) => [ k , null ] )
529+ ) ,
530+ ...this . settings . importAndDestroy ?. defaultRefreshValues ,
531+ ...parameters ,
532+ } ;
533+ }
526534}
527535
0 commit comments