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
- const refreshKeys = new Set(Object.keys(refresh));
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, tp] of orderedEntries) {
169
+ for (const [key] of orderedEntries) {
158
170
  if (desired[key] !== null) {
159
- const transformedValue = await tp.transform(desired[key]);
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codify-plugin-lib",
3
- "version": "1.0.53",
3
+ "version": "1.0.54",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -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 () => {
@@ -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>(desiredMap.keys());
215
- const refreshKeys = new Set(Object.keys(refresh)) as Set<keyof T>;
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, tp] of orderedEntries) {
251
+ for (const [key] of orderedEntries) {
232
252
  if (desired[key] !== null) {
233
- const transformedValue = await tp.transform(desired[key]);
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