@camcima/finita 1.0.0
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.
- package/README.md +176 -0
- package/dist/Dispatcher.d.ts +11 -0
- package/dist/Dispatcher.d.ts.map +1 -0
- package/dist/Dispatcher.js +30 -0
- package/dist/Dispatcher.js.map +1 -0
- package/dist/Event.d.ts +22 -0
- package/dist/Event.d.ts.map +1 -0
- package/dist/Event.js +54 -0
- package/dist/Event.js.map +1 -0
- package/dist/MaybePromise.d.ts +2 -0
- package/dist/MaybePromise.d.ts.map +1 -0
- package/dist/MaybePromise.js +2 -0
- package/dist/MaybePromise.js.map +1 -0
- package/dist/Process.d.ts +15 -0
- package/dist/Process.d.ts.map +1 -0
- package/dist/Process.js +43 -0
- package/dist/Process.js.map +1 -0
- package/dist/State.d.ts +22 -0
- package/dist/State.d.ts.map +1 -0
- package/dist/State.js +65 -0
- package/dist/State.js.map +1 -0
- package/dist/StateCollection.d.ts +14 -0
- package/dist/StateCollection.d.ts.map +1 -0
- package/dist/StateCollection.js +37 -0
- package/dist/StateCollection.js.map +1 -0
- package/dist/Statemachine.d.ts +45 -0
- package/dist/Statemachine.d.ts.map +1 -0
- package/dist/Statemachine.js +206 -0
- package/dist/Statemachine.js.map +1 -0
- package/dist/Transition.d.ts +19 -0
- package/dist/Transition.d.ts.map +1 -0
- package/dist/Transition.js +46 -0
- package/dist/Transition.js.map +1 -0
- package/dist/condition/AndComposite.d.ts +9 -0
- package/dist/condition/AndComposite.d.ts.map +1 -0
- package/dist/condition/AndComposite.js +23 -0
- package/dist/condition/AndComposite.js.map +1 -0
- package/dist/condition/CallbackCondition.d.ts +11 -0
- package/dist/condition/CallbackCondition.d.ts.map +1 -0
- package/dist/condition/CallbackCondition.js +15 -0
- package/dist/condition/CallbackCondition.js.map +1 -0
- package/dist/condition/Contradiction.d.ts +8 -0
- package/dist/condition/Contradiction.d.ts.map +1 -0
- package/dist/condition/Contradiction.js +13 -0
- package/dist/condition/Contradiction.js.map +1 -0
- package/dist/condition/Not.d.ts +8 -0
- package/dist/condition/Not.d.ts.map +1 -0
- package/dist/condition/Not.js +13 -0
- package/dist/condition/Not.js.map +1 -0
- package/dist/condition/OrComposite.d.ts +9 -0
- package/dist/condition/OrComposite.d.ts.map +1 -0
- package/dist/condition/OrComposite.js +23 -0
- package/dist/condition/OrComposite.js.map +1 -0
- package/dist/condition/Tautology.d.ts +8 -0
- package/dist/condition/Tautology.d.ts.map +1 -0
- package/dist/condition/Tautology.js +13 -0
- package/dist/condition/Tautology.js.map +1 -0
- package/dist/condition/Timeout.d.ts +10 -0
- package/dist/condition/Timeout.d.ts.map +1 -0
- package/dist/condition/Timeout.js +30 -0
- package/dist/condition/Timeout.js.map +1 -0
- package/dist/condition/index.d.ts +9 -0
- package/dist/condition/index.d.ts.map +1 -0
- package/dist/condition/index.js +8 -0
- package/dist/condition/index.js.map +1 -0
- package/dist/error/DuplicateStateError.d.ts +5 -0
- package/dist/error/DuplicateStateError.d.ts.map +1 -0
- package/dist/error/DuplicateStateError.js +9 -0
- package/dist/error/DuplicateStateError.js.map +1 -0
- package/dist/error/LockCanNotBeAcquiredError.d.ts +4 -0
- package/dist/error/LockCanNotBeAcquiredError.d.ts.map +1 -0
- package/dist/error/LockCanNotBeAcquiredError.js +7 -0
- package/dist/error/LockCanNotBeAcquiredError.js.map +1 -0
- package/dist/error/WrongEventForStateError.d.ts +6 -0
- package/dist/error/WrongEventForStateError.d.ts.map +1 -0
- package/dist/error/WrongEventForStateError.js +11 -0
- package/dist/error/WrongEventForStateError.js.map +1 -0
- package/dist/error/index.d.ts +4 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/error/index.js +4 -0
- package/dist/error/index.js.map +1 -0
- package/dist/factory/AbstractNamedProcessDetector.d.ts +10 -0
- package/dist/factory/AbstractNamedProcessDetector.d.ts.map +1 -0
- package/dist/factory/AbstractNamedProcessDetector.js +18 -0
- package/dist/factory/AbstractNamedProcessDetector.js.map +1 -0
- package/dist/factory/Factory.d.ts +22 -0
- package/dist/factory/Factory.d.ts.map +1 -0
- package/dist/factory/Factory.js +42 -0
- package/dist/factory/Factory.js.map +1 -0
- package/dist/factory/SingleProcessDetector.d.ts +8 -0
- package/dist/factory/SingleProcessDetector.d.ts.map +1 -0
- package/dist/factory/SingleProcessDetector.js +10 -0
- package/dist/factory/SingleProcessDetector.js.map +1 -0
- package/dist/factory/StatefulStateNameDetector.d.ts +5 -0
- package/dist/factory/StatefulStateNameDetector.d.ts.map +1 -0
- package/dist/factory/StatefulStateNameDetector.js +15 -0
- package/dist/factory/StatefulStateNameDetector.js.map +1 -0
- package/dist/factory/index.d.ts +5 -0
- package/dist/factory/index.d.ts.map +1 -0
- package/dist/factory/index.js +5 -0
- package/dist/factory/index.js.map +1 -0
- package/dist/filter/ActiveTransitionFilter.d.ts +6 -0
- package/dist/filter/ActiveTransitionFilter.d.ts.map +1 -0
- package/dist/filter/ActiveTransitionFilter.js +12 -0
- package/dist/filter/ActiveTransitionFilter.js.map +1 -0
- package/dist/filter/FilterStateByEvent.d.ts +5 -0
- package/dist/filter/FilterStateByEvent.d.ts.map +1 -0
- package/dist/filter/FilterStateByEvent.js +10 -0
- package/dist/filter/FilterStateByEvent.js.map +1 -0
- package/dist/filter/FilterStateByFinalState.d.ts +5 -0
- package/dist/filter/FilterStateByFinalState.d.ts.map +1 -0
- package/dist/filter/FilterStateByFinalState.js +15 -0
- package/dist/filter/FilterStateByFinalState.js.map +1 -0
- package/dist/filter/FilterStateByTransition.d.ts +8 -0
- package/dist/filter/FilterStateByTransition.d.ts.map +1 -0
- package/dist/filter/FilterStateByTransition.js +16 -0
- package/dist/filter/FilterStateByTransition.js.map +1 -0
- package/dist/filter/FilterTransitionByEvent.d.ts +5 -0
- package/dist/filter/FilterTransitionByEvent.d.ts.map +1 -0
- package/dist/filter/FilterTransitionByEvent.js +10 -0
- package/dist/filter/FilterTransitionByEvent.js.map +1 -0
- package/dist/filter/index.d.ts +6 -0
- package/dist/filter/index.d.ts.map +1 -0
- package/dist/filter/index.js +6 -0
- package/dist/filter/index.js.map +1 -0
- package/dist/graph/GraphBuilder.d.ts +37 -0
- package/dist/graph/GraphBuilder.d.ts.map +1 -0
- package/dist/graph/GraphBuilder.js +132 -0
- package/dist/graph/GraphBuilder.js.map +1 -0
- package/dist/graph/index.d.ts +3 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +2 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/ConditionInterface.d.ts +6 -0
- package/dist/interfaces/ConditionInterface.d.ts.map +1 -0
- package/dist/interfaces/ConditionInterface.js +2 -0
- package/dist/interfaces/ConditionInterface.js.map +1 -0
- package/dist/interfaces/DispatcherInterface.d.ts +11 -0
- package/dist/interfaces/DispatcherInterface.d.ts.map +1 -0
- package/dist/interfaces/DispatcherInterface.js +2 -0
- package/dist/interfaces/DispatcherInterface.js.map +1 -0
- package/dist/interfaces/EventInterface.d.ts +12 -0
- package/dist/interfaces/EventInterface.d.ts.map +1 -0
- package/dist/interfaces/EventInterface.js +2 -0
- package/dist/interfaces/EventInterface.js.map +1 -0
- package/dist/interfaces/FactoryInterface.d.ts +13 -0
- package/dist/interfaces/FactoryInterface.d.ts.map +1 -0
- package/dist/interfaces/FactoryInterface.js +2 -0
- package/dist/interfaces/FactoryInterface.js.map +1 -0
- package/dist/interfaces/LastStateHasChangedDateInterface.d.ts +4 -0
- package/dist/interfaces/LastStateHasChangedDateInterface.d.ts.map +1 -0
- package/dist/interfaces/LastStateHasChangedDateInterface.js +2 -0
- package/dist/interfaces/LastStateHasChangedDateInterface.js.map +1 -0
- package/dist/interfaces/LockAdapterInterface.d.ts +7 -0
- package/dist/interfaces/LockAdapterInterface.d.ts.map +1 -0
- package/dist/interfaces/LockAdapterInterface.js +2 -0
- package/dist/interfaces/LockAdapterInterface.js.map +1 -0
- package/dist/interfaces/LoggerInterface.d.ts +4 -0
- package/dist/interfaces/LoggerInterface.d.ts.map +1 -0
- package/dist/interfaces/LoggerInterface.js +2 -0
- package/dist/interfaces/LoggerInterface.js.map +1 -0
- package/dist/interfaces/Metadata.d.ts +4 -0
- package/dist/interfaces/Metadata.d.ts.map +1 -0
- package/dist/interfaces/Metadata.js +2 -0
- package/dist/interfaces/Metadata.js.map +1 -0
- package/dist/interfaces/MutexFactoryInterface.d.ts +6 -0
- package/dist/interfaces/MutexFactoryInterface.d.ts.map +1 -0
- package/dist/interfaces/MutexFactoryInterface.js +2 -0
- package/dist/interfaces/MutexFactoryInterface.js.map +1 -0
- package/dist/interfaces/MutexInterface.d.ts +8 -0
- package/dist/interfaces/MutexInterface.d.ts.map +1 -0
- package/dist/interfaces/MutexInterface.js +2 -0
- package/dist/interfaces/MutexInterface.js.map +1 -0
- package/dist/interfaces/Named.d.ts +4 -0
- package/dist/interfaces/Named.d.ts.map +1 -0
- package/dist/interfaces/Named.js +2 -0
- package/dist/interfaces/Named.js.map +1 -0
- package/dist/interfaces/Observer.d.ts +11 -0
- package/dist/interfaces/Observer.d.ts.map +1 -0
- package/dist/interfaces/Observer.js +2 -0
- package/dist/interfaces/Observer.js.map +1 -0
- package/dist/interfaces/ProcessDetectorInterface.d.ts +5 -0
- package/dist/interfaces/ProcessDetectorInterface.d.ts.map +1 -0
- package/dist/interfaces/ProcessDetectorInterface.js +2 -0
- package/dist/interfaces/ProcessDetectorInterface.js.map +1 -0
- package/dist/interfaces/ProcessInterface.d.ts +7 -0
- package/dist/interfaces/ProcessInterface.d.ts.map +1 -0
- package/dist/interfaces/ProcessInterface.js +2 -0
- package/dist/interfaces/ProcessInterface.js.map +1 -0
- package/dist/interfaces/StateCollectionInterface.d.ts +7 -0
- package/dist/interfaces/StateCollectionInterface.d.ts.map +1 -0
- package/dist/interfaces/StateCollectionInterface.js +2 -0
- package/dist/interfaces/StateCollectionInterface.js.map +1 -0
- package/dist/interfaces/StateInterface.d.ts +16 -0
- package/dist/interfaces/StateInterface.d.ts.map +1 -0
- package/dist/interfaces/StateInterface.js +2 -0
- package/dist/interfaces/StateInterface.js.map +1 -0
- package/dist/interfaces/StateNameDetectorInterface.d.ts +4 -0
- package/dist/interfaces/StateNameDetectorInterface.d.ts.map +1 -0
- package/dist/interfaces/StateNameDetectorInterface.js +2 -0
- package/dist/interfaces/StateNameDetectorInterface.js.map +1 -0
- package/dist/interfaces/StatefulInterface.d.ts +5 -0
- package/dist/interfaces/StatefulInterface.d.ts.map +1 -0
- package/dist/interfaces/StatefulInterface.js +2 -0
- package/dist/interfaces/StatefulInterface.js.map +1 -0
- package/dist/interfaces/StatemachineInterface.d.ts +20 -0
- package/dist/interfaces/StatemachineInterface.d.ts.map +1 -0
- package/dist/interfaces/StatemachineInterface.js +2 -0
- package/dist/interfaces/StatemachineInterface.js.map +1 -0
- package/dist/interfaces/TransitionInterface.d.ts +12 -0
- package/dist/interfaces/TransitionInterface.d.ts.map +1 -0
- package/dist/interfaces/TransitionInterface.js +2 -0
- package/dist/interfaces/TransitionInterface.js.map +1 -0
- package/dist/interfaces/TransitionSelectorInterface.d.ts +5 -0
- package/dist/interfaces/TransitionSelectorInterface.d.ts.map +1 -0
- package/dist/interfaces/TransitionSelectorInterface.js +2 -0
- package/dist/interfaces/TransitionSelectorInterface.js.map +1 -0
- package/dist/interfaces/Weighted.d.ts +4 -0
- package/dist/interfaces/Weighted.d.ts.map +1 -0
- package/dist/interfaces/Weighted.js +2 -0
- package/dist/interfaces/Weighted.js.map +1 -0
- package/dist/interfaces/index.d.ts +24 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +2 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/mutex/LockAdapterMutex.d.ts +13 -0
- package/dist/mutex/LockAdapterMutex.d.ts.map +1 -0
- package/dist/mutex/LockAdapterMutex.js +32 -0
- package/dist/mutex/LockAdapterMutex.js.map +1 -0
- package/dist/mutex/MutexFactory.d.ts +11 -0
- package/dist/mutex/MutexFactory.d.ts.map +1 -0
- package/dist/mutex/MutexFactory.js +13 -0
- package/dist/mutex/MutexFactory.js.map +1 -0
- package/dist/mutex/NullMutex.d.ts +9 -0
- package/dist/mutex/NullMutex.d.ts.map +1 -0
- package/dist/mutex/NullMutex.js +18 -0
- package/dist/mutex/NullMutex.js.map +1 -0
- package/dist/mutex/index.d.ts +5 -0
- package/dist/mutex/index.d.ts.map +1 -0
- package/dist/mutex/index.js +4 -0
- package/dist/mutex/index.js.map +1 -0
- package/dist/observer/CallbackObserver.d.ts +8 -0
- package/dist/observer/CallbackObserver.d.ts.map +1 -0
- package/dist/observer/CallbackObserver.js +14 -0
- package/dist/observer/CallbackObserver.js.map +1 -0
- package/dist/observer/OnEnterObserver.d.ts +8 -0
- package/dist/observer/OnEnterObserver.d.ts.map +1 -0
- package/dist/observer/OnEnterObserver.js +28 -0
- package/dist/observer/OnEnterObserver.js.map +1 -0
- package/dist/observer/StatefulStatusChanger.d.ts +5 -0
- package/dist/observer/StatefulStatusChanger.d.ts.map +1 -0
- package/dist/observer/StatefulStatusChanger.js +24 -0
- package/dist/observer/StatefulStatusChanger.js.map +1 -0
- package/dist/observer/TransitionLogger.d.ts +9 -0
- package/dist/observer/TransitionLogger.d.ts.map +1 -0
- package/dist/observer/TransitionLogger.js +62 -0
- package/dist/observer/TransitionLogger.js.map +1 -0
- package/dist/observer/index.d.ts +5 -0
- package/dist/observer/index.d.ts.map +1 -0
- package/dist/observer/index.js +5 -0
- package/dist/observer/index.js.map +1 -0
- package/dist/selector/OneOrNoneActiveTransition.d.ts +6 -0
- package/dist/selector/OneOrNoneActiveTransition.d.ts.map +1 -0
- package/dist/selector/OneOrNoneActiveTransition.js +14 -0
- package/dist/selector/OneOrNoneActiveTransition.js.map +1 -0
- package/dist/selector/ScoreTransition.d.ts +9 -0
- package/dist/selector/ScoreTransition.d.ts.map +1 -0
- package/dist/selector/ScoreTransition.js +33 -0
- package/dist/selector/ScoreTransition.js.map +1 -0
- package/dist/selector/WeightTransition.d.ts +9 -0
- package/dist/selector/WeightTransition.d.ts.map +1 -0
- package/dist/selector/WeightTransition.js +26 -0
- package/dist/selector/WeightTransition.js.map +1 -0
- package/dist/selector/index.d.ts +4 -0
- package/dist/selector/index.d.ts.map +1 -0
- package/dist/selector/index.js +4 -0
- package/dist/selector/index.js.map +1 -0
- package/dist/util/SetupHelper.d.ts +17 -0
- package/dist/util/SetupHelper.d.ts.map +1 -0
- package/dist/util/SetupHelper.js +48 -0
- package/dist/util/SetupHelper.js.map +1 -0
- package/dist/util/StateCollectionMerger.d.ts +23 -0
- package/dist/util/StateCollectionMerger.d.ts.map +1 -0
- package/dist/util/StateCollectionMerger.js +83 -0
- package/dist/util/StateCollectionMerger.js.map +1 -0
- package/dist/util/index.d.ts +3 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/index.js +3 -0
- package/dist/util/index.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { State } from "../State.js";
|
|
2
|
+
import { Transition } from "../Transition.js";
|
|
3
|
+
export class SetupHelper {
|
|
4
|
+
stateCollection;
|
|
5
|
+
constructor(stateCollection) {
|
|
6
|
+
this.stateCollection = stateCollection;
|
|
7
|
+
}
|
|
8
|
+
findOrCreateState(name) {
|
|
9
|
+
if (!this.stateCollection.hasState(name)) {
|
|
10
|
+
this.stateCollection.addState(new State(name));
|
|
11
|
+
}
|
|
12
|
+
return this.stateCollection.getState(name);
|
|
13
|
+
}
|
|
14
|
+
findTransition(sourceState, targetState, eventName = null, condition = null) {
|
|
15
|
+
const conditionName = condition ? condition.getName() : null;
|
|
16
|
+
for (const transition of sourceState.getTransitions()) {
|
|
17
|
+
const hasSameTargetState = transition.getTargetState() === targetState;
|
|
18
|
+
const hasSameCondition = transition.getConditionName() === conditionName;
|
|
19
|
+
const hasSameEvent = transition.getEventName() === eventName;
|
|
20
|
+
if (hasSameTargetState && hasSameCondition && hasSameEvent) {
|
|
21
|
+
return transition;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
findOrCreateTransition(sourceStateName, targetStateName, eventName = null, condition = null) {
|
|
27
|
+
const sourceState = this.findOrCreateState(sourceStateName);
|
|
28
|
+
const targetState = this.findOrCreateState(targetStateName);
|
|
29
|
+
let transition = this.findTransition(sourceState, targetState, eventName, condition);
|
|
30
|
+
if (!transition) {
|
|
31
|
+
transition = new Transition(targetState, eventName, condition);
|
|
32
|
+
sourceState.addTransition(transition);
|
|
33
|
+
}
|
|
34
|
+
return transition;
|
|
35
|
+
}
|
|
36
|
+
findOrCreateEvent(sourceStateName, eventName) {
|
|
37
|
+
const sourceState = this.findOrCreateState(sourceStateName);
|
|
38
|
+
return sourceState.getEvent(eventName);
|
|
39
|
+
}
|
|
40
|
+
addCommand(sourceStateName, eventName, command) {
|
|
41
|
+
this.findOrCreateEvent(sourceStateName, eventName).attach(command);
|
|
42
|
+
}
|
|
43
|
+
addCommandAndSelfTransition(sourceStateName, eventName, command) {
|
|
44
|
+
this.addCommand(sourceStateName, eventName, command);
|
|
45
|
+
this.findOrCreateTransition(sourceStateName, sourceStateName, eventName);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=SetupHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SetupHelper.js","sourceRoot":"","sources":["../../src/util/SetupHelper.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,MAAM,OAAO,WAAW;IACH,eAAe,CAAkB;IAEpD,YAAY,eAAgC;QAC1C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,iBAAiB,CAAC,IAAY;QAC5B,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAES,cAAc,CACtB,WAA2B,EAC3B,WAA2B,EAC3B,YAA2B,IAAI,EAC/B,YAAuC,IAAI;QAE3C,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,cAAc,EAAE,EAAE,CAAC;YACtD,MAAM,kBAAkB,GAAG,UAAU,CAAC,cAAc,EAAE,KAAK,WAAW,CAAC;YACvE,MAAM,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,EAAE,KAAK,aAAa,CAAC;YACzE,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,EAAE,KAAK,SAAS,CAAC;YAC7D,IAAI,kBAAkB,IAAI,gBAAgB,IAAI,YAAY,EAAE,CAAC;gBAC3D,OAAO,UAAU,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sBAAsB,CACpB,eAAuB,EACvB,eAAuB,EACvB,YAA2B,IAAI,EAC/B,YAAuC,IAAI;QAE3C,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAC5D,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,CAClC,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,CACV,CAAC;QACF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,UAAU,GAAG,IAAI,UAAU,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YAC/D,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,iBAAiB,CACf,eAAuB,EACvB,SAAiB;QAEjB,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAC5D,OAAO,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,UAAU,CACR,eAAuB,EACvB,SAAiB,EACjB,OAAiB;QAEjB,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,2BAA2B,CACzB,eAAuB,EACvB,SAAiB,EACjB,OAAiB;QAEjB,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,sBAAsB,CAAC,eAAe,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;IAC3E,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { StateCollectionInterface } from "../interfaces/StateCollectionInterface.js";
|
|
2
|
+
import type { StateInterface } from "../interfaces/StateInterface.js";
|
|
3
|
+
import type { TransitionInterface } from "../interfaces/TransitionInterface.js";
|
|
4
|
+
import type { ConditionInterface } from "../interfaces/ConditionInterface.js";
|
|
5
|
+
import { Transition } from "../Transition.js";
|
|
6
|
+
import { StateCollection } from "../StateCollection.js";
|
|
7
|
+
export declare class StateCollectionMerger {
|
|
8
|
+
private readonly targetCollection;
|
|
9
|
+
private stateNamePrefix;
|
|
10
|
+
constructor(targetCollection: StateCollection);
|
|
11
|
+
getStateNamePrefix(): string;
|
|
12
|
+
setStateNamePrefix(prefix: string): void;
|
|
13
|
+
getTargetCollection(): StateCollection;
|
|
14
|
+
protected createState(name: string): StateInterface;
|
|
15
|
+
protected findOrCreateState(name: string): StateInterface;
|
|
16
|
+
protected createCondition(sourceTransition: TransitionInterface): ConditionInterface | null;
|
|
17
|
+
protected createTransition(sourceTransition: TransitionInterface): Transition;
|
|
18
|
+
protected mergeMetadata(source: StateInterface, target: StateInterface): void;
|
|
19
|
+
protected mergeEvent(source: StateInterface, target: StateInterface, eventName: string): void;
|
|
20
|
+
protected mergeState(sourceState: StateInterface): void;
|
|
21
|
+
merge(source: StateCollectionInterface | StateInterface): void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=StateCollectionMerger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateCollectionMerger.d.ts","sourceRoot":"","sources":["../../src/util/StateCollectionMerger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IACnD,OAAO,CAAC,eAAe,CAAM;gBAEjB,gBAAgB,EAAE,eAAe;IAI7C,kBAAkB,IAAI,MAAM;IAI5B,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIxC,mBAAmB,IAAI,eAAe;IAItC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc;IAInD,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc;IAUzD,SAAS,CAAC,eAAe,CACvB,gBAAgB,EAAE,mBAAmB,GACpC,kBAAkB,GAAG,IAAI;IAI5B,SAAS,CAAC,gBAAgB,CACxB,gBAAgB,EAAE,mBAAmB,GACpC,UAAU;IAWb,SAAS,CAAC,aAAa,CACrB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,cAAc,GACrB,IAAI;IAOP,SAAS,CAAC,UAAU,CAClB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,GAChB,IAAI;IAcP,SAAS,CAAC,UAAU,CAAC,WAAW,EAAE,cAAc,GAAG,IAAI;IAcvD,KAAK,CAAC,MAAM,EAAE,wBAAwB,GAAG,cAAc,GAAG,IAAI;CAU/D"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { State } from "../State.js";
|
|
2
|
+
import { Transition } from "../Transition.js";
|
|
3
|
+
export class StateCollectionMerger {
|
|
4
|
+
targetCollection;
|
|
5
|
+
stateNamePrefix = "";
|
|
6
|
+
constructor(targetCollection) {
|
|
7
|
+
this.targetCollection = targetCollection;
|
|
8
|
+
}
|
|
9
|
+
getStateNamePrefix() {
|
|
10
|
+
return this.stateNamePrefix;
|
|
11
|
+
}
|
|
12
|
+
setStateNamePrefix(prefix) {
|
|
13
|
+
this.stateNamePrefix = prefix;
|
|
14
|
+
}
|
|
15
|
+
getTargetCollection() {
|
|
16
|
+
return this.targetCollection;
|
|
17
|
+
}
|
|
18
|
+
createState(name) {
|
|
19
|
+
return new State(name);
|
|
20
|
+
}
|
|
21
|
+
findOrCreateState(name) {
|
|
22
|
+
const prefixedName = this.stateNamePrefix + name;
|
|
23
|
+
if (this.targetCollection.hasState(prefixedName)) {
|
|
24
|
+
return this.targetCollection.getState(prefixedName);
|
|
25
|
+
}
|
|
26
|
+
const state = this.createState(prefixedName);
|
|
27
|
+
this.targetCollection.addState(state);
|
|
28
|
+
return state;
|
|
29
|
+
}
|
|
30
|
+
createCondition(sourceTransition) {
|
|
31
|
+
return sourceTransition.getCondition();
|
|
32
|
+
}
|
|
33
|
+
createTransition(sourceTransition) {
|
|
34
|
+
const targetStateName = sourceTransition.getTargetState().getName();
|
|
35
|
+
const targetState = this.findOrCreateState(targetStateName);
|
|
36
|
+
this.mergeMetadata(sourceTransition.getTargetState(), targetState);
|
|
37
|
+
const eventName = sourceTransition.getEventName();
|
|
38
|
+
const condition = this.createCondition(sourceTransition);
|
|
39
|
+
const transition = new Transition(targetState, eventName, condition);
|
|
40
|
+
transition.setWeight(sourceTransition.getWeight());
|
|
41
|
+
return transition;
|
|
42
|
+
}
|
|
43
|
+
mergeMetadata(source, target) {
|
|
44
|
+
const metadata = source.getMetadata();
|
|
45
|
+
for (const [key, value] of Object.entries(metadata)) {
|
|
46
|
+
target.setMetadataValue(key, value);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
mergeEvent(source, target, eventName) {
|
|
50
|
+
const sourceEvent = source.getEvent(eventName);
|
|
51
|
+
const targetEvent = target.getEvent(eventName);
|
|
52
|
+
const sourceMetadata = sourceEvent.getMetadata();
|
|
53
|
+
for (const [key, value] of Object.entries(sourceMetadata)) {
|
|
54
|
+
targetEvent.setMetadataValue(key, value);
|
|
55
|
+
}
|
|
56
|
+
for (const observer of sourceEvent.getObservers()) {
|
|
57
|
+
targetEvent.attach(observer);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
mergeState(sourceState) {
|
|
61
|
+
const targetState = this.findOrCreateState(sourceState.getName());
|
|
62
|
+
this.mergeMetadata(sourceState, targetState);
|
|
63
|
+
for (const sourceTransition of sourceState.getTransitions()) {
|
|
64
|
+
const targetTransition = this.createTransition(sourceTransition);
|
|
65
|
+
targetState.addTransition(targetTransition);
|
|
66
|
+
}
|
|
67
|
+
for (const eventName of sourceState.getEventNames()) {
|
|
68
|
+
this.mergeEvent(sourceState, targetState, eventName);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
merge(source) {
|
|
72
|
+
if ("getStates" in source && typeof source.getStates === "function") {
|
|
73
|
+
const collection = source;
|
|
74
|
+
for (const state of collection.getStates()) {
|
|
75
|
+
this.mergeState(state);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
this.mergeState(source);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=StateCollectionMerger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateCollectionMerger.js","sourceRoot":"","sources":["../../src/util/StateCollectionMerger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@camcima/finita",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A full-featured finite state machine library for TypeScript",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"test": "vitest run",
|
|
14
|
+
"test:coverage": "vitest run --coverage --reporter=default --reporter=junit --outputFile=test-report.junit.xml",
|
|
15
|
+
"test:watch": "vitest",
|
|
16
|
+
"lint": "tsc --noEmit && eslint src/ tests/",
|
|
17
|
+
"format": "prettier --write .",
|
|
18
|
+
"format:check": "prettier --check .",
|
|
19
|
+
"release": "release-it"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"statemachine",
|
|
23
|
+
"state machine",
|
|
24
|
+
"fsm",
|
|
25
|
+
"status",
|
|
26
|
+
"process"
|
|
27
|
+
],
|
|
28
|
+
"author": "camcima (https://github.com/camcima)",
|
|
29
|
+
"contributors": [
|
|
30
|
+
"metabor (https://github.com/metabor)"
|
|
31
|
+
],
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "git+https://github.com/camcima/finita.git"
|
|
35
|
+
},
|
|
36
|
+
"homepage": "https://github.com/camcima/finita",
|
|
37
|
+
"bugs": {
|
|
38
|
+
"url": "https://github.com/camcima/finita/issues"
|
|
39
|
+
},
|
|
40
|
+
"license": "MIT",
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@eslint/js": "^10.0.1",
|
|
43
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
44
|
+
"eslint": "^10.1.0",
|
|
45
|
+
"eslint-config-prettier": "^10.1.8",
|
|
46
|
+
"prettier": "^3.8.1",
|
|
47
|
+
"release-it": "^19.2.4",
|
|
48
|
+
"typescript": "^5.7.0",
|
|
49
|
+
"typescript-eslint": "^8.57.2",
|
|
50
|
+
"vitest": "^3.0.0"
|
|
51
|
+
}
|
|
52
|
+
}
|