@camcima/finita 2.0.0 → 2.1.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.
Files changed (297) hide show
  1. package/LICENSE +21 -0
  2. package/dist/index.cjs +1422 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.cts +525 -0
  5. package/dist/index.d.ts +525 -22
  6. package/dist/index.js +1356 -26
  7. package/dist/index.js.map +1 -1
  8. package/package.json +21 -4
  9. package/dist/Dispatcher.d.ts +0 -11
  10. package/dist/Dispatcher.d.ts.map +0 -1
  11. package/dist/Dispatcher.js +0 -30
  12. package/dist/Dispatcher.js.map +0 -1
  13. package/dist/Event.d.ts +0 -22
  14. package/dist/Event.d.ts.map +0 -1
  15. package/dist/Event.js +0 -54
  16. package/dist/Event.js.map +0 -1
  17. package/dist/MaybePromise.d.ts +0 -2
  18. package/dist/MaybePromise.d.ts.map +0 -1
  19. package/dist/MaybePromise.js +0 -2
  20. package/dist/MaybePromise.js.map +0 -1
  21. package/dist/Process.d.ts +0 -15
  22. package/dist/Process.d.ts.map +0 -1
  23. package/dist/Process.js +0 -43
  24. package/dist/Process.js.map +0 -1
  25. package/dist/State.d.ts +0 -22
  26. package/dist/State.d.ts.map +0 -1
  27. package/dist/State.js +0 -65
  28. package/dist/State.js.map +0 -1
  29. package/dist/StateCollection.d.ts +0 -14
  30. package/dist/StateCollection.d.ts.map +0 -1
  31. package/dist/StateCollection.js +0 -37
  32. package/dist/StateCollection.js.map +0 -1
  33. package/dist/Statemachine.d.ts +0 -45
  34. package/dist/Statemachine.d.ts.map +0 -1
  35. package/dist/Statemachine.js +0 -206
  36. package/dist/Statemachine.js.map +0 -1
  37. package/dist/Transition.d.ts +0 -19
  38. package/dist/Transition.d.ts.map +0 -1
  39. package/dist/Transition.js +0 -46
  40. package/dist/Transition.js.map +0 -1
  41. package/dist/condition/AndComposite.d.ts +0 -9
  42. package/dist/condition/AndComposite.d.ts.map +0 -1
  43. package/dist/condition/AndComposite.js +0 -23
  44. package/dist/condition/AndComposite.js.map +0 -1
  45. package/dist/condition/CallbackCondition.d.ts +0 -11
  46. package/dist/condition/CallbackCondition.d.ts.map +0 -1
  47. package/dist/condition/CallbackCondition.js +0 -15
  48. package/dist/condition/CallbackCondition.js.map +0 -1
  49. package/dist/condition/Contradiction.d.ts +0 -8
  50. package/dist/condition/Contradiction.d.ts.map +0 -1
  51. package/dist/condition/Contradiction.js +0 -13
  52. package/dist/condition/Contradiction.js.map +0 -1
  53. package/dist/condition/Not.d.ts +0 -8
  54. package/dist/condition/Not.d.ts.map +0 -1
  55. package/dist/condition/Not.js +0 -13
  56. package/dist/condition/Not.js.map +0 -1
  57. package/dist/condition/OrComposite.d.ts +0 -9
  58. package/dist/condition/OrComposite.d.ts.map +0 -1
  59. package/dist/condition/OrComposite.js +0 -23
  60. package/dist/condition/OrComposite.js.map +0 -1
  61. package/dist/condition/Tautology.d.ts +0 -8
  62. package/dist/condition/Tautology.d.ts.map +0 -1
  63. package/dist/condition/Tautology.js +0 -13
  64. package/dist/condition/Tautology.js.map +0 -1
  65. package/dist/condition/Timeout.d.ts +0 -10
  66. package/dist/condition/Timeout.d.ts.map +0 -1
  67. package/dist/condition/Timeout.js +0 -30
  68. package/dist/condition/Timeout.js.map +0 -1
  69. package/dist/condition/index.d.ts +0 -9
  70. package/dist/condition/index.d.ts.map +0 -1
  71. package/dist/condition/index.js +0 -8
  72. package/dist/condition/index.js.map +0 -1
  73. package/dist/error/DuplicateStateError.d.ts +0 -5
  74. package/dist/error/DuplicateStateError.d.ts.map +0 -1
  75. package/dist/error/DuplicateStateError.js +0 -9
  76. package/dist/error/DuplicateStateError.js.map +0 -1
  77. package/dist/error/LockCanNotBeAcquiredError.d.ts +0 -4
  78. package/dist/error/LockCanNotBeAcquiredError.d.ts.map +0 -1
  79. package/dist/error/LockCanNotBeAcquiredError.js +0 -7
  80. package/dist/error/LockCanNotBeAcquiredError.js.map +0 -1
  81. package/dist/error/WrongEventForStateError.d.ts +0 -6
  82. package/dist/error/WrongEventForStateError.d.ts.map +0 -1
  83. package/dist/error/WrongEventForStateError.js +0 -11
  84. package/dist/error/WrongEventForStateError.js.map +0 -1
  85. package/dist/error/index.d.ts +0 -4
  86. package/dist/error/index.d.ts.map +0 -1
  87. package/dist/error/index.js +0 -4
  88. package/dist/error/index.js.map +0 -1
  89. package/dist/factory/AbstractNamedProcessDetector.d.ts +0 -10
  90. package/dist/factory/AbstractNamedProcessDetector.d.ts.map +0 -1
  91. package/dist/factory/AbstractNamedProcessDetector.js +0 -18
  92. package/dist/factory/AbstractNamedProcessDetector.js.map +0 -1
  93. package/dist/factory/Factory.d.ts +0 -22
  94. package/dist/factory/Factory.d.ts.map +0 -1
  95. package/dist/factory/Factory.js +0 -42
  96. package/dist/factory/Factory.js.map +0 -1
  97. package/dist/factory/SingleProcessDetector.d.ts +0 -8
  98. package/dist/factory/SingleProcessDetector.d.ts.map +0 -1
  99. package/dist/factory/SingleProcessDetector.js +0 -10
  100. package/dist/factory/SingleProcessDetector.js.map +0 -1
  101. package/dist/factory/StatefulStateNameDetector.d.ts +0 -6
  102. package/dist/factory/StatefulStateNameDetector.d.ts.map +0 -1
  103. package/dist/factory/StatefulStateNameDetector.js +0 -15
  104. package/dist/factory/StatefulStateNameDetector.js.map +0 -1
  105. package/dist/factory/index.d.ts +0 -5
  106. package/dist/factory/index.d.ts.map +0 -1
  107. package/dist/factory/index.js +0 -5
  108. package/dist/factory/index.js.map +0 -1
  109. package/dist/filter/ActiveTransitionFilter.d.ts +0 -6
  110. package/dist/filter/ActiveTransitionFilter.d.ts.map +0 -1
  111. package/dist/filter/ActiveTransitionFilter.js +0 -12
  112. package/dist/filter/ActiveTransitionFilter.js.map +0 -1
  113. package/dist/filter/FilterStateByEvent.d.ts +0 -5
  114. package/dist/filter/FilterStateByEvent.d.ts.map +0 -1
  115. package/dist/filter/FilterStateByEvent.js +0 -10
  116. package/dist/filter/FilterStateByEvent.js.map +0 -1
  117. package/dist/filter/FilterStateByFinalState.d.ts +0 -5
  118. package/dist/filter/FilterStateByFinalState.d.ts.map +0 -1
  119. package/dist/filter/FilterStateByFinalState.js +0 -15
  120. package/dist/filter/FilterStateByFinalState.js.map +0 -1
  121. package/dist/filter/FilterStateByTransition.d.ts +0 -8
  122. package/dist/filter/FilterStateByTransition.d.ts.map +0 -1
  123. package/dist/filter/FilterStateByTransition.js +0 -16
  124. package/dist/filter/FilterStateByTransition.js.map +0 -1
  125. package/dist/filter/FilterTransitionByEvent.d.ts +0 -5
  126. package/dist/filter/FilterTransitionByEvent.d.ts.map +0 -1
  127. package/dist/filter/FilterTransitionByEvent.js +0 -10
  128. package/dist/filter/FilterTransitionByEvent.js.map +0 -1
  129. package/dist/filter/index.d.ts +0 -6
  130. package/dist/filter/index.d.ts.map +0 -1
  131. package/dist/filter/index.js +0 -6
  132. package/dist/filter/index.js.map +0 -1
  133. package/dist/graph/GraphBuilder.d.ts +0 -37
  134. package/dist/graph/GraphBuilder.d.ts.map +0 -1
  135. package/dist/graph/GraphBuilder.js +0 -132
  136. package/dist/graph/GraphBuilder.js.map +0 -1
  137. package/dist/graph/index.d.ts +0 -3
  138. package/dist/graph/index.d.ts.map +0 -1
  139. package/dist/graph/index.js +0 -2
  140. package/dist/graph/index.js.map +0 -1
  141. package/dist/index.d.ts.map +0 -1
  142. package/dist/interfaces/ConditionInterface.d.ts +0 -6
  143. package/dist/interfaces/ConditionInterface.d.ts.map +0 -1
  144. package/dist/interfaces/ConditionInterface.js +0 -2
  145. package/dist/interfaces/ConditionInterface.js.map +0 -1
  146. package/dist/interfaces/DispatcherInterface.d.ts +0 -11
  147. package/dist/interfaces/DispatcherInterface.d.ts.map +0 -1
  148. package/dist/interfaces/DispatcherInterface.js +0 -2
  149. package/dist/interfaces/DispatcherInterface.js.map +0 -1
  150. package/dist/interfaces/EventInterface.d.ts +0 -12
  151. package/dist/interfaces/EventInterface.d.ts.map +0 -1
  152. package/dist/interfaces/EventInterface.js +0 -2
  153. package/dist/interfaces/EventInterface.js.map +0 -1
  154. package/dist/interfaces/FactoryInterface.d.ts +0 -13
  155. package/dist/interfaces/FactoryInterface.d.ts.map +0 -1
  156. package/dist/interfaces/FactoryInterface.js +0 -2
  157. package/dist/interfaces/FactoryInterface.js.map +0 -1
  158. package/dist/interfaces/LastStateHasChangedDateInterface.d.ts +0 -4
  159. package/dist/interfaces/LastStateHasChangedDateInterface.d.ts.map +0 -1
  160. package/dist/interfaces/LastStateHasChangedDateInterface.js +0 -2
  161. package/dist/interfaces/LastStateHasChangedDateInterface.js.map +0 -1
  162. package/dist/interfaces/LockAdapterInterface.d.ts +0 -7
  163. package/dist/interfaces/LockAdapterInterface.d.ts.map +0 -1
  164. package/dist/interfaces/LockAdapterInterface.js +0 -2
  165. package/dist/interfaces/LockAdapterInterface.js.map +0 -1
  166. package/dist/interfaces/LoggerInterface.d.ts +0 -4
  167. package/dist/interfaces/LoggerInterface.d.ts.map +0 -1
  168. package/dist/interfaces/LoggerInterface.js +0 -2
  169. package/dist/interfaces/LoggerInterface.js.map +0 -1
  170. package/dist/interfaces/Metadata.d.ts +0 -4
  171. package/dist/interfaces/Metadata.d.ts.map +0 -1
  172. package/dist/interfaces/Metadata.js +0 -2
  173. package/dist/interfaces/Metadata.js.map +0 -1
  174. package/dist/interfaces/MutexFactoryInterface.d.ts +0 -6
  175. package/dist/interfaces/MutexFactoryInterface.d.ts.map +0 -1
  176. package/dist/interfaces/MutexFactoryInterface.js +0 -2
  177. package/dist/interfaces/MutexFactoryInterface.js.map +0 -1
  178. package/dist/interfaces/MutexInterface.d.ts +0 -8
  179. package/dist/interfaces/MutexInterface.d.ts.map +0 -1
  180. package/dist/interfaces/MutexInterface.js +0 -2
  181. package/dist/interfaces/MutexInterface.js.map +0 -1
  182. package/dist/interfaces/Named.d.ts +0 -4
  183. package/dist/interfaces/Named.d.ts.map +0 -1
  184. package/dist/interfaces/Named.js +0 -2
  185. package/dist/interfaces/Named.js.map +0 -1
  186. package/dist/interfaces/Observer.d.ts +0 -11
  187. package/dist/interfaces/Observer.d.ts.map +0 -1
  188. package/dist/interfaces/Observer.js +0 -2
  189. package/dist/interfaces/Observer.js.map +0 -1
  190. package/dist/interfaces/ProcessDetectorInterface.d.ts +0 -5
  191. package/dist/interfaces/ProcessDetectorInterface.d.ts.map +0 -1
  192. package/dist/interfaces/ProcessDetectorInterface.js +0 -2
  193. package/dist/interfaces/ProcessDetectorInterface.js.map +0 -1
  194. package/dist/interfaces/ProcessInterface.d.ts +0 -7
  195. package/dist/interfaces/ProcessInterface.d.ts.map +0 -1
  196. package/dist/interfaces/ProcessInterface.js +0 -2
  197. package/dist/interfaces/ProcessInterface.js.map +0 -1
  198. package/dist/interfaces/StateCollectionInterface.d.ts +0 -7
  199. package/dist/interfaces/StateCollectionInterface.d.ts.map +0 -1
  200. package/dist/interfaces/StateCollectionInterface.js +0 -2
  201. package/dist/interfaces/StateCollectionInterface.js.map +0 -1
  202. package/dist/interfaces/StateInterface.d.ts +0 -16
  203. package/dist/interfaces/StateInterface.d.ts.map +0 -1
  204. package/dist/interfaces/StateInterface.js +0 -2
  205. package/dist/interfaces/StateInterface.js.map +0 -1
  206. package/dist/interfaces/StateNameDetectorInterface.d.ts +0 -4
  207. package/dist/interfaces/StateNameDetectorInterface.d.ts.map +0 -1
  208. package/dist/interfaces/StateNameDetectorInterface.js +0 -2
  209. package/dist/interfaces/StateNameDetectorInterface.js.map +0 -1
  210. package/dist/interfaces/StatefulInterface.d.ts +0 -5
  211. package/dist/interfaces/StatefulInterface.d.ts.map +0 -1
  212. package/dist/interfaces/StatefulInterface.js +0 -2
  213. package/dist/interfaces/StatefulInterface.js.map +0 -1
  214. package/dist/interfaces/StatemachineInterface.d.ts +0 -20
  215. package/dist/interfaces/StatemachineInterface.d.ts.map +0 -1
  216. package/dist/interfaces/StatemachineInterface.js +0 -2
  217. package/dist/interfaces/StatemachineInterface.js.map +0 -1
  218. package/dist/interfaces/TransitionInterface.d.ts +0 -12
  219. package/dist/interfaces/TransitionInterface.d.ts.map +0 -1
  220. package/dist/interfaces/TransitionInterface.js +0 -2
  221. package/dist/interfaces/TransitionInterface.js.map +0 -1
  222. package/dist/interfaces/TransitionSelectorInterface.d.ts +0 -5
  223. package/dist/interfaces/TransitionSelectorInterface.d.ts.map +0 -1
  224. package/dist/interfaces/TransitionSelectorInterface.js +0 -2
  225. package/dist/interfaces/TransitionSelectorInterface.js.map +0 -1
  226. package/dist/interfaces/Weighted.d.ts +0 -4
  227. package/dist/interfaces/Weighted.d.ts.map +0 -1
  228. package/dist/interfaces/Weighted.js +0 -2
  229. package/dist/interfaces/Weighted.js.map +0 -1
  230. package/dist/interfaces/index.d.ts +0 -24
  231. package/dist/interfaces/index.d.ts.map +0 -1
  232. package/dist/interfaces/index.js +0 -2
  233. package/dist/interfaces/index.js.map +0 -1
  234. package/dist/mutex/LockAdapterMutex.d.ts +0 -13
  235. package/dist/mutex/LockAdapterMutex.d.ts.map +0 -1
  236. package/dist/mutex/LockAdapterMutex.js +0 -32
  237. package/dist/mutex/LockAdapterMutex.js.map +0 -1
  238. package/dist/mutex/MutexFactory.d.ts +0 -11
  239. package/dist/mutex/MutexFactory.d.ts.map +0 -1
  240. package/dist/mutex/MutexFactory.js +0 -13
  241. package/dist/mutex/MutexFactory.js.map +0 -1
  242. package/dist/mutex/NullMutex.d.ts +0 -9
  243. package/dist/mutex/NullMutex.d.ts.map +0 -1
  244. package/dist/mutex/NullMutex.js +0 -18
  245. package/dist/mutex/NullMutex.js.map +0 -1
  246. package/dist/mutex/index.d.ts +0 -5
  247. package/dist/mutex/index.d.ts.map +0 -1
  248. package/dist/mutex/index.js +0 -4
  249. package/dist/mutex/index.js.map +0 -1
  250. package/dist/observer/CallbackObserver.d.ts +0 -8
  251. package/dist/observer/CallbackObserver.d.ts.map +0 -1
  252. package/dist/observer/CallbackObserver.js +0 -14
  253. package/dist/observer/CallbackObserver.js.map +0 -1
  254. package/dist/observer/OnEnterObserver.d.ts +0 -8
  255. package/dist/observer/OnEnterObserver.d.ts.map +0 -1
  256. package/dist/observer/OnEnterObserver.js +0 -28
  257. package/dist/observer/OnEnterObserver.js.map +0 -1
  258. package/dist/observer/StatefulStatusChanger.d.ts +0 -5
  259. package/dist/observer/StatefulStatusChanger.d.ts.map +0 -1
  260. package/dist/observer/StatefulStatusChanger.js +0 -24
  261. package/dist/observer/StatefulStatusChanger.js.map +0 -1
  262. package/dist/observer/TransitionLogger.d.ts +0 -9
  263. package/dist/observer/TransitionLogger.d.ts.map +0 -1
  264. package/dist/observer/TransitionLogger.js +0 -62
  265. package/dist/observer/TransitionLogger.js.map +0 -1
  266. package/dist/observer/index.d.ts +0 -5
  267. package/dist/observer/index.d.ts.map +0 -1
  268. package/dist/observer/index.js +0 -5
  269. package/dist/observer/index.js.map +0 -1
  270. package/dist/selector/OneOrNoneActiveTransition.d.ts +0 -6
  271. package/dist/selector/OneOrNoneActiveTransition.d.ts.map +0 -1
  272. package/dist/selector/OneOrNoneActiveTransition.js +0 -14
  273. package/dist/selector/OneOrNoneActiveTransition.js.map +0 -1
  274. package/dist/selector/ScoreTransition.d.ts +0 -9
  275. package/dist/selector/ScoreTransition.d.ts.map +0 -1
  276. package/dist/selector/ScoreTransition.js +0 -34
  277. package/dist/selector/ScoreTransition.js.map +0 -1
  278. package/dist/selector/WeightTransition.d.ts +0 -9
  279. package/dist/selector/WeightTransition.d.ts.map +0 -1
  280. package/dist/selector/WeightTransition.js +0 -27
  281. package/dist/selector/WeightTransition.js.map +0 -1
  282. package/dist/selector/index.d.ts +0 -4
  283. package/dist/selector/index.d.ts.map +0 -1
  284. package/dist/selector/index.js +0 -4
  285. package/dist/selector/index.js.map +0 -1
  286. package/dist/util/SetupHelper.d.ts +0 -17
  287. package/dist/util/SetupHelper.d.ts.map +0 -1
  288. package/dist/util/SetupHelper.js +0 -48
  289. package/dist/util/SetupHelper.js.map +0 -1
  290. package/dist/util/StateCollectionMerger.d.ts +0 -23
  291. package/dist/util/StateCollectionMerger.d.ts.map +0 -1
  292. package/dist/util/StateCollectionMerger.js +0 -83
  293. package/dist/util/StateCollectionMerger.js.map +0 -1
  294. package/dist/util/index.d.ts +0 -3
  295. package/dist/util/index.d.ts.map +0 -1
  296. package/dist/util/index.js +0 -3
  297. package/dist/util/index.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,22 +1,525 @@
