state-machine-cat 12.0.15 → 12.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -64,7 +64,7 @@ export function transform(pOptions) {
64
64
  });
65
65
  }
66
66
  export function formatError(pError) {
67
- if (Boolean(pError.location)) {
67
+ if (pError.location) {
68
68
  return `\n syntax error on line ${pError.location.start.line}, column ${pError.location.start.column}:\n ${pError.message}\n\n`;
69
69
  }
70
70
  return pError.message;
@@ -49,7 +49,7 @@ function deriveOutputFromInput(pInputFrom, pOutputType) {
49
49
  .concat(lExtension);
50
50
  }
51
51
  function determineOutputTo(pOutputTo, pInputFrom, pOutputType) {
52
- return pOutputTo ? pOutputTo : deriveOutputFromInput(pInputFrom, pOutputType);
52
+ return pOutputTo ?? deriveOutputFromInput(pInputFrom, pOutputType);
53
53
  }
54
54
  function determineInputType(pInputFrom, pInputType) {
55
55
  if (pInputType) {
@@ -75,12 +75,12 @@ function determineOutputType(pOutputTo, pOutputType) {
75
75
  return options.getAllowedValues().outputType.default;
76
76
  }
77
77
  function determineParameter(pOptions, pParameter) {
78
- return Object.prototype.hasOwnProperty.call(pOptions, pParameter)
78
+ return Object.hasOwn(pOptions, pParameter)
79
79
  ? pOptions[pParameter]
80
80
  : options.getAllowedValues()[pParameter].default;
81
81
  }
82
82
  function determineDotAttributes(pOptions, pDotAttributes) {
83
- return Boolean(pOptions?.[pDotAttributes]) &&
83
+ return pOptions?.[pDotAttributes] &&
84
84
  typeof pOptions[pDotAttributes] === "string"
85
85
  ? parseAttributes(pOptions[pDotAttributes])
86
86
  : [];
package/dist/options.mjs CHANGED
@@ -8,6 +8,7 @@ const ALLOWED_VALUES = Object.freeze({
8
8
  values: [
9
9
  { name: "ast" },
10
10
  { name: "dot" },
11
+ { name: "ndot" },
11
12
  { name: "eps" },
12
13
  { name: "json" },
13
14
  { name: "oldeps" },
@@ -49,10 +50,10 @@ const ALLOWED_VALUES = Object.freeze({
49
50
  values: [{ name: true }, { name: false }],
50
51
  },
51
52
  });
52
- function getOptionValue(pOptions, pOptionName) {
53
+ export function getOptionValue(pOptions, pOptionName) {
53
54
  return pOptions?.[pOptionName] ?? ALLOWED_VALUES[pOptionName].default;
54
55
  }
55
- function getAllowedValues() {
56
+ export function getAllowedValues() {
56
57
  return ALLOWED_VALUES;
57
58
  }
58
59
  export default {
@@ -2,6 +2,7 @@ import StateMachineModel from "../state-machine-model.mjs";
2
2
  const TRIGGER_RE_AS_A_STRING =
3
3
  "^(entry|activity|exit)\\s*/\\s*([^\\n$]*)(\\n|$)";
4
4
  const TRIGGER_RE = new RegExp(TRIGGER_RE_AS_A_STRING);
5
+ let gTransitionIdHwm = 0;
5
6
  function stateExists(pKnownStateNames, pName) {
6
7
  return pKnownStateNames.includes(pName);
7
8
  }
@@ -60,9 +61,8 @@ function getAlreadyDeclaredStates(pStateMachine) {
60
61
  );
61
62
  }
62
63
  function extractUndeclaredStates(pStateMachine, pKnownStateNames) {
63
- pKnownStateNames = pKnownStateNames
64
- ? pKnownStateNames
65
- : getAlreadyDeclaredStates(pStateMachine);
64
+ pKnownStateNames =
65
+ pKnownStateNames ?? getAlreadyDeclaredStates(pStateMachine);
66
66
  pStateMachine.states = pStateMachine?.states ?? [];
67
67
  const lTransitions = pStateMachine?.transitions ?? [];
68
68
  pStateMachine.states.filter(isComposite).forEach((pState) => {
@@ -135,7 +135,7 @@ function uniq(pArray, pEqualFunction) {
135
135
  function parseTransitionExpression(pString) {
136
136
  const lTransitionExpressionRe = /([^[/]+)?(\[[^\]]+\])?[^/]*(\/.+)?/;
137
137
  const lReturnValue = {};
138
- const lMatchResult = pString.match(lTransitionExpressionRe);
138
+ const lMatchResult = lTransitionExpressionRe.exec(pString);
139
139
  const lEventPos = 1;
140
140
  const lConditionPos = 2;
141
141
  const lActionPos = 3;
@@ -161,7 +161,7 @@ function setIfNotEmpty(pObject, pProperty, pValue) {
161
161
  setIf(pObject, pProperty, pValue, (pX) => pX && pX.length > 0);
162
162
  }
163
163
  function extractAction(pActivityCandidate) {
164
- const lMatch = pActivityCandidate.match(TRIGGER_RE);
164
+ const lMatch = TRIGGER_RE.exec(pActivityCandidate);
165
165
  const lTypePos = 1;
166
166
  const lBodyPos = 2;
167
167
  if (lMatch) {
@@ -181,6 +181,12 @@ function extractActions(pString) {
181
181
  .map((pActivityCandidate) => pActivityCandidate.trim())
182
182
  .map(extractAction);
183
183
  }
184
+ function nextTransitionId() {
185
+ return ++gTransitionIdHwm;
186
+ }
187
+ function resetTransitionId() {
188
+ gTransitionIdHwm = 0;
189
+ }
184
190
  export default {
185
191
  initState,
186
192
  extractUndeclaredStates,
@@ -192,4 +198,6 @@ export default {
192
198
  extractActions,
193
199
  setIf,
194
200
  setIfNotEmpty,
201
+ nextTransitionId,
202
+ resetTransitionId,
195
203
  };
@@ -112,9 +112,7 @@ function reduceTransition(pState) {
112
112
  }
113
113
  function extractTransitions(pStates) {
114
114
  return pStates
115
- .filter((pState) =>
116
- Object.prototype.hasOwnProperty.call(pState, "transition"),
117
- )
115
+ .filter((pState) => Object.hasOwn(pState, "transition"))
118
116
  .reduce((pAllTransitions, pThisState) => {
119
117
  const lTransitionAsArray = castArray(pThisState.transition);
120
118
  return pAllTransitions.concat(
@@ -321,6 +321,7 @@ function peg$parse(input, options) {
321
321
  var peg$e78 = peg$classExpectation(["\r", "\n"], true, false);
322
322
  var peg$e79 = peg$otherExpectation("comment");
323
323
  var peg$f0 = function (statemachine) {
324
+ parserHelpers.resetTransitionId();
324
325
  statemachine.states = parserHelpers.extractUndeclaredStates(statemachine);
325
326
  return parserHelpers.classifyForkJoins(statemachine);
326
327
  };
@@ -375,7 +376,7 @@ function peg$parse(input, options) {
375
376
  );
376
377
  parserHelpers.setIf(lState, "statemachine", statemachine);
377
378
  parserHelpers.setIfNotEmpty(lState, "note", notes);
378
- if (Boolean(actions)) {
379
+ if (actions) {
379
380
  parserHelpers.setIfNotEmpty(
380
381
  lState,
381
382
  "actions",
@@ -430,6 +431,7 @@ function peg$parse(input, options) {
430
431
  ),
431
432
  );
432
433
  parserHelpers.setIfNotEmpty(trans, "note", notes);
434
+ trans.id = parserHelpers.nextTransitionId();
433
435
  return trans;
434
436
  };
435
437
  var peg$f20 = function (from_, to) {
@@ -125,6 +125,9 @@ export default {
125
125
  required: ["from", "to"],
126
126
  additionalProperties: false,
127
127
  properties: {
128
+ id: {
129
+ type: "number",
130
+ },
128
131
  from: {
129
132
  description:
130
133
  "The name of the state this transition transitions from",
@@ -1 +1 @@
1
- var Handlebars=require("handlebars/dist/handlebars.runtime"),template=Handlebars.template,templates=Handlebars.templates=Handlebars.templates||{};templates["dot.states.template.hbs"]=template({1:function(l,n,e,a,t){var o=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},r="",c=null!=(c=o(e,"nestedExternalSelfTransitions")||(null!=n?o(n,"nestedExternalSelfTransitions"):n))?c:l.hooks.helperMissing,t={name:"nestedExternalSelfTransitions",hash:{},fn:l.program(2,t,0),inverse:l.noop,data:t,loc:{start:{line:2,column:2},end:{line:4,column:36}}},c="function"==typeof c?c.call(null!=n?n:l.nullContext||{},t):c;return null!=(c=o(e,"nestedExternalSelfTransitions")?c:l.hooks.blockHelperMissing.call(n,c,t))&&(r+=c),r},2:function(l,n,e,a,t){return' "self_'+(null!=(l=l.lambda(n,n))?l:"")+'" [shape=point style=invis width=0 height=0 fixedsize=true]\n'},4:function(l,n,e,a,t){var o,r,c=null!=n?n:l.nullContext||{},i=l.hooks.helperMissing,u="function",s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "'+(null!=(o=typeof(r=null!=(r=s(e,"name")||(null!=n?s(n,"name"):n))?r:i)==u?r.call(c,{name:"name",hash:{},data:t,loc:{start:{line:7,column:3},end:{line:7,column:13}}}):r)?o:"")+'" [shape=circle style=filled class="'+(null!=(o=typeof(r=null!=(r=s(e,"class")||(null!=n?s(n,"class"):n))?r:i)==u?r.call(c,{name:"class",hash:{},data:t,loc:{start:{line:7,column:49},end:{line:7,column:60}}}):r)?o:"")+'" '+(null!=(o=s(e,"if").call(c,null!=n?s(n,"color"):n,{name:"if",hash:{},fn:l.program(5,t,0),inverse:l.program(7,t,0),data:t,loc:{start:{line:7,column:62},end:{line:7,column:150}}}))?o:"")+(null!=(o=s(e,"if").call(c,null!=n?s(n,"active"):n,{name:"if",hash:{},fn:l.program(9,t,0),inverse:l.noop,data:t,loc:{start:{line:7,column:150},end:{line:7,column:184}}}))?o:"")+'fixedsize=true height=0.15 label=""]\n'},5:function(l,n,e,a,t){var o,r,c=null!=n?n:l.nullContext||{},i=l.hooks.helperMissing,u="function",l=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return'color="'+(null!=(o=typeof(r=null!=(r=l(e,"color")||(null!=n?l(n,"color"):n))?r:i)==u?r.call(c,{name:"color",hash:{},data:t,loc:{start:{line:7,column:82},end:{line:7,column:93}}}):r)?o:"")+'" fillcolor="'+(null!=(o=typeof(r=null!=(r=l(e,"color")||(null!=n?l(n,"color"):n))?r:i)==u?r.call(c,{name:"color",hash:{},data:t,loc:{start:{line:7,column:106},end:{line:7,column:117}}}):r)?o:"")+'" '},7:function(l,n,e,a,t){return"fillcolor=black "},9:function(l,n,e,a,t){return"penwidth=3.0 "},11:function(l,n,e,a,t){var o=null!=n?n:l.nullContext||{},r=l.hooks.helperMissing,c="function",i=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},u=' "'+(null!=(m=typeof(s=null!=(s=i(e,"name")||(null!=n?i(n,"name"):n))?s:r)==c?s.call(o,{name:"name",hash:{},data:t,loc:{start:{line:10,column:3},end:{line:10,column:13}}}):s)?m:"")+'" [margin=0 class="'+(null!=(m=typeof(s=null!=(s=i(e,"class")||(null!=n?i(n,"class"):n))?s:r)==c?s.call(o,{name:"class",hash:{},data:t,loc:{start:{line:10,column:32},end:{line:10,column:43}}}):s)?m:"")+'" '+(null!=(m=i(e,"if").call(o,null!=n?i(n,"color"):n,{name:"if",hash:{},fn:l.program(12,t,0),inverse:l.noop,data:t,loc:{start:{line:10,column:45},end:{line:10,column:85}}}))?m:"")+(null!=(m=i(e,"if").call(o,null!=n?i(n,"active"):n,{name:"if",hash:{},fn:l.program(14,t,0),inverse:l.noop,data:t,loc:{start:{line:10,column:85},end:{line:10,column:134}}}))?m:"")+'label= < \n <table align="center" cellborder="0" border="2" style="rounded" width="48">\n <tr><td width="48"'+(null!=(m=i(e,"if").call(o,null!=n?i(n,"actionStrings"):n,{name:"if",hash:{},fn:l.program(16,t,0),inverse:l.program(18,t,0),data:t,loc:{start:{line:12,column:24},end:{line:12,column:92}}}))?m:"")+">"+(null!=(m=i(e,"if").call(o,null!=n?i(n,"active"):n,{name:"if",hash:{},fn:l.program(20,t,0),inverse:l.program(22,t,0),data:t,loc:{start:{line:12,column:93},end:{line:12,column:147}}}))?m:"")+"</td></tr>\n",s=null!=(s=i(e,"actionStrings")||(null!=n?i(n,"actionStrings"):n))?s:r,r={name:"actionStrings",hash:{},fn:l.program(24,t,0),inverse:l.noop,data:t,loc:{start:{line:13,column:6},end:{line:16,column:24}}},m=typeof s==c?s.call(o,r):s;return null!=(m=i(e,"actionStrings")?m:l.hooks.blockHelperMissing.call(n,m,r))&&(u+=m),u+" </table>\n >]\n"},12:function(l,n,e,a,t){var o=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return'color="'+(null!=(o="function"==typeof(e=null!=(e=o(e,"color")||(null!=n?o(n,"color"):n))?e:l.hooks.helperMissing)?e.call(null!=n?n:l.nullContext||{},{name:"color",hash:{},data:t,loc:{start:{line:10,column:65},end:{line:10,column:76}}}):e)?o:"")+'" '},14:function(l,n,e,a,t){return"peripheries=1 style=rounded "},16:function(l,n,e,a,t){return' cellpadding="2"'},18:function(l,n,e,a,t){return' cellpadding="7"'},20:function(l,n,e,a,t){var o=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return"<i>"+l.escapeExpression("function"==typeof(e=null!=(e=o(e,"label")||(null!=n?o(n,"label"):n))?e:l.hooks.helperMissing)?e.call(null!=n?n:l.nullContext||{},{name:"label",hash:{},data:t,loc:{start:{line:12,column:110},end:{line:12,column:119}}}):e)+"</i>"},22:function(l,n,e,a,t){var o=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return l.escapeExpression("function"==typeof(e=null!=(e=o(e,"label")||(null!=n?o(n,"label"):n))?e:l.hooks.helperMissing)?e.call(null!=n?n:l.nullContext||{},{name:"label",hash:{},data:t,loc:{start:{line:12,column:131},end:{line:12,column:140}}}):e)},24:function(l,n,e,a,t){var o=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return" "+(null!=(e=o(e,"if").call(null!=n?n:l.nullContext||{},t&&o(t,"first"),{name:"if",hash:{},fn:l.program(25,t,0),inverse:l.noop,data:t,loc:{start:{line:14,column:8},end:{line:14,column:34}}}))?e:"")+'\n <tr><td align="left" cellpadding="2">'+l.escapeExpression(l.lambda(n,n))+"</td></tr>\n"},25:function(l,n,e,a,t){return"<hr/>"},27:function(l,n,e,a,t){var o,r,c=null!=n?n:l.nullContext||{},i=l.hooks.helperMissing,u="function",s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "'+(null!=(o=typeof(r=null!=(r=s(e,"name")||(null!=n?s(n,"name"):n))?r:i)==u?r.call(c,{name:"name",hash:{},data:t,loc:{start:{line:21,column:3},end:{line:21,column:13}}}):r)?o:"")+'" [shape=circle class="'+(null!=(o=typeof(r=null!=(r=s(e,"class")||(null!=n?s(n,"class"):n))?r:i)==u?r.call(c,{name:"class",hash:{},data:t,loc:{start:{line:21,column:36},end:{line:21,column:47}}}):r)?o:"")+'" '+(null!=(o=s(e,"if").call(c,null!=n?s(n,"color"):n,{name:"if",hash:{},fn:l.program(12,t,0),inverse:l.noop,data:t,loc:{start:{line:21,column:49},end:{line:21,column:89}}}))?o:"")+(null!=(o=s(e,"if").call(c,null!=n?s(n,"active"):n,{name:"if",hash:{},fn:l.program(9,t,0),inverse:l.noop,data:t,loc:{start:{line:21,column:89},end:{line:21,column:123}}}))?o:"")+'label="H"]\n'},29:function(l,n,e,a,t){var o,r,c=null!=n?n:l.nullContext||{},i=l.hooks.helperMissing,u="function",s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "'+(null!=(o=typeof(r=null!=(r=s(e,"name")||(null!=n?s(n,"name"):n))?r:i)==u?r.call(c,{name:"name",hash:{},data:t,loc:{start:{line:24,column:3},end:{line:24,column:13}}}):r)?o:"")+'" [shape=circle class="'+(null!=(o=typeof(r=null!=(r=s(e,"class")||(null!=n?s(n,"class"):n))?r:i)==u?r.call(c,{name:"class",hash:{},data:t,loc:{start:{line:24,column:36},end:{line:24,column:47}}}):r)?o:"")+'" '+(null!=(o=s(e,"if").call(c,null!=n?s(n,"color"):n,{name:"if",hash:{},fn:l.program(12,t,0),inverse:l.noop,data:t,loc:{start:{line:24,column:49},end:{line:24,column:89}}}))?o:"")+(null!=(o=s(e,"if").call(c,null!=n?s(n,"active"):n,{name:"if",hash:{},fn:l.program(9,t,0),inverse:l.noop,data:t,loc:{start:{line:24,column:89},end:{line:24,column:123}}}))?o:"")+'label="H*"]\n'},31:function(l,n,e,a,t,o,r){var c=null!=n?n:l.nullContext||{},i=l.hooks.helperMissing,u="function",s=l.hooks.blockHelperMissing,m=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},p=' "'+(null!=(d=typeof(f=null!=(f=m(e,"name")||(null!=n?m(n,"name"):n))?f:i)==u?f.call(c,{name:"name",hash:{},data:t,loc:{start:{line:27,column:3},end:{line:27,column:13}}}):f)?d:"")+'" [shape=diamond fixedsize=true width=0.35 height=0.35 fontsize=10 class="'+(null!=(d=typeof(f=null!=(f=m(e,"class")||(null!=n?m(n,"class"):n))?f:i)==u?f.call(c,{name:"class",hash:{},data:t,loc:{start:{line:27,column:87},end:{line:27,column:98}}}):f)?d:"")+'" '+(null!=(d=m(e,"if").call(c,null!=n?m(n,"color"):n,{name:"if",hash:{},fn:l.program(12,t,0,o,r),inverse:l.noop,data:t,loc:{start:{line:27,column:100},end:{line:27,column:140}}}))?d:"")+(null!=(d=m(e,"if").call(c,null!=n?m(n,"active"):n,{name:"if",hash:{},fn:l.program(9,t,0,o,r),inverse:l.noop,data:t,loc:{start:{line:27,column:140},end:{line:27,column:174}}}))?d:"")+'label=" "]\n "'+(null!=(d=typeof(f=null!=(f=m(e,"name")||(null!=n?m(n,"name"):n))?f:i)==u?f.call(c,{name:"name",hash:{},data:t,loc:{start:{line:28,column:3},end:{line:28,column:13}}}):f)?d:"")+'" -> "'+(null!=(d=typeof(f=null!=(f=m(e,"name")||(null!=n?m(n,"name"):n))?f:i)==u?f.call(c,{name:"name",hash:{},data:t,loc:{start:{line:28,column:19},end:{line:28,column:29}}}):f)?d:"")+'" [label=<',f=null!=(f=m(e,"actionStrings")||(null!=n?m(n,"actionStrings"):n))?f:i,h={name:"actionStrings",hash:{},fn:l.program(32,t,0,o,r),inverse:l.noop,data:t,loc:{start:{line:28,column:39},end:{line:28,column:156}}},d=typeof f==u?f.call(c,h):f;return null!=(d=m(e,"actionStrings")?d:s.call(n,d,h))&&(p+=d),p+='> color="#FFFFFF01"',f=null!=(f=m(e,"color")||(null!=n?m(n,"color"):n))?f:i,h={name:"color",hash:{},fn:l.program(41,t,0,o,r),inverse:l.noop,data:t,loc:{start:{line:28,column:175},end:{line:28,column:215}}},d=typeof f==u?f.call(c,h):f,null!=(d=m(e,"color")?d:s.call(n,d,h))&&(p+=d),p+' class="'+(null!=(d=typeof(f=null!=(f=m(e,"class")||(null!=n?m(n,"class"):n))?f:i)==u?f.call(c,{name:"class",hash:{},data:t,loc:{start:{line:28,column:223},end:{line:28,column:234}}}):f)?d:"")+'"];\n'},32:function(l,n,e,a,t,o,r){var c,n=null!=n?n:l.nullContext||{},i=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return(null!=(c=i(e,"if").call(n,t&&i(t,"first"),{name:"if",hash:{},fn:l.program(33,t,0,o,r),inverse:l.program(35,t,0,o,r),data:t,loc:{start:{line:28,column:57},end:{line:28,column:88}}}))?c:"")+(null!=(c=i(e,"if").call(n,null!=r[1]?i(r[1],"active"):r[1],{name:"if",hash:{},fn:l.program(37,t,0,o,r),inverse:l.program(39,t,0,o,r),data:t,loc:{start:{line:28,column:88},end:{line:28,column:137}}}))?c:"")},33:function(l,n,e,a,t){return""},35:function(l,n,e,a,t){return"\\n"},37:function(l,n,e,a,t){return"<i>"+l.escapeExpression(l.lambda(n,n))+"</i>"},39:function(l,n,e,a,t){return l.escapeExpression(l.lambda(n,n))},41:function(l,n,e,a,t){return' fontcolor="'+(null!=(l=l.lambda(n,n))?l:"")+'"'},43:function(l,n,e,a,t){var o,r,c=null!=n?n:l.nullContext||{},i=l.hooks.helperMissing,u="function",s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "'+(null!=(o=typeof(r=null!=(r=s(e,"name")||(null!=n?s(n,"name"):n))?r:i)==u?r.call(c,{name:"name",hash:{},data:t,loc:{start:{line:31,column:3},end:{line:31,column:13}}}):r)?o:"")+'" [shape=rect class="'+(null!=(o=typeof(r=null!=(r=s(e,"class")||(null!=n?s(n,"class"):n))?r:i)==u?r.call(c,{name:"class",hash:{},data:t,loc:{start:{line:31,column:34},end:{line:31,column:45}}}):r)?o:"")+'" '+(null!=(o=s(e,"if").call(c,null!=n?s(n,"color"):n,{name:"if",hash:{},fn:l.program(5,t,0),inverse:l.program(7,t,0),data:t,loc:{start:{line:31,column:47},end:{line:31,column:135}}}))?o:"")+(null!=(o=s(e,"if").call(c,null!=n?s(n,"active"):n,{name:"if",hash:{},fn:l.program(9,t,0),inverse:l.noop,data:t,loc:{start:{line:31,column:135},end:{line:31,column:169}}}))?o:"")+'label=" " fixedsize=true style=filled '+(null!=(o=typeof(r=null!=(r=s(e,"sizingExtras")||(null!=n?s(n,"sizingExtras"):n))?r:i)==u?r.call(c,{name:"sizingExtras",hash:{},data:t,loc:{start:{line:31,column:207},end:{line:31,column:225}}}):r)?o:"")+"]\n"},45:function(l,n,e,a,t){var o,r,c=null!=n?n:l.nullContext||{},i=l.hooks.helperMissing,u="function",s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "'+(null!=(o=typeof(r=null!=(r=s(e,"name")||(null!=n?s(n,"name"):n))?r:i)==u?r.call(c,{name:"name",hash:{},data:t,loc:{start:{line:37,column:3},end:{line:37,column:13}}}):r)?o:"")+'" [label= < \n <table align="center" cellborder="0" border="0">\n <tr><td cellpadding="0"><font '+(null!=(o=s(e,"if").call(c,null!=n?s(n,"color"):n,{name:"if",hash:{},fn:l.program(12,t,0),inverse:l.noop,data:t,loc:{start:{line:39,column:38},end:{line:39,column:78}}}))?o:"")+'point-size="20">X</font></td></tr>\n <tr><td cellpadding="0"><font '+(null!=(o=s(e,"if").call(c,null!=n?s(n,"color"):n,{name:"if",hash:{},fn:l.program(46,t,0),inverse:l.noop,data:t,loc:{start:{line:40,column:38},end:{line:40,column:77}}}))?o:"")+">"+l.escapeExpression(typeof(r=null!=(r=s(e,"label")||(null!=n?s(n,"label"):n))?r:i)==u?r.call(c,{name:"label",hash:{},data:t,loc:{start:{line:40,column:78},end:{line:40,column:87}}}):r)+'</font></td></tr>\n </table>\n > class="'+(null!=(o=typeof(r=null!=(r=s(e,"class")||(null!=n?s(n,"class"):n))?r:i)==u?r.call(c,{name:"class",hash:{},data:t,loc:{start:{line:42,column:13},end:{line:42,column:24}}}):r)?o:"")+'"]\n'},46:function(l,n,e,a,t){var o=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return'color="'+(null!=(o="function"==typeof(e=null!=(e=o(e,"color")||(null!=n?o(n,"color"):n))?e:l.hooks.helperMissing)?e.call(null!=n?n:l.nullContext||{},{name:"color",hash:{},data:t,loc:{start:{line:40,column:58},end:{line:40,column:69}}}):e)?o:"")+'"'},48:function(l,n,e,a,t){var o,r,c=null!=n?n:l.nullContext||{},i=l.hooks.helperMissing,u="function",s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "'+(null!=(o=typeof(r=null!=(r=s(e,"name")||(null!=n?s(n,"name"):n))?r:i)==u?r.call(c,{name:"name",hash:{},data:t,loc:{start:{line:45,column:3},end:{line:45,column:13}}}):r)?o:"")+'" [shape=circle style=filled class="'+(null!=(o=typeof(r=null!=(r=s(e,"class")||(null!=n?s(n,"class"):n))?r:i)==u?r.call(c,{name:"class",hash:{},data:t,loc:{start:{line:45,column:49},end:{line:45,column:60}}}):r)?o:"")+'" '+(null!=(o=s(e,"if").call(c,null!=n?s(n,"color"):n,{name:"if",hash:{},fn:l.program(5,t,0),inverse:l.program(7,t,0),data:t,loc:{start:{line:45,column:62},end:{line:45,column:150}}}))?o:"")+"fixedsize=true height=0.15 peripheries=2 "+(null!=(o=s(e,"if").call(c,null!=n?s(n,"active"):n,{name:"if",hash:{},fn:l.program(9,t,0),inverse:l.noop,data:t,loc:{start:{line:45,column:191},end:{line:45,column:225}}}))?o:"")+'label=""]\n'},50:function(l,n,e,a,t){var o=null!=n?n:l.nullContext||{},r=l.hooks.helperMissing,c="function",i=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},u=' subgraph "cluster_'+(null!=(p=typeof(s=null!=(s=i(e,"name")||(null!=n?i(n,"name"):n))?s:r)==c?s.call(o,{name:"name",hash:{},data:t,loc:{start:{line:48,column:20},end:{line:48,column:30}}}):s)?p:"")+'" {\n class="'+(null!=(p=typeof(s=null!=(s=i(e,"class")||(null!=n?i(n,"class"):n))?s:r)==c?s.call(o,{name:"class",hash:{},data:t,loc:{start:{line:49,column:11},end:{line:49,column:22}}}):s)?p:"")+'" '+(null!=(p=i(e,"if").call(o,null!=n?i(n,"color"):n,{name:"if",hash:{},fn:l.program(12,t,0),inverse:l.noop,data:t,loc:{start:{line:49,column:24},end:{line:49,column:64}}}))?p:"")+'label= <\n <table cellborder="0" border="0">\n <tr><td>'+(null!=(p=i(e,"if").call(o,null!=n?i(n,"active"):n,{name:"if",hash:{},fn:l.program(20,t,0),inverse:l.program(22,t,0),data:t,loc:{start:{line:51,column:14},end:{line:51,column:68}}}))?p:"")+"</td></tr>\n",s=null!=(s=i(e,"actionStrings")||(null!=n?i(n,"actionStrings"):n))?s:r,m={name:"actionStrings",hash:{},fn:l.program(51,t,0),inverse:l.noop,data:t,loc:{start:{line:52,column:6},end:{line:55,column:24}}},p=typeof s==c?s.call(o,m):s;return null!=(p=i(e,"actionStrings")?p:l.hooks.blockHelperMissing.call(n,p,m))&&(u+=p),u+" </table>\n > "+(null!=(p=i(e,"if").call(o,null!=n?i(n,"parentIsParallel"):n,{name:"if",hash:{},fn:l.program(53,t,0),inverse:l.program(55,t,0),data:t,loc:{start:{line:57,column:6},end:{line:57,column:137}}}))?p:"")+'\n "'+(null!=(p=typeof(s=null!=(s=i(e,"name")||(null!=n?i(n,"name"):n))?s:r)==c?s.call(o,{name:"name",hash:{},data:t,loc:{start:{line:58,column:5},end:{line:58,column:15}}}):s)?p:"")+'" [shape=point style=invis margin=0 width=0 height=0 fixedsize=true]\n '+(null!=(p=(i(e,"stateSection")||n&&i(n,"stateSection")||r).call(o,null!=n?i(n,"statemachine"):n,{name:"stateSection",hash:{},fn:l.program(33,t,0),inverse:l.noop,data:t,loc:{start:{line:59,column:4},end:{line:59,column:51}}}))?p:"")+"\n }\n"},51:function(l,n,e,a,t){var o=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return" "+(null!=(e=o(e,"if").call(null!=n?n:l.nullContext||{},t&&o(t,"first"),{name:"if",hash:{},fn:l.program(25,t,0),inverse:l.noop,data:t,loc:{start:{line:53,column:8},end:{line:53,column:34}}}))?e:"")+'\n <tr><td align="left">'+l.escapeExpression(l.lambda(n,n))+"</td></tr>\n"},53:function(l,n,e,a,t){return'style="dashed" penwidth=1'},55:function(l,n,e,a,t){var o=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return"style=rounded "+(null!=(e=o(e,"if").call(null!=n?n:l.nullContext||{},null!=n?o(n,"active"):n,{name:"if",hash:{},fn:l.program(56,t,0),inverse:l.program(58,t,0),data:t,loc:{start:{line:57,column:77},end:{line:57,column:130}}}))?e:"")},56:function(l,n,e,a,t){return"penwidth=3.0"},58:function(l,n,e,a,t){return"penwidth=2.0"},60:function(l,n,e,a,t,o,r){var c=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},i="",u=null!=(u=c(e,"noteName")||(null!=n?c(n,"noteName"):n))?u:l.hooks.helperMissing,o={name:"noteName",hash:{},fn:l.program(61,t,0,o,r),inverse:l.noop,data:t,loc:{start:{line:63,column:4},end:{line:66,column:17}}},r="function"==typeof u?u.call(null!=n?n:l.nullContext||{},o):u;return null!=(r=c(e,"noteName")?r:l.hooks.blockHelperMissing.call(n,r,o))&&(i+=r),i},61:function(l,n,e,a,t,o,r){var c,i=l.lambda,l=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "'+(null!=(c=i(n,n))?c:"")+'" [color=black fontcolor=black label="'+(null!=(c=i(null!=r[1]?l(r[1],"noteFlattened"):r[1],n))?c:"")+'" shape=note fontsize=10 fillcolor="#ffffcc" penwidth=1.0]\n "'+(null!=(c=i(null!=r[1]?l(r[1],"name"):r[1],n))?c:"")+'" -> "'+(null!=(c=i(n,n))?c:"")+'" [style=dashed arrowtail=none arrowhead=none]\n'},compiler:[8,">= 4.3.0"],main:function(l,n,e,a,t,o,r){var c=null!=n?n:l.nullContext||{},i=l.hooks.helperMissing,u="function",s=l.hooks.blockHelperMissing,m=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},p="",f=null!=(f=m(e,"compositeStates")||(null!=n?m(n,"compositeStates"):n))?f:i,h={name:"compositeStates",hash:{},fn:l.program(1,t,0,o,r),inverse:l.noop,data:t,loc:{start:{line:1,column:0},end:{line:5,column:20}}},d=typeof f==u?f.call(c,h):f;return null!=(d=m(e,"compositeStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"initialStates")||(null!=n?m(n,"initialStates"):n))?f:i,h={name:"initialStates",hash:{},fn:l.program(4,t,0,o,r),inverse:l.noop,data:t,loc:{start:{line:6,column:0},end:{line:8,column:18}}},d=typeof f==u?f.call(c,h):f,null!=(d=m(e,"initialStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"regularStates")||(null!=n?m(n,"regularStates"):n))?f:i,h={name:"regularStates",hash:{},fn:l.program(11,t,0,o,r),inverse:l.noop,data:t,loc:{start:{line:9,column:0},end:{line:19,column:18}}},d=typeof f==u?f.call(c,h):f,null!=(d=m(e,"regularStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"historyStates")||(null!=n?m(n,"historyStates"):n))?f:i,h={name:"historyStates",hash:{},fn:l.program(27,t,0,o,r),inverse:l.noop,data:t,loc:{start:{line:20,column:0},end:{line:22,column:18}}},d=typeof f==u?f.call(c,h):f,null!=(d=m(e,"historyStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"deepHistoryStates")||(null!=n?m(n,"deepHistoryStates"):n))?f:i,h={name:"deepHistoryStates",hash:{},fn:l.program(29,t,0,o,r),inverse:l.noop,data:t,loc:{start:{line:23,column:0},end:{line:25,column:22}}},d=typeof f==u?f.call(c,h):f,null!=(d=m(e,"deepHistoryStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"choiceStates")||(null!=n?m(n,"choiceStates"):n))?f:i,h={name:"choiceStates",hash:{},fn:l.program(31,t,0,o,r),inverse:l.noop,data:t,loc:{start:{line:26,column:0},end:{line:29,column:17}}},d=typeof f==u?f.call(c,h):f,null!=(d=m(e,"choiceStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"forkjoinStates")||(null!=n?m(n,"forkjoinStates"):n))?f:i,h={name:"forkjoinStates",hash:{},fn:l.program(43,t,0,o,r),inverse:l.noop,data:t,loc:{start:{line:30,column:0},end:{line:32,column:19}}},d=typeof f==u?f.call(c,h):f,null!=(d=m(e,"forkjoinStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"junctionStates")||(null!=n?m(n,"junctionStates"):n))?f:i,h={name:"junctionStates",hash:{},fn:l.program(4,t,0,o,r),inverse:l.noop,data:t,loc:{start:{line:33,column:0},end:{line:35,column:19}}},d=typeof f==u?f.call(c,h):f,null!=(d=m(e,"junctionStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"terminateStates")||(null!=n?m(n,"terminateStates"):n))?f:i,h={name:"terminateStates",hash:{},fn:l.program(45,t,0,o,r),inverse:l.noop,data:t,loc:{start:{line:36,column:0},end:{line:43,column:20}}},d=typeof f==u?f.call(c,h):f,null!=(d=m(e,"terminateStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"finalStates")||(null!=n?m(n,"finalStates"):n))?f:i,h={name:"finalStates",hash:{},fn:l.program(48,t,0,o,r),inverse:l.noop,data:t,loc:{start:{line:44,column:0},end:{line:46,column:16}}},d=typeof f==u?f.call(c,h):f,null!=(d=m(e,"finalStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"compositeStates")||(null!=n?m(n,"compositeStates"):n))?f:i,h={name:"compositeStates",hash:{},fn:l.program(50,t,0,o,r),inverse:l.noop,data:t,loc:{start:{line:47,column:0},end:{line:61,column:20}}},d=typeof f==u?f.call(c,h):f,null!=(d=m(e,"compositeStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"states")||(null!=n?m(n,"states"):n))?f:i,h={name:"states",hash:{},fn:l.program(60,t,0,o,r),inverse:l.noop,data:t,loc:{start:{line:62,column:0},end:{line:67,column:11}}},d=typeof f==u?f.call(c,h):f,null!=(d=m(e,"states")?d:s.call(n,d,h))&&(p+=d),p},useData:!0,useDepths:!0});
1
+ var Handlebars=require("handlebars/dist/handlebars.runtime"),template=Handlebars.template,templates=Handlebars.templates=Handlebars.templates||{};templates["dot.states.template.hbs"]=template({1:function(l,n,e,a,o){var t=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},r="",c=null!=(c=t(e,"nestedExternalSelfTransitions")||(null!=n?t(n,"nestedExternalSelfTransitions"):n))?c:l.hooks.helperMissing,o={name:"nestedExternalSelfTransitions",hash:{},fn:l.program(2,o,0),inverse:l.noop,data:o,loc:{start:{line:2,column:2},end:{line:4,column:36}}},c="function"==typeof c?c.call(null!=n?n:l.nullContext||{},o):c;return null!=(c=t(e,"nestedExternalSelfTransitions")?c:l.hooks.blockHelperMissing.call(n,c,o))&&(r+=c),r},2:function(l,n,e,a,o){return' "self_'+(null!=(l=l.lambda(n,n))?l:"")+'" [shape=point style=invis width=0 height=0 fixedsize=true]\n'},4:function(l,n,e,a,o){var t,r,c=null!=n?n:l.nullContext||{},u=l.hooks.helperMissing,i="function",s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "'+(null!=(t=typeof(r=null!=(r=s(e,"name")||(null!=n?s(n,"name"):n))?r:u)==i?r.call(c,{name:"name",hash:{},data:o,loc:{start:{line:7,column:3},end:{line:7,column:13}}}):r)?t:"")+'" [shape=circle style=filled class="'+(null!=(t=typeof(r=null!=(r=s(e,"class")||(null!=n?s(n,"class"):n))?r:u)==i?r.call(c,{name:"class",hash:{},data:o,loc:{start:{line:7,column:49},end:{line:7,column:60}}}):r)?t:"")+'" '+(null!=(t=s(e,"if").call(c,null!=n?s(n,"color"):n,{name:"if",hash:{},fn:l.program(5,o,0),inverse:l.program(7,o,0),data:o,loc:{start:{line:7,column:62},end:{line:7,column:166}}}))?t:"")+(null!=(t=s(e,"if").call(c,null!=n?s(n,"active"):n,{name:"if",hash:{},fn:l.program(9,o,0),inverse:l.noop,data:o,loc:{start:{line:7,column:166},end:{line:7,column:200}}}))?t:"")+'fixedsize=true height=0.15 label=""]\n'},5:function(l,n,e,a,o){var t,r,c=null!=n?n:l.nullContext||{},u=l.hooks.helperMissing,i="function",l=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return'color="'+(null!=(t=typeof(r=null!=(r=l(e,"color")||(null!=n?l(n,"color"):n))?r:u)==i?r.call(c,{name:"color",hash:{},data:o,loc:{start:{line:7,column:82},end:{line:7,column:93}}}):r)?t:"")+'" fillcolor="'+(null!=(t=typeof(r=null!=(r=l(e,"color")||(null!=n?l(n,"color"):n))?r:u)==i?r.call(c,{name:"color",hash:{},data:o,loc:{start:{line:7,column:106},end:{line:7,column:117}}}):r)?t:"")+'" '},7:function(l,n,e,a,o){return'color="black" fillcolor="black" '},9:function(l,n,e,a,o){return"penwidth=3.0 "},11:function(l,n,e,a,o){var t=null!=n?n:l.nullContext||{},r=l.hooks.helperMissing,c="function",u=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},i=' "'+(null!=(m=typeof(s=null!=(s=u(e,"name")||(null!=n?u(n,"name"):n))?s:r)==c?s.call(t,{name:"name",hash:{},data:o,loc:{start:{line:10,column:3},end:{line:10,column:13}}}):s)?m:"")+'" [margin=0 class="'+(null!=(m=typeof(s=null!=(s=u(e,"class")||(null!=n?u(n,"class"):n))?s:r)==c?s.call(t,{name:"class",hash:{},data:o,loc:{start:{line:10,column:32},end:{line:10,column:43}}}):s)?m:"")+'" '+(null!=(m=u(e,"if").call(t,null!=n?u(n,"color"):n,{name:"if",hash:{},fn:l.program(12,o,0),inverse:l.program(14,o,0),data:o,loc:{start:{line:10,column:45},end:{line:10,column:107}}}))?m:"")+(null!=(m=u(e,"if").call(t,null!=n?u(n,"active"):n,{name:"if",hash:{},fn:l.program(16,o,0),inverse:l.noop,data:o,loc:{start:{line:10,column:107},end:{line:10,column:156}}}))?m:"")+'label= <\n <table align="center" cellborder="0" border="2" style="rounded" width="48">\n <tr><td width="48"'+(null!=(m=u(e,"if").call(t,null!=n?u(n,"actionStrings"):n,{name:"if",hash:{},fn:l.program(18,o,0),inverse:l.program(20,o,0),data:o,loc:{start:{line:12,column:24},end:{line:12,column:92}}}))?m:"")+">"+(null!=(m=u(e,"if").call(t,null!=n?u(n,"active"):n,{name:"if",hash:{},fn:l.program(22,o,0),inverse:l.program(24,o,0),data:o,loc:{start:{line:12,column:93},end:{line:12,column:147}}}))?m:"")+"</td></tr>\n",s=null!=(s=u(e,"actionStrings")||(null!=n?u(n,"actionStrings"):n))?s:r,r={name:"actionStrings",hash:{},fn:l.program(26,o,0),inverse:l.noop,data:o,loc:{start:{line:13,column:6},end:{line:16,column:24}}},m=typeof s==c?s.call(t,r):s;return null!=(m=u(e,"actionStrings")?m:l.hooks.blockHelperMissing.call(n,m,r))&&(i+=m),i+" </table>\n >]\n"},12:function(l,n,e,a,o){var t=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return'color="'+(null!=(t="function"==typeof(e=null!=(e=t(e,"color")||(null!=n?t(n,"color"):n))?e:l.hooks.helperMissing)?e.call(null!=n?n:l.nullContext||{},{name:"color",hash:{},data:o,loc:{start:{line:10,column:65},end:{line:10,column:76}}}):e)?t:"")+'" '},14:function(l,n,e,a,o){return'color="black" '},16:function(l,n,e,a,o){return"peripheries=1 style=rounded "},18:function(l,n,e,a,o){return' cellpadding="2"'},20:function(l,n,e,a,o){return' cellpadding="7"'},22:function(l,n,e,a,o){var t=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return"<i>"+l.escapeExpression("function"==typeof(e=null!=(e=t(e,"label")||(null!=n?t(n,"label"):n))?e:l.hooks.helperMissing)?e.call(null!=n?n:l.nullContext||{},{name:"label",hash:{},data:o,loc:{start:{line:12,column:110},end:{line:12,column:119}}}):e)+"</i>"},24:function(l,n,e,a,o){var t=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return l.escapeExpression("function"==typeof(e=null!=(e=t(e,"label")||(null!=n?t(n,"label"):n))?e:l.hooks.helperMissing)?e.call(null!=n?n:l.nullContext||{},{name:"label",hash:{},data:o,loc:{start:{line:12,column:131},end:{line:12,column:140}}}):e)},26:function(l,n,e,a,o){var t=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return" "+(null!=(e=t(e,"if").call(null!=n?n:l.nullContext||{},o&&t(o,"first"),{name:"if",hash:{},fn:l.program(27,o,0),inverse:l.noop,data:o,loc:{start:{line:14,column:8},end:{line:14,column:35}}}))?e:"")+'<tr><td align="left" cellpadding="2">'+l.escapeExpression(l.lambda(n,n))+"</td></tr>\n"},27:function(l,n,e,a,o){return"<hr/>"},29:function(l,n,e,a,o){var t,r,c=null!=n?n:l.nullContext||{},u=l.hooks.helperMissing,i="function",s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "'+(null!=(t=typeof(r=null!=(r=s(e,"name")||(null!=n?s(n,"name"):n))?r:u)==i?r.call(c,{name:"name",hash:{},data:o,loc:{start:{line:21,column:3},end:{line:21,column:13}}}):r)?t:"")+'" [shape=circle class="'+(null!=(t=typeof(r=null!=(r=s(e,"class")||(null!=n?s(n,"class"):n))?r:u)==i?r.call(c,{name:"class",hash:{},data:o,loc:{start:{line:21,column:36},end:{line:21,column:47}}}):r)?t:"")+'" '+(null!=(t=s(e,"if").call(c,null!=n?s(n,"color"):n,{name:"if",hash:{},fn:l.program(12,o,0),inverse:l.program(14,o,0),data:o,loc:{start:{line:21,column:49},end:{line:21,column:111}}}))?t:"")+(null!=(t=s(e,"if").call(c,null!=n?s(n,"active"):n,{name:"if",hash:{},fn:l.program(9,o,0),inverse:l.noop,data:o,loc:{start:{line:21,column:111},end:{line:21,column:145}}}))?t:"")+'label="H"]\n'},31:function(l,n,e,a,o){var t,r,c=null!=n?n:l.nullContext||{},u=l.hooks.helperMissing,i="function",s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "'+(null!=(t=typeof(r=null!=(r=s(e,"name")||(null!=n?s(n,"name"):n))?r:u)==i?r.call(c,{name:"name",hash:{},data:o,loc:{start:{line:24,column:3},end:{line:24,column:13}}}):r)?t:"")+'" [shape=circle class="'+(null!=(t=typeof(r=null!=(r=s(e,"class")||(null!=n?s(n,"class"):n))?r:u)==i?r.call(c,{name:"class",hash:{},data:o,loc:{start:{line:24,column:36},end:{line:24,column:47}}}):r)?t:"")+'" '+(null!=(t=s(e,"if").call(c,null!=n?s(n,"color"):n,{name:"if",hash:{},fn:l.program(12,o,0),inverse:l.program(14,o,0),data:o,loc:{start:{line:24,column:49},end:{line:24,column:111}}}))?t:"")+(null!=(t=s(e,"if").call(c,null!=n?s(n,"active"):n,{name:"if",hash:{},fn:l.program(9,o,0),inverse:l.noop,data:o,loc:{start:{line:24,column:111},end:{line:24,column:145}}}))?t:"")+'label="H*"]\n'},33:function(l,n,e,a,o,t,r){var c=null!=n?n:l.nullContext||{},u=l.hooks.helperMissing,i="function",s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},m=' "'+(null!=(f=typeof(p=null!=(p=s(e,"name")||(null!=n?s(n,"name"):n))?p:u)==i?p.call(c,{name:"name",hash:{},data:o,loc:{start:{line:27,column:3},end:{line:27,column:13}}}):p)?f:"")+'" [shape=diamond fixedsize=true width=0.35 height=0.35 fontsize=10 label=" " class="'+(null!=(f=typeof(p=null!=(p=s(e,"class")||(null!=n?s(n,"class"):n))?p:u)==i?p.call(c,{name:"class",hash:{},data:o,loc:{start:{line:27,column:97},end:{line:27,column:108}}}):p)?f:"")+'" '+(null!=(f=s(e,"if").call(c,null!=n?s(n,"color"):n,{name:"if",hash:{},fn:l.program(34,o,0,t,r),inverse:l.program(36,o,0,t,r),data:o,loc:{start:{line:27,column:110},end:{line:27,column:170}}}))?f:"")+(null!=(f=s(e,"if").call(c,null!=n?s(n,"active"):n,{name:"if",hash:{},fn:l.program(38,o,0,t,r),inverse:l.noop,data:o,loc:{start:{line:27,column:170},end:{line:27,column:204}}}))?f:"")+']\n "'+(null!=(f=typeof(p=null!=(p=s(e,"name")||(null!=n?s(n,"name"):n))?p:u)==i?p.call(c,{name:"name",hash:{},data:o,loc:{start:{line:28,column:3},end:{line:28,column:13}}}):p)?f:"")+'" -> "'+(null!=(f=typeof(p=null!=(p=s(e,"name")||(null!=n?s(n,"name"):n))?p:u)==i?p.call(c,{name:"name",hash:{},data:o,loc:{start:{line:28,column:19},end:{line:28,column:29}}}):p)?f:"")+'" [color="#FFFFFF01"'+(null!=(f=s(e,"if").call(c,null!=n?s(n,"color"):n,{name:"if",hash:{},fn:l.program(40,o,0,t,r),inverse:l.program(42,o,0,t,r),data:o,loc:{start:{line:28,column:49},end:{line:28,column:119}}}))?f:"")+' class="'+(null!=(f=typeof(p=null!=(p=s(e,"class")||(null!=n?s(n,"class"):n))?p:u)==i?p.call(c,{name:"class",hash:{},data:o,loc:{start:{line:28,column:127},end:{line:28,column:138}}}):p)?f:"")+'" label=<',p=null!=(p=s(e,"actionStrings")||(null!=n?s(n,"actionStrings"):n))?p:u,u={name:"actionStrings",hash:{},fn:l.program(44,o,0,t,r),inverse:l.noop,data:o,loc:{start:{line:28,column:147},end:{line:28,column:264}}},f=typeof p==i?p.call(c,u):p;return null!=(f=s(e,"actionStrings")?f:l.hooks.blockHelperMissing.call(n,f,u))&&(m+=f),m+">]\n"},34:function(l,n,e,a,o){var t=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return'color="'+(null!=(t="function"==typeof(e=null!=(e=t(e,"color")||(null!=n?t(n,"color"):n))?e:l.hooks.helperMissing)?e.call(null!=n?n:l.nullContext||{},{name:"color",hash:{},data:o,loc:{start:{line:27,column:130},end:{line:27,column:141}}}):e)?t:"")+'"'},36:function(l,n,e,a,o){return'color="black"'},38:function(l,n,e,a,o){return" penwidth=3.0"},40:function(l,n,e,a,o){var t=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' fontcolor="'+(null!=(t="function"==typeof(e=null!=(e=t(e,"color")||(null!=n?t(n,"color"):n))?e:l.hooks.helperMissing)?e.call(null!=n?n:l.nullContext||{},{name:"color",hash:{},data:o,loc:{start:{line:28,column:74},end:{line:28,column:85}}}):e)?t:"")+'"'},42:function(l,n,e,a,o){return' fontcolor="black"'},44:function(l,n,e,a,o,t,r){var c,n=null!=n?n:l.nullContext||{},u=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return(null!=(c=u(e,"if").call(n,o&&u(o,"first"),{name:"if",hash:{},fn:l.program(45,o,0,t,r),inverse:l.program(47,o,0,t,r),data:o,loc:{start:{line:28,column:165},end:{line:28,column:196}}}))?c:"")+(null!=(c=u(e,"if").call(n,null!=r[1]?u(r[1],"active"):r[1],{name:"if",hash:{},fn:l.program(49,o,0,t,r),inverse:l.program(51,o,0,t,r),data:o,loc:{start:{line:28,column:196},end:{line:28,column:245}}}))?c:"")},45:function(l,n,e,a,o){return""},47:function(l,n,e,a,o){return"\\n"},49:function(l,n,e,a,o){return"<i>"+l.escapeExpression(l.lambda(n,n))+"</i>"},51:function(l,n,e,a,o){return l.escapeExpression(l.lambda(n,n))},53:function(l,n,e,a,o){var t,r,c=null!=n?n:l.nullContext||{},u=l.hooks.helperMissing,i="function",s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "'+(null!=(t=typeof(r=null!=(r=s(e,"name")||(null!=n?s(n,"name"):n))?r:u)==i?r.call(c,{name:"name",hash:{},data:o,loc:{start:{line:31,column:3},end:{line:31,column:13}}}):r)?t:"")+'" [shape=rect fixedsize=true label=" " style=filled class="'+(null!=(t=typeof(r=null!=(r=s(e,"class")||(null!=n?s(n,"class"):n))?r:u)==i?r.call(c,{name:"class",hash:{},data:o,loc:{start:{line:31,column:72},end:{line:31,column:83}}}):r)?t:"")+'" '+(null!=(t=s(e,"if").call(c,null!=n?s(n,"color"):n,{name:"if",hash:{},fn:l.program(54,o,0),inverse:l.program(56,o,0),data:o,loc:{start:{line:31,column:85},end:{line:31,column:187}}}))?t:"")+(null!=(t=s(e,"if").call(c,null!=n?s(n,"active"):n,{name:"if",hash:{},fn:l.program(38,o,0),inverse:l.noop,data:o,loc:{start:{line:31,column:187},end:{line:31,column:221}}}))?t:"")+(null!=(t=typeof(r=null!=(r=s(e,"sizingExtras")||(null!=n?s(n,"sizingExtras"):n))?r:u)==i?r.call(c,{name:"sizingExtras",hash:{},data:o,loc:{start:{line:31,column:221},end:{line:31,column:239}}}):r)?t:"")+"]\n"},54:function(l,n,e,a,o){var t,r,c=null!=n?n:l.nullContext||{},u=l.hooks.helperMissing,i="function",l=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return'color="'+(null!=(t=typeof(r=null!=(r=l(e,"color")||(null!=n?l(n,"color"):n))?r:u)==i?r.call(c,{name:"color",hash:{},data:o,loc:{start:{line:31,column:105},end:{line:31,column:116}}}):r)?t:"")+'" fillcolor="'+(null!=(t=typeof(r=null!=(r=l(e,"color")||(null!=n?l(n,"color"):n))?r:u)==i?r.call(c,{name:"color",hash:{},data:o,loc:{start:{line:31,column:129},end:{line:31,column:140}}}):r)?t:"")+'"'},56:function(l,n,e,a,o){return'color="black" fillcolor="black"'},58:function(l,n,e,a,o){var t,r,c=null!=n?n:l.nullContext||{},u=l.hooks.helperMissing,i="function",s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "'+(null!=(t=typeof(r=null!=(r=s(e,"name")||(null!=n?s(n,"name"):n))?r:u)==i?r.call(c,{name:"name",hash:{},data:o,loc:{start:{line:34,column:3},end:{line:34,column:13}}}):r)?t:"")+'" [shape=circle fixedsize=true height=0.15 label="" style=filled class="'+(null!=(t=typeof(r=null!=(r=s(e,"class")||(null!=n?s(n,"class"):n))?r:u)==i?r.call(c,{name:"class",hash:{},data:o,loc:{start:{line:34,column:85},end:{line:34,column:96}}}):r)?t:"")+'" '+(null!=(t=s(e,"if").call(c,null!=n?s(n,"color"):n,{name:"if",hash:{},fn:l.program(54,o,0),inverse:l.program(56,o,0),data:o,loc:{start:{line:34,column:98},end:{line:34,column:200}}}))?t:"")+(null!=(t=s(e,"if").call(c,null!=n?s(n,"active"):n,{name:"if",hash:{},fn:l.program(38,o,0),inverse:l.noop,data:o,loc:{start:{line:34,column:200},end:{line:34,column:234}}}))?t:"")+"]\n"},60:function(l,n,e,a,o){var t,r,c=null!=n?n:l.nullContext||{},u=l.hooks.helperMissing,i="function",s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "'+(null!=(t=typeof(r=null!=(r=s(e,"name")||(null!=n?s(n,"name"):n))?r:u)==i?r.call(c,{name:"name",hash:{},data:o,loc:{start:{line:37,column:3},end:{line:37,column:13}}}):r)?t:"")+'" [label= <\n <table align="center" cellborder="0" border="0">\n <tr><td cellpadding="0"><font '+(null!=(t=s(e,"if").call(c,null!=n?s(n,"color"):n,{name:"if",hash:{},fn:l.program(12,o,0),inverse:l.program(14,o,0),data:o,loc:{start:{line:39,column:38},end:{line:39,column:100}}}))?t:"")+'point-size="20">X</font></td></tr>\n <tr><td cellpadding="0"><font '+(null!=(t=s(e,"if").call(c,null!=n?s(n,"color"):n,{name:"if",hash:{},fn:l.program(34,o,0),inverse:l.program(36,o,0),data:o,loc:{start:{line:40,column:38},end:{line:40,column:98}}}))?t:"")+">"+l.escapeExpression(typeof(r=null!=(r=s(e,"label")||(null!=n?s(n,"label"):n))?r:u)==i?r.call(c,{name:"label",hash:{},data:o,loc:{start:{line:40,column:99},end:{line:40,column:108}}}):r)+'</font></td></tr>\n </table>\n > class="'+(null!=(t=typeof(r=null!=(r=s(e,"class")||(null!=n?s(n,"class"):n))?r:u)==i?r.call(c,{name:"class",hash:{},data:o,loc:{start:{line:42,column:13},end:{line:42,column:24}}}):r)?t:"")+'"]\n'},62:function(l,n,e,a,o){var t,r,c=null!=n?n:l.nullContext||{},u=l.hooks.helperMissing,i="function",s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "'+(null!=(t=typeof(r=null!=(r=s(e,"name")||(null!=n?s(n,"name"):n))?r:u)==i?r.call(c,{name:"name",hash:{},data:o,loc:{start:{line:45,column:3},end:{line:45,column:13}}}):r)?t:"")+'" [shape=circle style=filled class="'+(null!=(t=typeof(r=null!=(r=s(e,"class")||(null!=n?s(n,"class"):n))?r:u)==i?r.call(c,{name:"class",hash:{},data:o,loc:{start:{line:45,column:49},end:{line:45,column:60}}}):r)?t:"")+'" '+(null!=(t=s(e,"if").call(c,null!=n?s(n,"color"):n,{name:"if",hash:{},fn:l.program(5,o,0),inverse:l.program(7,o,0),data:o,loc:{start:{line:45,column:62},end:{line:45,column:166}}}))?t:"")+"fixedsize=true height=0.15 peripheries=2 "+(null!=(t=s(e,"if").call(c,null!=n?s(n,"active"):n,{name:"if",hash:{},fn:l.program(9,o,0),inverse:l.noop,data:o,loc:{start:{line:45,column:207},end:{line:45,column:241}}}))?t:"")+'label=""]\n'},64:function(l,n,e,a,o){var t=null!=n?n:l.nullContext||{},r=l.hooks.helperMissing,c="function",u=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},i=' subgraph "cluster_'+(null!=(p=typeof(s=null!=(s=u(e,"name")||(null!=n?u(n,"name"):n))?s:r)==c?s.call(t,{name:"name",hash:{},data:o,loc:{start:{line:48,column:20},end:{line:48,column:30}}}):s)?p:"")+'" {\n class="'+(null!=(p=typeof(s=null!=(s=u(e,"class")||(null!=n?u(n,"class"):n))?s:r)==c?s.call(t,{name:"class",hash:{},data:o,loc:{start:{line:49,column:11},end:{line:49,column:22}}}):s)?p:"")+'" '+(null!=(p=u(e,"if").call(t,null!=n?u(n,"color"):n,{name:"if",hash:{},fn:l.program(12,o,0),inverse:l.program(14,o,0),data:o,loc:{start:{line:49,column:24},end:{line:49,column:86}}}))?p:"")+'label= <\n <table cellborder="0" border="0">\n <tr><td>'+(null!=(p=u(e,"if").call(t,null!=n?u(n,"active"):n,{name:"if",hash:{},fn:l.program(22,o,0),inverse:l.program(24,o,0),data:o,loc:{start:{line:51,column:14},end:{line:51,column:68}}}))?p:"")+"</td></tr>\n",s=null!=(s=u(e,"actionStrings")||(null!=n?u(n,"actionStrings"):n))?s:r,m={name:"actionStrings",hash:{},fn:l.program(65,o,0),inverse:l.noop,data:o,loc:{start:{line:52,column:6},end:{line:55,column:24}}},p=typeof s==c?s.call(t,m):s;return null!=(p=u(e,"actionStrings")?p:l.hooks.blockHelperMissing.call(n,p,m))&&(i+=p),i+" </table>\n > "+(null!=(p=u(e,"if").call(t,null!=n?u(n,"parentIsParallel"):n,{name:"if",hash:{},fn:l.program(67,o,0),inverse:l.program(69,o,0),data:o,loc:{start:{line:57,column:6},end:{line:57,column:137}}}))?p:"")+'\n "'+(null!=(p=typeof(s=null!=(s=u(e,"name")||(null!=n?u(n,"name"):n))?s:r)==c?s.call(t,{name:"name",hash:{},data:o,loc:{start:{line:58,column:5},end:{line:58,column:15}}}):s)?p:"")+'" [shape=point style=invis margin=0 width=0 height=0 fixedsize=true]\n '+(null!=(p=(u(e,"stateSection")||n&&u(n,"stateSection")||r).call(t,null!=n?u(n,"statemachine"):n,{name:"stateSection",hash:{},fn:l.program(45,o,0),inverse:l.noop,data:o,loc:{start:{line:59,column:4},end:{line:59,column:51}}}))?p:"")+"\n }\n"},65:function(l,n,e,a,o){var t=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return" "+(null!=(e=t(e,"if").call(null!=n?n:l.nullContext||{},o&&t(o,"first"),{name:"if",hash:{},fn:l.program(27,o,0),inverse:l.noop,data:o,loc:{start:{line:53,column:8},end:{line:53,column:35}}}))?e:"")+'<tr><td align="left">'+l.escapeExpression(l.lambda(n,n))+"</td></tr>\n"},67:function(l,n,e,a,o){return"style=dashed penwidth=1.0"},69:function(l,n,e,a,o){var t=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return"style=rounded "+(null!=(e=t(e,"if").call(null!=n?n:l.nullContext||{},null!=n?t(n,"active"):n,{name:"if",hash:{},fn:l.program(70,o,0),inverse:l.program(72,o,0),data:o,loc:{start:{line:57,column:77},end:{line:57,column:130}}}))?e:"")},70:function(l,n,e,a,o){return"penwidth=3.0"},72:function(l,n,e,a,o){return"penwidth=2.0"},74:function(l,n,e,a,o,t,r){var c=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},u="",i=null!=(i=c(e,"noteName")||(null!=n?c(n,"noteName"):n))?i:l.hooks.helperMissing,t={name:"noteName",hash:{},fn:l.program(75,o,0,t,r),inverse:l.noop,data:o,loc:{start:{line:63,column:4},end:{line:66,column:17}}},r="function"==typeof i?i.call(null!=n?n:l.nullContext||{},t):i;return null!=(r=c(e,"noteName")?r:l.hooks.blockHelperMissing.call(n,r,t))&&(u+=r),u},75:function(l,n,e,a,o,t,r){var c,u=l.lambda,l=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "'+(null!=(c=u(n,n))?c:"")+'" [color=black fontcolor=black label="'+(null!=(c=u(null!=r[1]?l(r[1],"noteFlattened"):r[1],n))?c:"")+'" shape=note fontsize=10 fillcolor="#ffffcc" penwidth=1.0]\n "'+(null!=(c=u(null!=r[1]?l(r[1],"name"):r[1],n))?c:"")+'" -> "'+(null!=(c=u(n,n))?c:"")+'" [style=dashed arrowtail=none arrowhead=none]\n'},compiler:[8,">= 4.3.0"],main:function(l,n,e,a,o,t,r){var c=null!=n?n:l.nullContext||{},u=l.hooks.helperMissing,i="function",s=l.hooks.blockHelperMissing,m=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},p="",f=null!=(f=m(e,"compositeStates")||(null!=n?m(n,"compositeStates"):n))?f:u,h={name:"compositeStates",hash:{},fn:l.program(1,o,0,t,r),inverse:l.noop,data:o,loc:{start:{line:1,column:0},end:{line:5,column:20}}},d=typeof f==i?f.call(c,h):f;return null!=(d=m(e,"compositeStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"initialStates")||(null!=n?m(n,"initialStates"):n))?f:u,h={name:"initialStates",hash:{},fn:l.program(4,o,0,t,r),inverse:l.noop,data:o,loc:{start:{line:6,column:0},end:{line:8,column:18}}},d=typeof f==i?f.call(c,h):f,null!=(d=m(e,"initialStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"regularStates")||(null!=n?m(n,"regularStates"):n))?f:u,h={name:"regularStates",hash:{},fn:l.program(11,o,0,t,r),inverse:l.noop,data:o,loc:{start:{line:9,column:0},end:{line:19,column:18}}},d=typeof f==i?f.call(c,h):f,null!=(d=m(e,"regularStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"historyStates")||(null!=n?m(n,"historyStates"):n))?f:u,h={name:"historyStates",hash:{},fn:l.program(29,o,0,t,r),inverse:l.noop,data:o,loc:{start:{line:20,column:0},end:{line:22,column:18}}},d=typeof f==i?f.call(c,h):f,null!=(d=m(e,"historyStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"deepHistoryStates")||(null!=n?m(n,"deepHistoryStates"):n))?f:u,h={name:"deepHistoryStates",hash:{},fn:l.program(31,o,0,t,r),inverse:l.noop,data:o,loc:{start:{line:23,column:0},end:{line:25,column:22}}},d=typeof f==i?f.call(c,h):f,null!=(d=m(e,"deepHistoryStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"choiceStates")||(null!=n?m(n,"choiceStates"):n))?f:u,h={name:"choiceStates",hash:{},fn:l.program(33,o,0,t,r),inverse:l.noop,data:o,loc:{start:{line:26,column:0},end:{line:29,column:17}}},d=typeof f==i?f.call(c,h):f,null!=(d=m(e,"choiceStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"forkjoinStates")||(null!=n?m(n,"forkjoinStates"):n))?f:u,h={name:"forkjoinStates",hash:{},fn:l.program(53,o,0,t,r),inverse:l.noop,data:o,loc:{start:{line:30,column:0},end:{line:32,column:19}}},d=typeof f==i?f.call(c,h):f,null!=(d=m(e,"forkjoinStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"junctionStates")||(null!=n?m(n,"junctionStates"):n))?f:u,h={name:"junctionStates",hash:{},fn:l.program(58,o,0,t,r),inverse:l.noop,data:o,loc:{start:{line:33,column:0},end:{line:35,column:19}}},d=typeof f==i?f.call(c,h):f,null!=(d=m(e,"junctionStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"terminateStates")||(null!=n?m(n,"terminateStates"):n))?f:u,h={name:"terminateStates",hash:{},fn:l.program(60,o,0,t,r),inverse:l.noop,data:o,loc:{start:{line:36,column:0},end:{line:43,column:20}}},d=typeof f==i?f.call(c,h):f,null!=(d=m(e,"terminateStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"finalStates")||(null!=n?m(n,"finalStates"):n))?f:u,h={name:"finalStates",hash:{},fn:l.program(62,o,0,t,r),inverse:l.noop,data:o,loc:{start:{line:44,column:0},end:{line:46,column:16}}},d=typeof f==i?f.call(c,h):f,null!=(d=m(e,"finalStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"compositeStates")||(null!=n?m(n,"compositeStates"):n))?f:u,h={name:"compositeStates",hash:{},fn:l.program(64,o,0,t,r),inverse:l.noop,data:o,loc:{start:{line:47,column:0},end:{line:61,column:20}}},d=typeof f==i?f.call(c,h):f,null!=(d=m(e,"compositeStates")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(e,"states")||(null!=n?m(n,"states"):n))?f:u,h={name:"states",hash:{},fn:l.program(74,o,0,t,r),inverse:l.noop,data:o,loc:{start:{line:62,column:0},end:{line:67,column:11}}},d=typeof f==i?f.call(c,h):f,null!=(d=m(e,"states")?d:s.call(n,d,h))&&(p+=d),p},useData:!0,useDepths:!0});
@@ -1 +1 @@
1
- var Handlebars=require("handlebars/dist/handlebars.runtime"),template=Handlebars.template,templates=Handlebars.templates=Handlebars.templates||{};templates["dot.template.hbs"]=template({1:function(l,n,o,e,a,t,r){var u=null!=n?n:l.nullContext||{},c=l.hooks.helperMissing,s="function",i=l.hooks.blockHelperMissing,m=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},p="",f=null!=(f=m(o,"noteName")||(null!=n?m(n,"noteName"):n))?f:c,h={name:"noteName",hash:{},fn:l.noop,inverse:l.program(2,a,0,t,r),data:a,loc:{start:{line:9,column:2},end:{line:26,column:15}}},d=typeof f==s?f.call(u,h):f;return null!=(d=m(o,"noteName")?d:i.call(n,d,h))&&(p+=d),f=null!=(f=m(o,"noteName")||(null!=n?m(n,"noteName"):n))?f:c,h={name:"noteName",hash:{},fn:l.program(19,a,0,t,r),inverse:l.noop,data:a,loc:{start:{line:27,column:2},end:{line:37,column:15}}},d=typeof f==s?f.call(u,h):f,null!=(d=m(o,"noteName")?d:i.call(n,d,h))&&(p+=d),p},2:function(l,n,o,e,a){var t=null!=n?n:l.nullContext||{},r=l.hooks.helperMissing,u="function",c=l.hooks.blockHelperMissing,s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},i="",m=null!=(m=s(o,"isCompositeSelf")||(null!=n?s(n,"isCompositeSelf"):n))?m:r,p={name:"isCompositeSelf",hash:{},fn:l.noop,inverse:l.program(3,a,0),data:a,loc:{start:{line:10,column:4},end:{line:16,column:24}}},f=typeof m==u?m.call(t,p):m;return null!=(f=s(o,"isCompositeSelf")?f:c.call(n,f,p))&&(i+=f),m=null!=(m=s(o,"isCompositeSelf")||(null!=n?s(n,"isCompositeSelf"):n))?m:r,p={name:"isCompositeSelf",hash:{},fn:l.program(14,a,0),inverse:l.noop,data:a,loc:{start:{line:17,column:4},end:{line:25,column:24}}},f=typeof m==u?m.call(t,p):m,null!=(f=s(o,"isCompositeSelf")?f:c.call(n,f,p))&&(i+=f),i},3:function(l,n,o,e,a){var t=null!=n?n:l.nullContext||{},r=l.hooks.helperMissing,u="function",c=l.hooks.blockHelperMissing,s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},i=' "'+(null!=(f=typeof(m=null!=(m=s(o,"from")||(null!=n?s(n,"from"):n))?m:r)==u?m.call(t,{name:"from",hash:{},data:a,loc:{start:{line:11,column:5},end:{line:11,column:15}}}):m)?f:"")+'" -> "'+(null!=(f=typeof(m=null!=(m=s(o,"to")||(null!=n?s(n,"to"):n))?m:r)==u?m.call(t,{name:"to",hash:{},data:a,loc:{start:{line:11,column:21},end:{line:11,column:29}}}):m)?f:"")+'" [label="',m=null!=(m=s(o,"label")||(null!=n?s(n,"label"):n))?m:r,p={name:"label",hash:{},fn:l.noop,inverse:l.program(4,a,0),data:a,loc:{start:{line:11,column:39},end:{line:11,column:60}}},f=typeof m==u?m.call(t,p):m;return null!=(f=s(o,"label")?f:c.call(n,f,p))&&(i+=f),i+=(null!=(f=typeof(m=null!=(m=s(o,"label")||(null!=n?s(n,"label"):n))?m:r)==u?m.call(t,{name:"label",hash:{},data:a,loc:{start:{line:11,column:60},end:{line:11,column:71}}}):m)?f:"")+'"',m=null!=(m=s(o,"fromComposite")||(null!=n?s(n,"fromComposite"):n))?m:r,p={name:"fromComposite",hash:{},fn:l.program(6,a,0),inverse:l.noop,data:a,loc:{start:{line:12,column:28},end:{line:12,column:92}}},f=typeof m==u?m.call(t,p):m,null!=(f=s(o,"fromComposite")?f:c.call(n,f,p))&&(i+=f),m=null!=(m=s(o,"toComposite")||(null!=n?s(n,"toComposite"):n))?m:r,p={name:"toComposite",hash:{},fn:l.program(8,a,0),inverse:l.noop,data:a,loc:{start:{line:13,column:28},end:{line:13,column:86}}},f=typeof m==u?m.call(t,p):m,null!=(f=s(o,"toComposite")?f:c.call(n,f,p))&&(i+=f),m=null!=(m=s(o,"color")||(null!=n?s(n,"color"):n))?m:r,p={name:"color",hash:{},fn:l.program(10,a,0),inverse:l.noop,data:a,loc:{start:{line:14,column:28},end:{line:14,column:85}}},f=typeof m==u?m.call(t,p):m,null!=(f=s(o,"color")?f:c.call(n,f,p))&&(i+=f),m=null!=(m=s(o,"width")||(null!=n?s(n,"width"):n))?m:r,p={name:"width",hash:{},fn:l.program(12,a,0),inverse:l.noop,data:a,loc:{start:{line:15,column:28},end:{line:15,column:68}}},f=typeof m==u?m.call(t,p):m,null!=(f=s(o,"width")?f:c.call(n,f,p))&&(i+=f),i+' class="'+(null!=(f=typeof(m=null!=(m=s(o,"class")||(null!=n?s(n,"class"):n))?m:r)==u?m.call(t,{name:"class",hash:{},data:a,loc:{start:{line:15,column:76},end:{line:15,column:87}}}):m)?f:"")+'"]\n'},4:function(l,n,o,e,a){return" "},6:function(l,n,o,e,a){var t=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' ltail="cluster_'+(null!=(t="function"==typeof(o=null!=(o=t(o,"from")||(null!=n?t(n,"from"):n))?o:l.hooks.helperMissing)?o.call(null!=n?n:l.nullContext||{},{name:"from",hash:{},data:a,loc:{start:{line:12,column:63},end:{line:12,column:73}}}):o)?t:"")+'"'},8:function(l,n,o,e,a){var t=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' lhead="cluster_'+(null!=(t="function"==typeof(o=null!=(o=t(o,"to")||(null!=n?t(n,"to"):n))?o:l.hooks.helperMissing)?o.call(null!=n?n:l.nullContext||{},{name:"to",hash:{},data:a,loc:{start:{line:13,column:61},end:{line:13,column:69}}}):o)?t:"")+'"'},10:function(l,n,o,e,a){var t,l=l.lambda;return' color="'+(null!=(t=l(n,n))?t:"")+'" fontcolor="'+(null!=(t=l(n,n))?t:"")+'"'},12:function(l,n,o,e,a){return' penwidth="'+(null!=(l=l.lambda(n,n))?l:"")+'"'},14:function(l,n,o,e,a){var t=null!=n?n:l.nullContext||{},r=l.hooks.helperMissing,u="function",c=l.hooks.blockHelperMissing,s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},i=' "'+(null!=(f=typeof(m=null!=(m=s(o,"from")||(null!=n?s(n,"from"):n))?m:r)==u?m.call(t,{name:"from",hash:{},data:a,loc:{start:{line:18,column:7},end:{line:18,column:17}}}):m)?f:"")+'" -> "self_'+(null!=(f=typeof(m=null!=(m=s(o,"name")||(null!=n?s(n,"name"):n))?m:r)==u?m.call(t,{name:"name",hash:{},data:a,loc:{start:{line:18,column:28},end:{line:18,column:38}}}):m)?f:"")+'" [label="',m=null!=(m=s(o,"label")||(null!=n?s(n,"label"):n))?m:r,p={name:"label",hash:{},fn:l.noop,inverse:l.program(4,a,0),data:a,loc:{start:{line:18,column:48},end:{line:18,column:69}}},f=typeof m==u?m.call(t,p):m;return null!=(f=s(o,"label")?f:c.call(n,f,p))&&(i+=f),i+=(null!=(f=typeof(m=null!=(m=s(o,"label")||(null!=n?s(n,"label"):n))?m:r)==u?m.call(t,{name:"label",hash:{},data:a,loc:{start:{line:18,column:69},end:{line:18,column:80}}}):m)?f:"")+'" arrowhead=none',m=null!=(m=s(o,"tailportflags")||(null!=n?s(n,"tailportflags"):n))?m:r,p={name:"tailportflags",hash:{},fn:l.program(15,a,0),inverse:l.noop,data:a,loc:{start:{line:19,column:28},end:{line:19,column:73}}},f=typeof m==u?m.call(t,p):m,null!=(f=s(o,"tailportflags")?f:c.call(n,f,p))&&(i+=f),i+=' ltail="cluster_'+(null!=(f=typeof(m=null!=(m=s(o,"from")||(null!=n?s(n,"from"):n))?m:r)==u?m.call(t,{name:"from",hash:{},data:a,loc:{start:{line:19,column:89},end:{line:19,column:99}}}):m)?f:"")+'"',m=null!=(m=s(o,"color")||(null!=n?s(n,"color"):n))?m:r,p={name:"color",hash:{},fn:l.program(10,a,0),inverse:l.noop,data:a,loc:{start:{line:20,column:28},end:{line:20,column:85}}},f=typeof m==u?m.call(t,p):m,null!=(f=s(o,"color")?f:c.call(n,f,p))&&(i+=f),i+=' class="'+(null!=(f=typeof(m=null!=(m=s(o,"class")||(null!=n?s(n,"class"):n))?m:r)==u?m.call(t,{name:"class",hash:{},data:a,loc:{start:{line:20,column:93},end:{line:20,column:104}}}):m)?f:"")+'"]\n "self_'+(null!=(f=typeof(m=null!=(m=s(o,"name")||(null!=n?s(n,"name"):n))?m:r)==u?m.call(t,{name:"name",hash:{},data:a,loc:{start:{line:21,column:12},end:{line:21,column:22}}}):m)?f:"")+'" -> "'+(null!=(f=typeof(m=null!=(m=s(o,"from")||(null!=n?s(n,"from"):n))?m:r)==u?m.call(t,{name:"from",hash:{},data:a,loc:{start:{line:21,column:28},end:{line:21,column:38}}}):m)?f:"")+'" [lhead="cluster_'+(null!=(f=typeof(m=null!=(m=s(o,"from")||(null!=n?s(n,"from"):n))?m:r)==u?m.call(t,{name:"from",hash:{},data:a,loc:{start:{line:21,column:56},end:{line:21,column:66}}}):m)?f:"")+'"',m=null!=(m=s(o,"headportflags")||(null!=n?s(n,"headportflags"):n))?m:r,p={name:"headportflags",hash:{},fn:l.program(15,a,0),inverse:l.noop,data:a,loc:{start:{line:22,column:28},end:{line:22,column:73}}},f=typeof m==u?m.call(t,p):m,null!=(f=s(o,"headportflags")?f:c.call(n,f,p))&&(i+=f),m=null!=(m=s(o,"color")||(null!=n?s(n,"color"):n))?m:r,p={name:"color",hash:{},fn:l.program(17,a,0),inverse:l.noop,data:a,loc:{start:{line:23,column:28},end:{line:23,column:65}}},f=typeof m==u?m.call(t,p):m,null!=(f=s(o,"color")?f:c.call(n,f,p))&&(i+=f),m=null!=(m=s(o,"width")||(null!=n?s(n,"width"):n))?m:r,p={name:"width",hash:{},fn:l.program(12,a,0),inverse:l.noop,data:a,loc:{start:{line:24,column:28},end:{line:24,column:68}}},f=typeof m==u?m.call(t,p):m,null!=(f=s(o,"width")?f:c.call(n,f,p))&&(i+=f),i+' class="'+(null!=(f=typeof(m=null!=(m=s(o,"class")||(null!=n?s(n,"class"):n))?m:r)==u?m.call(t,{name:"class",hash:{},data:a,loc:{start:{line:24,column:76},end:{line:24,column:87}}}):m)?f:"")+'"]\n'},15:function(l,n,o,e,a){return" "+(null!=(l=l.lambda(n,n))?l:"")},17:function(l,n,o,e,a){return' color="'+(null!=(l=l.lambda(n,n))?l:"")+'"'},19:function(l,n,o,e,a,t,r){var u,c=l.lambda,s=l.hooks.blockHelperMissing,i=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "i_'+(null!=(u=c(n,n))?u:"")+'" [shape=point style=invis margin=0 width=0 height=0 fixedsize=true]\n "'+(null!=(u=c(null!=r[1]?i(r[1],"from"):r[1],n))?u:"")+'" -> "i_'+(null!=(u=c(n,n))?u:"")+'" [arrowhead=none'+(null!=(u=s.call(n,c(null!=r[1]?i(r[1],"fromComposite"):r[1],n),{name:"../fromComposite",hash:{},fn:l.program(20,a,0,t,r),inverse:l.noop,data:a,loc:{start:{line:30,column:32},end:{line:30,column:105}}}))?u:"")+(null!=(u=s.call(n,c(null!=r[1]?i(r[1],"color"):r[1],n),{name:"../color",hash:{},fn:l.program(17,a,0,t,r),inverse:l.noop,data:a,loc:{start:{line:31,column:32},end:{line:31,column:75}}}))?u:"")+']\n "i_'+(null!=(u=c(n,n))?u:"")+'" -> "'+(null!=(u=c(null!=r[1]?i(r[1],"to"):r[1],n))?u:"")+'" [label="'+(null!=(u=s.call(n,c(null!=r[1]?i(r[1],"label"):r[1],n),{name:"../label",hash:{},fn:l.noop,inverse:l.program(4,a,0,t,r),data:a,loc:{start:{line:32,column:43},end:{line:32,column:70}}}))?u:"")+(null!=(u=c(null!=r[1]?i(r[1],"label"):r[1],n))?u:"")+'"'+(null!=(u=s.call(n,c(null!=r[1]?i(r[1],"toComposite"):r[1],n),{name:"../toComposite",hash:{},fn:l.program(22,a,0,t,r),inverse:l.noop,data:a,loc:{start:{line:33,column:32},end:{line:33,column:99}}}))?u:"")+(null!=(u=s.call(n,c(null!=r[1]?i(r[1],"color"):r[1],n),{name:"../color",hash:{},fn:l.program(10,a,0,t,r),inverse:l.noop,data:a,loc:{start:{line:34,column:32},end:{line:34,column:95}}}))?u:"")+']\n "i_'+(null!=(u=c(n,n))?u:"")+'" -> "'+(null!=(u=c(n,n))?u:"")+'" [style=dashed arrowtail=none arrowhead=none weight=0]\n "'+(null!=(u=c(n,n))?u:"")+'" [label="'+(null!=(u=c(null!=r[1]?i(r[1],"noteFlattened"):r[1],n))?u:"")+'" shape=note fontsize=10 color=black fontcolor=black fillcolor="#ffffcc" penwidth=1.0]\n'},20:function(l,n,o,e,a,t,r){var u=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' ltail="cluster_'+(null!=(l=l.lambda(null!=r[1]?u(r[1],"from"):r[1],n))?l:"")+'"'},22:function(l,n,o,e,a,t,r){var u=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' lhead="cluster_'+(null!=(l=l.lambda(null!=r[1]?u(r[1],"to"):r[1],n))?l:"")+'"'},compiler:[8,">= 4.3.0"],main:function(l,n,o,e,a,t,r){var u=null!=n?n:l.nullContext||{},c=l.hooks.helperMissing,s="function",i=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},e='digraph "state transitions" {\n '+(null!=(p=typeof(m=null!=(m=i(o,"graphAttributes")||(null!=n?i(n,"graphAttributes"):n))?m:c)==s?m.call(u,{name:"graphAttributes",hash:{},data:a,loc:{start:{line:2,column:2},end:{line:2,column:23}}}):m)?p:"")+"\n node ["+(null!=(p=typeof(m=null!=(m=i(o,"nodeAttributes")||(null!=n?i(n,"nodeAttributes"):n))?m:c)==s?m.call(u,{name:"nodeAttributes",hash:{},data:a,loc:{start:{line:3,column:8},end:{line:3,column:28}}}):m)?p:"")+"]\n edge ["+(null!=(p=typeof(m=null!=(m=i(o,"edgeAttributes")||(null!=n?i(n,"edgeAttributes"):n))?m:c)==s?m.call(u,{name:"edgeAttributes",hash:{},data:a,loc:{start:{line:4,column:8},end:{line:4,column:28}}}):m)?p:"")+"]\n\n"+(null!=(p=l.invokePartial(i(e,"dot.states.template.hbs"),n,{name:"dot.states.template.hbs",data:a,indent:" ",helpers:o,partials:e,decorators:l.decorators}))?p:"")+"\n",m=null!=(m=i(o,"transitions")||(null!=n?i(n,"transitions"):n))?m:c,c={name:"transitions",hash:{},fn:l.program(1,a,0,t,r),inverse:l.noop,data:a,loc:{start:{line:8,column:2},end:{line:38,column:18}}},p=typeof m==s?m.call(u,c):m;return null!=(p=i(o,"transitions")?p:l.hooks.blockHelperMissing.call(n,p,c))&&(e+=p),e+"}\n"},usePartial:!0,useData:!0,useDepths:!0});
1
+ var Handlebars=require("handlebars/dist/handlebars.runtime"),template=Handlebars.template,templates=Handlebars.templates=Handlebars.templates||{};templates["dot.template.hbs"]=template({1:function(l,n,o,e,t,a,r){var u=null!=n?n:l.nullContext||{},c=l.hooks.helperMissing,i="function",s=l.hooks.blockHelperMissing,m=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},p="",f=null!=(f=m(o,"noteName")||(null!=n?m(n,"noteName"):n))?f:c,h={name:"noteName",hash:{},fn:l.noop,inverse:l.program(2,t,0,a,r),data:t,loc:{start:{line:9,column:2},end:{line:26,column:15}}},d=typeof f==i?f.call(u,h):f;return null!=(d=m(o,"noteName")?d:s.call(n,d,h))&&(p+=d),f=null!=(f=m(o,"noteName")||(null!=n?m(n,"noteName"):n))?f:c,h={name:"noteName",hash:{},fn:l.program(23,t,0,a,r),inverse:l.noop,data:t,loc:{start:{line:27,column:2},end:{line:37,column:15}}},d=typeof f==i?f.call(u,h):f,null!=(d=m(o,"noteName")?d:s.call(n,d,h))&&(p+=d),p},2:function(l,n,o,e,t){var a=null!=n?n:l.nullContext||{},r=l.hooks.helperMissing,u="function",c=l.hooks.blockHelperMissing,i=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},s="",m=null!=(m=i(o,"isCompositeSelf")||(null!=n?i(n,"isCompositeSelf"):n))?m:r,p={name:"isCompositeSelf",hash:{},fn:l.noop,inverse:l.program(3,t,0),data:t,loc:{start:{line:10,column:4},end:{line:16,column:24}}},f=typeof m==u?m.call(a,p):m;return null!=(f=i(o,"isCompositeSelf")?f:c.call(n,f,p))&&(s+=f),m=null!=(m=i(o,"isCompositeSelf")||(null!=n?i(n,"isCompositeSelf"):n))?m:r,p={name:"isCompositeSelf",hash:{},fn:l.program(16,t,0),inverse:l.noop,data:t,loc:{start:{line:17,column:4},end:{line:25,column:24}}},f=typeof m==u?m.call(a,p):m,null!=(f=i(o,"isCompositeSelf")?f:c.call(n,f,p))&&(s+=f),s},3:function(l,n,o,e,t){var a=null!=n?n:l.nullContext||{},r=l.hooks.helperMissing,u="function",c=l.hooks.blockHelperMissing,i=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},s=' "'+(null!=(f=typeof(m=null!=(m=i(o,"from")||(null!=n?i(n,"from"):n))?m:r)==u?m.call(a,{name:"from",hash:{},data:t,loc:{start:{line:11,column:5},end:{line:11,column:15}}}):m)?f:"")+'" -> "'+(null!=(f=typeof(m=null!=(m=i(o,"to")||(null!=n?i(n,"to"):n))?m:r)==u?m.call(a,{name:"to",hash:{},data:t,loc:{start:{line:11,column:21},end:{line:11,column:29}}}):m)?f:"")+'" [label="',m=null!=(m=i(o,"label")||(null!=n?i(n,"label"):n))?m:r,p={name:"label",hash:{},fn:l.noop,inverse:l.program(4,t,0),data:t,loc:{start:{line:11,column:39},end:{line:11,column:60}}},f=typeof m==u?m.call(a,p):m;return null!=(f=i(o,"label")?f:c.call(n,f,p))&&(s+=f),s+=(null!=(f=typeof(m=null!=(m=i(o,"label")||(null!=n?i(n,"label"):n))?m:r)==u?m.call(a,{name:"label",hash:{},data:t,loc:{start:{line:11,column:60},end:{line:11,column:71}}}):m)?f:"")+'"',m=null!=(m=i(o,"fromComposite")||(null!=n?i(n,"fromComposite"):n))?m:r,p={name:"fromComposite",hash:{},fn:l.program(6,t,0),inverse:l.noop,data:t,loc:{start:{line:12,column:28},end:{line:12,column:92}}},f=typeof m==u?m.call(a,p):m,null!=(f=i(o,"fromComposite")?f:c.call(n,f,p))&&(s+=f),m=null!=(m=i(o,"toComposite")||(null!=n?i(n,"toComposite"):n))?m:r,p={name:"toComposite",hash:{},fn:l.program(8,t,0),inverse:l.noop,data:t,loc:{start:{line:13,column:28},end:{line:13,column:86}}},f=typeof m==u?m.call(a,p):m,null!=(f=i(o,"toComposite")?f:c.call(n,f,p))&&(s+=f),s+=null!=(f=i(o,"if").call(a,null!=n?i(n,"color"):n,{name:"if",hash:{},fn:l.program(10,t,0),inverse:l.program(12,t,0),data:t,loc:{start:{line:14,column:28},end:{line:14,column:133}}}))?f:"",m=null!=(m=i(o,"width")||(null!=n?i(n,"width"):n))?m:r,p={name:"width",hash:{},fn:l.program(14,t,0),inverse:l.noop,data:t,loc:{start:{line:15,column:28},end:{line:15,column:68}}},f=typeof m==u?m.call(a,p):m,null!=(f=i(o,"width")?f:c.call(n,f,p))&&(s+=f),s+' class="'+(null!=(f=typeof(m=null!=(m=i(o,"class")||(null!=n?i(n,"class"):n))?m:r)==u?m.call(a,{name:"class",hash:{},data:t,loc:{start:{line:15,column:76},end:{line:15,column:87}}}):m)?f:"")+'"]\n'},4:function(l,n,o,e,t){return" "},6:function(l,n,o,e,t){var a=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' ltail="cluster_'+(null!=(a="function"==typeof(o=null!=(o=a(o,"from")||(null!=n?a(n,"from"):n))?o:l.hooks.helperMissing)?o.call(null!=n?n:l.nullContext||{},{name:"from",hash:{},data:t,loc:{start:{line:12,column:63},end:{line:12,column:73}}}):o)?a:"")+'"'},8:function(l,n,o,e,t){var a=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' lhead="cluster_'+(null!=(a="function"==typeof(o=null!=(o=a(o,"to")||(null!=n?a(n,"to"):n))?o:l.hooks.helperMissing)?o.call(null!=n?n:l.nullContext||{},{name:"to",hash:{},data:t,loc:{start:{line:13,column:61},end:{line:13,column:69}}}):o)?a:"")+'"'},10:function(l,n,o,e,t){var a,r,u=null!=n?n:l.nullContext||{},c=l.hooks.helperMissing,i="function",l=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' color="'+(null!=(a=typeof(r=null!=(r=l(o,"color")||(null!=n?l(n,"color"):n))?r:c)==i?r.call(u,{name:"color",hash:{},data:t,loc:{start:{line:14,column:50},end:{line:14,column:61}}}):r)?a:"")+'" fontcolor="'+(null!=(a=typeof(r=null!=(r=l(o,"color")||(null!=n?l(n,"color"):n))?r:c)==i?r.call(u,{name:"color",hash:{},data:t,loc:{start:{line:14,column:74},end:{line:14,column:85}}}):r)?a:"")+'"'},12:function(l,n,o,e,t){return' color="black" fontcolor="black"'},14:function(l,n,o,e,t){return' penwidth="'+(null!=(l=l.lambda(n,n))?l:"")+'"'},16:function(l,n,o,e,t){var a=null!=n?n:l.nullContext||{},r=l.hooks.helperMissing,u="function",c=l.hooks.blockHelperMissing,i=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},s=' "'+(null!=(f=typeof(m=null!=(m=i(o,"from")||(null!=n?i(n,"from"):n))?m:r)==u?m.call(a,{name:"from",hash:{},data:t,loc:{start:{line:18,column:7},end:{line:18,column:17}}}):m)?f:"")+'" -> "self_'+(null!=(f=typeof(m=null!=(m=i(o,"name")||(null!=n?i(n,"name"):n))?m:r)==u?m.call(a,{name:"name",hash:{},data:t,loc:{start:{line:18,column:28},end:{line:18,column:38}}}):m)?f:"")+'" [label="',m=null!=(m=i(o,"label")||(null!=n?i(n,"label"):n))?m:r,p={name:"label",hash:{},fn:l.noop,inverse:l.program(4,t,0),data:t,loc:{start:{line:18,column:48},end:{line:18,column:69}}},f=typeof m==u?m.call(a,p):m;return null!=(f=i(o,"label")?f:c.call(n,f,p))&&(s+=f),s+=(null!=(f=typeof(m=null!=(m=i(o,"label")||(null!=n?i(n,"label"):n))?m:r)==u?m.call(a,{name:"label",hash:{},data:t,loc:{start:{line:18,column:69},end:{line:18,column:80}}}):m)?f:"")+'" arrowhead=none',m=null!=(m=i(o,"tailportflags")||(null!=n?i(n,"tailportflags"):n))?m:r,p={name:"tailportflags",hash:{},fn:l.program(17,t,0),inverse:l.noop,data:t,loc:{start:{line:19,column:28},end:{line:19,column:73}}},f=typeof m==u?m.call(a,p):m,null!=(f=i(o,"tailportflags")?f:c.call(n,f,p))&&(s+=f),s+=' ltail="cluster_'+(null!=(f=typeof(m=null!=(m=i(o,"from")||(null!=n?i(n,"from"):n))?m:r)==u?m.call(a,{name:"from",hash:{},data:t,loc:{start:{line:19,column:89},end:{line:19,column:99}}}):m)?f:"")+'"'+(null!=(f=i(o,"if").call(a,null!=n?i(n,"color"):n,{name:"if",hash:{},fn:l.program(10,t,0),inverse:l.program(12,t,0),data:t,loc:{start:{line:20,column:28},end:{line:20,column:133}}}))?f:"")+' class="'+(null!=(f=typeof(m=null!=(m=i(o,"class")||(null!=n?i(n,"class"):n))?m:r)==u?m.call(a,{name:"class",hash:{},data:t,loc:{start:{line:20,column:141},end:{line:20,column:152}}}):m)?f:"")+'"]\n "self_'+(null!=(f=typeof(m=null!=(m=i(o,"name")||(null!=n?i(n,"name"):n))?m:r)==u?m.call(a,{name:"name",hash:{},data:t,loc:{start:{line:21,column:12},end:{line:21,column:22}}}):m)?f:"")+'" -> "'+(null!=(f=typeof(m=null!=(m=i(o,"from")||(null!=n?i(n,"from"):n))?m:r)==u?m.call(a,{name:"from",hash:{},data:t,loc:{start:{line:21,column:28},end:{line:21,column:38}}}):m)?f:"")+'" [lhead="cluster_'+(null!=(f=typeof(m=null!=(m=i(o,"from")||(null!=n?i(n,"from"):n))?m:r)==u?m.call(a,{name:"from",hash:{},data:t,loc:{start:{line:21,column:56},end:{line:21,column:66}}}):m)?f:"")+'"',m=null!=(m=i(o,"headportflags")||(null!=n?i(n,"headportflags"):n))?m:r,p={name:"headportflags",hash:{},fn:l.program(17,t,0),inverse:l.noop,data:t,loc:{start:{line:22,column:28},end:{line:22,column:73}}},f=typeof m==u?m.call(a,p):m,null!=(f=i(o,"headportflags")?f:c.call(n,f,p))&&(s+=f),s+=null!=(f=i(o,"if").call(a,null!=n?i(n,"color"):n,{name:"if",hash:{},fn:l.program(19,t,0),inverse:l.program(21,t,0),data:t,loc:{start:{line:23,column:28},end:{line:23,column:91}}}))?f:"",m=null!=(m=i(o,"width")||(null!=n?i(n,"width"):n))?m:r,p={name:"width",hash:{},fn:l.program(14,t,0),inverse:l.noop,data:t,loc:{start:{line:24,column:28},end:{line:24,column:68}}},f=typeof m==u?m.call(a,p):m,null!=(f=i(o,"width")?f:c.call(n,f,p))&&(s+=f),s+' class="'+(null!=(f=typeof(m=null!=(m=i(o,"class")||(null!=n?i(n,"class"):n))?m:r)==u?m.call(a,{name:"class",hash:{},data:t,loc:{start:{line:24,column:76},end:{line:24,column:87}}}):m)?f:"")+'"]\n'},17:function(l,n,o,e,t){return" "+(null!=(l=l.lambda(n,n))?l:"")},19:function(l,n,o,e,t){var a=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' color="'+(null!=(a="function"==typeof(o=null!=(o=a(o,"color")||(null!=n?a(n,"color"):n))?o:l.hooks.helperMissing)?o.call(null!=n?n:l.nullContext||{},{name:"color",hash:{},data:t,loc:{start:{line:23,column:50},end:{line:23,column:61}}}):o)?a:"")+'"'},21:function(l,n,o,e,t){return' color="black"'},23:function(l,n,o,e,t,a,r){var u,c=l.lambda,i=l.hooks.blockHelperMissing,s=null!=n?n:l.nullContext||{},m=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "i_'+(null!=(u=c(n,n))?u:"")+'" [shape=point style=invis margin=0 width=0 height=0 fixedsize=true]\n "'+(null!=(u=c(null!=r[1]?m(r[1],"from"):r[1],n))?u:"")+'" -> "i_'+(null!=(u=c(n,n))?u:"")+'" [arrowhead=none'+(null!=(u=i.call(n,c(null!=r[1]?m(r[1],"fromComposite"):r[1],n),{name:"../fromComposite",hash:{},fn:l.program(24,t,0,a,r),inverse:l.noop,data:t,loc:{start:{line:30,column:32},end:{line:30,column:105}}}))?u:"")+(null!=(u=m(o,"if").call(s,null!=r[1]?m(r[1],"color"):r[1],{name:"if",hash:{},fn:l.program(26,t,0,a,r),inverse:l.program(21,t,0,a,r),data:t,loc:{start:{line:31,column:32},end:{line:31,column:101}}}))?u:"")+']\n "i_'+(null!=(u=c(n,n))?u:"")+'" -> "'+(null!=(u=c(null!=r[1]?m(r[1],"to"):r[1],n))?u:"")+'" [label="'+(null!=(u=i.call(n,c(null!=r[1]?m(r[1],"label"):r[1],n),{name:"../label",hash:{},fn:l.noop,inverse:l.program(4,t,0,a,r),data:t,loc:{start:{line:32,column:43},end:{line:32,column:70}}}))?u:"")+(null!=(u=c(null!=r[1]?m(r[1],"label"):r[1],n))?u:"")+'"'+(null!=(u=i.call(n,c(null!=r[1]?m(r[1],"toComposite"):r[1],n),{name:"../toComposite",hash:{},fn:l.program(28,t,0,a,r),inverse:l.noop,data:t,loc:{start:{line:33,column:32},end:{line:33,column:99}}}))?u:"")+(null!=(u=m(o,"if").call(s,null!=r[1]?m(r[1],"color"):r[1],{name:"if",hash:{},fn:l.program(30,t,0,a,r),inverse:l.program(12,t,0,a,r),data:t,loc:{start:{line:34,column:32},end:{line:34,column:146}}}))?u:"")+']\n "i_'+(null!=(u=c(n,n))?u:"")+'" -> "'+(null!=(u=c(n,n))?u:"")+'" [style=dashed arrowtail=none arrowhead=none weight=0]\n "'+(null!=(u=c(n,n))?u:"")+'" [label="'+(null!=(u=c(null!=r[1]?m(r[1],"noteFlattened"):r[1],n))?u:"")+'" shape=note fontsize=10 color=black fontcolor=black fillcolor="#ffffcc" penwidth=1.0]\n'},24:function(l,n,o,e,t,a,r){var u=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' ltail="cluster_'+(null!=(l=l.lambda(null!=r[1]?u(r[1],"from"):r[1],n))?l:"")+'"'},26:function(l,n,o,e,t,a,r){var u=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' color="'+(null!=(l=l.lambda(null!=r[1]?u(r[1],"color"):r[1],n))?l:"")+'"'},28:function(l,n,o,e,t,a,r){var u=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' lhead="cluster_'+(null!=(l=l.lambda(null!=r[1]?u(r[1],"to"):r[1],n))?l:"")+'"'},30:function(l,n,o,e,t,a,r){var u,c=l.lambda,l=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' color="'+(null!=(u=c(null!=r[1]?l(r[1],"color"):r[1],n))?u:"")+'" fontcolor="'+(null!=(u=c(null!=r[1]?l(r[1],"color"):r[1],n))?u:"")+'"'},compiler:[8,">= 4.3.0"],main:function(l,n,o,e,t,a,r){var u=null!=n?n:l.nullContext||{},c=l.hooks.helperMissing,i="function",s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},e='digraph "state transitions" {\n '+(null!=(p=typeof(m=null!=(m=s(o,"graphAttributes")||(null!=n?s(n,"graphAttributes"):n))?m:c)==i?m.call(u,{name:"graphAttributes",hash:{},data:t,loc:{start:{line:2,column:2},end:{line:2,column:23}}}):m)?p:"")+"\n node ["+(null!=(p=typeof(m=null!=(m=s(o,"nodeAttributes")||(null!=n?s(n,"nodeAttributes"):n))?m:c)==i?m.call(u,{name:"nodeAttributes",hash:{},data:t,loc:{start:{line:3,column:8},end:{line:3,column:28}}}):m)?p:"")+"]\n edge ["+(null!=(p=typeof(m=null!=(m=s(o,"edgeAttributes")||(null!=n?s(n,"edgeAttributes"):n))?m:c)==i?m.call(u,{name:"edgeAttributes",hash:{},data:t,loc:{start:{line:4,column:8},end:{line:4,column:28}}}):m)?p:"")+"]\n\n"+(null!=(p=l.invokePartial(s(e,"dot.states.template.hbs"),n,{name:"dot.states.template.hbs",data:t,indent:" ",helpers:o,partials:e,decorators:l.decorators}))?p:"")+"\n",m=null!=(m=s(o,"transitions")||(null!=n?s(n,"transitions"):n))?m:c,c={name:"transitions",hash:{},fn:l.program(1,t,0,a,r),inverse:l.noop,data:t,loc:{start:{line:8,column:2},end:{line:38,column:18}}},p=typeof m==i?m.call(u,c):m;return null!=(p=s(o,"transitions")?p:l.hooks.blockHelperMissing.call(n,p,c))&&(e+=p),e+"}\n"},usePartial:!0,useData:!0,useDepths:!0});
@@ -3,12 +3,11 @@ import StateMachineModel from "../../state-machine-model.mjs";
3
3
  import attributebuilder from "./attributebuilder.mjs";
4
4
  import stateTransformers from "./state-transformers.mjs";
5
5
  import transitionTransformers from "./transition-transformers.mjs";
6
- import Counter from "./counter.mjs";
7
6
  import renderDotFromAST from "./render-dot-from-ast.mjs";
8
7
  import utl from "./utl.mjs";
9
8
  function addExternalSelfTransitions(pStateMachineModel) {
10
9
  return (pState) => {
11
- if (Object.prototype.hasOwnProperty.call(pState, "statemachine")) {
10
+ if (Object.hasOwn(pState, "statemachine")) {
12
11
  pState.nestedExternalSelfTransitions = pStateMachineModel
13
12
  .findExternalSelfTransitions(pState.name)
14
13
  .map((pTransition) => pTransition.name);
@@ -102,18 +101,18 @@ function addCompositeSelfFlag(pStateMachineModel) {
102
101
  return { ...pTransition, ...lAdditionalAttributes };
103
102
  };
104
103
  }
105
- function nameTransition(pCounter) {
104
+ function nameTransition() {
106
105
  return (pTransition) => {
107
- pTransition.name = `tr_${pTransition.from}_${pTransition.to}_${pCounter.nextAsString()}`;
108
- if (Boolean(pTransition.note)) {
106
+ pTransition.name = `tr_${pTransition.from}_${pTransition.to}_${pTransition.id}`;
107
+ if (pTransition.note) {
109
108
  pTransition.noteName = `note_${pTransition.name}`;
110
109
  }
111
110
  return pTransition;
112
111
  };
113
112
  }
114
- function transformTransitions(pStateMachineModel, pDirection, pCounter) {
113
+ function transformTransitions(pStateMachineModel, pDirection) {
115
114
  return pStateMachineModel.flattenedTransitions
116
- .map(nameTransition(pCounter))
115
+ .map(nameTransition())
117
116
  .map(transitionTransformers.escapeTransitionStrings)
118
117
  .map(transitionTransformers.classifyTransition)
119
118
  .map(stateTransformers.flattenNote)
@@ -128,7 +127,6 @@ export default (pStateMachine, pOptions) => {
128
127
  lStateMachine.transitions = transformTransitions(
129
128
  lStateMachineModel,
130
129
  pOptions.direction,
131
- new Counter(),
132
130
  );
133
131
  lStateMachine.states = transformStates(
134
132
  lStateMachine.states,
@@ -7,7 +7,7 @@ function isOneOfTypes(pStringArray) {
7
7
  }
8
8
  function setLabel(pState) {
9
9
  const lState = structuredClone(pState);
10
- lState.label = pState.label || pState.name;
10
+ lState.label = pState.label ?? pState.name;
11
11
  return lState;
12
12
  }
13
13
  function nameNote(pState) {
@@ -86,7 +86,7 @@ function tipForkJoinStates(pDirection) {
86
86
  return (pState) => {
87
87
  if (isOneOfTypes(["fork", "join", "forkjoin"])(pState)) {
88
88
  return {
89
- sizingExtras: utl.isVertical(pDirection) ? "height=0.1" : "width=0.1",
89
+ sizingExtras: utl.isVertical(pDirection) ? " height=0.1" : " width=0.1",
90
90
  ...pState,
91
91
  };
92
92
  }
@@ -94,11 +94,7 @@ function tipForkJoinStates(pDirection) {
94
94
  };
95
95
  }
96
96
  function flagParallelChildren(pState) {
97
- if (
98
- pState.type === "parallel" &&
99
- pState.statemachine &&
100
- pState.statemachine.states
101
- ) {
97
+ if (pState.type === "parallel" && pState.statemachine?.states) {
102
98
  pState.statemachine.states = pState.statemachine.states.map(
103
99
  (pChildState) =>
104
100
  isType("regular")(pChildState)
@@ -4,9 +4,7 @@ function escapeTransitionStrings(pTransition) {
4
4
  if (lTransition.note) {
5
5
  lTransition.note = lTransition.note.map(utl.escapeString);
6
6
  }
7
- if (lTransition.label) {
8
- lTransition.label = utl.escapeLabelString(lTransition.label);
9
- }
7
+ lTransition.label = utl.escapeLabelString(lTransition.label ?? " ");
10
8
  return lTransition;
11
9
  }
12
10
  function addPorts(pDirection) {
@@ -20,7 +20,7 @@ function isCompositeSelf(pStateMachineModel, pTransition) {
20
20
  return (
21
21
  pTransition.from === pTransition.to &&
22
22
  pStateMachineModel.findStateByName(pTransition.from).statemachine &&
23
- !(pTransition.type === "internal")
23
+ pTransition.type !== "internal"
24
24
  );
25
25
  }
26
26
  export default {
@@ -1,5 +1,6 @@
1
- import smcatRendererAsImported from "./smcat/index.mjs";
1
+ import smcatRendererAsImported from "./smcat.mjs";
2
2
  import renderDot from "./dot/index.mjs";
3
+ import renderNDot from "./ndot/index.mjs";
3
4
  import vector from "./vector/vector-native-dot-with-fallback.mjs";
4
5
  import oldVector from "./vector/vector-with-wasm.mjs";
5
6
  import scjson from "./scjson/index.mjs";
@@ -9,6 +10,7 @@ export default function getRenderFunction(pOutputType) {
9
10
  const lOutputType2RenderFunctionMap = new Map([
10
11
  ["smcat", smcat],
11
12
  ["dot", renderDot],
13
+ ["ndot", renderNDot],
12
14
  ["svg", vector],
13
15
  ["eps", vector],
14
16
  ["ps", vector],
@@ -1,4 +1,4 @@
1
- import smcatRendererAsImported from "./smcat/index.mjs";
1
+ import smcatRendererAsImported from "./smcat.mjs";
2
2
  import renderDot from "./dot/index.mjs";
3
3
  import svg from "./vector/vector-with-wasm.mjs";
4
4
  import scjson from "./scjson/index.mjs";
@@ -0,0 +1,60 @@
1
+ const GENERIC_GRAPH_ATTRIBUTES = [
2
+ { name: "fontname", value: '"Helvetica"' },
3
+ { name: "fontsize", value: "12" },
4
+ { name: "penwidth", value: "2.0" },
5
+ ];
6
+ const GRAPH_ATTRIBUTES = {
7
+ dot: [
8
+ { name: "splines", value: "true" },
9
+ { name: "ordering", value: "out" },
10
+ { name: "compound", value: "true" },
11
+ { name: "overlap", value: "scale" },
12
+ { name: "nodesep", value: "0.3" },
13
+ { name: "ranksep", value: "0.1" },
14
+ ],
15
+ fdp: [{ name: "K", value: "0.9" }],
16
+ osage: [{ name: "pack", value: "42" }],
17
+ neato: [{ name: "epsilon", value: "0.9" }],
18
+ };
19
+ const DIRECTION_ATTRIBUTES = {
20
+ "bottom-top": [{ name: "rankdir", value: "BT" }],
21
+ "left-right": [{ name: "rankdir", value: "LR" }],
22
+ "right-left": [{ name: "rankdir", value: "RL" }],
23
+ };
24
+ const NODE_ATTRIBUTES = [
25
+ { name: "shape", value: "plaintext" },
26
+ { name: "style", value: "filled" },
27
+ { name: "fillcolor", value: '"#FFFFFF01"' },
28
+ { name: "fontname", value: "Helvetica" },
29
+ { name: "fontsize", value: 12 },
30
+ { name: "penwidth", value: "2.0" },
31
+ ];
32
+ const EDGE_ATTRIBUTES = [
33
+ { name: "fontname", value: "Helvetica" },
34
+ { name: "fontsize", value: 10 },
35
+ ];
36
+ function toNameValueString(pAttribute) {
37
+ return `${pAttribute.name}=${pAttribute.value}`;
38
+ }
39
+ export function buildGraphAttributes(pEngine, pDirection, pDotGraphAttributes) {
40
+ return GENERIC_GRAPH_ATTRIBUTES.concat(GRAPH_ATTRIBUTES[pEngine] || [])
41
+ .concat(DIRECTION_ATTRIBUTES[pDirection] || [])
42
+ .concat(pDotGraphAttributes || [])
43
+ .map(toNameValueString)
44
+ .join(" ");
45
+ }
46
+ export function buildNodeAttributes(pDotNodeAttributes) {
47
+ return NODE_ATTRIBUTES.concat(pDotNodeAttributes || [])
48
+ .map(toNameValueString)
49
+ .join(" ");
50
+ }
51
+ export function buildEdgeAttributes(pDotEdgeAttributes) {
52
+ return EDGE_ATTRIBUTES.concat(pDotEdgeAttributes || [])
53
+ .map(toNameValueString)
54
+ .join(" ");
55
+ }
56
+ export default {
57
+ buildGraphAttributes,
58
+ buildNodeAttributes,
59
+ buildEdgeAttributes,
60
+ };
@@ -0,0 +1,243 @@
1
+ import he from "he";
2
+ import { getOptionValue } from "../../options.mjs";
3
+ import StateMachineModel from "../../state-machine-model.mjs";
4
+ import {
5
+ buildGraphAttributes,
6
+ buildNodeAttributes,
7
+ buildEdgeAttributes,
8
+ } from "./attributebuilder.mjs";
9
+ import {
10
+ escapeLabelString,
11
+ formatActionType,
12
+ getTransitionPorts,
13
+ isCompositeSelf,
14
+ isVertical,
15
+ noteToLabel,
16
+ normalizeState,
17
+ stateNote,
18
+ } from "./utl.mjs";
19
+ function initial(pState, pIndent) {
20
+ const lActiveAttribute = pState.active ? " penwidth=3.0" : "";
21
+ return `${pIndent} "${pState.name}" [shape=circle style=filled class="${pState.class}" color="${pState.color}" fillcolor="${pState.color}" fixedsize=true height=0.15 label=""${lActiveAttribute}]${pState.noteText}`;
22
+ }
23
+ function regularStateActions(pActions, pIndent) {
24
+ return pActions
25
+ .map((pAction) =>
26
+ he.escape(`${formatActionType(pAction.type)}${pAction.body}`),
27
+ )
28
+ .map((pActionString, pIndex) => {
29
+ let lReturnValue = `<tr><td align="left" cellpadding="2">${pActionString}</td></tr>`;
30
+ if (pIndex === 0) {
31
+ lReturnValue = `<hr/>${lReturnValue}`;
32
+ }
33
+ return `\n${pIndent} ${lReturnValue}`;
34
+ })
35
+ .join("");
36
+ }
37
+ function compositeStateActions(pActions, pIndent) {
38
+ return pActions
39
+ .map((pAction) =>
40
+ he.escape(`${formatActionType(pAction.type)}${pAction.body}`),
41
+ )
42
+ .map((pActionString, pIndex) => {
43
+ let lReturnValue = `<tr><td align="left">${pActionString}</td></tr>`;
44
+ if (pIndex === 0) {
45
+ lReturnValue = `<hr/>${lReturnValue}`;
46
+ }
47
+ return `\n${pIndent} ${lReturnValue}`;
48
+ })
49
+ .join("");
50
+ }
51
+ function atomicRegular(pState, pIndent) {
52
+ const lActiveAttribute = pState.active ? " peripheries=2 penwidth=3.0" : "";
53
+ const lCellPadding = (pState.actions?.length ?? 0) > 0 ? 2 : 7;
54
+ const lActions = regularStateActions(pState?.actions ?? [], pIndent);
55
+ const lLabel = pState.active ? `<i>${pState.label}</i>` : pState.label;
56
+ const lLabelTag = `
57
+ ${pIndent} <table align="center" cellborder="0" border="2" style="rounded" width="48">
58
+ ${pIndent} <tr><td width="48" cellpadding="${lCellPadding}">${lLabel}</td></tr>${lActions}
59
+ ${pIndent} </table>`;
60
+ return `${pIndent} "${pState.name}" [margin=0 class="${pState.class}" color="${pState.color}"${lActiveAttribute} label= <${lLabelTag}
61
+ ${pIndent} >]${pState.noteText}`;
62
+ }
63
+ function compositeRegular(pState, pIndent, pOptions, pModel) {
64
+ const lPenWidth = pState.isParallelArea
65
+ ? "1.0"
66
+ : pState.active
67
+ ? "3.0"
68
+ : "2.0";
69
+ const lStyle = pState.isParallelArea ? "dashed" : "rounded";
70
+ const lActions = compositeStateActions(pState?.actions ?? [], pIndent);
71
+ const lLabel = pState.active ? `<i>${pState.label}</i>` : pState.label;
72
+ const lLabelTag = `${pIndent} <table cellborder="0" border="0">
73
+ ${pIndent} <tr><td>${lLabel}</td></tr>${lActions}
74
+ ${pIndent} </table>`;
75
+ const lSelfTransitionHelperPoints = pModel
76
+ .findExternalSelfTransitions(pState.name)
77
+ .map(
78
+ (pTransition) =>
79
+ `${pIndent} "self_tr_${pTransition.from}_${pTransition.to}_${pTransition.id}" [shape=point style=invis width=0 height=0 fixedsize=true]\n`,
80
+ )
81
+ .join("");
82
+ return `${lSelfTransitionHelperPoints}${pIndent} subgraph "cluster_${pState.name}" {
83
+ ${pIndent} class="${pState.class}" color="${pState.color}" label= <
84
+ ${lLabelTag}
85
+ ${pIndent} > style=${lStyle} penwidth=${lPenWidth}
86
+ ${pIndent} "${pState.name}" [shape=point style=invis margin=0 width=0 height=0 fixedsize=true]
87
+ ${machine(pState.statemachine ?? { states: [] }, `${pIndent} `, pOptions, pModel)}
88
+ ${pIndent} }${pState.noteText}`;
89
+ }
90
+ function regular(pState, pIndent, pOptions, pModel) {
91
+ if (pState.statemachine) {
92
+ return compositeRegular(pState, pIndent, pOptions, pModel);
93
+ }
94
+ return atomicRegular(pState, pIndent);
95
+ }
96
+ function history(pState, pIndent) {
97
+ const lActiveAttribute = pState.active ? " peripheries=2 penwidth=3.0" : "";
98
+ return `${pIndent} "${pState.name}" [shape=circle class="${pState.class}" color="${pState.color}" label="H"${lActiveAttribute}]${pState.noteText}`;
99
+ }
100
+ function deepHistory(pState, pIndent) {
101
+ const lActiveAttribute = pState.active ? " peripheries=2 penwidth=3.0" : "";
102
+ return `${pIndent} "${pState.name}" [shape=circle class="${pState.class}" color="${pState.color}" label="H*"${lActiveAttribute}]${pState.noteText}`;
103
+ }
104
+ function choiceActions(pActions, pActive) {
105
+ return pActions
106
+ .map((pAction) => {
107
+ let lReturnValue = he.escape(
108
+ `${formatActionType(pAction.type)}${pAction.body}`,
109
+ );
110
+ if (pActive) {
111
+ lReturnValue = `<i>${lReturnValue}</i>`;
112
+ }
113
+ return lReturnValue;
114
+ })
115
+ .join("\\n");
116
+ }
117
+ function choice(pState, pIndent) {
118
+ const lActiveAttribute = pState.active ? "penwidth=3.0 " : "";
119
+ const lActions = choiceActions(
120
+ pState?.actions ?? [],
121
+ pState?.active ?? false,
122
+ );
123
+ const lLabelTag = lActions;
124
+ const lDiamond = `${pIndent} "${pState.name}" [shape=diamond fixedsize=true width=0.35 height=0.35 fontsize=10 label=" " class="${pState.class}" color="${pState.color}"${lActiveAttribute}]`;
125
+ const lLabelConstruct = `${pIndent} "${pState.name}" -> "${pState.name}" [color="#FFFFFF01" fontcolor="${pState.color}" class="${pState.class}" label=<${lLabelTag}>]`;
126
+ return `${lDiamond}\n${lLabelConstruct}${pState.noteText}`;
127
+ }
128
+ function forkjoin(pState, pIndent, pOptions) {
129
+ const lActiveAttribute = pState.active ? "penwidth=3.0 " : "";
130
+ const lDirection = getOptionValue(pOptions, "direction");
131
+ const lSizingExtras = isVertical(lDirection) ? " height=0.1" : " width=0.1";
132
+ return `${pIndent} "${pState.name}" [shape=rect fixedsize=true label=" " style=filled class="${pState.class}" color="${pState.color}" fillcolor="${pState.color}"${lActiveAttribute}${lSizingExtras}]${pState.noteText}`;
133
+ }
134
+ function junction(pState, pIndent) {
135
+ const lActiveAttribute = pState.active ? " penwidth=3.0" : "";
136
+ const lNote = stateNote(pState, pIndent);
137
+ return `${pIndent} "${pState.name}" [shape=circle fixedsize=true height=0.15 label="" style=filled class="${pState.class}" color="${pState.color}" fillcolor="${pState.color}"${lActiveAttribute}]${lNote}`;
138
+ }
139
+ function terminate(pState, pIndent) {
140
+ const lLabelTag = `
141
+ ${pIndent} <table align="center" cellborder="0" border="0">
142
+ ${pIndent} <tr><td cellpadding="0"><font color="${pState.color}" point-size="20">X</font></td></tr>
143
+ ${pIndent} <tr><td cellpadding="0"><font color="${pState.color}">${pState.label}</font></td></tr>
144
+ ${pIndent} </table>`;
145
+ return `${pIndent} "${pState.name}" [label= <${lLabelTag}
146
+ ${pIndent} > class="${pState.class}"]${pState.noteText}`;
147
+ }
148
+ function final(pState, pIndent) {
149
+ const lActiveAttribute = pState.active ? " peripheries=2 penwidth=3.0" : "";
150
+ return `${pIndent} "${pState.name}" [shape=circle style=filled class="${pState.class}" color="${pState.color}" fillcolor="${pState.color}" fixedsize=true height=0.15 peripheries=2 label=""${lActiveAttribute}]${pState.noteText}`;
151
+ }
152
+ const STATE_TYPE2FUNCTION = new Map([
153
+ ["initial", initial],
154
+ ["regular", regular],
155
+ ["history", history],
156
+ ["deephistory", deepHistory],
157
+ ["choice", choice],
158
+ ["fork", forkjoin],
159
+ ["forkjoin", forkjoin],
160
+ ["join", forkjoin],
161
+ ["junction", junction],
162
+ ["terminate", terminate],
163
+ ["final", final],
164
+ ]);
165
+ function state(pState, pIndent, pOptions, pModel) {
166
+ const lState = normalizeState(pState, pIndent);
167
+ return (
168
+ (STATE_TYPE2FUNCTION.get(pState.type) ?? regular)(
169
+ lState,
170
+ pIndent,
171
+ pOptions,
172
+ pModel,
173
+ ) + "\n"
174
+ );
175
+ }
176
+ function states(pStates, pIndent, pOptions, pModel) {
177
+ return pStates
178
+ .map((pState) => state(pState, pIndent, pOptions, pModel))
179
+ .join("");
180
+ }
181
+ function transition(pTransition, pIndent, pOptions, pModel) {
182
+ const lLabel = `${escapeLabelString(pTransition.label ?? " ")}`;
183
+ const lColor = pTransition.color ?? "black";
184
+ const lPenWidth = pTransition.width ? ` penwidth=${pTransition.width}` : "";
185
+ const lClass = pTransition.class
186
+ ? `transition${pTransition.type ? " " + pTransition.type + " " : " "}${pTransition.class}`
187
+ : `transition${pTransition.type ? " " + pTransition.type : ""}`;
188
+ const lTail = pModel.findStateByName(pTransition.from)?.statemachine
189
+ ? `ltail="cluster_${pTransition.from}" `
190
+ : "";
191
+ const lHead = pModel.findStateByName(pTransition.to)?.statemachine
192
+ ? `lhead="cluster_${pTransition.to}" `
193
+ : "";
194
+ const lTransitionName = `tr_${pTransition.from}_${pTransition.to}_${pTransition.id}`;
195
+ if (pTransition.note) {
196
+ const lNoteName = `note_${lTransitionName}`;
197
+ const lNoteNodeName = `i_${lNoteName}`;
198
+ const lNoteNode = `\n${pIndent} "${lNoteNodeName}" [shape=point style=invis margin=0 width=0 height=0 fixedsize=true]`;
199
+ const lTransitionFrom = `\n${pIndent} "${pTransition.from}" -> "${lNoteNodeName}" [arrowhead=none ${lTail}color="${lColor}"]`;
200
+ const lTransitionTo = `\n${pIndent} "${lNoteNodeName}" -> "${pTransition.to}" [label="${lLabel}" ${lHead}color="${lColor}" fontcolor="${lColor}"]`;
201
+ const lLineToNote = `\n${pIndent} "${lNoteNodeName}" -> "${lNoteName}" [style=dashed arrowtail=none arrowhead=none weight=0]`;
202
+ const lNote = `\n${pIndent} "${lNoteName}" [label="${noteToLabel(pTransition.note)}" shape=note fontsize=10 color=black fontcolor=black fillcolor="#ffffcc" penwidth=1.0]`;
203
+ return lNoteNode + lTransitionFrom + lTransitionTo + lLineToNote + lNote;
204
+ }
205
+ if (isCompositeSelf(pModel, pTransition)) {
206
+ const { lTailPorts, lHeadPorts } = getTransitionPorts(
207
+ pOptions,
208
+ pModel,
209
+ pTransition,
210
+ );
211
+ const lTransitionFrom = `\n${pIndent} "${pTransition.from}" -> "self_tr_${pTransition.from}_${pTransition.to}_${pTransition.id}" [label="${lLabel}" arrowhead=none ${lTailPorts}${lTail}color="${lColor}" fontcolor="${lColor}" class="${lClass}"]`;
212
+ const lTransitionTo = `\n${pIndent} "self_tr_${pTransition.from}_${pTransition.to}_${pTransition.id}" -> "${pTransition.to}" [${lHead}${lHeadPorts}color="${lColor}" ${lPenWidth}class="${lClass}"]`;
213
+ return lTransitionFrom + lTransitionTo;
214
+ }
215
+ return `\n${pIndent} "${pTransition.from}" -> "${pTransition.to}" [label="${lLabel}" ${lTail}${lHead}color="${lColor}" fontcolor="${lColor}"${lPenWidth} class="${lClass}"]`;
216
+ }
217
+ function transitions(pTransitions, pIndent, pOptions, pModel) {
218
+ return pTransitions
219
+ .map((pTransition) => transition(pTransition, pIndent, pOptions, pModel))
220
+ .join("");
221
+ }
222
+ function machine(pStateMachine, pIndent, pOptions, pModel) {
223
+ return `${states(pStateMachine.states, pIndent, pOptions, pModel)}${transitions(pStateMachine.transitions || [], pIndent, pOptions, pModel)}`;
224
+ }
225
+ export default function renderDot(pStateMachine, pOptions = {}, pIndent = "") {
226
+ const lGraphAttributes = buildGraphAttributes(
227
+ getOptionValue(pOptions, "engine"),
228
+ getOptionValue(pOptions, "direction"),
229
+ pOptions?.dotGraphAttrs || [],
230
+ );
231
+ const lNodeAttributes = buildNodeAttributes(pOptions.dotNodeAttrs || []);
232
+ const lEdgeAttributes = buildEdgeAttributes(pOptions.dotNodeAttrs || []);
233
+ const lModel = new StateMachineModel(pStateMachine);
234
+ const lMachine = machine(pStateMachine, pIndent, pOptions, lModel);
235
+ return `digraph "state transitions" {
236
+ ${lGraphAttributes}
237
+ node [${lNodeAttributes}]
238
+ edge [${lEdgeAttributes}]
239
+
240
+ ${lMachine}
241
+ }
242
+ `;
243
+ }
@@ -0,0 +1,77 @@
1
+ import he from "he";
2
+ import { getOptionValue } from "../../options.mjs";
3
+ export function escapeString(pString) {
4
+ return pString
5
+ .replace(/\\/g, "\\\\")
6
+ .replace(/\n\s*/g, "\\l")
7
+ .replace(/"/g, '\\"')
8
+ .concat("\\l");
9
+ }
10
+ export function escapeLabelString(pString) {
11
+ return pString
12
+ .replace(/\\/g, "\\\\")
13
+ .replace(/\n\s*/g, " \\l")
14
+ .replace(/"/g, '\\"')
15
+ .concat(" \\l");
16
+ }
17
+ export function isVertical(pDirection) {
18
+ const lDirection = pDirection || "top-down";
19
+ return lDirection === "top-down" || lDirection === "bottom-top";
20
+ }
21
+ export function isCompositeSelf(pStateMachineModel, pTransition) {
22
+ return (
23
+ pTransition.from === pTransition.to &&
24
+ pStateMachineModel.findStateByName(pTransition.from).statemachine &&
25
+ pTransition.type !== "internal"
26
+ );
27
+ }
28
+ export function noteToLabel(pNote) {
29
+ return pNote.map(escapeString).join("");
30
+ }
31
+ export function stateNote(pState, pIndent) {
32
+ if (pState.note) {
33
+ const lNoteName = `note_${pState.name}`;
34
+ let lReturnValue = `\n${pIndent} "${lNoteName}" [color=black fontcolor=black label="${noteToLabel(pState.note)}" shape=note fontsize=10 fillcolor="#ffffcc" penwidth=1.0]`;
35
+ lReturnValue += `\n${pIndent} "${pState.name}" -> "${lNoteName}" [style=dashed arrowtail=none arrowhead=none]`;
36
+ return lReturnValue;
37
+ }
38
+ return "";
39
+ }
40
+ export function normalizeState(pState, pIndent) {
41
+ const lReturnValue = structuredClone(pState);
42
+ lReturnValue.color = pState.color ?? "black";
43
+ lReturnValue.class = pState.class
44
+ ? `state ${pState.type} ${pState.class}`
45
+ : `state ${pState.type}`;
46
+ lReturnValue.label = he.escape(pState.label ?? pState.name);
47
+ lReturnValue.noteText = stateNote(pState, pIndent);
48
+ if (
49
+ !pState.isParallelArea &&
50
+ pState.type === "parallel" &&
51
+ (pState.statemachine?.states ?? []).length > 0
52
+ ) {
53
+ lReturnValue.statemachine.states = pState.statemachine.states.map(
54
+ (pChildState) => ({
55
+ ...pChildState,
56
+ isParallelArea: pChildState.type === "regular",
57
+ }),
58
+ );
59
+ }
60
+ return lReturnValue;
61
+ }
62
+ export function formatActionType(pString) {
63
+ return pString === "activity" ? "" : `${pString}/ `;
64
+ }
65
+ export function getTransitionPorts(pOptions, pModel, pTransition) {
66
+ let lTailPorts = 'tailport="n" headport="n" ';
67
+ let lHeadPorts = 'tailport="n" ';
68
+ const lDirection = getOptionValue(pOptions, "direction");
69
+ if (isVertical(lDirection)) {
70
+ lTailPorts = 'tailport="e" headport="e" ';
71
+ lHeadPorts = 'tailport="w" ';
72
+ } else if (pModel.findStateByName(pTransition.from).hasParent) {
73
+ lTailPorts = 'tailport="n" headport="n" ';
74
+ lHeadPorts = 'tailport="s" ';
75
+ }
76
+ return { lTailPorts, lHeadPorts };
77
+ }
@@ -18,7 +18,7 @@ function makeValidEventName(pCandidateEventName) {
18
18
  );
19
19
  }
20
20
  export default (pCandidateEventNames) => {
21
- const lCandidateEventNames = pCandidateEventNames || "";
21
+ const lCandidateEventNames = pCandidateEventNames ?? "";
22
22
  if (lCandidateEventNames.length === 0) {
23
23
  return "empty";
24
24
  }
@@ -0,0 +1,114 @@
1
+ const NAME_QUOTABLE = /[;,{[ ]/;
2
+ const ACTIONS_QUOTABLE = /[;,{}]/;
3
+ const LABEL_QUOTABLE = /[;{]/;
4
+ const RENDERABLE_STATE_ATTRIBUTES = [
5
+ "label",
6
+ "type",
7
+ "color",
8
+ "active",
9
+ "class",
10
+ ];
11
+ const RENDERABLE_TRANSITION_ATTRIBUTES = ["type", "color", "class"];
12
+ function quoteIfNecessary(pRegExp, pString) {
13
+ return pRegExp.test(pString) ? `"${pString}"` : pString;
14
+ }
15
+ function stateHasExtendedAttributes(pState) {
16
+ return (
17
+ Object.hasOwn(pState, "label") ||
18
+ Object.hasOwn(pState, "typeExplicitlySet") ||
19
+ Object.hasOwn(pState, "color") ||
20
+ Object.hasOwn(pState, "active") ||
21
+ Object.hasOwn(pState, "class")
22
+ );
23
+ }
24
+ function note(pNote, pIndent = "") {
25
+ return pNote.map((pNoteLine) => `${pIndent}# ${pNoteLine}`).join("\n");
26
+ }
27
+ function extendedAttribute(pKey, pValue) {
28
+ if (pKey === "type") {
29
+ return `${pKey}=${pValue}`;
30
+ }
31
+ if (pKey === "active") {
32
+ return pValue ? pKey : "";
33
+ }
34
+ return `${pKey}="${pValue}"`;
35
+ }
36
+ function extendedStateAttributes(pState) {
37
+ return Object.entries(pState)
38
+ .filter(([pKey]) => RENDERABLE_STATE_ATTRIBUTES.includes(pKey))
39
+ .filter(([pKey]) => pKey !== "type" || pState.typeExplicitlySet)
40
+ .map(([pKey, pValue]) => extendedAttribute(pKey, pValue))
41
+ .join(" ");
42
+ }
43
+ function actions(pActions) {
44
+ return pActions
45
+ .map(
46
+ (pAction) =>
47
+ `${pAction.type === "activity" ? "" : `${pAction.type}/ `}${pAction.body}`,
48
+ )
49
+ .map((pAction) => quoteIfNecessary(ACTIONS_QUOTABLE, pAction))
50
+ .join("\n ");
51
+ }
52
+ function state(pState, pIndent = "") {
53
+ let lReturnValue = pIndent + quoteIfNecessary(NAME_QUOTABLE, pState.name);
54
+ if (pState.note) {
55
+ lReturnValue = `${note(pState.note, pIndent)}\n${lReturnValue}`;
56
+ }
57
+ if (stateHasExtendedAttributes(pState)) {
58
+ lReturnValue += ` [${extendedStateAttributes(pState)}]`;
59
+ }
60
+ if (pState.actions) {
61
+ lReturnValue += `: ${actions(pState.actions)}`;
62
+ }
63
+ if (pState.statemachine) {
64
+ lReturnValue += " {\n";
65
+ lReturnValue += renderSmcat(pState.statemachine, null, `${pIndent} `);
66
+ lReturnValue += `${pIndent}}`;
67
+ }
68
+ return lReturnValue;
69
+ }
70
+ function states(pStates, pIndent = "") {
71
+ return pStates
72
+ .map((pState) => state(pState, pIndent))
73
+ .join(",\n")
74
+ .concat(pStates.length > 0 ? ";\n\n" : "");
75
+ }
76
+ function transitionHasExtendedAttributes(pTransition) {
77
+ return Object.entries(pTransition).some(([pKey]) =>
78
+ RENDERABLE_TRANSITION_ATTRIBUTES.includes(pKey),
79
+ );
80
+ }
81
+ function extendedTransitionAttributes(pTransition) {
82
+ return Object.entries(pTransition)
83
+ .filter(([pKey]) => RENDERABLE_TRANSITION_ATTRIBUTES.includes(pKey))
84
+ .map(([pKey, pValue]) => extendedAttribute(pKey, pValue))
85
+ .join(" ");
86
+ }
87
+ function transition(pTransition, pIndent = "") {
88
+ let lReturnValue = `${pIndent}${quoteIfNecessary(NAME_QUOTABLE, pTransition.from)} => ${quoteIfNecessary(NAME_QUOTABLE, pTransition.to)}`;
89
+ if (pTransition.note) {
90
+ lReturnValue = `${note(pTransition.note, pIndent)}\n${lReturnValue}`;
91
+ }
92
+ if (transitionHasExtendedAttributes(pTransition)) {
93
+ lReturnValue += ` [${extendedTransitionAttributes(pTransition)}]`;
94
+ }
95
+ if (pTransition.label) {
96
+ lReturnValue += `: ${quoteIfNecessary(LABEL_QUOTABLE, pTransition.label)}`;
97
+ }
98
+ return lReturnValue;
99
+ }
100
+ function transitions(pTransitions, pIndent = "") {
101
+ return pTransitions
102
+ .map((pTransition) => `${transition(pTransition, pIndent)};\n`)
103
+ .join("");
104
+ }
105
+ export default function renderSmcat(
106
+ pStateMachine,
107
+ _pOptions = {},
108
+ pIndent = "",
109
+ ) {
110
+ return (
111
+ states(pStateMachine.states, pIndent) +
112
+ transitions(pStateMachine.transitions || [], pIndent)
113
+ );
114
+ }
@@ -3,7 +3,7 @@ function flattenStates(pStates, pHasParent = false) {
3
3
  pStates
4
4
  .filter((pState) => Boolean(pState.statemachine))
5
5
  .forEach((pState) => {
6
- if (Object.prototype.hasOwnProperty.call(pState.statemachine, "states")) {
6
+ if (Object.hasOwn(pState.statemachine, "states")) {
7
7
  lReturnValue = lReturnValue.concat(
8
8
  flattenStates(pState.statemachine.states, true),
9
9
  );
@@ -20,10 +20,10 @@ function flattenStates(pStates, pHasParent = false) {
20
20
  }
21
21
  function flattenTransitions(pStateMachine) {
22
22
  let lTransitions = [];
23
- if (Object.prototype.hasOwnProperty.call(pStateMachine, "transitions")) {
24
- lTransitions = pStateMachine.transitions;
23
+ if (Object.hasOwn(pStateMachine, "transitions")) {
24
+ lTransitions = structuredClone(pStateMachine.transitions);
25
25
  }
26
- if (Object.prototype.hasOwnProperty.call(pStateMachine, "states")) {
26
+ if (Object.hasOwn(pStateMachine, "states")) {
27
27
  pStateMachine.states
28
28
  .filter((pState) => Boolean(pState.statemachine))
29
29
  .forEach((pState) => {
package/dist/version.mjs CHANGED
@@ -1 +1 @@
1
- export const version = "12.0.15";
1
+ export const version = "12.0.17";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "state-machine-cat",
3
- "version": "12.0.15",
3
+ "version": "12.0.17",
4
4
  "description": "write beautiful state charts",
5
5
  "main": "./dist/index.mjs",
6
6
  "module": "./dist/index.mjs",
@@ -17,7 +17,6 @@
17
17
  "#*": "./src/*"
18
18
  },
19
19
  "sideEffects": [
20
- "dist/render/smcat/smcat.template.cjs",
21
20
  "dist/render/dot/dot.states.template.cjs",
22
21
  "dist/render/dot/dot.template.cjs"
23
22
  ],
@@ -45,9 +44,9 @@
45
44
  "state-machine-cat": "dist/cli/main.mjs"
46
45
  },
47
46
  "dependencies": {
48
- "@hpcc-js/wasm-graphviz": "1.5.0",
47
+ "@hpcc-js/wasm-graphviz": "1.7.0",
49
48
  "ajv": "8.17.1",
50
- "fast-xml-parser": "4.5.0",
49
+ "fast-xml-parser": "4.5.1",
51
50
  "handlebars": "4.7.8",
52
51
  "he": "1.2.0",
53
52
  "semver": "^7.6.2",
@@ -91,6 +91,10 @@ export interface ITransition {
91
91
  * The name of the IState the transition is to
92
92
  */
93
93
  to: string;
94
+ /**
95
+ * The id of the transition. Unique within the root state machine.
96
+ */
97
+ id: number;
94
98
  /**
95
99
  * A display label to represent this transition. Parsers can parse this
96
100
  * label into events conditions and actions.
@@ -1,16 +0,0 @@
1
- export default class Counter {
2
- COUNTER = 0;
3
- constructor() {
4
- this.reset();
5
- }
6
- reset() {
7
- this.COUNTER = 0;
8
- }
9
- next() {
10
- return ++this.COUNTER;
11
- }
12
- nextAsString() {
13
- const lBase = 10;
14
- return this.next().toString(lBase);
15
- }
16
- }
@@ -1,75 +0,0 @@
1
- import Handlebars from "handlebars/dist/handlebars.runtime.js";
2
- await import("./smcat.template.cjs");
3
- const NAME_QUOTABLE = /;|,|{| |\[/;
4
- const ACTIONS_QUOTABLE = /;|,|{/;
5
- const LABEL_QUOTABLE = /;|{/;
6
- function quoteIfNecessary(pRegExp, pString) {
7
- return pRegExp.test(pString) ? `"${pString}"` : pString;
8
- }
9
- Handlebars.registerPartial(
10
- "smcat.template.hbs",
11
- Handlebars.templates["smcat.template.hbs"],
12
- );
13
- function formatActionType(pString) {
14
- return pString === "activity" ? "" : `${pString}/ `;
15
- }
16
- function flattenActions(pState) {
17
- return {
18
- ...pState,
19
- actions: (pState.actions || [])
20
- .map((pAction) => `${formatActionType(pAction.type)}${pAction.body}`)
21
- .join("\n "),
22
- };
23
- }
24
- function flagExtendedStateAttributes(pState) {
25
- if (
26
- Object.prototype.hasOwnProperty.call(pState, "label") ||
27
- Object.prototype.hasOwnProperty.call(pState, "typeExplicitlySet") ||
28
- Object.prototype.hasOwnProperty.call(pState, "color") ||
29
- Object.prototype.hasOwnProperty.call(pState, "active") ||
30
- Object.prototype.hasOwnProperty.call(pState, "class")
31
- ) {
32
- pState.hasExtendedAttributes = true;
33
- }
34
- return pState;
35
- }
36
- function transformStates(pStates) {
37
- pStates
38
- .map(flagExtendedStateAttributes)
39
- .filter((pState) => pState.statemachine)
40
- .forEach((pState) => {
41
- pState.statemachine.states = transformStates(pState.statemachine.states);
42
- });
43
- return pStates.map(flattenActions);
44
- }
45
- function flagExtendedTransitionAttributes(pTransition) {
46
- if (
47
- Object.prototype.hasOwnProperty.call(pTransition, "type") ||
48
- Object.prototype.hasOwnProperty.call(pTransition, "color") ||
49
- Object.prototype.hasOwnProperty.call(pTransition, "class")
50
- ) {
51
- pTransition.hasExtendedAttributes = true;
52
- }
53
- return pTransition;
54
- }
55
- function transformTransitions(pTransitions) {
56
- return pTransitions.map(flagExtendedTransitionAttributes);
57
- }
58
- Handlebars.registerHelper("quotifyState", (pItem) =>
59
- quoteIfNecessary(NAME_QUOTABLE, pItem),
60
- );
61
- Handlebars.registerHelper("quotifyLabel", (pItem) =>
62
- quoteIfNecessary(LABEL_QUOTABLE, pItem),
63
- );
64
- Handlebars.registerHelper("quotifyActions", (pItem) =>
65
- quoteIfNecessary(ACTIONS_QUOTABLE, pItem),
66
- );
67
- export default function renderSmcat(pStateMachine) {
68
- return Handlebars.templates["smcat.template.hbs"]({
69
- ...pStateMachine,
70
- states: transformStates(structuredClone(pStateMachine.states)),
71
- transitions: transformTransitions(
72
- structuredClone(pStateMachine.transitions || []),
73
- ),
74
- });
75
- }
@@ -1 +0,0 @@
1
- var Handlebars=require("handlebars/dist/handlebars.runtime"),template=Handlebars.template,templates=Handlebars.templates=Handlebars.templates||{};templates["smcat.template.hbs"]=template({1:function(l,n,e,t,o){var a=null!=n?n:l.nullContext||{},r=l.hooks.helperMissing,u="function",i=l.hooks.blockHelperMissing,c=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},s="",p=null!=(p=c(e,"note")||(null!=n?c(n,"note"):n))?p:r,m={name:"note",hash:{},fn:l.program(2,o,0),inverse:l.noop,data:o,loc:{start:{line:2,column:0},end:{line:4,column:9}}},f=typeof p==u?p.call(a,m):p;return null!=(f=c(e,"note")?f:i.call(n,f,m))&&(s+=f),s+=null!=(f=(c(e,"quotifyState")||n&&c(n,"quotifyState")||r).call(a,null!=n?c(n,"name"):n,{name:"quotifyState",hash:{},fn:l.program(4,o,0),inverse:l.noop,data:o,loc:{start:{line:5,column:0},end:{line:5,column:40}}}))?f:"",p=null!=(p=c(e,"hasExtendedAttributes")||(null!=n?c(n,"hasExtendedAttributes"):n))?p:r,m={name:"hasExtendedAttributes",hash:{},fn:l.program(6,o,0),inverse:l.noop,data:o,loc:{start:{line:6,column:4},end:{line:6,column:270}}},f=typeof p==u?p.call(a,m):p,null!=(f=c(e,"hasExtendedAttributes")?f:i.call(n,f,m))&&(s+=f),s+=null!=(f=c(e,"if").call(a,null!=n?c(n,"actions"):n,{name:"if",hash:{},fn:l.program(18,o,0),inverse:l.noop,data:o,loc:{start:{line:7,column:4},end:{line:7,column:28}}}))?f:"",p=null!=(p=c(e,"actions")||(null!=n?c(n,"actions"):n))?p:r,m={name:"actions",hash:{},fn:l.program(20,o,0),inverse:l.noop,data:o,loc:{start:{line:7,column:28},end:{line:7,column:93}}},f=typeof p==u?p.call(a,m):p,null!=(f=c(e,"actions")?f:i.call(n,f,m))&&(s+=f),p=null!=(p=c(e,"statemachine")||(null!=n?c(n,"statemachine"):n))?p:r,m={name:"statemachine",hash:{},fn:l.program(22,o,0),inverse:l.noop,data:o,loc:{start:{line:8,column:4},end:{line:10,column:19}}},f=typeof p==u?p.call(a,m):p,null!=(f=c(e,"statemachine")?f:i.call(n,f,m))&&(s+=f),s+(null!=(f=c(e,"if").call(a,o&&c(o,"last"),{name:"if",hash:{},fn:l.program(24,o,0),inverse:l.program(26,o,0),data:o,loc:{start:{line:11,column:0},end:{line:11,column:30}}}))?f:"")+"\n"},2:function(l,n,e,t,o){return"# "+(null!=(l=l.lambda(n,n))?l:"")+"\n"},4:function(l,n,e,t,o){return""},6:function(l,n,e,t,o){var a=null!=n?n:l.nullContext||{},r=l.hooks.helperMissing,u="function",i=l.hooks.blockHelperMissing,c=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},s=" [",p=null!=(p=c(e,"typeExplicitlySet")||(null!=n?c(n,"typeExplicitlySet"):n))?p:r,m={name:"typeExplicitlySet",hash:{},fn:l.program(7,o,0),inverse:l.noop,data:o,loc:{start:{line:6,column:32},end:{line:6,column:107}}},f=typeof p==u?p.call(a,m):p;return null!=(f=c(e,"typeExplicitlySet")?f:i.call(n,f,m))&&(s+=f),p=null!=(p=c(e,"label")||(null!=n?c(n,"label"):n))?p:r,m={name:"label",hash:{},fn:l.program(10,o,0),inverse:l.noop,data:o,loc:{start:{line:6,column:107},end:{line:6,column:142}}},f=typeof p==u?p.call(a,m):p,null!=(f=c(e,"label")?f:i.call(n,f,m))&&(s+=f),p=null!=(p=c(e,"color")||(null!=n?c(n,"color"):n))?p:r,m={name:"color",hash:{},fn:l.program(12,o,0),inverse:l.noop,data:o,loc:{start:{line:6,column:142},end:{line:6,column:178}}},f=typeof p==u?p.call(a,m):p,null!=(f=c(e,"color")?f:i.call(n,f,m))&&(s+=f),p=null!=(p=c(e,"class")||(null!=n?c(n,"class"):n))?p:r,m={name:"class",hash:{},fn:l.program(14,o,0),inverse:l.noop,data:o,loc:{start:{line:6,column:178},end:{line:6,column:214}}},f=typeof p==u?p.call(a,m):p,null!=(f=c(e,"class")?f:i.call(n,f,m))&&(s+=f),s+(null!=(f=c(e,"if").call(a,null!=n?c(n,"active"):n,{name:"if",hash:{},fn:l.program(16,o,0),inverse:l.noop,data:o,loc:{start:{line:6,column:214},end:{line:6,column:242}}}))?f:"")+"]"},7:function(l,n,e,t,o){var a=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},r=null!=(r=a(e,"type")||(null!=n?a(n,"type"):n))?r:l.hooks.helperMissing,o={name:"type",hash:{},fn:l.program(8,o,0),inverse:l.noop,data:o,loc:{start:{line:6,column:54},end:{line:6,column:85}}},r="function"==typeof r?r.call(null!=n?n:l.nullContext||{},o):r;return null!=(r=a(e,"type")?r:l.hooks.blockHelperMissing.call(n,r,o))?r:""},8:function(l,n,e,t,o){return"type="+(null!=(l=l.lambda(n,n))?l:"")+" "},10:function(l,n,e,t,o){return'label="'+(null!=(l=l.lambda(n,n))?l:"")+'"'},12:function(l,n,e,t,o){return' color="'+(null!=(l=l.lambda(n,n))?l:"")+'"'},14:function(l,n,e,t,o){return' class="'+(null!=(l=l.lambda(n,n))?l:"")+'"'},16:function(l,n,e,t,o){return" active"},18:function(l,n,e,t,o){return": "},20:function(l,n,e,t,o){var a=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return null!=(e=(a(e,"quotifyActions")||n&&a(n,"quotifyActions")||l.hooks.helperMissing).call(null!=n?n:l.nullContext||{},n,{name:"quotifyActions",hash:{},fn:l.program(4,o,0),inverse:l.noop,data:o,loc:{start:{line:7,column:40},end:{line:7,column:80}}}))?e:""},22:function(l,n,e,t,o){var a=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return" {\n"+(null!=(a=l.invokePartial(a(t,"smcat.template.hbs"),n,{name:"smcat.template.hbs",data:o,indent:" ",helpers:e,partials:t,decorators:l.decorators}))?a:"")+"}"},24:function(l,n,e,t,o){return";"},26:function(l,n,e,t,o){return","},28:function(l,n,e,t,o){var a=null!=n?n:l.nullContext||{},r=l.hooks.helperMissing,u="function",i=l.hooks.blockHelperMissing,c=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},s="",p=null!=(p=c(e,"note")||(null!=n?c(n,"note"):n))?p:r,m={name:"note",hash:{},fn:l.program(2,o,0),inverse:l.noop,data:o,loc:{start:{line:15,column:0},end:{line:17,column:9}}},f=typeof p==u?p.call(a,m):p;return null!=(f=c(e,"note")?f:i.call(n,f,m))&&(s+=f),s+=(null!=(f=(c(e,"quotifyState")||n&&c(n,"quotifyState")||r).call(a,null!=n?c(n,"from"):n,{name:"quotifyState",hash:{},fn:l.program(4,o,0),inverse:l.noop,data:o,loc:{start:{line:18,column:0},end:{line:18,column:39}}}))?f:"")+" => "+(null!=(f=(c(e,"quotifyState")||n&&c(n,"quotifyState")||r).call(a,null!=n?c(n,"to"):n,{name:"quotifyState",hash:{},fn:l.program(4,o,0),inverse:l.noop,data:o,loc:{start:{line:18,column:43},end:{line:18,column:81}}}))?f:""),p=null!=(p=c(e,"hasExtendedAttributes")||(null!=n?c(n,"hasExtendedAttributes"):n))?p:r,m={name:"hasExtendedAttributes",hash:{},fn:l.program(29,o,0),inverse:l.noop,data:o,loc:{start:{line:19,column:4},end:{line:19,column:130}}},f=typeof p==u?p.call(a,m):p,null!=(f=c(e,"hasExtendedAttributes")?f:i.call(n,f,m))&&(s+=f),p=null!=(p=c(e,"label")||(null!=n?c(n,"label"):n))?p:r,m={name:"label",hash:{},fn:l.program(34,o,0),inverse:l.noop,data:o,loc:{start:{line:20,column:4},end:{line:20,column:62}}},f=typeof p==u?p.call(a,m):p,null!=(f=c(e,"label")?f:i.call(n,f,m))&&(s+=f),s+";\n"},29:function(l,n,e,t,o){var a=null!=n?n:l.nullContext||{},r=l.hooks.helperMissing,u="function",i=l.hooks.blockHelperMissing,c=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},s=" [",p=null!=(p=c(e,"color")||(null!=n?c(n,"color"):n))?p:r,m={name:"color",hash:{},fn:l.program(30,o,0),inverse:l.noop,data:o,loc:{start:{line:19,column:32},end:{line:19,column:68}}},f=typeof p==u?p.call(a,m):p;return null!=(f=c(e,"color")?f:i.call(n,f,m))&&(s+=f),p=null!=(p=c(e,"type")||(null!=n?c(n,"type"):n))?p:r,m={name:"type",hash:{},fn:l.program(32,o,0),inverse:l.noop,data:o,loc:{start:{line:19,column:69},end:{line:19,column:102}}},f=typeof p==u?p.call(a,m):p,null!=(f=c(e,"type")?f:i.call(n,f,m))&&(s+=f),s+"]"},30:function(l,n,e,t,o){return'color="'+(null!=(l=l.lambda(n,n))?l:"")+'"'},32:function(l,n,e,t,o){return" type="+(null!=(l=l.lambda(n,n))?l:"")},34:function(l,n,e,t,o){var a=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return": "+(null!=(e=(a(e,"quotifyLabel")||n&&a(n,"quotifyLabel")||l.hooks.helperMissing).call(null!=n?n:l.nullContext||{},n,{name:"quotifyLabel",hash:{},fn:l.program(4,o,0),inverse:l.noop,data:o,loc:{start:{line:20,column:16},end:{line:20,column:52}}}))?e:"")},compiler:[8,">= 4.3.0"],main:function(l,n,e,t,o){var a=null!=n?n:l.nullContext||{},r=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},u=(null!=(c=r(e,"each").call(a,null!=n?r(n,"states"):n,{name:"each",hash:{},fn:l.program(1,o,0),inverse:l.noop,data:o,loc:{start:{line:1,column:0},end:{line:12,column:9}}}))?c:"")+"\n",i=null!=(i=r(e,"transitions")||(null!=n?r(n,"transitions"):n))?i:l.hooks.helperMissing,o={name:"transitions",hash:{},fn:l.program(28,o,0),inverse:l.noop,data:o,loc:{start:{line:14,column:0},end:{line:21,column:16}}},c="function"==typeof i?i.call(a,o):i;return null!=(c=r(e,"transitions")?c:l.hooks.blockHelperMissing.call(n,c,o))&&(u+=c),u},usePartial:!0,useData:!0});