1+ import Ajv from 'ajv' ;
2+ import Ajv2020 , { ValidateFunction } from 'ajv/dist/2020.js' ;
13import { ParameterOperation , ResourceConfig , ResourceOperation , StringIndexedObject , } from 'codify-schemas' ;
4+
5+ import { setsEqual , splitUserConfig } from '../utils/utils.js' ;
26import { ParameterChange } from './change-set.js' ;
37import { Plan } from './plan.js' ;
4- import { StatefulParameter } from './stateful-parameter.js' ;
5- import { ResourceParameterOptions , ValidationResult } from './resource-types.js' ;
6- import { setsEqual , splitUserConfig } from '../utils/utils.js' ;
78import { CreatePlan , DestroyPlan , ModifyPlan , ParameterOptions , PlanOptions } from './plan-types.js' ;
8- import { TransformParameter } from './transform-parameter.js' ;
99import { ResourceOptions , ResourceOptionsParser } from './resource-options.js' ;
10- import Ajv from 'ajv' ;
11- import Ajv2020 , { ValidateFunction } from 'ajv/dist/2020.js' ;
10+ import { ResourceParameterOptions , ValidationResult } from './resource-types.js' ;
11+ import { StatefulParameter } from './stateful-parameter.js' ;
12+ import { TransformParameter } from './transform-parameter.js' ;
1213
1314/**
1415 * Description of resource here
@@ -65,8 +66,8 @@ export abstract class Resource<T extends StringIndexedObject> {
6566
6667 if ( ! isValid ) {
6768 return {
68- isValid : false ,
6969 errors : this . schemaValidator ?. errors ?? [ ] ,
70+ isValid : false ,
7071 }
7172 }
7273 }
@@ -84,8 +85,8 @@ export abstract class Resource<T extends StringIndexedObject> {
8485 this . validatePlanInputs ( desiredConfig , currentConfig , statefulMode ) ;
8586
8687 const planOptions : PlanOptions < T > = {
87- statefulMode,
8888 parameterOptions : this . parameterOptions ,
89+ statefulMode,
8990 }
9091
9192 this . addDefaultValues ( desiredConfig ) ;
@@ -95,8 +96,8 @@ export abstract class Resource<T extends StringIndexedObject> {
9596 const parsedConfig = new ConfigParser ( desiredConfig , currentConfig , this . statefulParameters , this . transformParameters )
9697 const {
9798 desiredParameters,
98- resourceMetadata,
9999 nonStatefulParameters,
100+ resourceMetadata,
100101 statefulParameters,
101102 } = parsedConfig ;
102103
@@ -133,13 +134,16 @@ export abstract class Resource<T extends StringIndexedObject> {
133134 case ResourceOperation . CREATE : {
134135 return this . _applyCreate ( plan ) ; // TODO: Add new parameters value so that apply
135136 }
137+
136138 case ResourceOperation . MODIFY : {
137139 return this . _applyModify ( plan ) ;
138140 }
141+
139142 case ResourceOperation . RECREATE : {
140143 await this . _applyDestroy ( plan ) ;
141144 return this . _applyCreate ( plan ) ;
142145 }
146+
143147 case ResourceOperation . DESTROY : {
144148 return this . _applyDestroy ( plan ) ;
145149 }
@@ -185,11 +189,13 @@ export abstract class Resource<T extends StringIndexedObject> {
185189 await statefulParameter . applyAdd ( parameterChange . newValue , plan ) ;
186190 break ;
187191 }
192+
188193 case ParameterOperation . MODIFY : {
189194 // TODO: When stateful mode is added in the future. Dynamically choose if deletes are allowed
190195 await statefulParameter . applyModify ( parameterChange . newValue , parameterChange . previousValue , false , plan ) ;
191196 break ;
192197 }
198+
193199 case ParameterOperation . REMOVE : {
194200 await statefulParameter . applyRemove ( parameterChange . previousValue , plan ) ;
195201 break ;
@@ -256,10 +262,10 @@ Additional: ${[...refreshKeys].filter(k => !desiredKeys.has(k))};`
256262 delete desired [ key ] ;
257263
258264 // Add the new transformed values
259- Object . entries ( transformedValue ) . forEach ( ( [ tvKey , tvValue ] ) => {
265+ for ( const [ tvKey , tvValue ] of Object . entries ( transformedValue ) ) {
260266 // @ts -ignore
261267 desired [ tvKey ] = tvValue ;
262- } )
268+ }
263269 }
264270 }
265271
@@ -268,13 +274,12 @@ Additional: ${[...refreshKeys].filter(k => !desiredKeys.has(k))};`
268274 return ;
269275 }
270276
271- Object . entries ( this . defaultValues )
272- . forEach ( ( [ key , defaultValue ] ) => {
277+ for ( const [ key , defaultValue ] of Object . entries ( this . defaultValues ) ) {
273278 if ( defaultValue !== undefined && desired [ key as any ] === undefined ) {
274279 // @ts -ignore
275280 desired [ key ] = defaultValue ;
276281 }
277- } ) ;
282+ }
278283 }
279284
280285 private async refreshNonStatefulParameters ( resourceParameters : Partial < T > ) : Promise < Partial < T > | null > {
@@ -407,22 +412,22 @@ ${JSON.stringify(currentMetadata, null, 2)}`);
407412 const desiredParameters = this . desiredConfig ? splitUserConfig ( this . desiredConfig ) . parameters : undefined ;
408413 const currentParameters = this . currentConfig ? splitUserConfig ( this . currentConfig ) . parameters : undefined ;
409414
410- return { ...( desiredParameters ?? { } ) , ...( currentParameters ?? { } ) } as Partial < T > ;
415+ return { ...desiredParameters , ...currentParameters } as Partial < T > ;
411416 }
412417
413418 get nonStatefulParameters ( ) : Partial < T > {
414- const parameters = this . parameters ;
419+ const { parameters } = this ;
415420
416- return Object . fromEntries ( [
417- ... Object . entries ( parameters ) . filter ( ( [ key ] ) => ! ( this . statefulParametersMap . has ( key ) || this . transformParametersMap . has ( key ) ) ) ,
418- ] ) as Partial < T > ;
421+ return Object . fromEntries (
422+ Object . entries ( parameters ) . filter ( ( [ key ] ) => ! ( this . statefulParametersMap . has ( key ) || this . transformParametersMap . has ( key ) ) )
423+ ) as Partial < T > ;
419424 }
420425
421426 get statefulParameters ( ) : Partial < T > {
422- const parameters = this . parameters ;
427+ const { parameters } = this ;
423428
424- return Object . fromEntries ( [
425- ... Object . entries ( parameters ) . filter ( ( [ key ] ) => this . statefulParametersMap . has ( key ) ) ,
426- ] ) as Partial < T > ;
429+ return Object . fromEntries (
430+ Object . entries ( parameters ) . filter ( ( [ key ] ) => this . statefulParametersMap . has ( key ) )
431+ ) as Partial < T > ;
427432 }
428433}
0 commit comments