Skip to content

Commit 0af7980

Browse files
committed
feat: Added feature to remove un-necessary default values from imports
1 parent c7549e3 commit 0af7980

File tree

4 files changed

+55
-1
lines changed

4 files changed

+55
-1
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codify-plugin-lib",
3-
"version": "1.0.141",
3+
"version": "1.0.142",
44
"description": "Library plugin library",
55
"main": "dist/index.js",
66
"typings": "dist/index.d.ts",

src/resource/resource-controller.test.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -711,4 +711,39 @@ describe('Resource tests', () => {
711711
}
712712
})
713713
})
714+
715+
it('Applies removes default values if they remain default for imports', async () => {
716+
const resource = new class extends TestResource {
717+
getSettings(): ResourceSettings<TestConfig> {
718+
return {
719+
id: 'resourceType',
720+
parameterSettings: {
721+
propA: { type: 'string', default: 'defaultValue' },
722+
propB: { type: 'boolean', default: true }
723+
},
724+
}
725+
}
726+
727+
async refresh(parameters: Partial<TestConfig>): Promise<Partial<TestConfig> | null> {
728+
return {
729+
propA: 'defaultValue',
730+
propB: false,
731+
propC: 'newPropC'
732+
}
733+
}
734+
}
735+
736+
const controller = new ResourceController(resource);
737+
const plan = await controller.import({ type: 'resourceType' }, {});
738+
739+
expect(plan![0]).toMatchObject({
740+
'core': {
741+
'type': 'resourceType'
742+
},
743+
'parameters': {
744+
propB: false,
745+
propC: 'newPropC'
746+
}
747+
})
748+
})
714749
});

src/resource/resource-controller.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,8 @@ export class ResourceController<T extends StringIndexedObject> {
261261
const resultParameters = { ...currentParametersArray[0], ...statefulCurrentParameters };
262262

263263
await this.applyTransformParameters(resultParameters, true);
264+
this.removeDefaultValues(resultParameters, parameters)
265+
264266
return [{ core, parameters: resultParameters }];
265267
}
266268

@@ -377,6 +379,19 @@ ${JSON.stringify(refresh, null, 2)}
377379
}
378380
}
379381

382+
private removeDefaultValues(newConfig: Partial<T> | null, originalConfig: Partial<T>): void {
383+
if (!newConfig) {
384+
return;
385+
}
386+
387+
for (const [key, defaultValue] of Object.entries(this.parsedSettings.defaultValues)) {
388+
if (defaultValue !== undefined && (newConfig[key] === defaultValue || originalConfig[key] === undefined || originalConfig[key] === null)) {
389+
delete newConfig[key];
390+
}
391+
}
392+
393+
}
394+
380395
private async refreshNonStatefulParameters(resourceParameters: Partial<T>): Promise<Array<Partial<T>> | null> {
381396
const result = await this.resource.refresh(resourceParameters);
382397

src/resource/resource-settings.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,10 @@ const ParameterTransformationDefaults: Partial<Record<ParameterSettingType, Inpu
368368
'string': {
369369
to: String,
370370
from: String,
371+
},
372+
'boolean': {
373+
to: Boolean,
374+
from: Boolean,
371375
}
372376
}
373377

0 commit comments

Comments
 (0)