Skip to content

Commit aad4a48

Browse files
committed
Refactored statefulMode to isStateful
1 parent d216505 commit aad4a48

File tree

14 files changed

+101
-102
lines changed

14 files changed

+101
-102
lines changed

package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codify-plugin-lib",
3-
"version": "1.0.127",
3+
"version": "1.0.129",
44
"description": "Library plugin library",
55
"main": "dist/index.js",
66
"typings": "dist/index.d.ts",
@@ -14,7 +14,7 @@
1414
"dependencies": {
1515
"ajv": "^8.12.0",
1616
"ajv-formats": "^2.1.1",
17-
"codify-schemas": "1.0.54",
17+
"codify-schemas": "1.0.60",
1818
"@npmcli/promise-spawn": "^7.0.1",
1919
"@homebridge/node-pty-prebuilt-multiarch": "^0.12.0-beta.5",
2020
"uuid": "^10.0.0",

src/common/errors.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ describe('Test file for errors file', () => {
1212
type: 'homebrew',
1313
name: 'first'
1414
},
15-
statefulMode: true,
15+
isStateful: true,
1616
})
1717

1818
try {

src/plan/plan.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ describe('Plan entity tests', () => {
2020
previousValue: null,
2121
newValue: 'propBValue'
2222
}],
23-
statefulMode: false,
23+
isStateful: false,
2424
}, controller.parsedSettings.defaultValues);
2525

2626
expect(plan.currentConfig).to.be.null;
@@ -49,7 +49,7 @@ describe('Plan entity tests', () => {
4949
previousValue: 'propBValue',
5050
newValue: null,
5151
}],
52-
statefulMode: false,
52+
isStateful: false,
5353
}, controller.parsedSettings.defaultValues);
5454

5555
expect(plan.currentConfig).toMatchObject({
@@ -78,7 +78,7 @@ describe('Plan entity tests', () => {
7878
previousValue: 'propBValue',
7979
newValue: 'propBValue',
8080
}],
81-
statefulMode: false,
81+
isStateful: false,
8282
}, controller.parsedSettings.defaultValues);
8383

8484
expect(plan.currentConfig).toMatchObject({
@@ -116,7 +116,7 @@ describe('Plan entity tests', () => {
116116
previousValue: null,
117117
newValue: 'propAValue',
118118
}],
119-
statefulMode: false,
119+
isStateful: false,
120120
}, controller.parsedSettings.defaultValues);
121121

122122
expect(plan.currentConfig).to.be.null
@@ -142,7 +142,7 @@ describe('Plan entity tests', () => {
142142
name: 'name1'
143143
},
144144
settings: new ParsedResourceSettings<TestConfig>({ id: 'type' }),
145-
statefulMode: false,
145+
isStateful: false,
146146
});
147147

148148
expect(plan.toResponse()).toMatchObject({

src/plan/plan.ts

Lines changed: 66 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)