• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

snatalenko / node-cqrs / 10223191268

02 Aug 2024 11:15PM UTC coverage: 96.856%. First build
10223191268

Pull #21

github

snatalenko
Add script badges to readme
Pull Request #21: Migrate to TypeScript

570 of 859 branches covered (66.36%)

2282 of 2360 new or added lines in 28 files covered. (96.69%)

2403 of 2481 relevant lines covered (96.86%)

21.84 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.06
/src/infrastructure/InMemoryEventStorage.ts
1
import { IEvent, IEventStorage, IEventSet, IEventStream } from "../interfaces";
4✔
2
import { nextCycle } from "./utils";
4✔
3

4✔
4
/**
4✔
5
 * A simple event storage implementation intended to use for tests only.
4✔
6
 * Storage content resets on each app restart.
4✔
7
 *
4✔
8
 * @class InMemoryEventStorage
4✔
9
 * @implements {IEventStorage}
4✔
10
 */
4✔
11
export class InMemoryEventStorage implements IEventStorage {
58✔
12

58✔
13
        #nextId: number = 0;
58✔
14
        #events: IEventSet = [];
58✔
15

58✔
16
        async commitEvents(events: IEventSet): Promise<IEventSet> {
58✔
17
                await nextCycle();
42✔
18

42✔
19
                this.#events = this.#events.concat(events);
42✔
20

42✔
21
                await nextCycle();
42✔
22

42✔
23
                return events;
42✔
24
        }
42✔
25

58✔
26
        async getAggregateEvents(aggregateId, options?: { snapshot: IEvent }): Promise<IEventSet> {
58✔
27
                await nextCycle();
10✔
28

10✔
29
                const afterVersion = options?.snapshot?.aggregateVersion;
10✔
30
                const result = !afterVersion ?
10✔
31
                        this.#events.filter(e => e.aggregateId == aggregateId) :
10✔
32
                        this.#events.filter(e =>
2✔
NEW
33
                                e.aggregateId == aggregateId &&
×
NEW
34
                                e.aggregateVersion !== undefined &&
×
35
                                e.aggregateVersion > afterVersion);
10✔
36

10✔
37
                await nextCycle();
10✔
38

10✔
39
                return result;
10✔
40
        }
10✔
41

58✔
42
        async getSagaEvents(sagaId, { beforeEvent }): Promise<IEventSet> {
58✔
43
                await nextCycle();
4✔
44

4✔
45
                const results = this.#events.filter(e =>
4✔
46
                        e.sagaId == sagaId &&
6✔
47
                        e.sagaVersion !== undefined &&
6✔
48
                        e.sagaVersion < beforeEvent.sagaVersion);
4✔
49

4✔
50
                await nextCycle();
4✔
51

4✔
52
                return results;
4✔
53
        }
4✔
54

58✔
55
        async* getEvents(eventTypes): IEventStream {
58✔
56
                await nextCycle();
6✔
57

6✔
58
                for await (const event of this.#events) {
6✔
59
                        if (!eventTypes || eventTypes.includes(event.type))
6✔
60
                                yield event;
6✔
61
                }
6✔
62
        }
6✔
63

58✔
64
        getNewId(): number {
58✔
65
                this.#nextId += 1;
14✔
66
                return this.#nextId;
14✔
67
        }
14✔
68
}
58✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc