codify-plugin-lib 1.0.78 → 1.0.79

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.
@@ -30,7 +30,7 @@ export declare class ChangeSet<T extends StringIndexedObject> {
30
30
  static empty<T extends StringIndexedObject>(): ChangeSet<T>;
31
31
  static create<T extends StringIndexedObject>(desired: Partial<T>): ChangeSet<T>;
32
32
  static destroy<T extends StringIndexedObject>(current: Partial<T>): ChangeSet<T>;
33
- static calculateModification<T extends StringIndexedObject>(desired: Partial<T>, current: Partial<T>, parameterSettings?: Partial<Record<keyof T, ParameterSetting>>): ChangeSet<T>;
33
+ static calculateModification<T extends StringIndexedObject>(desired: Partial<T>, current: Partial<T>, parameterSettings?: Partial<Record<keyof T, ParameterSetting>>): Promise<ChangeSet<T>>;
34
34
  /**
35
35
  * Calculates the differences between the desired and current parameters,
36
36
  * and returns a list of parameter changes that describe what needs to be added,
@@ -45,8 +45,8 @@ export class ChangeSet {
45
45
  }));
46
46
  return new ChangeSet(ResourceOperation.DESTROY, parameterChanges);
47
47
  }
48
- static calculateModification(desired, current, parameterSettings = {}) {
49
- const pc = ChangeSet.calculateParameterChanges(desired, current, parameterSettings);
48
+ static async calculateModification(desired, current, parameterSettings = {}) {
49
+ const pc = await ChangeSet.calculateParameterChanges(desired, current, parameterSettings);
50
50
  const statefulParameterKeys = new Set(Object.entries(parameterSettings)
51
51
  .filter(([, v]) => v?.type === 'stateful')
52
52
  .map(([k]) => k));
@@ -77,7 +77,7 @@ export class ChangeSet {
77
77
  * @param {Partial<Record<keyof T, ParameterSetting>>} [parameterOptions] - Optional settings used when comparing parameters.
78
78
  * @return {ParameterChange<T>[]} A list of changes required to transition from the current state to the desired state.
79
79
  */
80
- static calculateParameterChanges(desiredParameters, currentParameters, parameterOptions) {
80
+ static async calculateParameterChanges(desiredParameters, currentParameters, parameterOptions) {
81
81
  const parameterChangeSet = new Array();
82
82
  // Filter out null and undefined values or else the diff below will not work
83
83
  const desired = Object.fromEntries(Object.entries(desiredParameters).filter(([, v]) => v !== null && v !== undefined));
@@ -93,7 +93,7 @@ export class ChangeSet {
93
93
  delete current[k];
94
94
  continue;
95
95
  }
96
- if (!ChangeSet.isSame(desired[k], current[k], parameterOptions?.[k])) {
96
+ if (!await ChangeSet.isSame(desired[k], current[k], parameterOptions?.[k])) {
97
97
  parameterChangeSet.push({
98
98
  name: k,
99
99
  previousValue: v ?? null,
@@ -138,7 +138,7 @@ export class ChangeSet {
138
138
  const indexNext = orderOfOperations.indexOf(next);
139
139
  return orderOfOperations[Math.max(indexPrev, indexNext)];
140
140
  }
141
- static isSame(desired, current, setting) {
141
+ static async isSame(desired, current, setting) {
142
142
  switch (setting?.type) {
143
143
  case 'stateful': {
144
144
  const statefulSetting = setting.definition.getSettings();
@@ -41,7 +41,7 @@ export declare class Plan<T extends StringIndexedObject> {
41
41
  coreParameters: ResourceConfig;
42
42
  settings: ParsedResourceSettings<T>;
43
43
  statefulMode: boolean;
44
- }): Plan<T>;
44
+ }): Promise<Plan<T>>;
45
45
  /**
46
46
  * Only keep relevant params for the plan. We don't want to change settings that were not already
47
47
  * defined.
package/dist/plan/plan.js CHANGED
@@ -70,7 +70,7 @@ export class Plan {
70
70
  getResourceType() {
71
71
  return this.coreParameters.type;
72
72
  }
73
- static calculate(params) {
73
+ static async calculate(params) {
74
74
  const { desiredParameters, currentParametersArray, stateParameters, coreParameters, settings, statefulMode } = params;
75
75
  const currentParameters = Plan.matchCurrentParameters({
76
76
  desiredParameters,
@@ -99,7 +99,7 @@ export class Plan {
99
99
  return new Plan(uuidV4(), ChangeSet.destroy(filteredCurrentParameters), coreParameters);
100
100
  }
101
101
  // NO-OP, MODIFY or RE-CREATE
102
- const changeSet = ChangeSet.calculateModification(desiredParameters, filteredCurrentParameters, settings.parameterSettings);
102
+ const changeSet = await ChangeSet.calculateModification(desiredParameters, filteredCurrentParameters, settings.parameterSettings);
103
103
  return new Plan(uuidV4(), changeSet, coreParameters);
104
104
  }
105
105
  /**
@@ -97,7 +97,7 @@ export interface DefaultParameterSetting {
97
97
  *
98
98
  * @return Return true if equal
99
99
  */
100
- isEqual?: (desired: any, current: any) => boolean;
100
+ isEqual?: (desired: any, current: any) => Promise<boolean> | boolean;
101
101
  /**
102
102
  * Chose if the resource can be modified instead of re-created when there is a change to this parameter.
103
103
  * Defaults to false (re-create).
@@ -123,7 +123,7 @@ export interface ArrayParameterSetting extends DefaultParameterSetting {
123
123
  *
124
124
  * @return Return true if desired is equivalent to current.
125
125
  */
126
- isElementEqual?: (desired: any, current: any) => boolean;
126
+ isElementEqual?: (desired: any, current: any) => Promise<boolean> | boolean;
127
127
  }
128
128
  /**
129
129
  * Stateful parameter type specific settings. A stateful parameter is a sub-resource that can hold its own
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codify-plugin-lib",
3
- "version": "1.0.78",
3
+ "version": "1.0.79",
4
4
  "description": "Library plugin library",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -85,12 +85,12 @@ export class ChangeSet<T extends StringIndexedObject> {
85
85
  return new ChangeSet(ResourceOperation.DESTROY, parameterChanges);
86
86
  }
87
87
 
88
- static calculateModification<T extends StringIndexedObject>(
88
+ static async calculateModification<T extends StringIndexedObject>(
89
89
  desired: Partial<T>,
90
90
  current: Partial<T>,
91
91
  parameterSettings: Partial<Record<keyof T, ParameterSetting>> = {},
92
- ): ChangeSet<T> {
93
- const pc = ChangeSet.calculateParameterChanges(desired, current, parameterSettings);
92
+ ): Promise<ChangeSet<T>> {
93
+ const pc = await ChangeSet.calculateParameterChanges(desired, current, parameterSettings);
94
94
 
95
95
  const statefulParameterKeys = new Set(
96
96
  Object.entries(parameterSettings)
@@ -126,11 +126,11 @@ export class ChangeSet<T extends StringIndexedObject> {
126
126
  * @param {Partial<Record<keyof T, ParameterSetting>>} [parameterOptions] - Optional settings used when comparing parameters.
127
127
  * @return {ParameterChange<T>[]} A list of changes required to transition from the current state to the desired state.
128
128
  */
129
- private static calculateParameterChanges<T extends StringIndexedObject>(
129
+ private static async calculateParameterChanges<T extends StringIndexedObject>(
130
130
  desiredParameters: Partial<T>,
131
131
  currentParameters: Partial<T>,
132
132
  parameterOptions?: Partial<Record<keyof T, ParameterSetting>>,
133
- ): ParameterChange<T>[] {
133
+ ): Promise<ParameterChange<T>[]> {
134
134
  const parameterChangeSet = new Array<ParameterChange<T>>();
135
135
 
136
136
  // Filter out null and undefined values or else the diff below will not work
@@ -155,7 +155,7 @@ export class ChangeSet<T extends StringIndexedObject> {
155
155
  continue;
156
156
  }
157
157
 
158
- if (!ChangeSet.isSame(desired[k], current[k], parameterOptions?.[k])) {
158
+ if (!await ChangeSet.isSame(desired[k], current[k], parameterOptions?.[k])) {
159
159
  parameterChangeSet.push({
160
160
  name: k,
161
161
  previousValue: v ?? null,
@@ -210,11 +210,11 @@ export class ChangeSet<T extends StringIndexedObject> {
210
210
  return orderOfOperations[Math.max(indexPrev, indexNext)];
211
211
  }
212
212
 
213
- private static isSame(
213
+ private static async isSame(
214
214
  desired: unknown,
215
215
  current: unknown,
216
216
  setting?: ParameterSetting,
217
- ): boolean {
217
+ ): Promise<boolean> {
218
218
  switch (setting?.type) {
219
219
  case 'stateful': {
220
220
  const statefulSetting = (setting as StatefulParameterSetting).definition.getSettings()
package/src/plan/plan.ts CHANGED
@@ -105,14 +105,14 @@ export class Plan<T extends StringIndexedObject> {
105
105
  return this.coreParameters.type
106
106
  }
107
107
 
108
- static calculate<T extends StringIndexedObject>(params: {
108
+ static async calculate<T extends StringIndexedObject>(params: {
109
109
  desiredParameters: Partial<T> | null,
110
110
  currentParametersArray: Partial<T>[] | null,
111
111
  stateParameters: Partial<T> | null,
112
112
  coreParameters: ResourceConfig,
113
113
  settings: ParsedResourceSettings<T>,
114
114
  statefulMode: boolean,
115
- }): Plan<T> {
115
+ }): Promise<Plan<T>> {
116
116
  const {
117
117
  desiredParameters,
118
118
  currentParametersArray,
@@ -166,7 +166,7 @@ export class Plan<T extends StringIndexedObject> {
166
166
  }
167
167
 
168
168
  // NO-OP, MODIFY or RE-CREATE
169
- const changeSet = ChangeSet.calculateModification(
169
+ const changeSet = await ChangeSet.calculateModification(
170
170
  desiredParameters!,
171
171
  filteredCurrentParameters!,
172
172
  settings.parameterSettings,
@@ -154,7 +154,7 @@ export class ParsedResourceSettings<T extends StringIndexedObject> implements Re
154
154
  // The rest of the types have defaults set already
155
155
  }
156
156
 
157
- private resolveEqualsFn(parameter: ParameterSetting, key: string): (desired: unknown, current: unknown) => boolean {
157
+ private resolveEqualsFn(parameter: ParameterSetting, key: string): (desired: unknown, current: unknown) => Promise<boolean> | boolean {
158
158
  if (parameter.type === 'array') {
159
159
  return parameter.isEqual ?? areArraysEqual.bind(areArraysEqual, parameter as ArrayParameterSetting)
160
160
  }
@@ -127,7 +127,7 @@ export interface DefaultParameterSetting {
127
127
  *
128
128
  * @return Return true if equal
129
129
  */
130
- isEqual?: (desired: any, current: any) => boolean;
130
+ isEqual?: (desired: any, current: any) => Promise<boolean> | boolean;
131
131
 
132
132
  /**
133
133
  * Chose if the resource can be modified instead of re-created when there is a change to this parameter.
@@ -156,7 +156,7 @@ export interface ArrayParameterSetting extends DefaultParameterSetting {
156
156
  *
157
157
  * @return Return true if desired is equivalent to current.
158
158
  */
159
- isElementEqual?: (desired: any, current: any) => boolean
159
+ isElementEqual?: (desired: any, current: any) => Promise<boolean> | boolean;
160
160
  }
161
161
 
162
162
  /**