diff --git a/src/lib/definitions/callbackstate.ts b/src/lib/definitions/callbackstate.ts index 704e37c8..2ada080d 100644 --- a/src/lib/definitions/callbackstate.ts +++ b/src/lib/definitions/callbackstate.ts @@ -109,7 +109,7 @@ export class Callbackstate { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Callbackstate} without deleted properties. */ - normalize(): Callbackstate { + normalize = (): Callbackstate => { const clone = new Callbackstate(this); normalizeUsedForCompensationProperty(clone); @@ -120,5 +120,5 @@ export class Callbackstate { setEndValueIfNoTransition(clone); return clone; - } + }; } diff --git a/src/lib/definitions/databasedswitch.ts b/src/lib/definitions/databasedswitch.ts index 0cc2af93..98bb253e 100644 --- a/src/lib/definitions/databasedswitch.ts +++ b/src/lib/definitions/databasedswitch.ts @@ -83,7 +83,7 @@ export class Databasedswitch { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Databasedswitch} without deleted properties. */ - normalize(): Databasedswitch { + normalize = (): Databasedswitch => { const clone = new Databasedswitch(this); normalizeUsedForCompensationProperty(clone); @@ -91,5 +91,5 @@ export class Databasedswitch { normalizeDataConditionsProperty(clone); return clone; - } + }; } diff --git a/src/lib/definitions/defaultdef.ts b/src/lib/definitions/defaultdef.ts index 6eedeef9..e64866bf 100644 --- a/src/lib/definitions/defaultdef.ts +++ b/src/lib/definitions/defaultdef.ts @@ -38,7 +38,7 @@ export class Defaultdef /* Default definition. Can be either a transition or end * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Defaultdef} without deleted properties. */ - normalize(): Defaultdef { + normalize = (): Defaultdef => { const clone = new Defaultdef(this); normalizeEndProperty(clone); @@ -46,5 +46,5 @@ export class Defaultdef /* Default definition. Can be either a transition or end setEndValueIfNoTransition(clone); return clone; - } + }; } diff --git a/src/lib/definitions/delaystate.ts b/src/lib/definitions/delaystate.ts index ca99a9dd..6b655dde 100644 --- a/src/lib/definitions/delaystate.ts +++ b/src/lib/definitions/delaystate.ts @@ -92,7 +92,7 @@ export class Delaystate { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Delaystate} without deleted properties. */ - normalize(): Delaystate { + normalize = (): Delaystate => { const clone = new Delaystate(this); normalizeUsedForCompensationProperty(clone); @@ -101,5 +101,5 @@ export class Delaystate { normalizeTransitionProperty(clone); setEndValueIfNoTransition(clone); return clone; - } + }; } diff --git a/src/lib/definitions/end.ts b/src/lib/definitions/end.ts index 80c1059e..33d8270c 100644 --- a/src/lib/definitions/end.ts +++ b/src/lib/definitions/end.ts @@ -44,12 +44,12 @@ export class End { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.End} without deleted properties. */ - normalize(): End { + normalize = (): End => { const clone = new End(this); normalizeCompensateProperty(clone); normalizeTerminateProperty(clone); return clone; - } + }; } diff --git a/src/lib/definitions/enddatacondition.ts b/src/lib/definitions/enddatacondition.ts index a281ee3f..6d5d8e4a 100644 --- a/src/lib/definitions/enddatacondition.ts +++ b/src/lib/definitions/enddatacondition.ts @@ -43,11 +43,11 @@ export class Enddatacondition { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Enddatacondition} without deleted properties. */ - normalize(): Enddatacondition { + normalize = (): Enddatacondition => { const clone = new Enddatacondition(this); normalizeEndProperty(clone); return clone; - } + }; } diff --git a/src/lib/definitions/enddeventcondition.ts b/src/lib/definitions/enddeventcondition.ts index ba377caf..d29dafdd 100644 --- a/src/lib/definitions/enddeventcondition.ts +++ b/src/lib/definitions/enddeventcondition.ts @@ -55,11 +55,11 @@ export class Enddeventcondition { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Enddeventcondition} without deleted properties. */ - normalize(): Enddeventcondition { + normalize = (): Enddeventcondition => { const clone = new Enddeventcondition(this); normalizeEndProperty(clone); return clone; - } + }; } diff --git a/src/lib/definitions/error.ts b/src/lib/definitions/error.ts index 5f112add..844edf5b 100644 --- a/src/lib/definitions/error.ts +++ b/src/lib/definitions/error.ts @@ -50,7 +50,7 @@ export class Error { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Error} without deleted properties. */ - normalize(): Error { + normalize = (): Error => { const clone = new Error(this); normalizeEndProperty(clone); @@ -59,5 +59,5 @@ export class Error { setEndValueIfNoTransition(clone); return clone; - } + }; } diff --git a/src/lib/definitions/eventbasedswitch.ts b/src/lib/definitions/eventbasedswitch.ts index 3cf5337c..83186f24 100644 --- a/src/lib/definitions/eventbasedswitch.ts +++ b/src/lib/definitions/eventbasedswitch.ts @@ -90,7 +90,7 @@ export class Eventbasedswitch { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Eventbasedswitch} without deleted properties. */ - normalize(): Eventbasedswitch { + normalize = (): Eventbasedswitch => { const clone = new Eventbasedswitch(this); normalizeUsedForCompensationProperty(clone); @@ -98,5 +98,5 @@ export class Eventbasedswitch { normalizeEventConditionsProperty(clone); return clone; - } + }; } diff --git a/src/lib/definitions/eventdef.ts b/src/lib/definitions/eventdef.ts index c9f68f78..c82d2792 100644 --- a/src/lib/definitions/eventdef.ts +++ b/src/lib/definitions/eventdef.ts @@ -57,11 +57,11 @@ export class Eventdef { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Eventdef} without deleted properties. */ - normalize(): Eventdef { + normalize = (): Eventdef => { const clone = new Eventdef(this); normalizeKindProperty(clone); return clone; - } + }; } diff --git a/src/lib/definitions/eventstate.ts b/src/lib/definitions/eventstate.ts index a60c09b0..6c7fd4a4 100644 --- a/src/lib/definitions/eventstate.ts +++ b/src/lib/definitions/eventstate.ts @@ -88,7 +88,7 @@ export class Eventstate /* This state is used to wait for events from event sour * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Eventstate} without deleted properties. */ - normalize(): Eventstate { + normalize = (): Eventstate => { const clone = new Eventstate(this); normalizeExclusiveProperty(clone); @@ -99,5 +99,5 @@ export class Eventstate /* This state is used to wait for events from event sour setEndValueIfNoTransition(clone); return clone; - } + }; } diff --git a/src/lib/definitions/exectimeout.ts b/src/lib/definitions/exectimeout.ts index 6f9b1425..ff6a2fce 100644 --- a/src/lib/definitions/exectimeout.ts +++ b/src/lib/definitions/exectimeout.ts @@ -38,11 +38,11 @@ export class Exectimeout { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Exectimeout} without deleted properties. */ - normalize(): Exectimeout { + normalize = (): Exectimeout => { const clone = new Exectimeout(this); normalizeInterruptProperty(clone); return clone; - } + }; } diff --git a/src/lib/definitions/foreachstate.ts b/src/lib/definitions/foreachstate.ts index 5f98b4f9..261c4663 100644 --- a/src/lib/definitions/foreachstate.ts +++ b/src/lib/definitions/foreachstate.ts @@ -112,7 +112,7 @@ export class Foreachstate { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Foreachstate} without deleted properties. */ - normalize(): Foreachstate { + normalize = (): Foreachstate => { const clone = new Foreachstate(this); normalizeUsedForCompensationProperty(clone); @@ -122,5 +122,5 @@ export class Foreachstate { setEndValueIfNoTransition(clone); return clone; - } + }; } diff --git a/src/lib/definitions/function.ts b/src/lib/definitions/function.ts index 9711cf38..df845da6 100644 --- a/src/lib/definitions/function.ts +++ b/src/lib/definitions/function.ts @@ -39,11 +39,12 @@ export class Function { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Function} without deleted properties. */ - normalize(): Function { + + normalize = (): Function => { const clone = new Function(this); normalizeTypeRestProperty(clone); return clone; - } + }; } diff --git a/src/lib/definitions/injectstate.ts b/src/lib/definitions/injectstate.ts index 312e4e88..8031b563 100644 --- a/src/lib/definitions/injectstate.ts +++ b/src/lib/definitions/injectstate.ts @@ -83,7 +83,7 @@ export class Injectstate { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Injectstate} without deleted properties. */ - normalize(): Injectstate { + normalize = (): Injectstate => { const clone = new Injectstate(this); normalizeUsedForCompensationProperty(clone); @@ -93,5 +93,5 @@ export class Injectstate { setEndValueIfNoTransition(clone); return clone; - } + }; } diff --git a/src/lib/definitions/onevents.ts b/src/lib/definitions/onevents.ts index 90d2e634..2905733f 100644 --- a/src/lib/definitions/onevents.ts +++ b/src/lib/definitions/onevents.ts @@ -47,11 +47,11 @@ export class Onevents { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Onevents} without deleted properties. */ - normalize(): Onevents { + normalize = (): Onevents => { const clone = new Onevents(this); normalizeActionModeParallelProperty(clone); return clone; - } + }; } diff --git a/src/lib/definitions/operationstate.ts b/src/lib/definitions/operationstate.ts index 9466e191..d157bfb4 100644 --- a/src/lib/definitions/operationstate.ts +++ b/src/lib/definitions/operationstate.ts @@ -101,7 +101,7 @@ export class Operationstate { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Operationstate} without deleted properties. */ - normalize(): Operationstate { + normalize = (): Operationstate => { const clone = new Operationstate(this); normalizeActionModeSequentialProperty(clone); @@ -112,5 +112,5 @@ export class Operationstate { setEndValueIfNoTransition(clone); return clone; - } + }; } diff --git a/src/lib/definitions/parallelstate.ts b/src/lib/definitions/parallelstate.ts index 5b70df2e..658922bc 100644 --- a/src/lib/definitions/parallelstate.ts +++ b/src/lib/definitions/parallelstate.ts @@ -105,7 +105,7 @@ export class Parallelstate { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Parallelstate} without deleted properties. */ - normalize(): Parallelstate { + normalize = (): Parallelstate => { const clone = new Parallelstate(this); normalizeCompletionTypeProperty(clone); @@ -117,5 +117,5 @@ export class Parallelstate { setEndValueIfNoTransition(clone); return clone; - } + }; } diff --git a/src/lib/definitions/repeat.ts b/src/lib/definitions/repeat.ts index 9bea2fc8..a5a70365 100644 --- a/src/lib/definitions/repeat.ts +++ b/src/lib/definitions/repeat.ts @@ -50,12 +50,12 @@ export class Repeat { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Repeat} without deleted properties. */ - normalize(): Repeat { + normalize = (): Repeat => { const clone = new Repeat(this); normalizeContinueOnErrorProperty(clone); normalizeCheckBeforeProperty(clone); return clone; - } + }; } diff --git a/src/lib/definitions/subflowstate.ts b/src/lib/definitions/subflowstate.ts index 719ded84..43f9e0a7 100644 --- a/src/lib/definitions/subflowstate.ts +++ b/src/lib/definitions/subflowstate.ts @@ -104,7 +104,7 @@ export class Subflowstate { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Subflowstate} without deleted properties. */ - normalize(): Subflowstate { + normalize = (): Subflowstate => { const clone = new Subflowstate(this); normalizeUsedForCompensationProperty(clone); @@ -119,5 +119,5 @@ export class Subflowstate { setEndValueIfNoTransition(clone); return clone; - } + }; } diff --git a/src/lib/definitions/transition.ts b/src/lib/definitions/transition.ts index dc2c4966..2b98d52a 100644 --- a/src/lib/definitions/transition.ts +++ b/src/lib/definitions/transition.ts @@ -43,11 +43,11 @@ export class Transition { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Transition} without deleted properties. */ - normalize(): Transition { + normalize = (): Transition => { const clone = new Transition(this); normalizeCompensateProperty(clone); return clone; - } + }; } diff --git a/src/lib/definitions/transitiondatacondition.ts b/src/lib/definitions/transitiondatacondition.ts index c2700169..9400568f 100644 --- a/src/lib/definitions/transitiondatacondition.ts +++ b/src/lib/definitions/transitiondatacondition.ts @@ -43,11 +43,11 @@ export class Transitiondatacondition { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Transitiondatacondition} without deleted properties. */ - normalize(): Transitiondatacondition { + normalize = (): Transitiondatacondition => { const clone = new Transitiondatacondition(this); normalizeTransitionProperty(clone); return clone; - } + }; } diff --git a/src/lib/definitions/transitioneventcondition.ts b/src/lib/definitions/transitioneventcondition.ts index b8737508..acd73c13 100644 --- a/src/lib/definitions/transitioneventcondition.ts +++ b/src/lib/definitions/transitioneventcondition.ts @@ -54,11 +54,11 @@ export class Transitioneventcondition { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Transitioneventcondition} without deleted properties. */ - normalize(): Transitioneventcondition { + normalize = (): Transitioneventcondition => { const clone = new Transitioneventcondition(this); normalizeTransitionProperty(clone); return clone; - } + }; } diff --git a/src/lib/definitions/workflow.ts b/src/lib/definitions/workflow.ts index 48bf3b67..3378a817 100644 --- a/src/lib/definitions/workflow.ts +++ b/src/lib/definitions/workflow.ts @@ -97,7 +97,7 @@ export class Workflow { * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state. * @returns {Specification.Workflow} without deleted properties. */ - normalize(): Workflow { + normalize = (): Workflow => { const clone = new Workflow(this); normalizeKeepActiveProperty(clone); @@ -110,7 +110,7 @@ export class Workflow { normalizeExecTimeout(clone); return clone; - } + }; /** * Parses the provided string as Workflow @@ -143,6 +143,6 @@ export class Workflow { */ static toYaml(workflow: Workflow): string { validate('Workflow', workflow); - return yaml.dump(workflow.normalize()); + return yaml.dump(JSON.parse(JSON.stringify(workflow.normalize()))); } } diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 61d134c7..90bcdfe7 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -29,7 +29,7 @@ export const validate = (typeName: string, data: any): boolean => { throw Error(`Validate function not defined for type '${typeName}'`); } - if (!validateFn(data)) { + if (!validateFn(JSON.parse(JSON.stringify(data)))) { console.warn(validateFn.errors); const firstError: DefinedError = (validateFn.errors as DefinedError[])[0]; throw new Error( diff --git a/tests/lib/utils.spec.ts b/tests/lib/utils.spec.ts index 9e2af36b..9b0723ab 100644 --- a/tests/lib/utils.spec.ts +++ b/tests/lib/utils.spec.ts @@ -25,6 +25,30 @@ describe('validate', () => { expect(validate('End', false)).toBeTruthy('Expected function validate to return true for valid objects'); }); + it('should ignore "normalize" function as additionalProperty', () => { + const functionObj = { + name: 'function', + operation: 'operation', + type: 'rest', + normalize: () => { + //do something + }, + }; + + expect(validate('Function', functionObj)).toBeTruthy(); + }); + + it('should NOT ignore additionalProperties', () => { + const functionObj = { + name: 'function', + operation: 'operation', + type: 'rest', + keyAdditionalProperty: 'anyValue', + }; + + expect(() => validate('Function', functionObj)).toThrowError(/keyAdditionalProperty/); + }); + it('should throws an error if validator not found', () => { expect(() => validate('ValidatorNotDefined', {})).toThrowError(); });