Skip to content

Commit 4f16b0a

Browse files
Merge branch 'next' of https://github.com/cerebral/overmind into next
2 parents 1138e57 + 4731243 commit 4f16b0a

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

packages/node_modules/overmind/src/statemachine.ts

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,28 @@ export type StatemachineTransitions<States extends TStates> = {
1010
[State in States["state"]]: Array<States["state"]>
1111
}
1212

13-
export type Statemachine<States extends TStates> = States & {
13+
export interface MachineMethods<States extends TStates> {
1414
reset: () => void
15+
matches<T0 extends States["state"]>(arg0: T0): this is Statemachine<States> & (States extends { state: T0 } ? States : never);
16+
matches<
17+
T0 extends States["state"],
18+
T1 extends States["state"],
19+
>(state0: T0, state1: T1): this is Statemachine<States> & (States extends { state: T0 } ? States : never) & (States extends { state: T1 } ? States : never);
20+
matches<
21+
T0 extends States["state"],
22+
T1 extends States["state"],
23+
T2 extends States["state"],
24+
>(state0: T0, state1: T1, state2: T2): this is Statemachine<States> & (States extends { state: T0 } ? States : never) & (States extends { state: T1 } ? States : never) & (States extends { state: T2 } ? States : never);
25+
matches<
26+
T0 extends States["state"],
27+
T1 extends States["state"],
28+
T2 extends States["state"],
29+
T3 extends States["state"],
30+
>(state0: T0, state1: T1, state2: T2, state3: T3): this is Statemachine<States> & (States extends { state: T0 } ? States : never) & (States extends { state: T1 } ? States : never) & (States extends { state: T2 } ? States : never) & (States extends { state: T3 } ? States : never);
1531
whenTransitioned: (state: States["state"]) => Promise<void>
16-
} & {
32+
}
33+
34+
export type Statemachine<States extends TStates> = States & MachineMethods<States> & {
1735
[State in States["state"]]: <O>(entry?: (current: Statemachine<States> & (States extends { state: State } ? States : never)) => O, exit?: (current: Statemachine<States> & (States extends { state: State } ? States : never)) => void) => O
1836
}
1937

@@ -54,6 +72,13 @@ class StateMachine<States extends TStates> {
5472
return aggr
5573
}, this)
5674
}
75+
matches(...states) {
76+
if (states.includes(this.state)) {
77+
return true
78+
}
79+
80+
return false
81+
}
5782
reset() {
5883
const exit = this[VALUE][CURRENT_EXIT]
5984
if (typeof exit === 'function') {

0 commit comments

Comments
 (0)