codify-plugin-lib 1.0.53 → 1.0.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -29,6 +29,7 @@ export declare abstract class Resource<T extends StringIndexedObject> {
|
|
|
29
29
|
private _applyModify;
|
|
30
30
|
private _applyDestroy;
|
|
31
31
|
private validateRefreshResults;
|
|
32
|
+
private applyDefaultValueToRefreshResults;
|
|
32
33
|
private applyTransformParameters;
|
|
33
34
|
private addDefaultValues;
|
|
34
35
|
private refreshResourceParameters;
|
|
@@ -142,8 +142,10 @@ export class Resource {
|
|
|
142
142
|
if (!refresh) {
|
|
143
143
|
return;
|
|
144
144
|
}
|
|
145
|
-
const desiredKeys = new Set(desiredMap.keys()
|
|
146
|
-
|
|
145
|
+
const desiredKeys = new Set([...desiredMap.keys()]
|
|
146
|
+
.filter((key) => this.defaultValues[key] === undefined));
|
|
147
|
+
const refreshKeys = new Set([...Object.keys(refresh)]
|
|
148
|
+
.filter((key) => this.defaultValues[key] === undefined));
|
|
147
149
|
if (!setsEqual(desiredKeys, refreshKeys)) {
|
|
148
150
|
throw new Error(`Resource ${this.typeId}
|
|
149
151
|
refresh() must return back exactly the keys that were provided
|
|
@@ -151,12 +153,22 @@ Missing: ${[...desiredKeys].filter((k) => !refreshKeys.has(k))};
|
|
|
151
153
|
Additional: ${[...refreshKeys].filter(k => !desiredKeys.has(k))};`);
|
|
152
154
|
}
|
|
153
155
|
}
|
|
156
|
+
applyDefaultValueToRefreshResults(refresh) {
|
|
157
|
+
if (!refresh) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
for (const [key, defaultValue] of Object.entries(this.defaultValues)) {
|
|
161
|
+
if (refresh[key] === undefined) {
|
|
162
|
+
refresh[key] = defaultValue;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
154
166
|
async applyTransformParameters(transformParameters, desired) {
|
|
155
167
|
const orderedEntries = [...Object.entries(transformParameters)]
|
|
156
168
|
.sort(([keyA], [keyB]) => this.transformParameterOrder.get(keyA) - this.transformParameterOrder.get(keyB));
|
|
157
|
-
for (const [key
|
|
169
|
+
for (const [key] of orderedEntries) {
|
|
158
170
|
if (desired[key] !== null) {
|
|
159
|
-
const transformedValue = await
|
|
171
|
+
const transformedValue = await this.transformParameters.get(key).transform(desired[key]);
|
|
160
172
|
if (Object.keys(transformedValue).some((k) => desired[k] !== undefined)) {
|
|
161
173
|
throw new Error(`Transform parameter ${key} is attempting to override existing value ${desired[key]}`);
|
|
162
174
|
}
|
|
@@ -179,6 +191,7 @@ Additional: ${[...refreshKeys].filter(k => !desiredKeys.has(k))};`);
|
|
|
179
191
|
const entriesToRefresh = new Map(Object.entries(resourceParameters));
|
|
180
192
|
const currentParameters = await this.refresh(entriesToRefresh);
|
|
181
193
|
this.validateRefreshResults(currentParameters, entriesToRefresh);
|
|
194
|
+
this.applyDefaultValueToRefreshResults(currentParameters);
|
|
182
195
|
return currentParameters;
|
|
183
196
|
}
|
|
184
197
|
async refreshStatefulParameters(statefulParametersConfig, isStatefulMode) {
|
package/package.json
CHANGED
|
@@ -316,7 +316,28 @@ describe('Resource tests', () => {
|
|
|
316
316
|
expect(plan.currentConfig.propA).to.eq('propAAfter');
|
|
317
317
|
expect(plan.desiredConfig.propA).to.eq('propADefault');
|
|
318
318
|
expect(plan.changeSet.operation).to.eq(ResourceOperation.RECREATE);
|
|
319
|
+
})
|
|
319
320
|
|
|
321
|
+
it('Allows default values to be added to both desired and current', async () => {
|
|
322
|
+
const resource = new class extends TestResource {
|
|
323
|
+
constructor() {
|
|
324
|
+
super({
|
|
325
|
+
type: 'type',
|
|
326
|
+
parameterOptions: {
|
|
327
|
+
propE: { default: 'propEDefault' }
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
async refresh(): Promise<Partial<TestConfig> | null> {
|
|
333
|
+
return {};
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
const plan = await resource.plan({ type: 'resource'})
|
|
338
|
+
expect(plan.currentConfig.propE).to.eq('propEDefault');
|
|
339
|
+
expect(plan.desiredConfig.propE).to.eq('propEDefault');
|
|
340
|
+
expect(plan.changeSet.operation).to.eq(ResourceOperation.NOOP);
|
|
320
341
|
})
|
|
321
342
|
|
|
322
343
|
it('Allows default values to be added (ignore default value if already present)', async () => {
|
package/src/entities/resource.ts
CHANGED
|
@@ -211,8 +211,15 @@ export abstract class Resource<T extends StringIndexedObject> {
|
|
|
211
211
|
return;
|
|
212
212
|
}
|
|
213
213
|
|
|
214
|
-
const desiredKeys = new Set<keyof T>(
|
|
215
|
-
|
|
214
|
+
const desiredKeys = new Set<keyof T>(
|
|
215
|
+
[...desiredMap.keys()]
|
|
216
|
+
.filter((key) => this.defaultValues[key] === undefined)
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
const refreshKeys = new Set(
|
|
220
|
+
[...Object.keys(refresh)]
|
|
221
|
+
.filter((key) => this.defaultValues[key] === undefined)
|
|
222
|
+
) as Set<keyof T>;
|
|
216
223
|
|
|
217
224
|
if (!setsEqual(desiredKeys, refreshKeys)) {
|
|
218
225
|
throw new Error(
|
|
@@ -224,13 +231,26 @@ Additional: ${[...refreshKeys].filter(k => !desiredKeys.has(k))};`
|
|
|
224
231
|
}
|
|
225
232
|
}
|
|
226
233
|
|
|
234
|
+
private applyDefaultValueToRefreshResults(refresh: Partial<T> | null) {
|
|
235
|
+
if (!refresh) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
for (const [key, defaultValue] of Object.entries(this.defaultValues)) {
|
|
240
|
+
if (refresh[key] === undefined) {
|
|
241
|
+
// @ts-ignore
|
|
242
|
+
refresh[key] = defaultValue;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
227
247
|
private async applyTransformParameters(transformParameters: Partial<T>, desired: Partial<T>): Promise<void> {
|
|
228
248
|
const orderedEntries = [...Object.entries(transformParameters)]
|
|
229
249
|
.sort(([keyA], [keyB]) => this.transformParameterOrder.get(keyA)! - this.transformParameterOrder.get(keyB)!)
|
|
230
250
|
|
|
231
|
-
for (const [key
|
|
251
|
+
for (const [key] of orderedEntries) {
|
|
232
252
|
if (desired[key] !== null) {
|
|
233
|
-
const transformedValue = await
|
|
253
|
+
const transformedValue = await this.transformParameters.get(key)!.transform(desired[key]);
|
|
234
254
|
|
|
235
255
|
if (Object.keys(transformedValue).some((k) => desired[k] !== undefined)) {
|
|
236
256
|
throw new Error(`Transform parameter ${key as string} is attempting to override existing value ${desired[key]}`);
|
|
@@ -261,6 +281,8 @@ Additional: ${[...refreshKeys].filter(k => !desiredKeys.has(k))};`
|
|
|
261
281
|
const currentParameters = await this.refresh(entriesToRefresh);
|
|
262
282
|
|
|
263
283
|
this.validateRefreshResults(currentParameters, entriesToRefresh);
|
|
284
|
+
this.applyDefaultValueToRefreshResults(currentParameters);
|
|
285
|
+
|
|
264
286
|
return currentParameters;
|
|
265
287
|
}
|
|
266
288
|
|