Skip to content

Commit c8dfc00

Browse files
committed
Those are not thenables
1 parent 46322fc commit c8dfc00

2 files changed

Lines changed: 32 additions & 28 deletions

File tree

src/index.test.ts

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,22 @@ describe("Machine with entry", () => {
4545
expect(loader.value).toEqual("idle");
4646
expect(loader.changeCount).toEqual(0);
4747

48-
const { actions } = loader.next("FETCH");
48+
const transitionResult = loader.next("FETCH");
4949
expect(fetch).toHaveBeenCalledWith("https://example.org/");
50-
expect(actions).toEqual([{ type: "entry", then: fetchData }]);
50+
expect(transitionResult.actions).toEqual([{ type: "entry", f: fetchData }]);
5151
expect(loader.value).toEqual("loading");
5252
expect(loader.changeCount).toEqual(1);
5353

54-
await expect(loader.promisedValue).resolves.toEqual([42]);
54+
await expect(loader.resolved).resolves.toEqual([42]);
55+
await expect(Promise.resolve(transitionResult)).resolves.toEqual([42]);
5556
expect(loader.changeCount).toEqual(2);
5657
expect(loader.value).toEqual("success");
5758

5859
loader.next("FETCH");
5960
expect(loader.changeCount).toEqual(2);
6061
expect(loader.value).toEqual("success");
6162

62-
await loader.promisedValue;
63+
await loader.resolved;
6364
});
6465
});
6566

