Skip to content

Commit 77189e3

Browse files
committed
feat: Refactored and updated to using newest schema which passes core parameters separately from other parameters
1 parent aad4a48 commit 77189e3

14 files changed

Lines changed: 342 additions & 315 deletions

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: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"dependencies": {
1515
"ajv": "^8.12.0",
1616
"ajv-formats": "^2.1.1",
17-
"codify-schemas": "1.0.60",
17+
"codify-schemas": "1.0.61",
1818
"@npmcli/promise-spawn": "^7.0.1",
1919
"@homebridge/node-pty-prebuilt-multiarch": "^0.12.0-beta.5",
2020
"uuid": "^10.0.0",

src/messages/handlers.test.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@ describe('Message handler tests', () => {
2525
await handler.onMessage({
2626
cmd: 'plan',
2727
data: {
28-
desired: {
28+
core: {
2929
type: 'resourceType',
3030
name: 'name',
31+
},
32+
desired: {
3133
prop1: 'A',
3234
prop2: 'B',
3335
},
@@ -45,7 +47,6 @@ describe('Message handler tests', () => {
4547
const handler = new MessageHandler(plugin);
4648

4749
process.send = (message) => {
48-
console.log(message);
4950
expect(message).toMatchObject({
5051
cmd: 'plan_Response',
5152
status: MessageStatus.ERROR,
@@ -168,6 +169,9 @@ describe('Message handler tests', () => {
168169
expect(async () => await handler.onMessage({
169170
cmd: 'plan',
170171
data: {
172+
core: {
173+
type: 'resourceA',
174+
},
171175
desired: {
172176
type: 'resourceA'
173177
},
@@ -250,9 +254,11 @@ describe('Message handler tests', () => {
250254
cmd: 'plan',
251255
requestId: 'abcdef',
252256
data: {
253-
desired: {
257+
core: {
254258
type: 'type',
255259
name: 'name',
260+
},
261+
desired: {
256262
prop1: 'A',
257263
prop2: 'B',
258264
},

src/plan/plan.test.ts

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ describe('Plan entity tests', () => {
2626
expect(plan.currentConfig).to.be.null;
2727

2828
expect(plan.desiredConfig).toMatchObject({
29-
type: 'type',
3029
propA: 'defaultA',
3130
propB: 'propBValue',
3231
})
@@ -53,7 +52,6 @@ describe('Plan entity tests', () => {
5352
}, controller.parsedSettings.defaultValues);
5453

5554
expect(plan.currentConfig).toMatchObject({
56-
type: 'type',
5755
propA: 'defaultA',
5856
propB: 'propBValue',
5957
})
@@ -82,13 +80,11 @@ describe('Plan entity tests', () => {
8280
}, controller.parsedSettings.defaultValues);
8381

8482
expect(plan.currentConfig).toMatchObject({
85-
type: 'type',
8683
propA: 'defaultA',
8784
propB: 'propBValue',
8885
})
8986

9087
expect(plan.desiredConfig).toMatchObject({
91-
type: 'type',
9288
propA: 'defaultA',
9389
propB: 'propBValue',
9490
})
@@ -122,7 +118,6 @@ describe('Plan entity tests', () => {
122118
expect(plan.currentConfig).to.be.null
123119

124120
expect(plan.desiredConfig).toMatchObject({
125-
type: 'type',
126121
propA: 'propAValue',
127122
propB: 'propBValue',
128123
})
@@ -134,10 +129,10 @@ describe('Plan entity tests', () => {
134129

135130
it('Returns the original resource names', () => {
136131
const plan = Plan.calculate<TestConfig>({
137-
desiredParameters: { propA: 'propA' },
138-
currentParametersArray: [{ propA: 'propA2' }],
139-
stateParameters: null,
140-
coreParameters: {
132+
desired: { propA: 'propA' },
133+
currentArray: [{ propA: 'propA2' }],
134+
state: null,
135+
core: {
141136
type: 'type',
142137
name: 'name1'
143138
},
@@ -174,9 +169,12 @@ describe('Plan entity tests', () => {
174169
}
175170

176171
const controller = new ResourceController(resource);
177-
const plan = await controller.plan({
178-
propZ: ['20.15'],
179-
} as any)
172+
const plan = await controller.plan(
173+
{ type: 'type' },
174+
{ propZ: ['20.15'], } as any,
175+
null,
176+
false
177+
)
180178

181179
expect(plan.changeSet.operation).to.eq(ResourceOperation.NOOP);
182180
})
@@ -208,9 +206,12 @@ describe('Plan entity tests', () => {
208206
}
209207

210208
const controller = new ResourceController(resource);
211-
const plan = await controller.plan({
212-
propZ: ['20.15'],
213-
} as any)
209+
const plan = await controller.plan(
210+
{ type: 'type' },
211+
{ propZ: ['20.15'], } as any,
212+
null,
213+
false
214+
)
214215

215216
expect(plan.changeSet).toMatchObject({
216217
operation: ResourceOperation.MODIFY,

src/plan/plan.ts

Lines changed: 45 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ export class Plan<T extends StringIndexedObject> {
3636

3737
isStateful: boolean;
3838

39-
constructor(id: string, changeSet: ChangeSet<T>, resourceMetadata: ResourceConfig, isStateful: boolean) {
39+
constructor(id: string, changeSet: ChangeSet<T>, coreParameters: ResourceConfig, isStateful: boolean) {
4040
this.id = id;
4141
this.changeSet = changeSet;
42-
this.coreParameters = resourceMetadata;
42+
this.coreParameters = coreParameters;
4343
this.isStateful = isStateful;
4444
}
4545

@@ -51,10 +51,7 @@ export class Plan<T extends StringIndexedObject> {
5151
return null;
5252
}
5353

54-
return {
55-
...this.coreParameters,
56-
...this.changeSet.desiredParameters,
57-
}
54+
return this.changeSet.desiredParameters;
5855
}
5956

6057
/**
@@ -65,10 +62,7 @@ export class Plan<T extends StringIndexedObject> {
6562
return null;
6663
}
6764

68-
return {
69-
...this.coreParameters,
70-
...this.changeSet.currentParameters,
71-
}
65+
return this.changeSet.currentParameters;
7266
}
7367

7468
get resourceId(): string {
@@ -78,79 +72,79 @@ export class Plan<T extends StringIndexedObject> {
7872
}
7973

8074
static calculate<T extends StringIndexedObject>(params: {
81-
desiredParameters: Partial<T> | null,
82-
currentParametersArray: Partial<T>[] | null,
83-
stateParameters: Partial<T> | null,
84-
coreParameters: ResourceConfig,
75+
desired: Partial<T> | null,
76+
currentArray: Partial<T>[] | null,
77+
state: Partial<T> | null,
78+
core: ResourceConfig,
8579
settings: ParsedResourceSettings<T>,
8680
isStateful: boolean,
8781
}): Plan<T> {
8882
const {
89-
desiredParameters,
90-
currentParametersArray,
91-
stateParameters,
92-
coreParameters,
83+
desired,
84+
currentArray,
85+
state,
86+
core,
9387
settings,
9488
isStateful
9589
} = params
9690

97-
const currentParameters = Plan.matchCurrentParameters<T>({
98-
desiredParameters,
99-
currentParametersArray,
100-
stateParameters,
91+
const current = Plan.matchCurrentParameters<T>({
92+
desired,
93+
currentArray,
94+
state,
10195
settings,
10296
isStateful
10397
});
10498

10599
const filteredCurrentParameters = Plan.filterCurrentParams<T>({
106-
desiredParameters,
107-
currentParameters,
108-
stateParameters,
100+
desired,
101+
current,
102+
state,
109103
settings,
110104
isStateful
111105
});
112106

113107
// Empty
114-
if (!filteredCurrentParameters && !desiredParameters) {
108+
if (!filteredCurrentParameters && !desired) {
115109
return new Plan(
116110
uuidV4(),
117111
ChangeSet.empty<T>(),
118-
coreParameters,
112+
core,
119113
isStateful,
120114
)
121115
}
122116

123117
// CREATE
124-
if (!filteredCurrentParameters && desiredParameters) {
118+
if (!filteredCurrentParameters && desired) {
125119
return new Plan(
126120
uuidV4(),
127-
ChangeSet.create(desiredParameters),
128-
coreParameters,
121+
ChangeSet.create(desired),
122+
core,
129123
isStateful,
130124
)
131125
}
132126

133127
// DESTROY
134-
if (filteredCurrentParameters && !desiredParameters) {
128+
if (filteredCurrentParameters && !desired) {
135129
return new Plan(
136130
uuidV4(),
137131
ChangeSet.destroy(filteredCurrentParameters),
138-
coreParameters,
132+
core,
139133
isStateful,
140134
)
141135
}
142136

143137
// NO-OP, MODIFY or RE-CREATE
144138
const changeSet = ChangeSet.calculateModification(
145-
desiredParameters!,
139+
desired!,
146140
filteredCurrentParameters!,
147141
settings.parameterSettings,
148142
);
149143

150144
return new Plan(
151145
uuidV4(),
152146
changeSet,
153-
coreParameters,
147+
core,
154148
isStateful,
155149
);
156150
}
@@ -244,35 +238,35 @@ export class Plan<T extends StringIndexedObject> {
244238
* @private
245239
*/
246240
private static matchCurrentParameters<T extends StringIndexedObject>(params: {
247-
desiredParameters: Partial<T> | null,
248-
currentParametersArray: Partial<T>[] | null,
249-
stateParameters: Partial<T> | null,
241+
desired: Partial<T> | null,
242+
currentArray: Partial<T>[] | null,
243+
state: Partial<T> | null,
250244
settings: ResourceSettings<T>,
251245
isStateful: boolean,
252246
}): Partial<T> | null {
253247
const {
254-
desiredParameters,
255-
currentParametersArray,
256-
stateParameters,
248+
desired,
249+
currentArray,
250+
state,
257251
settings,
258252
isStateful
259253
} = params;
260254

261255
if (!settings.allowMultiple) {
262-
return currentParametersArray?.[0] ?? null;
256+
return currentArray?.[0] ?? null;
263257
}
264258

265-
if (!currentParametersArray) {
259+
if (!currentArray) {
266260
return null;
267261
}
268262

269263
if (isStateful) {
270-
return stateParameters
271-
? settings.allowMultiple.matcher(stateParameters, currentParametersArray)
264+
return state
265+
? settings.allowMultiple.matcher(state, currentArray)
272266
: null
273267
}
274268

275-
return settings.allowMultiple.matcher(desiredParameters!, currentParametersArray);
269+
return settings.allowMultiple.matcher(desired!, currentArray);
276270
}
277271

278272
/**
@@ -284,16 +278,16 @@ export class Plan<T extends StringIndexedObject> {
284278
* or wants to set. If a parameter is not specified then it's not managed by Codify.
285279
*/
286280
private static filterCurrentParams<T extends StringIndexedObject>(params: {
287-
desiredParameters: Partial<T> | null,
288-
currentParameters: Partial<T> | null,
289-
stateParameters: Partial<T> | null,
281+
desired: Partial<T> | null,
282+
current: Partial<T> | null,
283+
state: Partial<T> | null,
290284
settings: ResourceSettings<T>,
291285
isStateful: boolean,
292286
}): Partial<T> | null {
293287
const {
294-
desiredParameters: desired,
295-
currentParameters: current,
296-
stateParameters: state,
288+
desired,
289+
current,
290+
state,
297291
settings,
298292
isStateful
299293
} = params;

src/plugin/plugin.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -245,9 +245,8 @@ describe('Plugin tests', () => {
245245

246246
const testPlugin = Plugin.create('testPlugin', [resource as any]);
247247
await testPlugin.plan({
248-
desired: {
249-
type: 'testResource'
250-
},
248+
core: { type: 'testResource' },
249+
desired: {},
251250
state: undefined,
252251
isStateful: false,
253252
})

0 commit comments

Comments
 (0)