diff --git a/dist/counter.mjs b/dist/counter.mjs
new file mode 100644
index 00000000..f332e6c5
--- /dev/null
+++ b/dist/counter.mjs
@@ -0,0 +1,9 @@
+export class Counter {
+ _lHWM = 0;
+ constructor(pStart = 0) {
+ this._lHWM = pStart;
+ }
+ next() {
+ return ++this._lHWM;
+ }
+}
diff --git a/dist/state-machine-model.mjs b/dist/state-machine-model.mjs
index fbe70549..ff1d3d4c 100644
--- a/dist/state-machine-model.mjs
+++ b/dist/state-machine-model.mjs
@@ -68,6 +68,9 @@ export default class StateMachineModel {
(pTransition) => pTransition.to === pToStateName,
);
}
+ getMaximumTransitionId() {
+ return Math.max(...this._flattenedTransitions.map(({ id }) => id));
+ }
findTransitionsToSiblings(pStateName, pExcludeIds) {
return this._flattenedTransitions.filter(
(pTransition) =>
diff --git a/dist/transform/desugar.mjs b/dist/transform/desugar.mjs
index fad0c346..cc866306 100644
--- a/dist/transform/desugar.mjs
+++ b/dist/transform/desugar.mjs
@@ -1,16 +1,22 @@
import StateMachineModel from "../state-machine-model.mjs";
+import { Counter } from "../counter.mjs";
import utl from "./utl.mjs";
function fuseTransitionAttribute(pIncomingThing, pOutgoingThing, pJoinChar) {
return pIncomingThing
? `${pIncomingThing}${pJoinChar}${pOutgoingThing}`
: pOutgoingThing;
}
-function fuseIncomingToOutgoing(pIncomingTransition, pOutgoingTransition) {
+function fuseIncomingToOutgoing(
+ pIncomingTransition,
+ pOutgoingTransition,
+ pCounter,
+) {
const lReturnValue = {
...pIncomingTransition,
...pOutgoingTransition,
from: pIncomingTransition.from,
to: pOutgoingTransition.to,
+ id: pCounter.next(),
};
if (pOutgoingTransition.action) {
lReturnValue.action = fuseTransitionAttribute(
@@ -32,13 +38,14 @@ function fuseTransitions(
pTransitions,
pPseudoStateNames,
pOutgoingTransitionMap,
+ pCounter,
) {
return pTransitions.reduce((pAll, pTransition) => {
pPseudoStateNames.forEach((pStateName, pIndex) => {
if (pStateName === pTransition.to && pOutgoingTransitionMap[pStateName]) {
pAll = pAll.concat(
pOutgoingTransitionMap[pStateName].map((pOutgoingTransition) =>
- fuseIncomingToOutgoing(pTransition, pOutgoingTransition),
+ fuseIncomingToOutgoing(pTransition, pOutgoingTransition, pCounter),
),
);
} else {
@@ -52,6 +59,7 @@ function deSugarPseudoStates(
pMachine,
pPseudoStateNames,
pOutgoingTransitionMap,
+ pCounter,
) {
const lMachine = structuredClone(pMachine);
if (lMachine.transitions && pPseudoStateNames.length > 0) {
@@ -59,6 +67,7 @@ function deSugarPseudoStates(
lMachine.transitions,
pPseudoStateNames,
pOutgoingTransitionMap,
+ pCounter,
);
}
lMachine.states = lMachine.states.map((pState) =>
@@ -69,6 +78,7 @@ function deSugarPseudoStates(
pState.statemachine,
pPseudoStateNames,
pOutgoingTransitionMap,
+ pCounter,
),
}
: pState,
@@ -117,10 +127,12 @@ export default (
},
{},
);
+ const lMaximumTransitionId = lModel.getMaximumTransitionId();
const lMachine = deSugarPseudoStates(
pMachine,
lPseudoStateNames,
lOutgoingTransitionMap,
+ new Counter(lMaximumTransitionId),
);
return removeStatesCascading(lMachine, lPseudoStateNames);
};
diff --git a/docs/index.html b/docs/index.html
index a57a91ef..a18ed13d 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -35,7 +35,7 @@
-
+
diff --git a/docs/inpage.html b/docs/inpage.html
index 3e802e87..4edd7db2 100644
--- a/docs/inpage.html
+++ b/docs/inpage.html
@@ -23,7 +23,7 @@
src="state-machine-cat-inpage.min.js"
type="module"
defer
- integrity="sha512-9CN180iJ3HTh9OG66+9sLwGvlbPCqSa+CMKzViJ3nm1FV/KvFEOfbHQQvwePPFsGWoqRnXTdZbvv2djiTq389Q=="
+ integrity="sha512-12WmjzUUso9QyOVws/FxWSeM8JEabqFWu2j2xB2193mYrjPnFHDLpJc54Y/4UHSjGkewBlOnl3BblJNeNdMtzA=="
>