@@ -75,11 +76,11 @@ describe("Machine with entry", () => {
7576
const { actions } = loader.next("FETCH");
7677
expect(fetch).toHaveBeenCalledTimes(1);
7778
expect(fetch).toHaveBeenLastCalledWith("https://example.org/");
78-
expect(actions).toEqual([{ type: "entry", then: fetchData }]);
79+
expect(actions).toEqual([{ type: "entry", f: fetchData }]);
7980
expect(loader.value).toEqual("loading");
8081
expect(loader.changeCount).toEqual(1);
8182

82-
await expect(loader.promisedValue).rejects.toEqual(new Error("Failed!"));
83+
await expect(loader.resolved).rejects.toEqual(new Error("Failed!"));
8384
expect(loader.changeCount).toEqual(2);
8485
expect(loader.value).toEqual("failure");
8586

@@ -94,7 +95,7 @@ describe("Machine with entry", () => {
9495
expect(fetch).toHaveBeenCalledTimes(2);
9596
expect(fetch).toHaveBeenLastCalledWith("https://example.org/");
9697

97-
await expect(loader.promisedValue).resolves.toEqual([42]);
98+
await expect(loader.resolved).resolves.toEqual([42]);
9899
expect(loader.changeCount).toEqual(4);
99100
expect(loader.value).toEqual("success");
100101
});
@@ -134,27 +135,27 @@ describe("Machine with call", () => {
134135
test("sending events", async () => {
135136
const loader = start(Loader, [{ url: someURL }]);
136137
expect(loader.value).toEqual("idle");
137-
await expect(loader.promisedValue).resolves.toEqual([]);
138+
await expect(loader.resolved).resolves.toEqual([]);
138139

139140
loader.next("NOOP");
140141
expect(loader.value).toEqual("idle");
141142
expect(loader.changeCount).toEqual(0);
142-
await expect(loader.promisedValue).resolves.toEqual([]);
143+
await expect(loader.resolved).resolves.toEqual([]);
143144

144145
loader.next("FETCH");
145146
expect(loader.value).toEqual("loading");
146147
expect(loader.changeCount).toEqual(1);
147148

148149
expect(fetch).toHaveBeenCalledWith("https://example.org/");
149150

150-
await expect(loader.promisedValue).resolves.toEqual([42]);
151+
await expect(loader.resolved).resolves.toEqual([42]);
151152
expect(loader.changeCount).toEqual(2);
152153
expect(loader.value).toEqual("success");
153154

154155
loader.next("FETCH");
155156
expect(loader.changeCount).toEqual(2);
156157

157-
await loader.promisedValue;
158+
await loader.resolved;
158159
});
159160
});
160161

@@ -174,7 +175,7 @@ describe("Machine with call", () => {
174175
expect(fetch).toHaveBeenCalledTimes(1);
175176
expect(fetch).toHaveBeenLastCalledWith("https://example.org/");
176177

177-
await expect(loader.promisedValue).rejects.toEqual(new Error("Failed!"));
178+
await expect(loader.resolved).rejects.toEqual(new Error("Failed!"));
178179
expect(loader.changeCount).toEqual(2);
179180
expect(loader.value).toEqual("failure");
180181

@@ -189,7 +190,7 @@ describe("Machine with call", () => {
189190
expect(fetch).toHaveBeenCalledTimes(2);
190191
expect(fetch).toHaveBeenLastCalledWith("https://example.org/");
191192

192-
await expect(loader.promisedValue).resolves.toEqual([42]);
193+
await expect(loader.resolved).resolves.toEqual([42]);
193194
expect(loader.changeCount).toEqual(4);
194195
expect(loader.value).toEqual("success");
195196
});

src/index.ts

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ export interface ActionBody {
1010

1111
export interface EntryAction {
1212
type: "entry";
13-
then: ActionBody;
13+
f: ActionBody;
1414
}
1515
export interface ExitAction {
1616
type: "exit";
17-
then: ActionBody;
17+
f: ActionBody;
1818
}
1919

2020
export interface On {
@@ -32,12 +32,12 @@ export function call<Arguments extends Array<any>>(
3232
return { type: "call", f, args };
3333
}
3434

35-
export function entry(then: ActionBody): EntryAction {
36-
return { type: "entry", then };
35+
export function entry(f: ActionBody): EntryAction {
36+
return { type: "entry", f };
3737
}
3838

39-
export function exit(then: ActionBody): ExitAction {
40-
return { type: "exit", then };
39+
export function exit(f: ActionBody): ExitAction {
40+
return { type: "exit", f };
4141
}
4242

4343
export function on<Event extends string>(event: Event, target: Function): On {
@@ -47,11 +47,11 @@ export function on<Event extends string>(event: Event, target: Function): On {
4747
export interface MachineInstance extends Iterator<string, void, string> {
4848
changeCount: number;
4949
value: string;
50-
promisedValue: null | Promise<Array<any>>;
50+
resolved: null | Promise<Array<any>>;
5151
done: boolean;
5252
next(
5353
...args: [string]
54-
): IteratorResult<string, void> & {
54+
): IteratorResult<string, void> & PromiseLike<any> & {
5555
actions: Array<EntryAction | ExitAction>;
5656
};
5757
}
@@ -68,7 +68,7 @@ export function start<Arguments extends Array<any>>(
6868
changeCount: -1,
6969
current: "",
7070
actions: [] as Array<EntryAction | ExitAction>,
71-
promisedValue: null as Promise<Array<any>> | null,
71+
resolved: null as Promise<Array<any>> | null,
7272
};
7373

7474
function receive(event: string, count: number) {
@@ -83,7 +83,7 @@ export function start<Arguments extends Array<any>>(
8383
function transitionTo(stateGenerator: () => Generator<Yielded>) {
8484
state.changeCount++;
8585
state.current = stateGenerator.name;
86-
state.promisedValue = null;
86+
state.resolved = null;
8787
eventsMap.clear();
8888

8989
const results: Array<any> = [];
@@ -94,7 +94,7 @@ export function start<Arguments extends Array<any>>(
9494
state.actions.push(value);
9595
// const result = Promise.resolve(value);
9696
const result = new Promise((resolve) => {
97-
resolve(value.then())
97+
resolve(value.f());
9898
});
9999
results.push(result);
100100
} else if (value.type === "call") {
@@ -108,10 +108,10 @@ export function start<Arguments extends Array<any>>(
108108
}
109109

110110
// const promise = Promise.all(results);
111-
const promise = Promise.resolve(state.promisedValue)
111+
const promise = Promise.resolve(state.resolved)
112112
.catch(() => {})
113113
.then(() => Promise.all(results));
114-
state.promisedValue = promise;
114+
state.resolved = promise;
115115

116116
const snapshotCount = state.changeCount;
117117
promise
@@ -128,14 +128,17 @@ export function start<Arguments extends Array<any>>(
128128
get value() {
129129
return state.current;
130130
},
131-
get promisedValue() {
132-
return state.promisedValue;
131+
get resolved() {
132+
return state.resolved;
133133
},
134134
next(event: string) {
135135
receive(event, state.changeCount);
136+
const promise = state.resolved!;
137+
Promise.resolve
136138
return {
137139
value: state.current,
138140
actions: Array.from(state.actions),
141+
then: promise.then.bind(promise),
139142
done: false,
140143
};
141144
},

0 commit comments

Comments
 (0)