diff --git a/examples/browser/index.html b/examples/browser/index.html index 77710f47..755a664f 100644 --- a/examples/browser/index.html +++ b/examples/browser/index.html @@ -8,7 +8,7 @@
diff --git a/examples/browser/mermaid.html b/examples/browser/mermaid.html index 684ca5ce..f0e4625f 100644 --- a/examples/browser/mermaid.html +++ b/examples/browser/mermaid.html @@ -8,7 +8,7 @@ diff --git a/src/lib/builders/action-builder.ts b/src/lib/builders/action-builder.ts index 4502e9d1..9a9b52af 100644 --- a/src/lib/builders/action-builder.ts +++ b/src/lib/builders/action-builder.ts @@ -27,7 +27,7 @@ function actionBuildingFn(data: Specification.Action): () => Specification.Actio return () => { const model = new Specification.Action(data); - validate('Action', model); + validate('Action', model.normalize()); return model; }; } diff --git a/src/lib/builders/authdef-builder.ts b/src/lib/builders/authdef-builder.ts index 2482124b..4cbd7113 100644 --- a/src/lib/builders/authdef-builder.ts +++ b/src/lib/builders/authdef-builder.ts @@ -27,7 +27,7 @@ function authdefBuildingFn(data: Specification.Authdef): () => Specification.Aut return () => { const model = new Specification.Authdef(data); - validate('Authdef', model); + validate('Authdef', model.normalize()); return model; }; } diff --git a/src/lib/builders/branch-builder.ts b/src/lib/builders/branch-builder.ts index 1bdb64f0..50bd4353 100644 --- a/src/lib/builders/branch-builder.ts +++ b/src/lib/builders/branch-builder.ts @@ -27,7 +27,7 @@ function branchBuildingFn(data: Specification.Branch): () => Specification.Branc return () => { const model = new Specification.Branch(data); - validate('Branch', model); + validate('Branch', model.normalize()); return model; }; } diff --git a/src/lib/builders/callbackstate-builder.ts b/src/lib/builders/callbackstate-builder.ts index b7e290c0..b89a2995 100644 --- a/src/lib/builders/callbackstate-builder.ts +++ b/src/lib/builders/callbackstate-builder.ts @@ -30,7 +30,7 @@ function callbackstateBuildingFn(data: Specification.Callbackstate): () => Speci setEndValueIfNoTransition(model); - validate('Callbackstate', model); + validate('Callbackstate', model.normalize()); return model; }; } diff --git a/src/lib/builders/continueasdef-builder.ts b/src/lib/builders/continueasdef-builder.ts index ce86edce..db6f4172 100644 --- a/src/lib/builders/continueasdef-builder.ts +++ b/src/lib/builders/continueasdef-builder.ts @@ -27,7 +27,7 @@ function continueasdefBuildingFn(data: Specification.Continueasdef): () => Speci return () => { const model = new Specification.Continueasdef(data); - validate('Continueasdef', model); + validate('Continueasdef', model.normalize()); return model; }; } diff --git a/src/lib/builders/databasedswitchstate-builder.ts b/src/lib/builders/databasedswitchstate-builder.ts index 674058ff..eabbce32 100644 --- a/src/lib/builders/databasedswitchstate-builder.ts +++ b/src/lib/builders/databasedswitchstate-builder.ts @@ -29,7 +29,7 @@ function databasedswitchstateBuildingFn( return () => { const model = new Specification.Databasedswitchstate(data); - validate('Databasedswitchstate', model); + validate('Databasedswitchstate', model.normalize()); return model; }; } diff --git a/src/lib/builders/defaultconditiondef-builder.ts b/src/lib/builders/defaultconditiondef-builder.ts index 81a1a84a..0fda1acb 100644 --- a/src/lib/builders/defaultconditiondef-builder.ts +++ b/src/lib/builders/defaultconditiondef-builder.ts @@ -29,7 +29,7 @@ function defaultconditiondefBuildingFn( return () => { const model = new Specification.Defaultconditiondef(data); - validate('Defaultconditiondef', model); + validate('Defaultconditiondef', model.normalize()); return model; }; } diff --git a/src/lib/builders/end-builder.ts b/src/lib/builders/end-builder.ts index c4b1a7a2..067766ac 100644 --- a/src/lib/builders/end-builder.ts +++ b/src/lib/builders/end-builder.ts @@ -27,7 +27,7 @@ function endBuildingFn(data: Specification.End): () => Specification.End { return () => { const model = new Specification.End(data); - validate('End', model); + validate('End', model.normalize()); return model; }; } diff --git a/src/lib/builders/enddatacondition-builder.ts b/src/lib/builders/enddatacondition-builder.ts index 23404678..8f5e44ea 100644 --- a/src/lib/builders/enddatacondition-builder.ts +++ b/src/lib/builders/enddatacondition-builder.ts @@ -27,7 +27,7 @@ function enddataconditionBuildingFn(data: Specification.Enddatacondition): () => return () => { const model = new Specification.Enddatacondition(data); - validate('Enddatacondition', model); + validate('Enddatacondition', model.normalize()); return model; }; } diff --git a/src/lib/builders/enddeventcondition-builder.ts b/src/lib/builders/enddeventcondition-builder.ts index 1c4fdaee..9c8631c2 100644 --- a/src/lib/builders/enddeventcondition-builder.ts +++ b/src/lib/builders/enddeventcondition-builder.ts @@ -27,7 +27,7 @@ function enddeventconditionBuildingFn(data: Specification.Enddeventcondition): ( return () => { const model = new Specification.Enddeventcondition(data); - validate('Enddeventcondition', model); + validate('Enddeventcondition', model.normalize()); return model; }; } diff --git a/src/lib/builders/error-builder.ts b/src/lib/builders/error-builder.ts index 5d6a5767..2400aef7 100644 --- a/src/lib/builders/error-builder.ts +++ b/src/lib/builders/error-builder.ts @@ -30,7 +30,7 @@ function errorBuildingFn(data: Specification.Error): () => Specification.Error { setEndValueIfNoTransition(model); - validate('Error', model); + validate('Error', model.normalize()); return model; }; } diff --git a/src/lib/builders/eventbasedswitchstate-builder.ts b/src/lib/builders/eventbasedswitchstate-builder.ts index 7743473e..26c07543 100644 --- a/src/lib/builders/eventbasedswitchstate-builder.ts +++ b/src/lib/builders/eventbasedswitchstate-builder.ts @@ -29,7 +29,7 @@ function eventbasedswitchstateBuildingFn( return () => { const model = new Specification.Eventbasedswitchstate(data); - validate('Eventbasedswitchstate', model); + validate('Eventbasedswitchstate', model.normalize()); return model; }; } diff --git a/src/lib/builders/eventdef-builder.ts b/src/lib/builders/eventdef-builder.ts index 2694e086..6e751030 100644 --- a/src/lib/builders/eventdef-builder.ts +++ b/src/lib/builders/eventdef-builder.ts @@ -27,7 +27,7 @@ function eventdefBuildingFn(data: Specification.Eventdef): () => Specification.E return () => { const model = new Specification.Eventdef(data); - validate('Eventdef', model); + validate('Eventdef', model.normalize()); return model; }; } diff --git a/src/lib/builders/eventref-builder.ts b/src/lib/builders/eventref-builder.ts index 9eabeb61..58685a69 100644 --- a/src/lib/builders/eventref-builder.ts +++ b/src/lib/builders/eventref-builder.ts @@ -27,7 +27,7 @@ function eventrefBuildingFn(data: Specification.Eventref): () => Specification.E return () => { const model = new Specification.Eventref(data); - validate('Eventref', model); + validate('Eventref', model.normalize()); return model; }; } diff --git a/src/lib/builders/eventstate-builder.ts b/src/lib/builders/eventstate-builder.ts index 95374dba..3ebea78b 100644 --- a/src/lib/builders/eventstate-builder.ts +++ b/src/lib/builders/eventstate-builder.ts @@ -30,7 +30,7 @@ function eventstateBuildingFn(data: Specification.Eventstate): () => Specificati setEndValueIfNoTransition(model); - validate('Eventstate', model); + validate('Eventstate', model.normalize()); return model; }; } diff --git a/src/lib/builders/foreachstate-builder.ts b/src/lib/builders/foreachstate-builder.ts index 9c54594c..5a367311 100644 --- a/src/lib/builders/foreachstate-builder.ts +++ b/src/lib/builders/foreachstate-builder.ts @@ -30,7 +30,7 @@ function foreachstateBuildingFn(data: Specification.Foreachstate): () => Specifi setEndValueIfNoTransition(model); - validate('Foreachstate', model); + validate('Foreachstate', model.normalize()); return model; }; } diff --git a/src/lib/builders/function-builder.ts b/src/lib/builders/function-builder.ts index 347786fc..8f0bc90c 100644 --- a/src/lib/builders/function-builder.ts +++ b/src/lib/builders/function-builder.ts @@ -27,7 +27,7 @@ function functionBuildingFn(data: Specification.Function): () => Specification.F return () => { const model = new Specification.Function(data); - validate('Function', model); + validate('Function', model.normalize()); return model; }; } diff --git a/src/lib/builders/functionref-builder.ts b/src/lib/builders/functionref-builder.ts index e5337bb9..65256ebe 100644 --- a/src/lib/builders/functionref-builder.ts +++ b/src/lib/builders/functionref-builder.ts @@ -27,7 +27,7 @@ function functionrefBuildingFn(data: Specification.Functionref): () => Specifica return () => { const model = new Specification.Functionref(data); - validate('Functionref', model); + validate('Functionref', model.normalize()); return model; }; } diff --git a/src/lib/builders/injectstate-builder.ts b/src/lib/builders/injectstate-builder.ts index 10ef831d..03ea25d4 100644 --- a/src/lib/builders/injectstate-builder.ts +++ b/src/lib/builders/injectstate-builder.ts @@ -30,7 +30,7 @@ function injectstateBuildingFn(data: Specification.Injectstate): () => Specifica setEndValueIfNoTransition(model); - validate('Injectstate', model); + validate('Injectstate', model.normalize()); return model; }; } diff --git a/src/lib/builders/onevents-builder.ts b/src/lib/builders/onevents-builder.ts index ef03c257..72bd58e8 100644 --- a/src/lib/builders/onevents-builder.ts +++ b/src/lib/builders/onevents-builder.ts @@ -27,7 +27,7 @@ function oneventsBuildingFn(data: Specification.Onevents): () => Specification.O return () => { const model = new Specification.Onevents(data); - validate('Onevents', model); + validate('Onevents', model.normalize()); return model; }; } diff --git a/src/lib/builders/operationstate-builder.ts b/src/lib/builders/operationstate-builder.ts index 65c4dfe6..47ceb834 100644 --- a/src/lib/builders/operationstate-builder.ts +++ b/src/lib/builders/operationstate-builder.ts @@ -30,7 +30,7 @@ function operationstateBuildingFn(data: Specification.Operationstate): () => Spe setEndValueIfNoTransition(model); - validate('Operationstate', model); + validate('Operationstate', model.normalize()); return model; }; } diff --git a/src/lib/builders/parallelstate-builder.ts b/src/lib/builders/parallelstate-builder.ts index 34c7fd9a..010ef076 100644 --- a/src/lib/builders/parallelstate-builder.ts +++ b/src/lib/builders/parallelstate-builder.ts @@ -30,7 +30,7 @@ function parallelstateBuildingFn(data: Specification.Parallelstate): () => Speci setEndValueIfNoTransition(model); - validate('Parallelstate', model); + validate('Parallelstate', model.normalize()); return model; }; } diff --git a/src/lib/builders/sleepstate-builder.ts b/src/lib/builders/sleepstate-builder.ts index b99751c5..210ec334 100644 --- a/src/lib/builders/sleepstate-builder.ts +++ b/src/lib/builders/sleepstate-builder.ts @@ -27,7 +27,7 @@ function sleepstateBuildingFn(data: Specification.Sleepstate): () => Specificati return () => { const model = new Specification.Sleepstate(data); - validate('Sleepstate', model); + validate('Sleepstate', model.normalize()); return model; }; } diff --git a/src/lib/builders/subflowref-builder.ts b/src/lib/builders/subflowref-builder.ts index d2cffce7..3011aa7c 100644 --- a/src/lib/builders/subflowref-builder.ts +++ b/src/lib/builders/subflowref-builder.ts @@ -27,7 +27,7 @@ function subflowrefBuildingFn(data: Specification.Subflowref): () => Specificati return () => { const model = new Specification.Subflowref(data); - validate('Subflowref', model); + validate('Subflowref', model.normalize()); return model; }; } diff --git a/src/lib/builders/timeouts-builder.ts b/src/lib/builders/timeouts-builder.ts index e1242359..413964e5 100644 --- a/src/lib/builders/timeouts-builder.ts +++ b/src/lib/builders/timeouts-builder.ts @@ -27,7 +27,7 @@ function timeoutsBuildingFn(data: Specification.Timeouts): () => Specification.T return () => { const model = new Specification.Timeouts(data); - validate('Timeouts', model); + validate('Timeouts', model.normalize()); return model; }; } diff --git a/src/lib/builders/transition-builder.ts b/src/lib/builders/transition-builder.ts index a60fa651..e10b988b 100644 --- a/src/lib/builders/transition-builder.ts +++ b/src/lib/builders/transition-builder.ts @@ -27,7 +27,7 @@ function transitionBuildingFn(data: Specification.Transition): () => Specificati return () => { const model = new Specification.Transition(data); - validate('Transition', model); + validate('Transition', model.normalize()); return model; }; } diff --git a/src/lib/builders/transitiondatacondition-builder.ts b/src/lib/builders/transitiondatacondition-builder.ts index 0d9e1b18..4abfae7e 100644 --- a/src/lib/builders/transitiondatacondition-builder.ts +++ b/src/lib/builders/transitiondatacondition-builder.ts @@ -29,7 +29,7 @@ function transitiondataconditionBuildingFn( return () => { const model = new Specification.Transitiondatacondition(data); - validate('Transitiondatacondition', model); + validate('Transitiondatacondition', model.normalize()); return model; }; } diff --git a/src/lib/builders/transitioneventcondition-builder.ts b/src/lib/builders/transitioneventcondition-builder.ts index c38bcb5e..161a92b0 100644 --- a/src/lib/builders/transitioneventcondition-builder.ts +++ b/src/lib/builders/transitioneventcondition-builder.ts @@ -29,7 +29,7 @@ function transitioneventconditionBuildingFn( return () => { const model = new Specification.Transitioneventcondition(data); - validate('Transitioneventcondition', model); + validate('Transitioneventcondition', model.normalize()); return model; }; } diff --git a/src/lib/builders/workflow-builder.ts b/src/lib/builders/workflow-builder.ts index e4364d90..2177a303 100644 --- a/src/lib/builders/workflow-builder.ts +++ b/src/lib/builders/workflow-builder.ts @@ -27,7 +27,7 @@ function workflowBuildingFn(data: Specification.Workflow): () => Specification.W return () => { const model = new Specification.Workflow(data); - validate('Workflow', model); + validate('Workflow', model.normalize()); return model; }; } diff --git a/src/lib/builders/workflow-exec-timeout-builder.ts b/src/lib/builders/workflow-exec-timeout-builder.ts index 9e7d6133..766e9da3 100644 --- a/src/lib/builders/workflow-exec-timeout-builder.ts +++ b/src/lib/builders/workflow-exec-timeout-builder.ts @@ -29,7 +29,7 @@ function workflowExecTimeoutBuildingFn( return () => { const model = new Specification.WorkflowExecTimeout(data); - validate('WorkflowExecTimeout', model); + validate('WorkflowExecTimeout', model.normalize()); return model; }; } diff --git a/src/lib/definitions/action.ts b/src/lib/definitions/action.ts index 2f6ff1e2..7d15c3cc 100644 --- a/src/lib/definitions/action.ts +++ b/src/lib/definitions/action.ts @@ -17,25 +17,30 @@ import { Actiondatafilter } from './actiondatafilter'; import { Eventref } from './eventref'; import { Functionref } from './functionref'; import { + cleanSourceModelProperty, normalizeEventRef, normalizeFunctionRef, - normalizeSubFlowRefIfObject, + normalizeSubFlowRef, overwriteActionDataFilter, overwriteEventRef, - overwriteFunctionRefIfObject, + overwriteFunctionRef, overwriteSleep, - overwriteSubFlowRefIfObject, + overwriteSubFlowRef, } from './utils'; import { Subflowref } from './subflowref'; import { Sleep } from './sleep'; export class Action { + sourceModel?: Action; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + Object.assign(this, model); - overwriteFunctionRefIfObject(this); + overwriteFunctionRef(this); overwriteEventRef(this); - overwriteSubFlowRefIfObject(this); + overwriteSubFlowRef(this); overwriteSleep(this); overwriteActionDataFilter(this); } @@ -77,10 +82,12 @@ export class Action { normalize = (): Action => { const clone = new Action(this); - normalizeSubFlowRefIfObject(clone); + normalizeSubFlowRef(clone); normalizeEventRef(clone); normalizeFunctionRef(clone); + cleanSourceModelProperty(clone); + return clone; }; } diff --git a/src/lib/definitions/authdef.ts b/src/lib/definitions/authdef.ts index 572756c0..921f96f0 100644 --- a/src/lib/definitions/authdef.ts +++ b/src/lib/definitions/authdef.ts @@ -14,15 +14,19 @@ * limitations under the License. */ -import { normalizeScheme, overwritePropertiesIfObject } from './utils'; +import { cleanSourceModelProperty, normalizeScheme, overwriteProperties } from './utils'; import { Properties } from './types'; export class Authdef { + sourceModel?: Authdef; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + const defaultModel = { scheme: 'basic' }; Object.assign(this, defaultModel, model); - overwritePropertiesIfObject(this); + overwriteProperties(this); } /** * Unique auth definition name @@ -41,7 +45,9 @@ export class Authdef { normalize = (): Authdef => { const clone = new Authdef(this); - normalizeScheme(clone); + normalizeScheme(clone, this.sourceModel); + + cleanSourceModelProperty(clone); return clone; }; diff --git a/src/lib/definitions/branch.ts b/src/lib/definitions/branch.ts index 5948ea1a..feafc67a 100644 --- a/src/lib/definitions/branch.ts +++ b/src/lib/definitions/branch.ts @@ -15,11 +15,15 @@ */ import { Action } from './action'; -import { normalizeActions, overwriteActions, overwritePropertyAsPlainType } from './utils'; +import { cleanSourceModelProperty, normalizeActions, overwriteActions, overwritePropertyAsPlainType } from './utils'; import { ActionExecTimeout, BranchExecTimeout } from './types'; export class Branch /* Branch Definition */ { + sourceModel?: Branch; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + Object.assign(this, model); overwriteActions(this); overwritePropertyAsPlainType('timeouts', this); @@ -43,12 +47,13 @@ export class Branch /* Branch Definition */ { /** * 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.Action} without deleted properties. + * @returns {Specification.Branch} without deleted properties. */ normalize = (): Branch => { const clone = new Branch(this); normalizeActions(clone); + cleanSourceModelProperty(clone); return clone; }; } diff --git a/src/lib/definitions/callbackstate.ts b/src/lib/definitions/callbackstate.ts index dadf48fa..08e7ec39 100644 --- a/src/lib/definitions/callbackstate.ts +++ b/src/lib/definitions/callbackstate.ts @@ -22,26 +22,31 @@ import { Metadata } from './metadata'; import { Statedatafilter } from './statedatafilter'; import { Transition } from './transition'; import { + cleanSourceModelProperty, normalizeAction, - normalizeEndIfObject, + normalizeEnd, normalizeOnErrors, - normalizeTransitionIfObject, + normalizeTransition, normalizeUsedForCompensation, overwriteAction, - overwriteEndIfObject, + overwriteEnd, overwriteEventDataFilter, overwriteMetadata, overwriteOnErrors, overwriteStateDataFilter, overwriteTimeoutWithStateExecTimeout, - overwriteTransitionIfObject, + overwriteTransition, setEndValueIfNoTransition, } from './utils'; import { ActionExecTimeout, EventTimeout } from './types'; import { StateExecTimeout } from './stateExecTimeout'; export class Callbackstate { + sourceModel?: Callbackstate; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + const defaultModel = { type: 'callback', usedForCompensation: false }; Object.assign(this, defaultModel, model); @@ -50,8 +55,8 @@ export class Callbackstate { overwriteEventDataFilter(this); overwriteStateDataFilter(this); overwriteOnErrors(this); - overwriteTransitionIfObject(this); - overwriteEndIfObject(this); + overwriteTransition(this); + overwriteEnd(this); overwriteMetadata(this); } @@ -122,11 +127,13 @@ export class Callbackstate { normalizeAction(clone); normalizeOnErrors(clone); - normalizeTransitionIfObject(clone); - normalizeEndIfObject(clone); - normalizeUsedForCompensation(clone); + normalizeTransition(clone); + normalizeEnd(clone); + normalizeUsedForCompensation(clone, this.sourceModel); setEndValueIfNoTransition(clone); + cleanSourceModelProperty(clone); + return clone; }; } diff --git a/src/lib/definitions/continueasdef.ts b/src/lib/definitions/continueasdef.ts index 3dc2e3cd..63912623 100644 --- a/src/lib/definitions/continueasdef.ts +++ b/src/lib/definitions/continueasdef.ts @@ -16,10 +16,19 @@ */ import { WorkflowExecTimeout } from './workflowExecTimeout'; -import { normalizeWorkflowExecTimeout, overwritePropertyAsPlainType, overwriteWorkflowExecTimeout } from './utils'; +import { + cleanSourceModelProperty, + normalizeWorkflowExecTimeout, + overwritePropertyAsPlainType, + overwriteWorkflowExecTimeout, +} from './utils'; export class Continueasdef { + sourceModel?: Continueasdef; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + Object.assign(this, model); overwriteWorkflowExecTimeout(this); overwritePropertyAsPlainType('data', this); @@ -53,6 +62,9 @@ export class Continueasdef { normalize = (): Continueasdef => { const clone = new Continueasdef(this); normalizeWorkflowExecTimeout(clone); + + cleanSourceModelProperty(clone); + return clone; }; } diff --git a/src/lib/definitions/databasedswitchstate.ts b/src/lib/definitions/databasedswitchstate.ts index 42f3f44e..ea6906e7 100644 --- a/src/lib/definitions/databasedswitchstate.ts +++ b/src/lib/definitions/databasedswitchstate.ts @@ -19,6 +19,7 @@ import { Error } from './error'; import { Metadata } from './metadata'; import { Statedatafilter } from './statedatafilter'; import { + cleanSourceModelProperty, normalizeDataConditions, normalizeDefaultCondition, normalizeOnErrors, @@ -34,7 +35,11 @@ import { Datacondition } from './types'; import { StateExecTimeout } from './stateExecTimeout'; export class Databasedswitchstate { + sourceModel?: Databasedswitchstate; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + const defaultModel = { type: 'switch', usedForCompensation: false }; Object.assign(this, defaultModel, model); @@ -100,7 +105,8 @@ export class Databasedswitchstate { normalizeDataConditions(clone); normalizeOnErrors(clone); normalizeDefaultCondition(clone); - normalizeUsedForCompensation(clone); + normalizeUsedForCompensation(clone, this.sourceModel); + cleanSourceModelProperty(clone); return clone; }; diff --git a/src/lib/definitions/defaultconditiondef.ts b/src/lib/definitions/defaultconditiondef.ts index dafac30a..77203dd3 100644 --- a/src/lib/definitions/defaultconditiondef.ts +++ b/src/lib/definitions/defaultconditiondef.ts @@ -17,18 +17,23 @@ import { End } from './end'; import { Transition } from './transition'; import { - normalizeEndIfObject, - normalizeTransitionIfObject, - overwriteEndIfObject, - overwriteTransitionIfObject, + cleanSourceModelProperty, + normalizeEnd, + normalizeTransition, + overwriteEnd, + overwriteTransition, setEndValueIfNoTransition, } from './utils'; export class Defaultconditiondef /* DefaultCondition definition. Can be either a transition or end definition */ { + sourceModel?: Defaultconditiondef; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + Object.assign(this, model); - overwriteTransitionIfObject(this); - overwriteEndIfObject(this); + overwriteTransition(this); + overwriteEnd(this); } transition: string | Transition; @@ -41,10 +46,12 @@ export class Defaultconditiondef /* DefaultCondition definition. Can be either a normalize = (): Defaultconditiondef => { const clone = new Defaultconditiondef(this); - normalizeEndIfObject(clone); - normalizeTransitionIfObject(clone); + normalizeEnd(clone); + normalizeTransition(clone); setEndValueIfNoTransition(clone); + cleanSourceModelProperty(clone); + return clone; }; } diff --git a/src/lib/definitions/end.ts b/src/lib/definitions/end.ts index 0688a5be..a77ee94c 100644 --- a/src/lib/definitions/end.ts +++ b/src/lib/definitions/end.ts @@ -15,16 +15,21 @@ */ import { Produceeventdef } from './produceeventdef'; import { + cleanSourceModelProperty, normalizeCompensate, - normalizeContinueAsIfObject, + normalizeContinueAs, normalizeTerminate, - overwriteContinueAsIfObject, + overwriteContinueAs, overwriteProduceEvents, } from './utils'; import { Continueasdef } from './continueasdef'; export class End { + sourceModel?: End; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + const defaultModel = { compensate: false, terminate: false, @@ -32,7 +37,7 @@ export class End { Object.assign(this, defaultModel, model); overwriteProduceEvents(this); - overwriteContinueAsIfObject(this); + overwriteContinueAs(this); } /** @@ -56,10 +61,11 @@ export class End { normalize = (): End => { const clone = new End(this); - normalizeCompensate(clone); - normalizeTerminate(clone); - normalizeContinueAsIfObject(clone); + normalizeCompensate(clone, this.sourceModel); + normalizeTerminate(clone, this.sourceModel); + normalizeContinueAs(clone); + cleanSourceModelProperty(clone); return clone; }; } diff --git a/src/lib/definitions/enddatacondition.ts b/src/lib/definitions/enddatacondition.ts index 3cadfdb8..8b8e7829 100644 --- a/src/lib/definitions/enddatacondition.ts +++ b/src/lib/definitions/enddatacondition.ts @@ -15,13 +15,17 @@ */ import { End } from './end'; import { Metadata } from './metadata'; -import { normalizeEndIfObject, overwriteEndIfObject, overwriteMetadata } from './utils'; +import { cleanSourceModelProperty, normalizeEnd, overwriteEnd, overwriteMetadata } from './utils'; export class Enddatacondition { + sourceModel?: Enddatacondition; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + Object.assign(this, model); - overwriteEndIfObject(this); + overwriteEnd(this); overwriteMetadata(this); } @@ -46,7 +50,9 @@ export class Enddatacondition { normalize = (): Enddatacondition => { const clone = new Enddatacondition(this); - normalizeEndIfObject(clone); + normalizeEnd(clone); + + cleanSourceModelProperty(clone); return clone; }; diff --git a/src/lib/definitions/enddeventcondition.ts b/src/lib/definitions/enddeventcondition.ts index 65858cd7..fa6299e2 100644 --- a/src/lib/definitions/enddeventcondition.ts +++ b/src/lib/definitions/enddeventcondition.ts @@ -16,13 +16,23 @@ import { End } from './end'; import { Eventdatafilter } from './eventdatafilter'; import { Metadata } from './metadata'; -import { normalizeEndIfObject, overwriteEndIfObject, overwriteEventDataFilter, overwriteMetadata } from './utils'; +import { + cleanSourceModelProperty, + normalizeEnd, + overwriteEnd, + overwriteEventDataFilter, + overwriteMetadata, +} from './utils'; export class Enddeventcondition { + sourceModel?: Enddeventcondition; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + Object.assign(this, model); - overwriteEndIfObject(this); + overwriteEnd(this); overwriteEventDataFilter(this); overwriteMetadata(this); } @@ -52,7 +62,9 @@ export class Enddeventcondition { normalize = (): Enddeventcondition => { const clone = new Enddeventcondition(this); - normalizeEndIfObject(clone); + normalizeEnd(clone); + + cleanSourceModelProperty(clone); return clone; }; diff --git a/src/lib/definitions/error.ts b/src/lib/definitions/error.ts index cf390192..9a83e629 100644 --- a/src/lib/definitions/error.ts +++ b/src/lib/definitions/error.ts @@ -16,19 +16,24 @@ import { End } from './end'; import { Transition } from './transition'; import { - normalizeEndIfObject, - normalizeTransitionIfObject, - overwriteEndIfObject, - overwriteTransitionIfObject, + cleanSourceModelProperty, + normalizeEnd, + normalizeTransition, + overwriteEnd, + overwriteTransition, setEndValueIfNoTransition, } from './utils'; export class Error { + sourceModel?: Error; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + Object.assign(this, model); - overwriteTransitionIfObject(this); - overwriteEndIfObject(this); + overwriteTransition(this); + overwriteEnd(this); } /** @@ -49,11 +54,12 @@ export class Error { normalize = (): Error => { const clone = new Error(this); - normalizeEndIfObject(clone); - normalizeTransitionIfObject(clone); + normalizeEnd(clone); + normalizeTransition(clone); setEndValueIfNoTransition(clone); + cleanSourceModelProperty(clone); return clone; }; } diff --git a/src/lib/definitions/eventbasedswitchstate.ts b/src/lib/definitions/eventbasedswitchstate.ts index 28b778de..2f441ffb 100644 --- a/src/lib/definitions/eventbasedswitchstate.ts +++ b/src/lib/definitions/eventbasedswitchstate.ts @@ -19,6 +19,7 @@ import { Error } from './error'; import { Metadata } from './metadata'; import { Statedatafilter } from './statedatafilter'; import { + cleanSourceModelProperty, normalizeDefaultCondition, normalizeEventConditions, normalizeOnErrors, @@ -34,7 +35,11 @@ import { Eventcondition, EventTimeout } from './types'; import { StateExecTimeout } from './stateExecTimeout'; export class Eventbasedswitchstate { + sourceModel?: Eventbasedswitchstate; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + const defaultModel = { type: 'switch', usedForCompensation: false, @@ -104,8 +109,9 @@ export class Eventbasedswitchstate { normalizeEventConditions(clone); normalizeOnErrors(clone); normalizeDefaultCondition(clone); - normalizeUsedForCompensation(clone); + normalizeUsedForCompensation(clone, this.sourceModel); + cleanSourceModelProperty(clone); return clone; }; } diff --git a/src/lib/definitions/eventdef.ts b/src/lib/definitions/eventdef.ts index c5aade0b..8833683a 100644 --- a/src/lib/definitions/eventdef.ts +++ b/src/lib/definitions/eventdef.ts @@ -14,11 +14,21 @@ * limitations under the License. */ import { Metadata } from './metadata'; -import { normalizeDataOnly, normalizeKind, overwriteCorrelation, overwriteMetadata } from './utils'; +import { + cleanSourceModelProperty, + normalizeDataOnly, + normalizeKind, + overwriteCorrelation, + overwriteMetadata, +} from './utils'; import { CorrelationDefs } from './types'; export class Eventdef { + sourceModel?: Eventdef; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + const defaultModel = { kind: 'consumed', dataOnly: true, @@ -66,9 +76,10 @@ export class Eventdef { normalize = (): Eventdef => { const clone = new Eventdef(this); - normalizeKind(clone); - normalizeDataOnly(clone); + normalizeKind(clone, this.sourceModel); + normalizeDataOnly(clone, this.sourceModel); + cleanSourceModelProperty(clone); return clone; }; } diff --git a/src/lib/definitions/eventref.ts b/src/lib/definitions/eventref.ts index 4cc3c926..e65f5f41 100644 --- a/src/lib/definitions/eventref.ts +++ b/src/lib/definitions/eventref.ts @@ -14,10 +14,14 @@ * limitations under the License. */ -import { normalizeInvoke, overwritePropertyAsPlainType } from './utils'; +import { cleanSourceModelProperty, normalizeInvoke, overwritePropertyAsPlainType } from './utils'; export class Eventref { + sourceModel?: Eventref; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + Object.assign(this, model); overwritePropertyAsPlainType('data', this); overwritePropertyAsPlainType('contextAttributes', this); @@ -61,7 +65,9 @@ export class Eventref { normalize = (): Eventref => { const clone = new Eventref(this); - normalizeInvoke(clone); + normalizeInvoke(clone, this.sourceModel); + + cleanSourceModelProperty(clone); return clone; }; diff --git a/src/lib/definitions/eventstate.ts b/src/lib/definitions/eventstate.ts index c157e8dd..714e034c 100644 --- a/src/lib/definitions/eventstate.ts +++ b/src/lib/definitions/eventstate.ts @@ -20,25 +20,30 @@ import { Onevents } from './onevents'; import { Statedatafilter } from './statedatafilter'; import { Transition } from './transition'; import { - normalizeEndIfObject, + normalizeEnd, normalizeExclusive, normalizeOnErrors, normalizeOnEvents, - normalizeTransitionIfObject, - overwriteEndIfObject, + normalizeTransition, + overwriteEnd, overwriteMetadata, overwriteOnErrors, overwriteOnEvents, overwriteStateDataFilter, - overwriteTransitionIfObject, + overwriteTransition, setEndValueIfNoTransition, overwriteTimeoutWithStateExecTimeout, + cleanSourceModelProperty, } from './utils'; import { ActionExecTimeout, EventTimeout } from './types'; import { StateExecTimeout } from './stateExecTimeout'; export class Eventstate /* This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel */ { + sourceModel?: Eventstate; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + const defaultModel = { type: 'event', exclusive: true }; Object.assign(this, defaultModel, model); @@ -46,8 +51,8 @@ export class Eventstate /* This state is used to wait for events from event sour overwriteTimeoutWithStateExecTimeout(this); overwriteStateDataFilter(this); overwriteOnErrors(this); - overwriteTransitionIfObject(this); - overwriteEndIfObject(this); + overwriteTransition(this); + overwriteEnd(this); overwriteMetadata(this); } @@ -99,13 +104,15 @@ export class Eventstate /* This state is used to wait for events from event sour normalize = (): Eventstate => { const clone = new Eventstate(this); - normalizeExclusive(clone); + normalizeExclusive(clone, this.sourceModel); normalizeOnEvents(clone); normalizeOnErrors(clone); - normalizeTransitionIfObject(clone); - normalizeEndIfObject(clone); + normalizeTransition(clone); + normalizeEnd(clone); setEndValueIfNoTransition(clone); + cleanSourceModelProperty(clone); + return clone; }; } diff --git a/src/lib/definitions/foreachstate.ts b/src/lib/definitions/foreachstate.ts index ca2fcac1..d467e1f5 100644 --- a/src/lib/definitions/foreachstate.ts +++ b/src/lib/definitions/foreachstate.ts @@ -21,34 +21,39 @@ import { Statedatafilter } from './statedatafilter'; import { Transition } from './transition'; import { normalizeActions, - normalizeEndIfObject, + normalizeEnd, normalizeOnErrors, - normalizeTransitionIfObject, + normalizeTransition, normalizeUsedForCompensation, overwriteActions, - overwriteEndIfObject, + overwriteEnd, overwriteMetadata, overwriteOnErrors, overwriteStateDataFilter, - overwriteTransitionIfObject, + overwriteTransition, setEndValueIfNoTransition, normalizeMode, overwriteTimeoutWithStateExecTimeout, + cleanSourceModelProperty, } from './utils'; import { ActionExecTimeout } from './types'; import { StateExecTimeout } from './stateExecTimeout'; export class Foreachstate { + sourceModel?: Foreachstate; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + const defaultModel = { type: 'foreach', usedForCompensation: false, mode: 'parallel' }; Object.assign(this, defaultModel, model); - overwriteEndIfObject(this); + overwriteEnd(this); overwriteActions(this); overwriteTimeoutWithStateExecTimeout(this); overwriteStateDataFilter(this); overwriteOnErrors(this); - overwriteTransitionIfObject(this); + overwriteTransition(this); overwriteMetadata(this); } @@ -129,14 +134,16 @@ export class Foreachstate { normalize = (): Foreachstate => { const clone = new Foreachstate(this); - normalizeEndIfObject(clone); + normalizeEnd(clone); normalizeActions(clone); normalizeOnErrors(clone); - normalizeTransitionIfObject(clone); - normalizeUsedForCompensation(clone); - normalizeMode(clone); + normalizeTransition(clone); + normalizeUsedForCompensation(clone, this.sourceModel); + normalizeMode(clone, this.sourceModel); setEndValueIfNoTransition(clone); + cleanSourceModelProperty(clone); + return clone; }; } diff --git a/src/lib/definitions/function.ts b/src/lib/definitions/function.ts index 6303366e..0e38722e 100644 --- a/src/lib/definitions/function.ts +++ b/src/lib/definitions/function.ts @@ -13,11 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { normalizeType, overwriteMetadata } from './utils'; +import { cleanSourceModelProperty, normalizeType, overwriteMetadata } from './utils'; import { Metadata } from './metadata'; export class Function { + sourceModel?: Function; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + const defaultModel = { type: 'rest' }; Object.assign(this, defaultModel, model); overwriteMetadata(this); @@ -49,7 +53,9 @@ export class Function { normalize = (): Function => { const clone = new Function(this); - normalizeType(clone); + normalizeType(clone, this.sourceModel); + + cleanSourceModelProperty(clone); return clone; }; diff --git a/src/lib/definitions/functionref.ts b/src/lib/definitions/functionref.ts index 917ff3fd..44933fc7 100644 --- a/src/lib/definitions/functionref.ts +++ b/src/lib/definitions/functionref.ts @@ -14,10 +14,14 @@ * limitations under the License. */ -import { normalizeInvoke, overwritePropertyAsPlainType } from './utils'; +import { cleanSourceModelProperty, normalizeInvoke, overwritePropertyAsPlainType } from './utils'; export class Functionref { + sourceModel?: Functionref; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + Object.assign(this, model); overwritePropertyAsPlainType('arguments', this); } @@ -48,7 +52,9 @@ export class Functionref { normalize = (): Functionref => { const clone = new Functionref(this); - normalizeInvoke(clone); + normalizeInvoke(clone, this.sourceModel); + + cleanSourceModelProperty(clone); return clone; }; diff --git a/src/lib/definitions/injectstate.ts b/src/lib/definitions/injectstate.ts index c1b65f2d..9ea4c265 100644 --- a/src/lib/definitions/injectstate.ts +++ b/src/lib/definitions/injectstate.ts @@ -19,29 +19,34 @@ import { Metadata } from './metadata'; import { Statedatafilter } from './statedatafilter'; import { Transition } from './transition'; import { - normalizeEndIfObject, - normalizeTransitionIfObject, + cleanSourceModelProperty, + normalizeEnd, + normalizeTransition, normalizeUsedForCompensation, - overwriteEndIfObject, + overwriteEnd, overwriteMetadata, overwritePropertyAsPlainType, overwriteStateDataFilter, overwriteTimeoutWithStateExecTimeout, - overwriteTransitionIfObject, + overwriteTransition, setEndValueIfNoTransition, } from './utils'; import { StateExecTimeout } from './stateExecTimeout'; export class Injectstate { + sourceModel?: Injectstate; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + const defaultModel = { type: 'inject', usedForCompensation: false }; Object.assign(this, defaultModel, model); - overwriteEndIfObject(this); + overwriteEnd(this); overwritePropertyAsPlainType('data', this); overwriteTimeoutWithStateExecTimeout(this); overwriteStateDataFilter(this); - overwriteTransitionIfObject(this); + overwriteTransition(this); overwriteMetadata(this); } @@ -98,11 +103,13 @@ export class Injectstate { normalize = (): Injectstate => { const clone = new Injectstate(this); - normalizeEndIfObject(clone); - normalizeTransitionIfObject(clone); - normalizeUsedForCompensation(clone); + normalizeEnd(clone); + normalizeTransition(clone); + normalizeUsedForCompensation(clone, this.sourceModel); setEndValueIfNoTransition(clone); + cleanSourceModelProperty(clone); + return clone; }; } diff --git a/src/lib/definitions/onevents.ts b/src/lib/definitions/onevents.ts index 737c3700..c8ebec5c 100644 --- a/src/lib/definitions/onevents.ts +++ b/src/lib/definitions/onevents.ts @@ -15,10 +15,20 @@ */ import { Action } from './action'; import { Eventdatafilter } from './eventdatafilter'; -import { normalizeActionMode, normalizeActions, overwriteActions, overwriteEventDataFilter } from './utils'; +import { + cleanSourceModelProperty, + normalizeActionMode, + normalizeActions, + overwriteActions, + overwriteEventDataFilter, +} from './utils'; export class Onevents { + sourceModel?: Onevents; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + const defaultModel = { actionMode: 'sequential' }; Object.assign(this, defaultModel, model); @@ -50,9 +60,11 @@ export class Onevents { normalize = (): Onevents => { const clone = new Onevents(this); - normalizeActionMode(clone); + normalizeActionMode(clone, this.sourceModel); normalizeActions(clone); + cleanSourceModelProperty(clone); + return clone; }; } diff --git a/src/lib/definitions/operationstate.ts b/src/lib/definitions/operationstate.ts index de0c9a58..4d49369e 100644 --- a/src/lib/definitions/operationstate.ts +++ b/src/lib/definitions/operationstate.ts @@ -20,26 +20,31 @@ import { Metadata } from './metadata'; import { Statedatafilter } from './statedatafilter'; import { Transition } from './transition'; import { + cleanSourceModelProperty, normalizeActionMode, normalizeActions, - normalizeEndIfObject, + normalizeEnd, normalizeOnErrors, - normalizeTransitionIfObject, + normalizeTransition, normalizeUsedForCompensation, overwriteActions, - overwriteEndIfObject, + overwriteEnd, overwriteMetadata, overwriteOnErrors, overwriteStateDataFilter, - overwriteTransitionIfObject, - setEndValueIfNoTransition, overwriteTimeoutWithStateExecTimeout, + overwriteTransition, + setEndValueIfNoTransition, } from './utils'; import { ActionExecTimeout } from './types'; import { StateExecTimeout } from './stateExecTimeout'; export class Operationstate { + sourceModel?: Operationstate; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + const defaultModel = { type: 'operation', actionMode: 'sequential', @@ -47,12 +52,12 @@ export class Operationstate { }; Object.assign(this, defaultModel, model); - overwriteEndIfObject(this); + overwriteEnd(this); overwriteStateDataFilter(this); overwriteActions(this); overwriteTimeoutWithStateExecTimeout(this); overwriteOnErrors(this); - overwriteTransitionIfObject(this); + overwriteTransition(this); overwriteMetadata(this); } @@ -116,14 +121,18 @@ export class Operationstate { normalize = (): Operationstate => { const clone = new Operationstate(this); - normalizeEndIfObject(clone); - normalizeActionMode(clone); + normalizeEnd(clone); + + normalizeActionMode(clone, this.sourceModel); + normalizeActions(clone); normalizeOnErrors(clone); - normalizeTransitionIfObject(clone); - normalizeUsedForCompensation(clone); + normalizeTransition(clone); + normalizeUsedForCompensation(clone, this.sourceModel); setEndValueIfNoTransition(clone); + cleanSourceModelProperty(clone); + return clone; }; } diff --git a/src/lib/definitions/parallelstate.ts b/src/lib/definitions/parallelstate.ts index 6d1baeef..79eb9ce5 100644 --- a/src/lib/definitions/parallelstate.ts +++ b/src/lib/definitions/parallelstate.ts @@ -23,24 +23,29 @@ import { Transition } from './transition'; import { normalizeBranches, normalizeCompletionType, - normalizeEndIfObject, + normalizeEnd, normalizeOnErrors, - normalizeTransitionIfObject, + normalizeTransition, normalizeUsedForCompensation, overwriteBranches, - overwriteEndIfObject, + overwriteEnd, overwriteMetadata, overwriteOnErrors, overwriteStateDataFilter, - overwriteTransitionIfObject, + overwriteTransition, setEndValueIfNoTransition, overwriteTimeoutWithStateExecTimeout, + cleanSourceModelProperty, } from './utils'; import { BranchExecTimeout } from './types'; import { StateExecTimeout } from './stateExecTimeout'; export class Parallelstate { + sourceModel?: Parallelstate; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + const defaultModel = { type: 'parallel', completionType: 'allOf', @@ -48,12 +53,12 @@ export class Parallelstate { }; Object.assign(this, defaultModel, model); - overwriteEndIfObject(this); + overwriteEnd(this); overwriteStateDataFilter(this); overwriteTimeoutWithStateExecTimeout(this); overwriteBranches(this); overwriteOnErrors(this); - overwriteTransitionIfObject(this); + overwriteTransition(this); overwriteMetadata(this); } @@ -121,14 +126,16 @@ export class Parallelstate { normalize = (): Parallelstate => { const clone = new Parallelstate(this); - normalizeEndIfObject(clone); + normalizeEnd(clone); normalizeBranches(clone); - normalizeCompletionType(clone); + normalizeCompletionType(clone, this.sourceModel); normalizeOnErrors(clone); - normalizeTransitionIfObject(clone); - normalizeUsedForCompensation(clone); + normalizeTransition(clone); + normalizeUsedForCompensation(clone, this.sourceModel); setEndValueIfNoTransition(clone); + cleanSourceModelProperty(clone); + return clone; }; } diff --git a/src/lib/definitions/schedule.ts b/src/lib/definitions/schedule.ts index 38f07dfc..9052c933 100644 --- a/src/lib/definitions/schedule.ts +++ b/src/lib/definitions/schedule.ts @@ -14,13 +14,13 @@ * limitations under the License. */ import { Crondef } from './crondef'; -import { overwriteCronIfObject } from './utils'; +import { overwriteCron } from './utils'; export class Schedule { constructor(model: any) { Object.assign(this, model); - overwriteCronIfObject(this); + overwriteCron(this); } /** diff --git a/src/lib/definitions/sleepstate.ts b/src/lib/definitions/sleepstate.ts index ce2b2f28..a5be1c04 100644 --- a/src/lib/definitions/sleepstate.ts +++ b/src/lib/definitions/sleepstate.ts @@ -20,33 +20,38 @@ import { Metadata } from './metadata'; import { Statedatafilter } from './statedatafilter'; import { Transition } from './transition'; import { - normalizeEndIfObject, + cleanSourceModelProperty, + normalizeEnd, normalizeOnErrors, - normalizeTransitionIfObject, + normalizeTransition, normalizeUsedForCompensation, - overwriteEndIfObject, + overwriteEnd, overwriteMetadata, overwriteOnErrors, overwriteStateDataFilter, overwriteTimeoutWithStateExecTimeout, - overwriteTransitionIfObject, + overwriteTransition, setEndValueIfNoTransition, } from './utils'; import { StateExecTimeout } from './stateExecTimeout'; export class Sleepstate { + sourceModel?: Sleepstate; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + const defaultModel = { type: 'sleep', usedForCompensation: false, }; Object.assign(this, defaultModel, model); - overwriteEndIfObject(this); + overwriteEnd(this); overwriteStateDataFilter(this); overwriteTimeoutWithStateExecTimeout(this); overwriteOnErrors(this); - overwriteTransitionIfObject(this); + overwriteTransition(this); overwriteMetadata(this); } @@ -105,11 +110,14 @@ export class Sleepstate { normalize = (): Sleepstate => { const clone = new Sleepstate(this); - normalizeEndIfObject(clone); + normalizeEnd(clone); normalizeOnErrors(clone); - normalizeTransitionIfObject(clone); - normalizeUsedForCompensation(clone); + normalizeTransition(clone); + normalizeUsedForCompensation(clone, this.sourceModel); setEndValueIfNoTransition(clone); + + cleanSourceModelProperty(clone); + return clone; }; } diff --git a/src/lib/definitions/startdef.ts b/src/lib/definitions/startdef.ts index 27781075..d53ef03c 100644 --- a/src/lib/definitions/startdef.ts +++ b/src/lib/definitions/startdef.ts @@ -14,13 +14,13 @@ * limitations under the License. */ import { Schedule } from './schedule'; -import { overwriteScheduleIfObject } from './utils'; +import { overwriteSchedule } from './utils'; export class Startdef { constructor(model: any) { Object.assign(this, model); - overwriteScheduleIfObject(this); + overwriteSchedule(this); } /** diff --git a/src/lib/definitions/subflowref.ts b/src/lib/definitions/subflowref.ts index 13e58737..329680b6 100644 --- a/src/lib/definitions/subflowref.ts +++ b/src/lib/definitions/subflowref.ts @@ -14,10 +14,14 @@ * limitations under the License. */ -import { normalizeInvoke, normalizeOnParentComplete } from './utils'; +import { cleanSourceModelProperty, normalizeInvoke, normalizeOnParentComplete } from './utils'; export class Subflowref { + sourceModel?: Subflowref; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + Object.assign(this, model); } @@ -44,9 +48,10 @@ export class Subflowref { normalize = (): Subflowref => { const clone = new Subflowref(this); - normalizeInvoke(clone); - normalizeOnParentComplete(clone); + normalizeInvoke(clone, this.sourceModel); + normalizeOnParentComplete(clone, this.sourceModel); + cleanSourceModelProperty(clone); return clone; }; } diff --git a/src/lib/definitions/timeouts.ts b/src/lib/definitions/timeouts.ts index 34433991..44316201 100644 --- a/src/lib/definitions/timeouts.ts +++ b/src/lib/definitions/timeouts.ts @@ -15,11 +15,20 @@ */ import { WorkflowExecTimeout } from './workflowExecTimeout'; import { ActionExecTimeout, BranchExecTimeout, EventTimeout } from './types'; -import { normalizeWorkflowExecTimeout, overwriteStateExecTimeout, overwriteWorkflowExecTimeout } from './utils'; +import { + cleanSourceModelProperty, + normalizeWorkflowExecTimeout, + overwriteStateExecTimeout, + overwriteWorkflowExecTimeout, +} from './utils'; import { StateExecTimeout } from './stateExecTimeout'; export class Timeouts { + sourceModel?: Timeouts; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + Object.assign(this, model); overwriteWorkflowExecTimeout(this); overwriteStateExecTimeout(this); @@ -38,6 +47,8 @@ export class Timeouts { normalize = (): Timeouts => { const clone = new Timeouts(this); normalizeWorkflowExecTimeout(clone); + + cleanSourceModelProperty(clone); return clone; }; } diff --git a/src/lib/definitions/transition.ts b/src/lib/definitions/transition.ts index f9c68515..fec22966 100644 --- a/src/lib/definitions/transition.ts +++ b/src/lib/definitions/transition.ts @@ -14,10 +14,14 @@ * limitations under the License. */ import { Produceeventdef } from './produceeventdef'; -import { normalizeCompensate, overwriteProduceEvents } from './utils'; +import { cleanSourceModelProperty, normalizeCompensate, overwriteProduceEvents } from './utils'; export class Transition { + sourceModel?: Transition; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + const defaultModel = { compensate: false, }; @@ -46,8 +50,9 @@ export class Transition { normalize = (): Transition => { const clone = new Transition(this); - normalizeCompensate(clone); + normalizeCompensate(clone, this.sourceModel); + cleanSourceModelProperty(clone); return clone; }; } diff --git a/src/lib/definitions/transitiondatacondition.ts b/src/lib/definitions/transitiondatacondition.ts index c004edb5..4e72eb8f 100644 --- a/src/lib/definitions/transitiondatacondition.ts +++ b/src/lib/definitions/transitiondatacondition.ts @@ -15,13 +15,17 @@ */ import { Metadata } from './metadata'; import { Transition } from './transition'; -import { normalizeTransitionIfObject, overwriteMetadata, overwriteTransitionIfObject } from './utils'; +import { cleanSourceModelProperty, normalizeTransition, overwriteMetadata, overwriteTransition } from './utils'; export class Transitiondatacondition { + sourceModel?: Transitiondatacondition; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + Object.assign(this, model); - overwriteTransitionIfObject(this); + overwriteTransition(this); overwriteMetadata(this); } @@ -46,8 +50,9 @@ export class Transitiondatacondition { normalize = (): Transitiondatacondition => { const clone = new Transitiondatacondition(this); - normalizeTransitionIfObject(clone); + normalizeTransition(clone); + cleanSourceModelProperty(clone); return clone; }; } diff --git a/src/lib/definitions/transitioneventcondition.ts b/src/lib/definitions/transitioneventcondition.ts index 299ec4e5..a2fc67b6 100644 --- a/src/lib/definitions/transitioneventcondition.ts +++ b/src/lib/definitions/transitioneventcondition.ts @@ -17,17 +17,22 @@ import { Eventdatafilter } from './eventdatafilter'; import { Metadata } from './metadata'; import { Transition } from './transition'; import { - normalizeTransitionIfObject, + cleanSourceModelProperty, + normalizeTransition, overwriteEventDataFilter, overwriteMetadata, - overwriteTransitionIfObject, + overwriteTransition, } from './utils'; export class Transitioneventcondition { + sourceModel?: Transitioneventcondition; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + Object.assign(this, model); - overwriteTransitionIfObject(this); + overwriteTransition(this); overwriteEventDataFilter(this); overwriteMetadata(this); } @@ -57,8 +62,9 @@ export class Transitioneventcondition { normalize = (): Transitioneventcondition => { const clone = new Transitioneventcondition(this); - normalizeTransitionIfObject(clone); + normalizeTransition(clone); + cleanSourceModelProperty(clone); return clone; }; } diff --git a/src/lib/definitions/utils.ts b/src/lib/definitions/utils.ts index 17fb9fb8..c2c5c8ad 100644 --- a/src/lib/definitions/utils.ts +++ b/src/lib/definitions/utils.ts @@ -20,7 +20,7 @@ import { isObject } from '../utils'; * Modify the provided object, set the value to 'schedule' property as an instance of Specification.Schedule class, if the provided value is an object * @param object to set/overwrite the property */ -export function overwriteScheduleIfObject(object: { schedule: string | Specification.Schedule }): void { +export function overwriteSchedule(object: { schedule: string | Specification.Schedule }): void { if (isObject(object.schedule)) { object.schedule = new Specification.Schedule(object.schedule); } @@ -30,7 +30,7 @@ export function overwriteScheduleIfObject(object: { schedule: string | Specifica * Modify the provided object, set the value to 'start' property as an instance of Specification.Startdef class, if the provided value is an object * @param object to set/overwrite the property */ -export function overwriteStartIfObject(object: { start?: string | Specification.Startdef }): void { +export function overwriteStart(object: { start?: string | Specification.Startdef }): void { if (isObject(object.start)) { object.start = new Specification.Startdef(object.start); } @@ -40,7 +40,7 @@ export function overwriteStartIfObject(object: { start?: string | Specification. * Modify the provided object, set the value to 'end' property as an instance of Specification.End class, if the provided value is an object * @param object to set/overwrite the property */ -export function overwriteEndIfObject(object: { end?: boolean | Specification.End }): void { +export function overwriteEnd(object: { end?: boolean | Specification.End }): void { if (isObject(object.end)) { object.end = new Specification.End(object.end); } @@ -50,7 +50,7 @@ export function overwriteEndIfObject(object: { end?: boolean | Specification.End * Modify the provided object, set the value to 'cron' property as an instance of Specification.Crondef class, if the provided value is an object * @param object to set/overwrite the property */ -export function overwriteCronIfObject(object: { cron?: string | Specification.Crondef }): void { +export function overwriteCron(object: { cron?: string | Specification.Crondef }): void { if (isObject(object.cron)) { object.cron = new Specification.Crondef(object.cron); } @@ -60,7 +60,7 @@ export function overwriteCronIfObject(object: { cron?: string | Specification.Cr * Modify the provided object, set the value to 'transition' property as an instance of Specification.Transition class, if the provided value is an object * @param object to set/overwrite the property */ -export function overwriteTransitionIfObject(object: { transition?: string | Specification.Transition }): void { +export function overwriteTransition(object: { transition?: string | Specification.Transition }): void { if (isObject(object.transition)) { object.transition = new Specification.Transition(object.transition); } @@ -258,7 +258,7 @@ export function overwriteStates(object: { states: Specification.States }) { * Throws an error if the value of the property type is not handler * @param object to set/overwrite the property */ -export function overwritePropertiesIfObject(object: { properties: string | Specification.Properties }) { +export function overwriteProperties(object: { properties: string | Specification.Properties }) { if (isObject(object.properties)) { const properties: any = object.properties; @@ -357,7 +357,7 @@ export function overwriteProduceEvents(object: { produceEvents?: Specification.P * Modify the provided object, set the value to 'functionRef' property as an instance of Specification.Functionref class, if the provided value is an object * @param object to set/overwrite the property */ -export function overwriteFunctionRefIfObject(object: { functionRef?: string | Specification.Functionref }): void { +export function overwriteFunctionRef(object: { functionRef?: string | Specification.Functionref }): void { if (isObject(object.functionRef)) { object.functionRef = new Specification.Functionref(object.functionRef); } @@ -367,7 +367,7 @@ export function overwriteFunctionRefIfObject(object: { functionRef?: string | Sp * Modify the provided object, set the value to 'continueAs' property as an instance of Specification. Continueasdef, if the provided value is an object * @param object to set/overwrite the property */ -export function overwriteContinueAsIfObject(object: { continueAs?: string | Specification.Continueasdef }): void { +export function overwriteContinueAs(object: { continueAs?: string | Specification.Continueasdef }): void { if (isObject(object.continueAs)) { object.continueAs = new Specification.Continueasdef(object.continueAs); } @@ -377,7 +377,7 @@ export function overwriteContinueAsIfObject(object: { continueAs?: string | Spec * Modify the provided object, set the value to 'subFlowRef' property as an instance of Specification.Subflowref class, if the provided value is an object * @param object to set/overwrite the property */ -export function overwriteSubFlowRefIfObject(object: { subFlowRef?: string | Specification.Subflowref }): void { +export function overwriteSubFlowRef(object: { subFlowRef?: string | Specification.Subflowref }): void { if (isObject(object.subFlowRef)) { object.subFlowRef = new Specification.Subflowref(object.subFlowRef); } @@ -424,7 +424,7 @@ export function setEndValueIfNoTransition(object: { * Modify the provided object by normalizing the 'end' property. * @param object to be modified */ -export function normalizeEndIfObject(object: { end?: boolean | Specification.End }) { +export function normalizeEnd(object: { end?: boolean | Specification.End }) { if (isObject(object.end)) { object.end = (object.end as Specification.End).normalize(); } @@ -463,7 +463,7 @@ export function overwriteTimeoutWithStateExecTimeout(object: { * Modify the provided object, set the value to 'timeouts' property as an instance of Specification.Timeouts class * @param object to set/overwrite the property */ -export function overwriteTimeoutsIfObject(object: { timeouts?: string | Specification.Timeouts }): void { +export function overwriteTimeouts(object: { timeouts?: string | Specification.Timeouts }): void { if (isObject(object.timeouts)) { object.timeouts = object.timeouts && new Specification.Timeouts(object.timeouts); } @@ -473,7 +473,7 @@ export function overwriteTimeoutsIfObject(object: { timeouts?: string | Specific * Modify the provided object by normalizing the 'subFlowRef' property. * @param object to be modified */ -export function normalizeSubFlowRefIfObject(object: { subFlowRef?: string | Specification.Subflowref }) { +export function normalizeSubFlowRef(object: { subFlowRef?: string | Specification.Subflowref }) { if (isObject(object.subFlowRef)) { object.subFlowRef = (object.subFlowRef as Specification.Subflowref).normalize(); } @@ -483,7 +483,7 @@ export function normalizeSubFlowRefIfObject(object: { subFlowRef?: string | Spec * Modify the provided object by normalizing the 'continueAs' property. * @param object to be modified */ -export function normalizeContinueAsIfObject(object: { continueAs?: string | Specification.Continueasdef }) { +export function normalizeContinueAs(object: { continueAs?: string | Specification.Continueasdef }) { if (isObject(object.continueAs)) { object.continueAs = (object.continueAs as Specification.Continueasdef).normalize(); } @@ -505,46 +505,6 @@ export function normalizeWorkflowExecTimeout(object: { workflowExecTimeout?: Spe object.workflowExecTimeout = object.workflowExecTimeout && object.workflowExecTimeout.normalize(); } -/** - * Modify the provided object by normalizing the 'actionMode' property, where the default value is 'sequential'. - * @param object to be modified - */ -export function normalizeActionMode(object: { actionMode?: string }) { - if (object.actionMode === 'sequential') { - delete object.actionMode; - } -} - -/** - * Modify the provided object by normalizing the 'completionType' property, where the default value is 'allOf'. - * @param object to be modified - */ -export function normalizeCompletionType(object: { completionType?: string }) { - if (object.completionType === 'allOf') { - delete object.completionType; - } -} - -/** - * Modify the provided object by normalizing the 'usedForCompensation' property, where the default value is 'false'. - * @param object to be modified - */ -export function normalizeUsedForCompensation(object: { usedForCompensation?: boolean }) { - if (!object.usedForCompensation) { - delete object.usedForCompensation; - } -} - -/** - * Modify the provided object by normalizing the 'mode' property, where the default value is 'parallel'. - * @param object to be modified - */ -export function normalizeMode(object: { mode?: string }) { - if (object.mode === 'parallel') { - delete object.mode; - } -} - /** * Modify the provided object by normalizing the 'onEvents' property. * @param object to be modified @@ -615,204 +575,258 @@ export function normalizeEventConditions(object: { eventConditions?: Specificati * Modify the provided object by normalizing the 'transition' property if property type is Specification.Transition. * @param object to be modified */ -export function normalizeTransitionIfObject(object: { transition?: string | Specification.Transition }) { +export function normalizeTransition(object: { transition?: string | Specification.Transition }) { if (isObject(object.transition)) { object.transition = (object.transition as Specification.Transition).normalize(); } } /** - * Modify the provided object by normalizing the 'compensate' property, where the default value is 'false'. + * Modify the provided object by normalizing the 'states' property. * @param object to be modified */ -export function normalizeCompensate(object: { compensate?: boolean }) { - if (!object.compensate) { - delete object.compensate; +export function normalizeStates(object: { states: Specification.States }) { + object.states = object.states.map((state) => { + return state.normalize(); + }) as Specification.States; +} + +/** + * Modify the provided object by normalizing the 'auth' property. + * @param object to be modified + */ +export function normalizeAuth(object: { auth?: Specification.Auth }) { + if (Array.isArray(object.auth)) { + object.auth = object.auth.map((auth) => { + return auth.normalize(); + }) as Specification.Auth; } } /** - * Modify the provided object by normalizing the 'scheme' property, where the default value is 'basic'. + * Modify the provided object by normalizing the 'functions' property. * @param object to be modified */ -export function normalizeScheme(object: { scheme?: string }) { - if (object.scheme === 'basic') { - delete object.scheme; +export function normalizeFunctions(object: { functions?: Specification.Functions }) { + if (Array.isArray(object.functions)) { + object.functions = (object.functions as Specification.Function[]).map((f) => + f.normalize() + ) as Specification.Functions; } } /** - * Modify the provided object by normalizing the 'terminate' property, where the default value is 'false'. + * Modify the provided object by normalizing the 'events' property. * @param object to be modified */ -export function normalizeTerminate(object: { terminate?: boolean }) { - if (!object.terminate) { - delete object.terminate; +export function normalizeEvents(object: { events?: Specification.Events }) { + if (Array.isArray(object.events)) { + object.events = (object.events as Specification.Eventdef[]).map((event) => + event.normalize() + ) as Specification.Events; } } /** - * Modify the provided object by normalizing the 'exclusive' property, where the default value is 'true'. + * Modify the provided object by normalizing the 'timeouts' property. * @param object to be modified */ -export function normalizeExclusive(object: { exclusive?: boolean }) { - if (object.exclusive) { - delete object.exclusive; +export function normalizeTimeouts(object: { timeouts?: string | Specification.Timeouts }) { + if (isObject(object.timeouts)) { + object.timeouts = object.timeouts && object.timeouts.normalize(); } } /** - * Modify the provided object by normalizing the 'keepActive' property, where the default value is 'true'. + * Modify the provided object by normalizing the 'eventRef' property. * @param object to be modified */ -export function normalizeKeepActive(object: { keepActive?: boolean }) { - if (object.keepActive) { - delete object.keepActive; +export function normalizeEventRef(object: { eventRef?: Specification.Eventref }) { + if (isObject(object.eventRef)) { + object.eventRef = object.eventRef && object.eventRef.normalize(); } } /** - * Modify the provided object by normalizing the 'expressionLang' property, where the default value is 'jq'. + * Modify the provided object by normalizing the 'functionRef' property. * @param object to be modified */ -export function normalizeExpressionLang(object: { expressionLang?: string }) { - if (object.expressionLang === 'jq') { - delete object.expressionLang; +export function normalizeFunctionRef(object: { functionRef?: string | Specification.Functionref }) { + if (isObject(object.functionRef)) { + object.functionRef = object.functionRef && object.functionRef.normalize(); } } /** - * Modify the provided object by normalizing the 'interrupt' property, where the default value is 'true'. + * Modify the provided object by normalizing the 'actionMode' property. * @param object to be modified */ -export function normalizeInterrupt(object: { interrupt?: boolean }) { - if (object.interrupt) { - delete object.interrupt; +export function normalizeActionMode(target: { actionMode?: string }, source?: { actionMode?: string }) { + if (!source?.actionMode) { + delete target.actionMode; } } /** - * Modify the provided object by normalizing the 'type' property, where the default value is 'rest'. + * Modify the provided object by normalizing the 'completionType' property. * @param object to be modified */ -export function normalizeType(object: { type?: string }) { - if (object.type === 'rest') { - delete object.type; +export function normalizeCompletionType(object: { completionType?: string }, source?: { completionType?: string }) { + if (!source?.completionType) { + delete object.completionType; } } /** - * Modify the provided object by normalizing the 'invoke' property, where the default value is 'rest'. + * Modify the provided object by normalizing the 'usedForCompensation' property. * @param object to be modified */ -export function normalizeInvoke(object: { invoke?: string }) { - if (object.invoke === 'sync') { - delete object.invoke; +export function normalizeUsedForCompensation( + object: { usedForCompensation?: boolean }, + source?: { usedForCompensation?: boolean } +) { + if (source?.usedForCompensation === undefined) { + delete object.usedForCompensation; } } /** - * Modify the provided object by normalizing the 'onParentComplete' property, where the default value is 'terminate'. + * Modify the provided object by normalizing the 'mode' property. * @param object to be modified */ -export function normalizeOnParentComplete(object: { onParentComplete?: 'continue' | 'terminate' }) { - if (object.onParentComplete === 'terminate') { - delete object.onParentComplete; +export function normalizeMode(object: { mode?: string }, source?: { mode?: string }) { + if (!source?.mode) { + delete object.mode; } } /** - * Modify the provided object by normalizing the 'kind' property, where the default value is 'consumed'. + * Modify the provided object by normalizing the 'compensate' property. * @param object to be modified */ -export function normalizeKind(object: { kind?: string }) { - if (object.kind === 'consumed') { - delete object.kind; +export function normalizeCompensate(object: { compensate?: boolean }, source?: { compensate?: boolean }) { + if (source?.compensate === undefined) { + delete object.compensate; } } /** - * Modify the provided object by normalizing the 'dataOnly' property, where the default value is 'true'. + * Modify the provided object by normalizing the 'scheme' property. * @param object to be modified */ -export function normalizeDataOnly(object: { dataOnly?: boolean }) { - if (object.dataOnly) { - delete object.dataOnly; +export function normalizeScheme(object: { scheme?: string }, source?: { scheme?: string }) { + if (!source?.scheme) { + delete object.scheme; } } /** - * Modify the provided object by normalizing the 'states' property. + * Modify the provided object by normalizing the 'terminate' property. * @param object to be modified */ -export function normalizeStates(object: { states: Specification.States }) { - object.states = object.states.map((state) => { - return state.normalize(); - }) as Specification.States; +export function normalizeTerminate(object: { terminate?: boolean }, source?: { terminate?: boolean }) { + if (source?.terminate === undefined) { + delete object.terminate; + } } /** - * Modify the provided object by normalizing the 'auth' property. + * Modify the provided object by normalizing the 'exclusive' property. * @param object to be modified */ -export function normalizeAuth(object: { auth?: Specification.Auth }) { - if (Array.isArray(object.auth)) { - object.auth = object.auth.map((auth) => { - return auth.normalize(); - }) as Specification.Auth; +export function normalizeExclusive(object: { exclusive?: boolean }, source?: { exclusive?: boolean }) { + if (source?.exclusive === undefined) { + delete object.exclusive; } } /** - * Modify the provided object by normalizing the 'functions' property. + * Modify the provided object by normalizing the 'keepActive' property. * @param object to be modified */ -export function normalizeFunctions(object: { functions?: Specification.Functions }) { - if (Array.isArray(object.functions)) { - object.functions = (object.functions as Specification.Function[]).map((f) => - f.normalize() - ) as Specification.Functions; +export function normalizeKeepActive(object: { keepActive?: boolean }, source?: { keepActive?: boolean }) { + if (source?.keepActive === undefined) { + delete object.keepActive; } } /** - * Modify the provided object by normalizing the 'events' property. + * Modify the provided object by normalizing the 'expressionLang' property. * @param object to be modified */ -export function normalizeEvents(object: { events?: Specification.Events }) { - if (Array.isArray(object.events)) { - object.events = (object.events as Specification.Eventdef[]).map((event) => - event.normalize() - ) as Specification.Events; +export function normalizeExpressionLang(object: { expressionLang?: string }, source?: { expressionLang?: string }) { + if (!source?.expressionLang) { + delete object.expressionLang; } } /** - * Modify the provided object by normalizing the 'timeouts' property. + * Modify the provided object by normalizing the 'interrupt' property. * @param object to be modified */ -export function normalizeTimeoutsIfObject(object: { timeouts?: string | Specification.Timeouts }) { - if (isObject(object.timeouts)) { - object.timeouts = object.timeouts && object.timeouts.normalize(); +export function normalizeInterrupt(object: { interrupt?: boolean }, source?: { interrupt?: boolean }) { + if (source?.interrupt === undefined) { + delete object.interrupt; } } /** - * Modify the provided object by normalizing the 'eventRef' property. + * Modify the provided object by normalizing the 'type' property. * @param object to be modified */ -export function normalizeEventRef(object: { eventRef?: Specification.Eventref }) { - if (isObject(object.eventRef)) { - object.eventRef = object.eventRef && object.eventRef.normalize(); +export function normalizeType(object: { type?: string }, source?: { type?: string }) { + if (!source?.type) { + delete object.type; } } /** - * Modify the provided object by normalizing the 'functionRef' property. + * Modify the provided object by normalizing the 'invoke' property. * @param object to be modified */ -export function normalizeFunctionRef(object: { functionRef?: string | Specification.Functionref }) { - if (isObject(object.functionRef)) { - object.functionRef = object.functionRef && object.functionRef.normalize(); +export function normalizeInvoke(object: { invoke?: string }, source?: { invoke?: string }) { + if (!source?.invoke) { + delete object.invoke; + } +} + +/** + * Modify the provided object by normalizing the 'onParentComplete' property. + * @param object to be modified + */ +export function normalizeOnParentComplete( + object: { onParentComplete?: 'continue' | 'terminate' }, + source?: { onParentComplete?: 'continue' | 'terminate' } +) { + if (!source?.onParentComplete) { + delete object.onParentComplete; } } + +/** + * Modify the provided object by normalizing the 'kind' property. + * @param object to be modified + */ +export function normalizeKind(object: { kind?: string }, source?: { kind?: string }) { + if (!source?.kind) { + delete object.kind; + } +} + +/** + * Modify the provided object by normalizing the 'dataOnly' property. + * @param object to be modified + */ +export function normalizeDataOnly(object: { dataOnly?: boolean }, source?: { dataOnly?: boolean }) { + if (source?.dataOnly === undefined) { + delete object.dataOnly; + } +} + +/** + * Modify the provided object by deleting the 'source' property + * @param object + */ +export function cleanSourceModelProperty(object?: { sourceModel?: any }): void { + delete object?.sourceModel; +} diff --git a/src/lib/definitions/workflow.ts b/src/lib/definitions/workflow.ts index 628ddd32..6b040ea3 100644 --- a/src/lib/definitions/workflow.ts +++ b/src/lib/definitions/workflow.ts @@ -23,13 +23,14 @@ import { Specification } from '.'; import { validate } from '../utils'; import { + cleanSourceModelProperty, normalizeAuth, normalizeEvents, normalizeExpressionLang, normalizeFunctions, normalizeKeepActive, normalizeStates, - normalizeTimeoutsIfObject, + normalizeTimeouts, overwriteAuth, overwriteErrors, overwriteEvents, @@ -37,14 +38,18 @@ import { overwriteMetadata, overwritePropertyAsPlainType, overwriteRetries, - overwriteStartIfObject, + overwriteStart, overwriteStates, - overwriteTimeoutsIfObject, + overwriteTimeouts, } from './utils'; import { Auth, Errors, Events, Functions, Retries, Secrets, States } from './types'; export class Workflow { + sourceModel?: Workflow; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + const defaultModel = { expressionLang: 'jq', keepActive: true, @@ -54,8 +59,8 @@ export class Workflow { overwritePropertyAsPlainType('dataInputSchema', this); overwritePropertyAsPlainType('constants', this); - overwriteStartIfObject(this); - overwriteTimeoutsIfObject(this); + overwriteStart(this); + overwriteTimeouts(this); overwriteErrors(this); overwriteMetadata(this); overwriteEvents(this); @@ -141,14 +146,15 @@ export class Workflow { normalize = (): Workflow => { const clone = new Workflow(this); - normalizeExpressionLang(clone); - normalizeTimeoutsIfObject(clone); - normalizeKeepActive(clone); + normalizeExpressionLang(clone, this.sourceModel); + normalizeTimeouts(clone); + normalizeKeepActive(clone, this.sourceModel); normalizeEvents(clone); normalizeFunctions(clone); normalizeAuth(clone); normalizeStates(clone); + cleanSourceModelProperty(clone); return clone; }; @@ -172,7 +178,7 @@ export class Workflow { * @returns {string} The workflow as JSON */ static toJson(workflow: Workflow): string { - validate('Workflow', workflow); + validate('Workflow', workflow.normalize()); return JSON.stringify(workflow.normalize()); } @@ -182,7 +188,7 @@ export class Workflow { * @returns {string} The workflow as YAML */ static toYaml(workflow: Workflow): string { - validate('Workflow', workflow); + validate('Workflow', workflow.normalize()); return yaml.dump(JSON.parse(JSON.stringify(workflow.normalize()))); } } diff --git a/src/lib/definitions/workflowExecTimeout.ts b/src/lib/definitions/workflowExecTimeout.ts index a0b04834..c2a8241c 100644 --- a/src/lib/definitions/workflowExecTimeout.ts +++ b/src/lib/definitions/workflowExecTimeout.ts @@ -14,10 +14,14 @@ * limitations under the License. */ -import { normalizeInterrupt } from './utils'; +import { cleanSourceModelProperty, normalizeInterrupt } from './utils'; export class WorkflowExecTimeout { + sourceModel?: WorkflowExecTimeout; + constructor(model: any) { + this.sourceModel = Object.assign({}, model); + const defaultModel = { interrupt: true }; Object.assign(this, defaultModel, model); } @@ -43,8 +47,9 @@ export class WorkflowExecTimeout { normalize = (): WorkflowExecTimeout => { const clone = new WorkflowExecTimeout(this); - normalizeInterrupt(clone); + normalizeInterrupt(clone, this.sourceModel); + cleanSourceModelProperty(clone); return clone; }; } diff --git a/tests/examples/applicantrequest.json b/tests/examples/applicantrequest.json index e8fff30f..fbae252a 100644 --- a/tests/examples/applicantrequest.json +++ b/tests/examples/applicantrequest.json @@ -41,6 +41,7 @@ }, { "type":"operation", + "actionMode":"sequential", "name":"RejectApplication", "actions":[ { @@ -55,4 +56,4 @@ "end": true } ] -} +} \ No newline at end of file diff --git a/tests/examples/applicantrequest.spec.ts b/tests/examples/applicantrequest.spec.ts index 59dae9ac..f5a4296a 100644 --- a/tests/examples/applicantrequest.spec.ts +++ b/tests/examples/applicantrequest.spec.ts @@ -58,7 +58,6 @@ describe('applicationrequest workflow example', () => { .build(), operationstateBuilder() .name('StartApplication') - .actionMode('sequential') .actions([actionBuilder().subFlowRef('startApplicationWorkflowId').build()]) .build(), operationstateBuilder() diff --git a/tests/examples/carauctionbids.json b/tests/examples/carauctionbids.json index 451be389..dfd76bbf 100644 --- a/tests/examples/carauctionbids.json +++ b/tests/examples/carauctionbids.json @@ -24,6 +24,7 @@ "states": [ { "type": "event", + "exclusive": true, "name": "StoreCarAuctionBid", "onEvents": [ { @@ -41,4 +42,4 @@ "end": true } ] -} +} \ No newline at end of file diff --git a/tests/examples/jobmonitoring.json b/tests/examples/jobmonitoring.json index c9f06b97..c4894164 100644 --- a/tests/examples/jobmonitoring.json +++ b/tests/examples/jobmonitoring.json @@ -26,6 +26,7 @@ "states":[ { "type":"operation", + "actionMode":"sequential", "name":"SubmitJob", "actions":[ { @@ -53,6 +54,7 @@ }, { "type":"operation", + "actionMode":"sequential", "name":"GetJobStatus", "actions":[ { @@ -91,6 +93,7 @@ }, { "type":"operation", + "actionMode":"sequential", "name":"JobSucceeded", "actions":[ { @@ -106,6 +109,7 @@ }, { "type":"operation", + "actionMode":"sequential", "name":"JobFailed", "actions":[ { @@ -120,4 +124,4 @@ "end": true } ] -} +} \ No newline at end of file diff --git a/tests/examples/parallel.json b/tests/examples/parallel.json index 98436122..02280f34 100644 --- a/tests/examples/parallel.json +++ b/tests/examples/parallel.json @@ -8,6 +8,7 @@ "states":[ { "type": "parallel", + "completionType": "allOf", "name": "ParallelExec", "branches": [ { @@ -26,4 +27,4 @@ "end": true } ] -} +} \ No newline at end of file diff --git a/tests/examples/provisionorder.json b/tests/examples/provisionorder.json index 57d14a80..ba5a5cfd 100644 --- a/tests/examples/provisionorder.json +++ b/tests/examples/provisionorder.json @@ -25,6 +25,7 @@ "states":[ { "type":"operation", + "actionMode":"sequential", "name":"ProvisionOrder", "actions":[ { @@ -96,4 +97,4 @@ "end": true } ] -} +} \ No newline at end of file diff --git a/tests/examples/sendcloudevent.json b/tests/examples/sendcloudevent.json index 6e50dcd6..6b3fb5f7 100644 --- a/tests/examples/sendcloudevent.json +++ b/tests/examples/sendcloudevent.json @@ -42,4 +42,4 @@ } } ] -} +} \ No newline at end of file diff --git a/tests/examples/sendcloudevent.spec.ts b/tests/examples/sendcloudevent.spec.ts index a7664208..a4f039af 100644 --- a/tests/examples/sendcloudevent.spec.ts +++ b/tests/examples/sendcloudevent.spec.ts @@ -48,7 +48,6 @@ describe('sendcloudevent workflow example', () => { .inputCollection('${ .orders }') .iterationParam('singleorder') .outputCollection('${ .provisionedOrders }') - .usedForCompensation(false) .actions([ actionBuilder() .functionRef( diff --git a/tests/examples/solvemathproblems.json b/tests/examples/solvemathproblems.json index a2994e9e..f95f7e8c 100644 --- a/tests/examples/solvemathproblems.json +++ b/tests/examples/solvemathproblems.json @@ -34,4 +34,4 @@ "end": true } ] -} +} \ No newline at end of file diff --git a/tests/examples/solvemathproblems.spec.ts b/tests/examples/solvemathproblems.spec.ts index 6a093c2f..b88d6eec 100644 --- a/tests/examples/solvemathproblems.spec.ts +++ b/tests/examples/solvemathproblems.spec.ts @@ -44,7 +44,6 @@ describe('solvemathproblems workflow example', () => { .inputCollection('${ .expressions }') .iterationParam('singleexpression') .outputCollection('${ .results }') - .usedForCompensation(false) .actions([ actionBuilder() .functionRef( diff --git a/tests/lib/builders/operationstate-builder.spec.ts b/tests/lib/builders/operationstate-builder.spec.ts new file mode 100644 index 00000000..9f340753 --- /dev/null +++ b/tests/lib/builders/operationstate-builder.spec.ts @@ -0,0 +1,38 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +import { actionBuilder, operationstateBuilder } from '../../../src'; + +describe('operationstateBuilder ', () => { + it('should build an object with default values', () => { + const object = operationstateBuilder() + .name('StartApplication') + .actions([actionBuilder().subFlowRef('startApplicationWorkflowId').build()]) + .build(); + + expect(object.actionMode).toBe('sequential'); + + const serializedObject = object.normalize(); + expect(JSON.stringify(serializedObject)).toBe( + JSON.stringify({ + type: 'operation', + name: 'StartApplication', + actions: [{ subFlowRef: 'startApplicationWorkflowId' }], + end: true, + }) + ); + }); +}); diff --git a/tests/lib/definitions/util.spec.ts b/tests/lib/definitions/util.spec.ts index 9193c9d9..25fbf19f 100644 --- a/tests/lib/definitions/util.spec.ts +++ b/tests/lib/definitions/util.spec.ts @@ -16,7 +16,7 @@ */ import { - overwritePropertiesIfObject, + overwriteProperties, overwritePropertyAsPlainType, overwriteTimeoutWithStateExecTimeout, } from '../../../src/lib/definitions/utils'; @@ -75,7 +75,7 @@ describe('Util ', () => { }); }); - describe('overwritePropertiesIfObject ', () => { + describe('overwriteProperties ', () => { class HasProperties { properties: string | Properties; } @@ -89,7 +89,7 @@ describe('Util ', () => { } as HasProperties; const target = Object.assign({}, source); - overwritePropertiesIfObject(target); + overwriteProperties(target); expect(target.properties.constructor.name).toBe('Basicpropsdef'); }); @@ -101,7 +101,7 @@ describe('Util ', () => { } as HasProperties; const target = Object.assign({}, source); - overwritePropertiesIfObject(target); + overwriteProperties(target); expect(target.properties.constructor.name).toBe('Bearerpropsdef'); }); @@ -114,7 +114,7 @@ describe('Util ', () => { } as HasProperties; const target = Object.assign({}, source); - overwritePropertiesIfObject(target); + overwriteProperties(target); expect(target.properties.constructor.name).toBe('Oauth2propsdef'); }); @@ -124,7 +124,7 @@ describe('Util ', () => { } as HasProperties; const target = Object.assign({}, source); - overwritePropertiesIfObject(target); + overwriteProperties(target); expect(target.properties.constructor.name).toBe('String'); }); }); diff --git a/tools/generate-builders.ts b/tools/generate-builders.ts index b361f9d6..873582ae 100644 --- a/tools/generate-builders.ts +++ b/tools/generate-builders.ts @@ -132,7 +132,7 @@ function ${camelType}BuildingFn(data: Specification.${dataType}): (() => Specifi ${extension?.preValidate ? extension.preValidate : ''} - validate('${dataType}', model); + validate('${dataType}', model.normalize()); return model; }; }