codify-plugin-lib 1.0.148 → 1.0.150

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.
@@ -121,12 +121,10 @@ export class Plugin {
121
121
  return !controller.parsedSettings.allowMultiple && v > 1;
122
122
  });
123
123
  if (invalidMultipleConfigs.length > 0) {
124
- validationResults.push(...invalidMultipleConfigs.map(([k, v]) => ({
125
- resourceType: k,
126
- schemaValidationErrors: [],
127
- customValidationErrorMessage: `Multiple of resource type: ${k} found in configs. Only allowed 1.`,
128
- isValid: false,
129
- })));
124
+ throw new Error(`Multiples of the following configs were found but only 1 is allowed.
125
+
126
+ [${invalidMultipleConfigs.map(([k]) => k).join(', ')}]
127
+ `);
130
128
  }
131
129
  await this.crossValidateResources(data.configs);
132
130
  return {
@@ -79,7 +79,7 @@ export class ResourceController {
79
79
  await this.applyTransformParameters(state);
80
80
  // Parse data from the user supplied config
81
81
  const parsedConfig = new ConfigParser(desired, state, this.parsedSettings.statefulParameters);
82
- const { allNonStatefulParameters, allStatefulParameters, } = parsedConfig;
82
+ const { allParameters, allNonStatefulParameters, allStatefulParameters, } = parsedConfig;
83
83
  // Refresh resource parameters. This refreshes the parameters that configure the resource itself
84
84
  const currentArray = await this.refreshNonStatefulParameters(allNonStatefulParameters);
85
85
  // Short circuit here. If the resource is non-existent, there's no point checking stateful parameters
@@ -98,7 +98,7 @@ export class ResourceController {
98
98
  }
99
99
  // Refresh stateful parameters. These parameters have state external to the resource. Each variation of the
100
100
  // current parameters (each array element) is passed into the stateful parameter refresh.
101
- const statefulCurrentParameters = await this.refreshStatefulParameters(allStatefulParameters, currentArray);
101
+ const statefulCurrentParameters = await this.refreshStatefulParameters(allStatefulParameters, currentArray, allParameters);
102
102
  return Plan.calculate({
103
103
  desired,
104
104
  currentArray: currentArray.map((c, idx) => ({ ...c, ...statefulCurrentParameters[idx] })),
@@ -165,14 +165,14 @@ export class ResourceController {
165
165
  };
166
166
  // Parse data from the user supplied config
167
167
  const parsedConfig = new ConfigParser(parametersToRefresh, null, this.parsedSettings.statefulParameters);
168
- const { allNonStatefulParameters, allStatefulParameters, } = parsedConfig;
168
+ const { allParameters, allNonStatefulParameters, allStatefulParameters, } = parsedConfig;
169
169
  const currentParametersArray = await this.refreshNonStatefulParameters(allNonStatefulParameters);
170
170
  if (currentParametersArray === null
171
171
  || currentParametersArray === undefined
172
172
  || currentParametersArray.filter(Boolean).length === 0) {
173
173
  return [];
174
174
  }
175
- const statefulCurrentParameters = await this.refreshStatefulParameters(allStatefulParameters, currentParametersArray);
175
+ const statefulCurrentParameters = await this.refreshStatefulParameters(allStatefulParameters, currentParametersArray, allParameters);
176
176
  const resultParametersArray = currentParametersArray
177
177
  ?.map((r, idx) => ({ ...r, ...statefulCurrentParameters[idx] }));
178
178
  for (const result of resultParametersArray) {
@@ -291,17 +291,17 @@ ${JSON.stringify(refresh, null, 2)}
291
291
  }
292
292
  // Refresh stateful parameters
293
293
  // This refreshes parameters that are stateful (they can be added, deleted separately from the resource)
294
- async refreshStatefulParameters(statefulParametersConfig, allParameters) {
295
- const result = Array.from({ length: allParameters.length }, () => ({}));
294
+ async refreshStatefulParameters(statefulParametersConfig, currentArray, allParameters) {
295
+ const result = Array.from({ length: currentArray.length }, () => ({}));
296
296
  const sortedEntries = Object.entries(statefulParametersConfig)
297
297
  .sort(([key1], [key2]) => this.parsedSettings.statefulParameterOrder.get(key1) - this.parsedSettings.statefulParameterOrder.get(key2));
298
- for (const [idx, refreshedParams] of allParameters.entries()) {
298
+ for (const [idx, refreshedParams] of currentArray.entries()) {
299
299
  await Promise.all(sortedEntries.map(async ([key, desiredValue]) => {
300
300
  const statefulParameter = this.parsedSettings.statefulParameters.get(key);
301
301
  if (!statefulParameter) {
302
302
  throw new Error(`Stateful parameter ${key} was not found`);
303
303
  }
304
- result[idx][key] = await statefulParameter.refresh(desiredValue ?? null, refreshedParams);
304
+ result[idx][key] = await statefulParameter.refresh(desiredValue ?? null, { ...allParameters, ...refreshedParams });
305
305
  }));
306
306
  }
307
307
  return result;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codify-plugin-lib",
3
- "version": "1.0.148",
3
+ "version": "1.0.150",
4
4
  "description": "Library plugin library",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -482,13 +482,12 @@ describe('Plugin tests', () => {
482
482
 
483
483
  const testPlugin = Plugin.create('testPlugin', [resource as any]);
484
484
 
485
- const validate1 = await testPlugin.validate({
486
- configs: [{ core: { type: 'ssh-config' }, parameters: { propA: 'a' } }, {
487
- core: { type: 'ssh-config' },
488
- parameters: { propB: 'b' }
489
- }]
490
- })
491
-
492
- expect(validate1.resourceValidations.every((r) => r.isValid)).to.be.false;
485
+ await expect(() => testPlugin.validate({
486
+ configs: [{ core: { type: 'ssh-config' }, parameters: { propA: 'a' } }, {
487
+ core: { type: 'ssh-config' },
488
+ parameters: { propB: 'b' }
489
+ }]
490
+ })
491
+ ).rejects.toThrowError();
493
492
  })
494
493
  });
@@ -178,12 +178,11 @@ export class Plugin {
178
178
  });
179
179
 
180
180
  if (invalidMultipleConfigs.length > 0) {
181
- validationResults.push(...invalidMultipleConfigs.map(([k, v]) => ({
182
- resourceType: k,
183
- schemaValidationErrors: [],
184
- customValidationErrorMessage: `Multiple of resource type: ${k} found in configs. Only allowed 1.`,
185
- isValid: false,
186
- })));
181
+ throw new Error(
182
+ `Multiples of the following configs were found but only 1 is allowed.
183
+
184
+ [${invalidMultipleConfigs.map(([k]) => k).join(', ')}]
185
+ `)
187
186
  }
188
187
 
189
188
  await this.crossValidateResources(data.configs);
@@ -119,6 +119,7 @@ export class ResourceController<T extends StringIndexedObject> {
119
119
  // Parse data from the user supplied config
120
120
  const parsedConfig = new ConfigParser(desired, state, this.parsedSettings.statefulParameters)
121
121
  const {
122
+ allParameters,
122
123
  allNonStatefulParameters,
123
124
  allStatefulParameters,
124
125
  } = parsedConfig;
@@ -144,7 +145,7 @@ export class ResourceController<T extends StringIndexedObject> {
144
145
 
145
146
  // Refresh stateful parameters. These parameters have state external to the resource. Each variation of the
146
147
  // current parameters (each array element) is passed into the stateful parameter refresh.
147
- const statefulCurrentParameters = await this.refreshStatefulParameters(allStatefulParameters, currentArray);
148
+ const statefulCurrentParameters = await this.refreshStatefulParameters(allStatefulParameters, currentArray, allParameters);
148
149
 
149
150
  return Plan.calculate({
150
151
  desired,
@@ -239,6 +240,7 @@ export class ResourceController<T extends StringIndexedObject> {
239
240
  // Parse data from the user supplied config
240
241
  const parsedConfig = new ConfigParser(parametersToRefresh, null, this.parsedSettings.statefulParameters)
241
242
  const {
243
+ allParameters,
242
244
  allNonStatefulParameters,
243
245
  allStatefulParameters,
244
246
  } = parsedConfig;
@@ -252,7 +254,7 @@ export class ResourceController<T extends StringIndexedObject> {
252
254
  return [];
253
255
  }
254
256
 
255
- const statefulCurrentParameters = await this.refreshStatefulParameters(allStatefulParameters, currentParametersArray);
257
+ const statefulCurrentParameters = await this.refreshStatefulParameters(allStatefulParameters, currentParametersArray, allParameters);
256
258
  const resultParametersArray = currentParametersArray
257
259
  ?.map((r, idx) => ({ ...r, ...statefulCurrentParameters[idx] }))
258
260
 
@@ -403,21 +405,25 @@ ${JSON.stringify(refresh, null, 2)}
403
405
 
404
406
  // Refresh stateful parameters
405
407
  // This refreshes parameters that are stateful (they can be added, deleted separately from the resource)
406
- private async refreshStatefulParameters(statefulParametersConfig: Partial<T>, allParameters: Array<Partial<T>>): Promise<Array<Partial<T>>> {
407
- const result: Array<Partial<T>> = Array.from({ length: allParameters.length }, () => ({}))
408
+ private async refreshStatefulParameters(
409
+ statefulParametersConfig: Partial<T>,
410
+ currentArray: Array<Partial<T>>,
411
+ allParameters: Partial<T>
412
+ ): Promise<Array<Partial<T>>> {
413
+ const result: Array<Partial<T>> = Array.from({ length: currentArray.length }, () => ({}))
408
414
  const sortedEntries = Object.entries(statefulParametersConfig)
409
415
  .sort(
410
416
  ([key1], [key2]) => this.parsedSettings.statefulParameterOrder.get(key1)! - this.parsedSettings.statefulParameterOrder.get(key2)!
411
417
  )
412
418
 
413
- for (const [idx, refreshedParams] of allParameters.entries()) {
419
+ for (const [idx, refreshedParams] of currentArray.entries()) {
414
420
  await Promise.all(sortedEntries.map(async ([key, desiredValue]) => {
415
421
  const statefulParameter = this.parsedSettings.statefulParameters.get(key);
416
422
  if (!statefulParameter) {
417
423
  throw new Error(`Stateful parameter ${key} was not found`);
418
424
  }
419
425
 
420
- (result[idx][key] as T[keyof T] | null) = await statefulParameter.refresh(desiredValue ?? null, refreshedParams)
426
+ (result[idx][key] as T[keyof T] | null) = await statefulParameter.refresh(desiredValue ?? null, { ...allParameters, ...refreshedParams })
421
427
  }))
422
428
  }
423
429