fix: resolve properties before direct HTML generation

This commit is contained in:
2026-06-16 19:09:00 +02:00
parent a9d40aaf8c
commit 79ddb307c1
29 changed files with 1876 additions and 211 deletions

View File

@@ -580,7 +580,8 @@
"guard" : {
"expression" : "guardVarEquals(\"value1\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 86
},
"actions" : [ ],
"order" : 0
@@ -598,7 +599,8 @@
"guard" : {
"expression" : "guardVarEquals(\"value2\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 87
},
"actions" : [ ],
"order" : 1
@@ -630,7 +632,8 @@
"guard" : {
"expression" : "guardEventHeaderEquals(\"header1\",\"foo\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 92
},
"actions" : [ ],
"order" : 0
@@ -662,7 +665,8 @@
"guard" : {
"expression" : "guardVarEquals(\"value3\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 97
},
"actions" : [ ],
"order" : 0
@@ -694,7 +698,8 @@
"guard" : {
"expression" : "guardVarEquals(\"reset\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 102
},
"actions" : [ ],
"order" : 0
@@ -726,7 +731,8 @@
"guard" : {
"expression" : "guardEventHeaderEquals(\"header2\",\"bar\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 107
},
"actions" : [ ],
"order" : 0
@@ -758,7 +764,8 @@
"guard" : {
"expression" : "guardVarEquals(\"goTo13\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 112
},
"actions" : [ ],
"order" : 0
@@ -776,7 +783,8 @@
"guard" : {
"expression" : "guardVarEquals(\"goTo14\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 113
},
"actions" : [ ],
"order" : 1
@@ -808,7 +816,8 @@
"guard" : {
"expression" : "guardVarEquals(\"goBack10\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 118
},
"actions" : [ ],
"order" : 0
@@ -840,7 +849,8 @@
"guard" : {
"expression" : "guardVarEquals(\"loop12\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 123
},
"actions" : [ ],
"order" : 0
@@ -872,7 +882,8 @@
"guard" : {
"expression" : "guardVarEquals(\"stepBack\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 128
},
"actions" : [ ],
"order" : 0
@@ -890,7 +901,8 @@
"guard" : {
"expression" : "guardVarEquals(\"stepBackMore\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 129
},
"actions" : [ ],
"order" : 1
@@ -922,7 +934,8 @@
"guard" : {
"expression" : "guardVarEquals(\"forward9\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 134
},
"actions" : [ ],
"order" : 0
@@ -950,7 +963,9 @@
"entryPoints" : [ ],
"callChains" : [ ],
"properties" : {
"spring.application.name" : "statemachinedemo"
"default" : {
"spring.application.name" : "statemachinedemo"
}
}
}
}
@@ -1205,7 +1220,8 @@
</div>`;
if (trans && trans.guard) {
html += `<div style="font-size:0.7rem; font-weight:800; color:#94a3b8; text-transform:uppercase; margin-bottom:4px">Guard</div>
const lineInfo = trans.guard.lineNumber ? ` <span style="color:#94a3b8; font-weight:400; font-size:0.6rem;">(Line: ${trans.guard.lineNumber})</span>` : '';
html += `<div style="font-size:0.7rem; font-weight:800; color:#94a3b8; text-transform:uppercase; margin-bottom:4px">Guard${lineInfo}</div>
<div style="background:#f1f5f9; padding:6px; border-radius:4px; font-family:monospace; font-size:0.8rem; margin-bottom:12px; border:1px solid #e2e8f0;">${trans.guard.expression}</div>`;
if (trans.guard.internalLogic) {
html += `<div style="font-size:0.65rem; font-weight:800; color:#cbd5e1; text-transform:uppercase; margin-bottom:4px">Internal Logic</div>
@@ -1216,7 +1232,9 @@
if (trans && trans.actions && trans.actions.length > 0) {
html += `<div style="font-size:0.7rem; font-weight:800; color:#94a3b8; text-transform:uppercase; margin-bottom:4px">Actions</div>`;
trans.actions.forEach(action => {
html += `<div style="background:#f1f5f9; padding:6px; border-radius:4px; font-family:monospace; font-size:0.8rem; margin-bottom:12px; border:1px solid #e2e8f0;">${action.expression}</div>`;
const lineInfo = action.lineNumber ? ` <span style="color:#94a3b8; font-weight:400; font-size:0.6rem;">(Line: ${action.lineNumber})</span>` : '';
html += `<div style="font-size:0.7rem; font-weight:800; color:#94a3b8; text-transform:uppercase; margin-bottom:4px">Action${lineInfo}</div>
<div style="background:#f1f5f9; padding:6px; border-radius:4px; font-family:monospace; font-size:0.8rem; margin-bottom:12px; border:1px solid #e2e8f0;">${action.expression}</div>`;
if (action.internalLogic) {
html += `<div style="font-size:0.65rem; font-weight:800; color:#cbd5e1; text-transform:uppercase; margin-bottom:4px">Internal Logic</div>
<pre style="background:#1e293b; color:#f8fafc; padding:8px; border-radius:4px; font-family:'JetBrains Mono', monospace; font-size:0.7rem; overflow-x:auto; margin-bottom:12px;"><code>${action.internalLogic.replace(/</g, '&lt;').replace(/>/g, '&gt;')}</code></pre>`;

View File

@@ -4,7 +4,9 @@
"entryPoints" : [ ],
"callChains" : [ ],
"properties" : {
"spring.application.name" : "statemachinedemo"
"default" : {
"spring.application.name" : "statemachinedemo"
}
}
},
"name" : "click.kamil.examples.statemachine.complex.ComplexStateMachineConfig",
@@ -234,7 +236,8 @@
"guard" : {
"expression" : "guardVarEquals(\"value1\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 86
},
"actions" : [ ],
"order" : 0
@@ -252,7 +255,8 @@
"guard" : {
"expression" : "guardVarEquals(\"value2\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 87
},
"actions" : [ ],
"order" : 1
@@ -284,7 +288,8 @@
"guard" : {
"expression" : "guardEventHeaderEquals(\"header1\",\"foo\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 92
},
"actions" : [ ],
"order" : 0
@@ -316,7 +321,8 @@
"guard" : {
"expression" : "guardVarEquals(\"value3\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 97
},
"actions" : [ ],
"order" : 0
@@ -348,7 +354,8 @@
"guard" : {
"expression" : "guardVarEquals(\"reset\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 102
},
"actions" : [ ],
"order" : 0
@@ -380,7 +387,8 @@
"guard" : {
"expression" : "guardEventHeaderEquals(\"header2\",\"bar\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 107
},
"actions" : [ ],
"order" : 0
@@ -412,7 +420,8 @@
"guard" : {
"expression" : "guardVarEquals(\"goTo13\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 112
},
"actions" : [ ],
"order" : 0
@@ -430,7 +439,8 @@
"guard" : {
"expression" : "guardVarEquals(\"goTo14\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 113
},
"actions" : [ ],
"order" : 1
@@ -462,7 +472,8 @@
"guard" : {
"expression" : "guardVarEquals(\"goBack10\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 118
},
"actions" : [ ],
"order" : 0
@@ -494,7 +505,8 @@
"guard" : {
"expression" : "guardVarEquals(\"loop12\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 123
},
"actions" : [ ],
"order" : 0
@@ -526,7 +538,8 @@
"guard" : {
"expression" : "guardVarEquals(\"stepBack\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 128
},
"actions" : [ ],
"order" : 0
@@ -544,7 +557,8 @@
"guard" : {
"expression" : "guardVarEquals(\"stepBackMore\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 129
},
"actions" : [ ],
"order" : 1
@@ -576,7 +590,8 @@
"guard" : {
"expression" : "guardVarEquals(\"forward9\")",
"isLambda" : false,
"internalLogic" : null
"internalLogic" : null,
"lineNumber" : 134
},
"actions" : [ ],
"order" : 0

View File

@@ -304,9 +304,6 @@
}, {
"rawName" : "\"CHECK_AVAILABILITY\"",
"fullIdentifier" : "CHECK_AVAILABILITY"
}, {
"rawName" : "NEW",
"fullIdentifier" : "NEW"
}, {
"rawName" : "RETURNED",
"fullIdentifier" : "RETURNED"
@@ -316,6 +313,9 @@
}, {
"rawName" : "CANCELLED",
"fullIdentifier" : "CANCELLED"
}, {
"rawName" : "${order.initial.state:NEW}",
"fullIdentifier" : "NEW"
}, {
"rawName" : "\"PENDING_PAYMENT\"",
"fullIdentifier" : "PENDING_PAYMENT"
@@ -360,7 +360,8 @@
"guard" : {
"expression" : "(c) -> true",
"isLambda" : true,
"internalLogic" : null
"internalLogic" : "(c) -> true",
"lineNumber" : 41
},
"actions" : [ ],
"order" : 0
@@ -727,7 +728,9 @@
"lineNumber" : 17
}
} ],
"properties" : { }
"properties" : {
"default" : { }
}
}
}
</script>
@@ -931,13 +934,9 @@
let metaTrans = null;
if (isAnon) {
const parts = linkId.split('_'); // link_anon_SRC_TGT
const src = parts[2];
const tgt = parts[3];
metaTrans = transitions.find(t =>
!t.event &&
normalize(t.sourceStates[0].fullIdentifier) === src &&
normalize(t.targetStates[0].fullIdentifier) === tgt
"anon_" + normalize(t.sourceStates[0].fullIdentifier) + "_" + normalize(t.targetStates[0].fullIdentifier) === linkId
);
} else {
metaTrans = transitions.find(t => normalize(t.event) === linkId);
@@ -981,7 +980,8 @@
</div>`;
if (trans && trans.guard) {
html += `<div style="font-size:0.7rem; font-weight:800; color:#94a3b8; text-transform:uppercase; margin-bottom:4px">Guard</div>
const lineInfo = trans.guard.lineNumber ? ` <span style="color:#94a3b8; font-weight:400; font-size:0.6rem;">(Line: ${trans.guard.lineNumber})</span>` : '';
html += `<div style="font-size:0.7rem; font-weight:800; color:#94a3b8; text-transform:uppercase; margin-bottom:4px">Guard${lineInfo}</div>
<div style="background:#f1f5f9; padding:6px; border-radius:4px; font-family:monospace; font-size:0.8rem; margin-bottom:12px; border:1px solid #e2e8f0;">${trans.guard.expression}</div>`;
if (trans.guard.internalLogic) {
html += `<div style="font-size:0.65rem; font-weight:800; color:#cbd5e1; text-transform:uppercase; margin-bottom:4px">Internal Logic</div>
@@ -992,7 +992,9 @@
if (trans && trans.actions && trans.actions.length > 0) {
html += `<div style="font-size:0.7rem; font-weight:800; color:#94a3b8; text-transform:uppercase; margin-bottom:4px">Actions</div>`;
trans.actions.forEach(action => {
html += `<div style="background:#f1f5f9; padding:6px; border-radius:4px; font-family:monospace; font-size:0.8rem; margin-bottom:12px; border:1px solid #e2e8f0;">${action.expression}</div>`;
const lineInfo = action.lineNumber ? ` <span style="color:#94a3b8; font-weight:400; font-size:0.6rem;">(Line: ${action.lineNumber})</span>` : '';
html += `<div style="font-size:0.7rem; font-weight:800; color:#94a3b8; text-transform:uppercase; margin-bottom:4px">Action${lineInfo}</div>
<div style="background:#f1f5f9; padding:6px; border-radius:4px; font-family:monospace; font-size:0.8rem; margin-bottom:12px; border:1px solid #e2e8f0;">${action.expression}</div>`;
if (action.internalLogic) {
html += `<div style="font-size:0.65rem; font-weight:800; color:#cbd5e1; text-transform:uppercase; margin-bottom:4px">Internal Logic</div>
<pre style="background:#1e293b; color:#f8fafc; padding:8px; border-radius:4px; font-family:'JetBrains Mono', monospace; font-size:0.7rem; overflow-x:auto; margin-bottom:12px;"><code>${action.internalLogic.replace(/</g, '&lt;').replace(/>/g, '&gt;')}</code></pre>`;

View File

@@ -261,7 +261,9 @@
"lineNumber" : 17
}
} ],
"properties" : { }
"properties" : {
"default" : { }
}
},
"name" : "click.kamil.examples.enterprise.config.EnterpriseStateMachineConfig",
"renderChoicesAsDiamonds" : true,
@@ -294,7 +296,8 @@
"guard" : {
"expression" : "(c) -> true",
"isLambda" : true,
"internalLogic" : null
"internalLogic" : "(c) -> true",
"lineNumber" : 41
},
"actions" : [ ],
"order" : 0

View File

@@ -261,11 +261,13 @@
"lineNumber" : 17
}
} ],
"properties" : { }
"properties" : {
"default" : { }
}
},
"name" : "click.kamil.examples.enterprise.config.EnterpriseStateMachineConfig",
"renderChoicesAsDiamonds" : false,
"startStates" : [ "NEW" ],
"startStates" : [ "${order.initial.state:NEW}" ],
"transitions" : [ {
"type" : "EXTERNAL",
"sourceStates" : [ {
@@ -294,7 +296,8 @@
"guard" : {
"expression" : "(c) -> true",
"isLambda" : true,
"internalLogic" : null
"internalLogic" : "(c) -> true",
"lineNumber" : 41
},
"actions" : [ ],
"order" : 0

View File

@@ -495,13 +495,9 @@
let metaTrans = null;
if (isAnon) {
const parts = linkId.split('_'); // link_anon_SRC_TGT
const src = parts[2];
const tgt = parts[3];
metaTrans = transitions.find(t =>
!t.event &&
normalize(t.sourceStates[0].fullIdentifier) === src &&
normalize(t.targetStates[0].fullIdentifier) === tgt
"anon_" + normalize(t.sourceStates[0].fullIdentifier) + "_" + normalize(t.targetStates[0].fullIdentifier) === linkId
);
} else {
metaTrans = transitions.find(t => normalize(t.event) === linkId);
@@ -545,7 +541,8 @@
</div>`;
if (trans && trans.guard) {
html += `<div style="font-size:0.7rem; font-weight:800; color:#94a3b8; text-transform:uppercase; margin-bottom:4px">Guard</div>
const lineInfo = trans.guard.lineNumber ? ` <span style="color:#94a3b8; font-weight:400; font-size:0.6rem;">(Line: ${trans.guard.lineNumber})</span>` : '';
html += `<div style="font-size:0.7rem; font-weight:800; color:#94a3b8; text-transform:uppercase; margin-bottom:4px">Guard${lineInfo}</div>
<div style="background:#f1f5f9; padding:6px; border-radius:4px; font-family:monospace; font-size:0.8rem; margin-bottom:12px; border:1px solid #e2e8f0;">${trans.guard.expression}</div>`;
if (trans.guard.internalLogic) {
html += `<div style="font-size:0.65rem; font-weight:800; color:#cbd5e1; text-transform:uppercase; margin-bottom:4px">Internal Logic</div>
@@ -556,7 +553,9 @@
if (trans && trans.actions && trans.actions.length > 0) {
html += `<div style="font-size:0.7rem; font-weight:800; color:#94a3b8; text-transform:uppercase; margin-bottom:4px">Actions</div>`;
trans.actions.forEach(action => {
html += `<div style="background:#f1f5f9; padding:6px; border-radius:4px; font-family:monospace; font-size:0.8rem; margin-bottom:12px; border:1px solid #e2e8f0;">${action.expression}</div>`;
const lineInfo = action.lineNumber ? ` <span style="color:#94a3b8; font-weight:400; font-size:0.6rem;">(Line: ${action.lineNumber})</span>` : '';
html += `<div style="font-size:0.7rem; font-weight:800; color:#94a3b8; text-transform:uppercase; margin-bottom:4px">Action${lineInfo}</div>
<div style="background:#f1f5f9; padding:6px; border-radius:4px; font-family:monospace; font-size:0.8rem; margin-bottom:12px; border:1px solid #e2e8f0;">${action.expression}</div>`;
if (action.internalLogic) {
html += `<div style="font-size:0.65rem; font-weight:800; color:#cbd5e1; text-transform:uppercase; margin-bottom:4px">Internal Logic</div>
<pre style="background:#1e293b; color:#f8fafc; padding:8px; border-radius:4px; font-family:'JetBrains Mono', monospace; font-size:0.7rem; overflow-x:auto; margin-bottom:12px;"><code>${action.internalLogic.replace(/</g, '&lt;').replace(/>/g, '&gt;')}</code></pre>`;