1
- export type { MaybePromise } from "./MaybePromise.js";
2
- export { Event } from "./Event.js";
3
- export { State } from "./State.js";
4
- export { Transition } from "./Transition.js";
5
- export { StateCollection } from "./StateCollection.js";
6
- export { Process } from "./Process.js";
7
- export { Statemachine } from "./Statemachine.js";
8
- export { Dispatcher } from "./Dispatcher.js";
9
- export type { Named, Metadata, Weighted, Observer, ObservableSubject, ConditionInterface, EventInterface, TransitionInterface, StateInterface, StateCollectionInterface, ProcessInterface, StatemachineInterface, MutexInterface, MutexFactoryInterface, LockAdapterInterface, TransitionSelectorInterface, ProcessDetectorInterface, StateNameDetectorInterface, FactoryInterface, StatefulInterface, LastStateHasChangedDateInterface, DispatcherInterface, CallbackInterface, LoggerInterface, } from "./interfaces/index.js";
10
- export { Tautology, Contradiction, CallbackCondition, Timeout, AndComposite, OrComposite, Not, } from "./condition/index.js";
11
- export type { ConditionCallbackFn } from "./condition/index.js";
12
- export { CallbackObserver, StatefulStatusChanger, OnEnterObserver, TransitionLogger, } from "./observer/index.js";
13
- export { ActiveTransitionFilter, FilterStateByEvent, FilterStateByTransition, FilterStateByFinalState, FilterTransitionByEvent, } from "./filter/index.js";
14
- export { OneOrNoneActiveTransition, ScoreTransition, WeightTransition, } from "./selector/index.js";
15
- export { NullMutex, LockAdapterMutex, MutexFactory } from "./mutex/index.js";
16
- export type { StringConverter } from "./mutex/index.js";
17
- export { Factory, SingleProcessDetector, AbstractNamedProcessDetector, StatefulStateNameDetector, } from "./factory/index.js";
18
- export { SetupHelper, StateCollectionMerger } from "./util/index.js";
19
- export { GraphBuilder } from "./graph/index.js";
20
- export type { Graph, GraphNode, GraphEdge, DotOptions, MermaidOptions, } from "./graph/index.js";
21
- export { WrongEventForStateError, LockCanNotBeAcquiredError, DuplicateStateError, } from "./error/index.js";
22
- //# sourceMappingURL=index.d.ts.map
1
+ type MaybePromise<T> = T | Promise<T>;
2
+
3
+ interface Named {
4
+ getName(): string;
5
+ }
6
+
7
+ interface Metadata {
8
+ getMetadata(): Record<string, unknown>;
9
+ }
10
+
11
+ interface Observer {
12
+ update(subject: ObservableSubject): MaybePromise<void>;
13
+ }
14
+ interface ObservableSubject {
15
+ attach(observer: Observer): void;
16
+ detach(observer: Observer): void;
17
+ notify(): Promise<void>;
18
+ getObservers(): Iterable<Observer>;
19
+ }
20
+
21
+ interface EventInterface extends Named, Metadata, ObservableSubject {
22
+ getInvokeArgs(): unknown[];
23
+ invoke(...args: unknown[]): Promise<void>;
24
+ getMetadataValue(key: string): unknown;
25
+ setMetadataValue(key: string, value: unknown): void;
26
+ hasMetadataValue(key: string): boolean;
27
+ deleteMetadataValue(key: string): void;
28
+ }
29
+
30
+ declare class Event implements EventInterface {
31
+ private readonly name;
32
+ private readonly observers;
33
+ private readonly metadata;
34
+ private invokeArgs;
35
+ constructor(name: string);
36
+ getName(): string;
37
+ getInvokeArgs(): unknown[];
38
+ invoke(...args: unknown[]): Promise<void>;
39
+ attach(observer: Observer): void;
40
+ detach(observer: Observer): void;
41
+ notify(): Promise<void>;
42
+ getObservers(): Iterable<Observer>;
43
+ getMetadata(): Record<string, unknown>;
44
+ getMetadataValue(key: string): unknown;
45
+ setMetadataValue(key: string, value: unknown): void;
46
+ hasMetadataValue(key: string): boolean;
47
+ deleteMetadataValue(key: string): void;
48
+ }
49
+
50
+ interface Weighted {
51
+ getWeight(): number;
52
+ }
53
+
54
+ interface ConditionInterface<TSubject = unknown> extends Named {
55
+ checkCondition(subject: TSubject, context: Map<string, unknown>): MaybePromise<boolean>;
56
+ }
57
+
58
+ interface TransitionInterface<TSubject = unknown> extends Weighted {
59
+ getTargetState(): StateInterface;
60
+ getEventName(): string | null;
61
+ getConditionName(): string | null;
62
+ getCondition(): ConditionInterface<TSubject> | null;
63
+ isActive(subject: TSubject, context: Map<string, unknown>, event?: EventInterface): Promise<boolean>;
64
+ }
65
+
66
+ interface StateInterface extends Named, Metadata {
67
+ getTransitions(): Iterable<TransitionInterface>;
68
+ addTransition(transition: TransitionInterface): void;
69
+ getEventNames(): string[];
70
+ hasEvent(name: string): boolean;
71
+ getEvent(name: string): EventInterface;
72
+ getMetadataValue(key: string): unknown;
73
+ setMetadataValue(key: string, value: unknown): void;
74
+ hasMetadataValue(key: string): boolean;
75
+ deleteMetadataValue(key: string): void;
76
+ }
77
+
78
+ declare class State implements StateInterface {
79
+ private readonly name;
80
+ private readonly transitions;
81
+ private readonly events;
82
+ private readonly metadata;
83
+ constructor(name: string);
84
+ getName(): string;
85
+ getTransitions(): Iterable<TransitionInterface>;
86
+ addTransition(transition: TransitionInterface): void;
87
+ getEventNames(): string[];
88
+ hasEvent(name: string): boolean;
89
+ getEvent(name: string): EventInterface;
90
+ getMetadata(): Record<string, unknown>;
91
+ getMetadataValue(key: string): unknown;
92
+ setMetadataValue(key: string, value: unknown): void;
93
+ hasMetadataValue(key: string): boolean;
94
+ deleteMetadataValue(key: string): void;
95
+ }
96
+
97
+ declare class Transition<TSubject = unknown> implements TransitionInterface<TSubject> {
98
+ private readonly targetState;
99
+ private readonly eventName;
100
+ private readonly condition;
101
+ private weight;
102
+ constructor(targetState: StateInterface, eventName?: string | null, condition?: ConditionInterface<TSubject> | null);
103
+ getTargetState(): StateInterface;
104
+ getEventName(): string | null;
105
+ getConditionName(): string | null;
106
+ getCondition(): ConditionInterface<TSubject> | null;
107
+ isActive(subject: TSubject, context: Map<string, unknown>, event?: EventInterface): Promise<boolean>;
108
+ getWeight(): number;
109
+ setWeight(weight: number): void;
110
+ }
111
+
112
+ interface StateCollectionInterface {
113
+ getStates(): Iterable<StateInterface>;
114
+ getState(name: string): StateInterface;
115
+ hasState(name: string): boolean;
116
+ }
117
+
118
+ declare class StateCollectionMerger {
119
+ private readonly targetCollection;
120
+ private stateNamePrefix;
121
+ constructor(targetCollection: StateCollection);
122
+ getStateNamePrefix(): string;
123
+ setStateNamePrefix(prefix: string): void;
124
+ getTargetCollection(): StateCollection;
125
+ protected createState(name: string): StateInterface;
126
+ protected findOrCreateState(name: string): StateInterface;
127
+ protected createCondition(sourceTransition: TransitionInterface): ConditionInterface | null;
128
+ protected createTransition(sourceTransition: TransitionInterface): Transition;
129
+ protected mergeMetadata(source: StateInterface, target: StateInterface): void;
130
+ protected mergeEvent(source: StateInterface, target: StateInterface, eventName: string): void;
131
+ protected mergeState(sourceState: StateInterface): void;
132
+ merge(source: StateCollectionInterface | StateInterface): void;
133
+ }
134
+
135
+ declare class StateCollection implements StateCollectionInterface {
136
+ private readonly states;
137
+ private stateCollectionMerger;
138
+ getState(name: string): StateInterface;
139
+ getStates(): Iterable<StateInterface>;
140
+ hasState(name: string): boolean;
141
+ addState(state: StateInterface): void;
142
+ getStateCollectionMerger(): StateCollectionMerger;
143
+ merge(source: StateCollectionInterface): void;
144
+ }
145
+
146
+ interface ProcessInterface extends Named, StateCollectionInterface {
147
+ getInitialState(): StateInterface;
148
+ }
149
+
150
+ declare class Process implements ProcessInterface {
151
+ private readonly name;
152
+ private readonly initialState;
153
+ private readonly states;
154
+ constructor(name: string, initialState: StateInterface);
155
+ private registerState;
156
+ getName(): string;
157
+ getInitialState(): StateInterface;
158
+ getStates(): Iterable<StateInterface>;
159
+ getState(name: string): StateInterface;
160
+ hasState(name: string): boolean;
161
+ }
162
+
163
+ interface StatemachineInterface<TSubject = unknown> extends ObservableSubject {
164
+ getCurrentState(): StateInterface;
165
+ getSubject(): TSubject;
166
+ getProcess(): ProcessInterface;
167
+ triggerEvent(name: string, context?: Map<string, unknown>): Promise<void>;
168
+ checkTransitions(context?: Map<string, unknown>): Promise<void>;
169
+ getSelectedTransition(): TransitionInterface<TSubject> | null;
170
+ getLastState(): StateInterface | null;
171
+ getCurrentContext(): Map<string, unknown> | null;
172
+ acquireLock(): Promise<boolean>;
173
+ releaseLock(): Promise<void>;
174
+ isLockAcquired(): boolean;
175
+ isAutoreleaseLock(): boolean;
176
+ setAutoreleaseLock(autorelease: boolean): void;
177
+ }
178
+
179
+ interface MutexInterface {
180
+ acquireLock(): MaybePromise<boolean>;
181
+ releaseLock(): MaybePromise<boolean>;
182
+ isAcquired(): boolean;
183
+ isLocked(): MaybePromise<boolean>;
184
+ }
185
+
186
+ interface TransitionSelectorInterface<TSubject = unknown> {
187
+ selectTransition(transitions: Iterable<TransitionInterface<TSubject>>): TransitionInterface<TSubject> | null;
188
+ }
189
+
190
+ interface CallbackInterface {
191
+ invoke(): MaybePromise<void>;
192
+ }
193
+ interface DispatcherInterface extends CallbackInterface {
194
+ dispatch(event: EventInterface, args?: unknown[], onReadyCallback?: CallbackInterface): void;
195
+ isReady(): boolean;
196
+ invoke(): Promise<void>;
197
+ }
198
+
199
+ declare class Statemachine<TSubject = unknown> implements StatemachineInterface<TSubject> {
200
+ private readonly subject;
201
+ private currentState;
202
+ private lastState;
203
+ private readonly transitionSelector;
204
+ private selectedTransition;
205
+ private readonly process;
206
+ private readonly mutex;
207
+ private autoreleaseLock;
208
+ private dispatcher;
209
+ private currentEvent;
210
+ private currentContext;
211
+ private readonly observers;
212
+ constructor(subject: TSubject, process: ProcessInterface, stateName?: string | null, transitionSelector?: TransitionSelectorInterface<TSubject> | null, mutex?: MutexInterface | null);
213
+ getProcess(): ProcessInterface;
214
+ getCurrentState(): StateInterface;
215
+ getLastState(): StateInterface | null;
216
+ getSubject(): TSubject;
217
+ getSelectedTransition(): TransitionInterface<TSubject> | null;
218
+ getCurrentContext(): Map<string, unknown> | null;
219
+ private doCheckTransitions;
220
+ private onDispatcherReady;
221
+ dispatchEvent(dispatcher: DispatcherInterface, name: string, context?: Map<string, unknown>): Promise<void>;
222
+ triggerEvent(name: string, context?: Map<string, unknown>): Promise<void>;
223
+ checkTransitions(context?: Map<string, unknown>): Promise<void>;
224
+ private acquireLockOrThrowException;
225
+ isAutoreleaseLock(): boolean;
226
+ setAutoreleaseLock(autorelease: boolean): void;
227
+ acquireLock(): Promise<boolean>;
228
+ releaseLock(): Promise<void>;
229
+ isLockAcquired(): boolean;
230
+ attach(observer: Observer): void;
231
+ detach(observer: Observer): void;
232
+ notify(): Promise<void>;
233
+ getObservers(): Iterable<Observer>;
234
+ }
235
+
236
+ declare class Dispatcher implements DispatcherInterface {
237
+ private commands;
238
+ private onReadyCallbacks;
239
+ private ready;
240
+ dispatch(event: EventInterface, args?: unknown[], onReadyCallback?: CallbackInterface): void;
241
+ invoke(): Promise<void>;
242
+ isReady(): boolean;
243
+ }
244
+
245
+ interface MutexFactoryInterface<TSubject = unknown> {
246
+ createMutex(subject: TSubject): MaybePromise<MutexInterface>;
247
+ }
248
+
249
+ interface LockAdapterInterface {
250
+ acquireLock(resourceName: string): MaybePromise<boolean>;
251
+ releaseLock(resourceName: string): MaybePromise<boolean>;
252
+ isLocked(resourceName: string): MaybePromise<boolean>;
253
+ }
254
+
255
+ interface ProcessDetectorInterface<TSubject = unknown> {
256
+ detectProcess(subject: TSubject): ProcessInterface;
257
+ }
258
+
259
+ interface StateNameDetectorInterface<TSubject = unknown> {
260
+ detectCurrentStateName(subject: TSubject): string | null;
261
+ }
262
+
263
+ interface FactoryInterface<TSubject = unknown> {
264
+ createStatemachine(subject: TSubject): Promise<StatemachineInterface<TSubject>>;
265
+ setMutexFactory(factory: MutexFactoryInterface<TSubject> | null): void;
266
+ setTransitionSelector(selector: TransitionSelectorInterface<TSubject>): void;
267
+ attachStatemachineObserver(observer: Observer): void;
268
+ detachStatemachineObserver(observer: Observer): void;
269
+ getStatemachineObservers(): Iterable<Observer>;
270
+ }
271
+
272
+ interface StatefulInterface {
273
+ getCurrentStateName(): string;
274
+ setCurrentStateName(stateName: string): void;
275
+ }
276
+
277
+ interface LastStateHasChangedDateInterface {
278
+ getLastStateHasChangedDate(): Date;
279
+ }
280
+
281
+ interface LoggerInterface {
282
+ log(level: string, message: string, context?: Record<string, unknown>): void;
283
+ }
284
+
285
+ declare class Tautology implements ConditionInterface {
286
+ private readonly name;
287
+ constructor(name?: string);
288
+ getName(): string;
289
+ checkCondition(_subject: unknown, _context: Map<string, unknown>): boolean;
290
+ }
291
+
292
+ declare class Contradiction implements ConditionInterface {
293
+ private readonly name;
294
+ constructor(name?: string);
295
+ getName(): string;
296
+ checkCondition(_subject: unknown, _context: Map<string, unknown>): boolean;
297
+ }
298
+
299
+ type ConditionCallbackFn<TSubject = unknown> = (subject: TSubject, context: Map<string, unknown>) => MaybePromise<boolean>;
300
+ declare class CallbackCondition<TSubject = unknown> implements ConditionInterface<TSubject> {
301
+ private readonly name;
302
+ private readonly callable;
303
+ constructor(name: string, callable: ConditionCallbackFn<TSubject>);
304
+ getName(): string;
305
+ checkCondition(subject: TSubject, context: Map<string, unknown>): MaybePromise<boolean>;
306
+ }
307
+
308
+ declare class Timeout implements ConditionInterface {
309
+ private readonly timeoutMs;
310
+ private readonly label;
311
+ constructor(timeoutMs: number, label?: string);
312
+ getName(): string;
313
+ protected getLastStateHasChangedDate(subject: unknown, _context: Map<string, unknown>): Date;
314
+ checkCondition(subject: unknown, context: Map<string, unknown>): boolean;
315
+ }
316
+
317
+ declare class AndComposite<TSubject = unknown> implements ConditionInterface<TSubject> {
318
+ private readonly conditions;
319
+ constructor(condition: ConditionInterface<TSubject>);
320
+ addAnd(condition: ConditionInterface<TSubject>): this;
321
+ getName(): string;
322
+ checkCondition(subject: TSubject, context: Map<string, unknown>): Promise<boolean>;
323
+ }
324
+
325
+ declare class OrComposite<TSubject = unknown> implements ConditionInterface<TSubject> {
326
+ private readonly conditions;
327
+ constructor(condition: ConditionInterface<TSubject>);
328
+ addOr(condition: ConditionInterface<TSubject>): this;
329
+ getName(): string;
330
+ checkCondition(subject: TSubject, context: Map<string, unknown>): Promise<boolean>;
331
+ }
332
+
333
+ declare class Not<TSubject = unknown> implements ConditionInterface<TSubject> {
334
+ private readonly condition;
335
+ constructor(condition: ConditionInterface<TSubject>);
336
+ getName(): string;
337
+ checkCondition(subject: TSubject, context: Map<string, unknown>): Promise<boolean>;
338
+ }
339
+
340
+ declare class CallbackObserver implements Observer {
341
+ private readonly callback;
342
+ constructor(callback: (...args: unknown[]) => MaybePromise<void>);
343
+ update(subject: ObservableSubject): MaybePromise<void>;
344
+ }
345
+
346
+ declare class StatefulStatusChanger implements Observer {
347
+ update(subject: ObservableSubject): void;
348
+ }
349
+
350
+ declare class OnEnterObserver implements Observer {
351
+ static readonly DEFAULT_EVENT_NAME = "onEnter";
352
+ private readonly eventName;
353
+ constructor(eventName?: string);
354
+ update(subject: ObservableSubject): Promise<void>;
355
+ }
356
+
357
+ declare class TransitionLogger implements Observer {
358
+ private readonly logger;
359
+ private readonly loggerLevel;
360
+ constructor(logger: LoggerInterface, loggerLevel?: string);
361
+ update(subject: ObservableSubject): void;
362
+ }
363
+
364
+ declare class ActiveTransitionFilter {
365
+ static filter<TSubject = unknown>(transitions: Iterable<TransitionInterface<TSubject>>, subject: TSubject, context: Map<string, unknown>, event?: EventInterface): Promise<TransitionInterface<TSubject>[]>;
366
+ }
367
+
368
+ declare class FilterStateByEvent {
369
+ static filter(states: Iterable<StateInterface>, eventName: string): Iterable<StateInterface>;
370
+ }
371
+
372
+ /**
373
+ * Filters states that have at least one automatic transition (no event name).
374
+ */
375
+ declare class FilterStateByTransition {
376
+ static filter(states: Iterable<StateInterface>): Iterable<StateInterface>;
377
+ }
378
+
379
+ declare class FilterStateByFinalState {
380
+ static filter(states: Iterable<StateInterface>): Iterable<StateInterface>;
381
+ }
382
+
383
+ declare class FilterTransitionByEvent {
384
+ static filter(transitions: Iterable<TransitionInterface>, eventName: string): Iterable<TransitionInterface>;
385
+ }
386
+
387
+ declare class OneOrNoneActiveTransition<TSubject = unknown> implements TransitionSelectorInterface<TSubject> {
388
+ selectTransition(transitions: Iterable<TransitionInterface<TSubject>>): TransitionInterface<TSubject> | null;
389
+ }
390
+
391
+ declare class ScoreTransition<TSubject = unknown> implements TransitionSelectorInterface<TSubject> {
392
+ private readonly innerSelector;
393
+ constructor(innerSelector?: TransitionSelectorInterface<TSubject>);
394
+ protected calculateScore(transition: TransitionInterface<TSubject>): number;
395
+ selectTransition(transitions: Iterable<TransitionInterface<TSubject>>): TransitionInterface<TSubject> | null;
396
+ }
397
+
398
+ declare class WeightTransition<TSubject = unknown> implements TransitionSelectorInterface<TSubject> {
399
+ private readonly innerSelector;
400
+ private readonly epsilon;
401
+ constructor(innerSelector?: TransitionSelectorInterface<TSubject>, epsilon?: number);
402
+ selectTransition(transitions: Iterable<TransitionInterface<TSubject>>): TransitionInterface<TSubject> | null;
403
+ }
404
+
405
+ declare class NullMutex implements MutexInterface {
406
+ private acquired;
407
+ acquireLock(): boolean;
408
+ releaseLock(): boolean;
409
+ isAcquired(): boolean;
410
+ isLocked(): boolean;
411
+ }
412
+
413
+ declare class LockAdapterMutex implements MutexInterface {
414
+ private readonly lockAdapter;
415
+ private readonly resourceName;
416
+ private acquired;
417
+ constructor(lockAdapter: LockAdapterInterface, resourceName: string);
418
+ acquireLock(): Promise<boolean>;
419
+ releaseLock(): Promise<boolean>;
420
+ isAcquired(): boolean;
421
+ isLocked(): Promise<boolean>;
422
+ }
423
+
424
+ type StringConverter<TSubject = unknown> = (subject: TSubject) => string;
425
+ declare class MutexFactory<TSubject = unknown> implements MutexFactoryInterface<TSubject> {
426
+ private readonly lockAdapter;
427
+ private readonly stringConverter;
428
+ constructor(lockAdapter: LockAdapterInterface, stringConverter: StringConverter<TSubject>);
429
+ createMutex(subject: TSubject): MutexInterface;
430
+ }
431
+
432
+ declare class Factory<TSubject = unknown> implements FactoryInterface<TSubject> {
433
+ private readonly processDetector;
434
+ private readonly stateNameDetector;
435
+ private readonly statemachineObservers;
436
+ private transitionSelector;
437
+ private mutexFactory;
438
+ constructor(processDetector: ProcessDetectorInterface<TSubject>, stateNameDetector?: StateNameDetectorInterface<TSubject> | null);
439
+ setMutexFactory(factory: MutexFactoryInterface<TSubject> | null): void;
440
+ setTransitionSelector(selector: TransitionSelectorInterface<TSubject>): void;
441
+ attachStatemachineObserver(observer: Observer): void;
442
+ detachStatemachineObserver(observer: Observer): void;
443
+ getStatemachineObservers(): Iterable<Observer>;
444
+ createStatemachine(subject: TSubject): Promise<StatemachineInterface<TSubject>>;
445
+ }
446
+
447
+ declare class SingleProcessDetector<TSubject = unknown> implements ProcessDetectorInterface<TSubject> {
448
+ private readonly process;
449
+ constructor(process: ProcessInterface);
450
+ detectProcess(_subject: TSubject): ProcessInterface;
451
+ }
452
+
453
+ declare abstract class AbstractNamedProcessDetector<TSubject = unknown> implements ProcessDetectorInterface<TSubject> {
454
+ private readonly processes;
455
+ protected abstract detectProcessName(subject: TSubject): string;
456
+ addProcess(process: ProcessInterface): void;
457
+ hasProcess(name: string): boolean;
458
+ detectProcess(subject: TSubject): ProcessInterface;
459
+ }
460
+
461
+ declare class StatefulStateNameDetector implements StateNameDetectorInterface<StatefulInterface> {
462
+ detectCurrentStateName(subject: StatefulInterface): string | null;
463
+ }
464
+
465
+ declare class SetupHelper {
466
+ protected readonly stateCollection: StateCollection;
467
+ constructor(stateCollection: StateCollection);
468
+ findOrCreateState(name: string): StateInterface;
469
+ protected findTransition(sourceState: StateInterface, targetState: StateInterface, eventName?: string | null, condition?: ConditionInterface | null): TransitionInterface | null;
470
+ findOrCreateTransition(sourceStateName: string, targetStateName: string, eventName?: string | null, condition?: ConditionInterface | null): TransitionInterface;
471
+ findOrCreateEvent(sourceStateName: string, eventName: string): EventInterface;
472
+ addCommand(sourceStateName: string, eventName: string, command: Observer): void;
473
+ addCommandAndSelfTransition(sourceStateName: string, eventName: string, command: Observer): void;
474
+ }
475
+
476
+ interface GraphNode {
477
+ id: string;
478
+ label: string;
479
+ metadata: Record<string, unknown>;
480
+ }
481
+ interface GraphEdge {
482
+ source: string;
483
+ target: string;
484
+ label: string;
485
+ metadata: Record<string, unknown>;
486
+ }
487
+ interface Graph {
488
+ nodes: GraphNode[];
489
+ edges: GraphEdge[];
490
+ }
491
+ interface DotOptions {
492
+ rankdir?: string;
493
+ }
494
+ interface MermaidOptions {
495
+ direction?: string;
496
+ }
497
+ declare class GraphBuilder {
498
+ private readonly nodes;
499
+ private readonly edges;
500
+ private getOrCreateNode;
501
+ protected getTransitionLabel(state: StateInterface, transition: TransitionInterface): string;
502
+ addState(state: StateInterface): void;
503
+ addStates(states: Iterable<StateInterface>): void;
504
+ addStateCollection(stateCollection: StateCollectionInterface): void;
505
+ getGraph(): Graph;
506
+ toDot(options?: DotOptions): string;
507
+ toMermaid(options?: MermaidOptions): string;
508
+ }
509
+
510
+ declare class WrongEventForStateError extends Error {
511
+ readonly stateName: string;
512
+ readonly eventName: string;
513
+ constructor(stateName: string, eventName: string);
514
+ }
515
+
516
+ declare class LockCanNotBeAcquiredError extends Error {
517
+ constructor(message?: string);
518
+ }
519
+
520
+ declare class DuplicateStateError extends Error {
521
+ readonly stateName: string;
522
+ constructor(stateName: string);
523
+ }
524
+
525
+ export { AbstractNamedProcessDetector, ActiveTransitionFilter, AndComposite, CallbackCondition, type CallbackInterface, CallbackObserver, type ConditionCallbackFn, type ConditionInterface, Contradiction, Dispatcher, type DispatcherInterface, type DotOptions, DuplicateStateError, Event, type EventInterface, Factory, type FactoryInterface, FilterStateByEvent, FilterStateByFinalState, FilterStateByTransition, FilterTransitionByEvent, type Graph, GraphBuilder, type GraphEdge, type GraphNode, type LastStateHasChangedDateInterface, type LockAdapterInterface, LockAdapterMutex, LockCanNotBeAcquiredError, type LoggerInterface, type MaybePromise, type MermaidOptions, type Metadata, MutexFactory, type MutexFactoryInterface, type MutexInterface, type Named, Not, NullMutex, type ObservableSubject, type Observer, OnEnterObserver, OneOrNoneActiveTransition, OrComposite, Process, type ProcessDetectorInterface, type ProcessInterface, ScoreTransition, SetupHelper, SingleProcessDetector, State, StateCollection, type StateCollectionInterface, StateCollectionMerger, type StateInterface, type StateNameDetectorInterface, type StatefulInterface, StatefulStateNameDetector, StatefulStatusChanger, Statemachine, type StatemachineInterface, type StringConverter, Tautology, Timeout, Transition, type TransitionInterface, TransitionLogger, type TransitionSelectorInterface, WeightTransition, type Weighted, WrongEventForStateError };