@@ -34,13 +34,13 @@ export class Plan<T extends StringIndexedObject> {
3434 */
3535 coreParameters : ResourceConfig ;
3636
37- statefulMode : boolean ;
37+ isStateful : boolean ;
3838
39- constructor ( id : string , changeSet : ChangeSet < T > , resourceMetadata : ResourceConfig , statefulMode : boolean ) {
39+ constructor ( id : string , changeSet : ChangeSet < T > , resourceMetadata : ResourceConfig , isStateful : boolean ) {
4040 this . id = id ;
4141 this . changeSet = changeSet ;
4242 this . coreParameters = resourceMetadata ;
43- this . statefulMode = statefulMode ;
43+ this . isStateful = isStateful ;
4444 }
4545
4646 /**
@@ -83,31 +83,31 @@ export class Plan<T extends StringIndexedObject> {
8383 stateParameters : Partial < T > | null ,
8484 coreParameters : ResourceConfig ,
8585 settings : ParsedResourceSettings < T > ,
86- statefulMode : boolean ,
86+ isStateful : boolean ,
8787 } ) : Plan < T > {
8888 const {
8989 desiredParameters,
9090 currentParametersArray,
9191 stateParameters,
9292 coreParameters,
9393 settings,
94- statefulMode
94+ isStateful
9595 } = params
9696
9797 const currentParameters = Plan . matchCurrentParameters < T > ( {
9898 desiredParameters,
9999 currentParametersArray,
100100 stateParameters,
101101 settings,
102- statefulMode
102+ isStateful
103103 } ) ;
104104
105105 const filteredCurrentParameters = Plan . filterCurrentParams < T > ( {
106106 desiredParameters,
107107 currentParameters,
108108 stateParameters,
109109 settings,
110- statefulMode
110+ isStateful
111111 } ) ;
112112
113113 // Empty
@@ -116,7 +116,7 @@ export class Plan<T extends StringIndexedObject> {
116116 uuidV4 ( ) ,
117117 ChangeSet . empty < T > ( ) ,
118118 coreParameters ,
119- statefulMode ,
119+ isStateful ,
120120 )
121121 }
122122
@@ -126,7 +126,7 @@ export class Plan<T extends StringIndexedObject> {
126126 uuidV4 ( ) ,
127127 ChangeSet . create ( desiredParameters ) ,
128128 coreParameters ,
129- statefulMode ,
129+ isStateful ,
130130 )
131131 }
132132
@@ -136,7 +136,7 @@ export class Plan<T extends StringIndexedObject> {
136136 uuidV4 ( ) ,
137137 ChangeSet . destroy ( filteredCurrentParameters ) ,
138138 coreParameters ,
139- statefulMode ,
139+ isStateful ,
140140 )
141141 }
142142
@@ -151,59 +151,10 @@ export class Plan<T extends StringIndexedObject> {
151151 uuidV4 ( ) ,
152152 changeSet ,
153153 coreParameters ,
154- statefulMode ,
154+ isStateful ,
155155 ) ;
156156 }
157157
158- /**
159- * When multiples of the same resource are allowed, this matching function will match a given config with one of the
160- * existing configs on the system. For example if there are multiple versions of Android Studios installed, we can use
161- * the application name and location to match it to our desired configs name and location.
162- *
163- * @param params
164- * @private
165- */
166- private static matchCurrentParameters < T extends StringIndexedObject > ( params : {
167- desiredParameters : Partial < T > | null ,
168- currentParametersArray : Partial < T > [ ] | null ,
169- stateParameters : Partial < T > | null ,
170- settings : ResourceSettings < T > ,
171- statefulMode : boolean ,
172- } ) : Partial < T > | null {
173- const {
174- desiredParameters,
175- currentParametersArray,
176- stateParameters,
177- settings,
178- statefulMode
179- } = params ;
180-
181- if ( ! settings . allowMultiple ) {
182- return currentParametersArray ?. [ 0 ] ?? null ;
183- }
184-
185- if ( ! currentParametersArray ) {
186- return null ;
187- }
188-
189- if ( statefulMode ) {
190- return stateParameters
191- ? settings . allowMultiple . matcher ( stateParameters , currentParametersArray )
192- : null
193- }
194-
195- return settings . allowMultiple . matcher ( desiredParameters ! , currentParametersArray ) ;
196- }
197-
198- /**
199- * The type (id) of the resource
200- *
201- * @return string
202- */
203- getResourceType ( ) : string {
204- return this . coreParameters . type
205- }
206-
207158 // 2. Even if there was (maybe for testing reasons), the plan values should not be adjusted
208159 static fromResponse < T extends ResourceConfig > ( data : ApplyRequestData [ 'plan' ] , defaultValues ?: Partial < Record < keyof T , unknown > > ) : Plan < T > {
209160 if ( ! data ) {
@@ -222,7 +173,7 @@ export class Plan<T extends StringIndexedObject> {
222173 type : data . resourceType ,
223174 name : data . resourceName ,
224175 } ,
225- data . statefulMode
176+ data . isStateful
226177 ) ;
227178
228179 function addDefaultValues ( ) : void {
@@ -275,6 +226,55 @@ export class Plan<T extends StringIndexedObject> {
275226
276227 }
277228
229+ /**
230+ * The type (id) of the resource
231+ *
232+ * @return string
233+ */
234+ getResourceType ( ) : string {
235+ return this . coreParameters . type
236+ }
237+
238+ /**
239+ * When multiples of the same resource are allowed, this matching function will match a given config with one of the
240+ * existing configs on the system. For example if there are multiple versions of Android Studios installed, we can use
241+ * the application name and location to match it to our desired configs name and location.
242+ *
243+ * @param params
244+ * @private
245+ */
246+ private static matchCurrentParameters < T extends StringIndexedObject > ( params : {
247+ desiredParameters : Partial < T > | null ,
248+ currentParametersArray : Partial < T > [ ] | null ,
249+ stateParameters : Partial < T > | null ,
250+ settings : ResourceSettings < T > ,
251+ isStateful : boolean ,
252+ } ) : Partial < T > | null {
253+ const {
254+ desiredParameters,
255+ currentParametersArray,
256+ stateParameters,
257+ settings,
258+ isStateful
259+ } = params ;
260+
261+ if ( ! settings . allowMultiple ) {
262+ return currentParametersArray ?. [ 0 ] ?? null ;
263+ }
264+
265+ if ( ! currentParametersArray ) {
266+ return null ;
267+ }
268+
269+ if ( isStateful ) {
270+ return stateParameters
271+ ? settings . allowMultiple . matcher ( stateParameters , currentParametersArray )
272+ : null
273+ }
274+
275+ return settings . allowMultiple . matcher ( desiredParameters ! , currentParametersArray ) ;
276+ }
277+
278278 /**
279279 * Only keep relevant params for the plan. We don't want to change settings that were not already
280280 * defined.
@@ -288,14 +288,14 @@ export class Plan<T extends StringIndexedObject> {
288288 currentParameters : Partial < T > | null ,
289289 stateParameters : Partial < T > | null ,
290290 settings : ResourceSettings < T > ,
291- statefulMode : boolean ,
291+ isStateful : boolean ,
292292 } ) : Partial < T > | null {
293293 const {
294294 desiredParameters : desired ,
295295 currentParameters : current ,
296296 stateParameters : state ,
297297 settings,
298- statefulMode
298+ isStateful
299299 } = params ;
300300
301301 if ( ! current ) {
@@ -309,7 +309,7 @@ export class Plan<T extends StringIndexedObject> {
309309
310310 // For stateful mode, we're done after filtering by the keys of desired + state. Stateless mode
311311 // requires additional filtering for stateful parameter arrays and objects.
312- if ( statefulMode ) {
312+ if ( isStateful ) {
313313 return filteredCurrent ;
314314 }
315315
@@ -327,7 +327,7 @@ export class Plan<T extends StringIndexedObject> {
327327 return null ;
328328 }
329329
330- if ( statefulMode ) {
330+ if ( isStateful ) {
331331 const keys = new Set ( [ ...Object . keys ( state ?? { } ) , ...Object . keys ( desired ?? { } ) ] ) ;
332332 return Object . fromEntries (
333333 Object . entries ( current )
@@ -426,6 +426,7 @@ export class Plan<T extends StringIndexedObject> {
426426 return {
427427 planId : this . id ,
428428 operation : this . changeSet . operation ,
429+ isStateful : this . isStateful ,
429430 resourceName : this . coreParameters . name ,
430431 resourceType : this . coreParameters . type ,
431432 parameters : this . changeSet . parameterChanges ,
0 commit comments