@hexaijs/core 0.8.0 → 0.9.1

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 (70) hide show
  1. package/README.md +8 -0
  2. package/dist/domain/aggregate-root.d.ts +12 -0
  3. package/dist/domain/aggregate-root.d.ts.map +1 -0
  4. package/dist/domain/aggregate-root.js +22 -0
  5. package/dist/domain/aggregate-root.js.map +1 -0
  6. package/dist/domain/domain-error.d.ts +11 -0
  7. package/dist/domain/domain-error.d.ts.map +1 -0
  8. package/dist/domain/domain-error.js +19 -0
  9. package/dist/domain/domain-error.js.map +1 -0
  10. package/dist/domain/domain-event.d.ts +5 -0
  11. package/dist/domain/domain-event.d.ts.map +1 -0
  12. package/dist/domain/domain-event.js +7 -0
  13. package/dist/domain/domain-event.js.map +1 -0
  14. package/dist/domain/identifiable.d.ts +11 -0
  15. package/dist/domain/identifiable.d.ts.map +1 -0
  16. package/dist/domain/identifiable.js +14 -0
  17. package/dist/domain/identifiable.js.map +1 -0
  18. package/dist/domain/index.d.ts +6 -0
  19. package/dist/domain/index.d.ts.map +1 -0
  20. package/dist/domain/index.js +6 -0
  21. package/dist/domain/index.js.map +1 -0
  22. package/dist/domain/repository.d.ts +16 -0
  23. package/dist/domain/repository.d.ts.map +1 -0
  24. package/dist/domain/repository.js +19 -0
  25. package/dist/domain/repository.js.map +1 -0
  26. package/dist/event-store.d.ts +13 -0
  27. package/dist/event-store.d.ts.map +1 -0
  28. package/dist/event-store.js +2 -0
  29. package/dist/event-store.js.map +1 -0
  30. package/dist/index.d.ts +6 -85
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +5 -275
  33. package/dist/index.js.map +1 -1
  34. package/dist/{event-store-UbTJSE4H.d.ts → message.d.ts} +9 -21
  35. package/dist/message.d.ts.map +1 -0
  36. package/dist/message.js +144 -0
  37. package/dist/message.js.map +1 -0
  38. package/dist/test/dummy-message.d.ts +8 -0
  39. package/dist/test/dummy-message.d.ts.map +1 -0
  40. package/dist/test/dummy-message.js +15 -0
  41. package/dist/test/dummy-message.js.map +1 -0
  42. package/dist/test/in-memory-event-store.d.ts +11 -0
  43. package/dist/test/in-memory-event-store.d.ts.map +1 -0
  44. package/dist/test/in-memory-event-store.js +34 -0
  45. package/dist/test/in-memory-event-store.js.map +1 -0
  46. package/dist/test/index.d.ts +6 -38
  47. package/dist/test/index.d.ts.map +1 -0
  48. package/dist/test/index.js +5 -333
  49. package/dist/test/index.js.map +1 -1
  50. package/dist/test/matchers.d.ts +5 -0
  51. package/dist/test/matchers.d.ts.map +1 -0
  52. package/dist/test/matchers.js +69 -0
  53. package/dist/test/matchers.js.map +1 -0
  54. package/dist/test/partial-match.d.ts +4 -0
  55. package/dist/test/partial-match.d.ts.map +1 -0
  56. package/dist/test/partial-match.js +26 -0
  57. package/dist/test/partial-match.js.map +1 -0
  58. package/dist/test/utils.d.ts +5 -0
  59. package/dist/test/utils.d.ts.map +1 -0
  60. package/dist/test/utils.js +18 -0
  61. package/dist/test/utils.js.map +1 -0
  62. package/dist/transaction-hooks.d.ts +13 -0
  63. package/dist/transaction-hooks.d.ts.map +1 -0
  64. package/dist/transaction-hooks.js +47 -0
  65. package/dist/transaction-hooks.js.map +1 -0
  66. package/dist/unit-of-work.d.ts +19 -0
  67. package/dist/unit-of-work.d.ts.map +1 -0
  68. package/dist/unit-of-work.js +7 -0
  69. package/dist/unit-of-work.js.map +1 -0
  70. package/package.json +11 -2
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/domain/aggregate-root.ts","../src/domain/domain-error.ts","../src/message.ts","../src/domain/domain-event.ts","../src/domain/identifiable.ts","../src/domain/repository.ts","../src/unit-of-work.ts","../src/transaction-hooks.ts"],"names":["uuid","Propagation"],"mappings":"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","file":"index.js","sourcesContent":["import { DomainEvent } from \"./domain-event\";\nimport { Id, Identifiable } from \"./identifiable\";\n\nexport class AggregateRoot<T extends Id<string | number>>\n implements Identifiable<T>\n{\n protected events: DomainEvent[] = [];\n\n constructor(protected readonly id: T) {}\n\n public getId(): T {\n return this.id;\n }\n\n protected raise(event: DomainEvent): void {\n this.events.push(event);\n }\n\n public getEventsOccurred(): DomainEvent[] {\n return [...this.events];\n }\n}\n","export class DomainError extends Error {}\n\nexport class InvariantNotSatisfiedError extends DomainError {\n constructor(\n public readonly code: string,\n message: string = \"\"\n ) {\n super(message);\n this.name = \"InvariantNotSatisfiedError\";\n }\n}\n\nexport class ValidationError extends InvariantNotSatisfiedError {\n constructor(\n public readonly field: string,\n code: string,\n message: string = \"\"\n ) {\n super(code, message);\n\n this.name = \"ValidationError\";\n }\n}\n","import { v4 as uuid } from \"uuid\";\n\ntype Version = string | number | undefined;\n\nexport interface MessageTrace {\n id: string;\n type: string;\n}\n\nexport interface MessageHeaders {\n id: string;\n type: string;\n intent?: string;\n schemaVersion?: Version;\n createdAt: Date;\n\n [key: string]: unknown;\n}\n\ntype ExtraHeaderField = Exclude<\n keyof MessageHeaders,\n \"id\" | \"type\" | \"intent\" | \"schemaVersion\" | \"createdAt\"\n>;\n\ntype RawMessageHeaders = Omit<MessageHeaders, \"createdAt\"> & {\n createdAt: string | Date;\n};\n\nexport interface MessageOptions {\n headers?: Record<string, unknown>;\n}\n\nexport class Message<Payload = any> {\n protected headers!: MessageHeaders;\n\n public static getSchemaVersion(): Version {\n return (this as any).schemaVersion ?? undefined;\n }\n\n public static getType(): string {\n return (this as any).type ?? this.name;\n }\n\n public static getIntent(): string | undefined {\n return (this as any).intent ?? undefined;\n }\n\n protected static newHeaders(...excludes: string[]): MessageHeaders {\n return generateHeaderFor(this as any, ...excludes);\n }\n\n public static from(\n rawPayload: Record<string, unknown>,\n headers?: RawMessageHeaders\n ): Message {\n const payload = this.deserializeRawPayload(rawPayload);\n return new this(payload, {\n headers: headers\n ? this.deserializeRawHeaders(headers)\n : this.newHeaders(),\n });\n }\n\n protected static deserializeRawPayload(rawPayload: any): any {\n return rawPayload;\n }\n\n protected static deserializeRawHeaders(\n headers: RawMessageHeaders\n ): MessageHeaders {\n headers.createdAt = new Date(headers.createdAt);\n\n return headers as MessageHeaders;\n }\n\n constructor(\n protected readonly payload: Payload,\n options?: MessageOptions\n ) {\n this.headers = Object.freeze(\n (this.constructor as any).mergeHeaders(options?.headers ?? {})\n );\n\n if (payload && typeof payload === \"object\") {\n Object.freeze(payload);\n }\n }\n\n protected static mergeHeaders(\n headers: Record<string, unknown>\n ): MessageHeaders {\n return {\n ...this.newHeaders(...Object.keys(headers)),\n ...headers,\n };\n }\n\n public withHeader(field: ExtraHeaderField, value: unknown): this {\n const newHeaders = { ...this.headers, [field]: value };\n return this.cloneWithHeaders(newHeaders);\n }\n\n protected clone(): this {\n const cloned = Object.create(Object.getPrototypeOf(this));\n Object.assign(cloned, this);\n return cloned;\n }\n\n protected cloneWithHeaders(headers: Record<string, unknown>): this {\n const cloned = this.clone();\n Object.defineProperty(cloned, \"headers\", {\n value: Object.freeze(headers),\n writable: false,\n configurable: true,\n });\n return cloned;\n }\n\n public getHeader<T = string>(field: string): T | undefined {\n return this.headers[field] as any;\n }\n\n public getHeaders(): MessageHeaders {\n return Object.freeze({ ...this.headers });\n }\n\n public getPayload(): Payload {\n return this.payload;\n }\n\n public getMessageId(): string {\n return this.headers.id;\n }\n\n public getMessageType(): string {\n return this.headers.type;\n }\n\n public getSchemaVersion(): Version | undefined {\n return this.headers.schemaVersion;\n }\n\n public getTimestamp(): Date {\n return this.headers.createdAt;\n }\n\n public getIntent(): string | undefined {\n return (this.constructor as MessageClass).getIntent();\n }\n\n public toJSON(): {\n headers: MessageHeaders;\n payload: unknown;\n } {\n return {\n headers: { ...this.headers },\n payload: this.serializePayload(this.payload),\n };\n }\n\n public serialize(): {\n headers: MessageHeaders;\n payload: Record<string, unknown>;\n } {\n return JSON.parse(JSON.stringify(this.toJSON()));\n }\n\n protected serializePayload(payload: Payload): unknown {\n return payload;\n }\n\n public asType<M extends MessageClass>(cls: M): InstanceType<M> {\n const { headers, payload } = this.serialize();\n return cls.from(payload, headers) as InstanceType<M>;\n }\n\n public asTrace(): MessageTrace {\n return { id: this.getMessageId(), type: this.getMessageType() };\n }\n\n public getCausation(): MessageTrace | undefined {\n return this.getHeader<MessageTrace>(\"causation\");\n }\n\n public getCorrelation(): MessageTrace | undefined {\n return this.getHeader<MessageTrace>(\"correlation\");\n }\n\n public withCausation(trace: MessageTrace): this {\n return this.withHeader(\"causation\", trace);\n }\n\n public withCorrelation(trace: MessageTrace): this {\n return this.withHeader(\"correlation\", trace);\n }\n}\n\nexport type AnyMessage = Message;\n\nexport type MessageClass<T extends Message = Message> = {\n getSchemaVersion(): Version;\n getType(): string;\n getIntent(): string | undefined;\n from: (rawPayload: any, header?: MessageHeaders) => T;\n new (...args: any[]): T;\n};\n\nfunction generateHeaderFor(\n cls: MessageClass,\n ...excludes: string[]\n): MessageHeaders {\n const headers: Partial<MessageHeaders> = {};\n\n if (!excludes.includes(\"id\")) {\n headers.id = uuid();\n }\n\n if (!excludes.includes(\"type\")) {\n headers.type = cls.getType();\n }\n\n if (!excludes.includes(\"intent\")) {\n const intent = cls.getIntent();\n if (intent !== undefined) {\n headers.intent = intent;\n }\n }\n\n if (!excludes.includes(\"schemaVersion\")) {\n const schemaVersion = cls.getSchemaVersion();\n if (schemaVersion !== undefined) {\n headers.schemaVersion = schemaVersion;\n }\n }\n\n if (!excludes.includes(\"createdAt\")) {\n headers.createdAt = new Date();\n }\n\n return headers as MessageHeaders;\n}\n\nexport type PayloadOf<M> = M extends Message<infer P> ? P : never;\n","import { Message } from \"@/message\";\n\nexport class DomainEvent<\n P extends Record<string, any> = Record<string, unknown>,\n> extends Message<P> {\n static override getIntent() {\n return \"event\";\n }\n}\n","export class Id<T extends string | number> {\n public constructor(private readonly value: T) {}\n\n public getValue(): T {\n return this.value;\n }\n\n public equals(other: Id<T>): boolean {\n return (\n this.constructor === other.constructor &&\n this.getValue() === other.getValue()\n );\n }\n}\n\nexport type IdOf<T> = T extends Identifiable<infer Id> ? Id : never;\n\nexport interface Identifiable<T extends Id<string | number> = Id<string>> {\n getId(): T;\n}\n","import { Identifiable, IdOf } from \"./identifiable\";\n\nexport interface Repository<T extends Identifiable<any>> {\n get(id: IdOf<T>): Promise<T>;\n add(entity: T): Promise<void>;\n update(entity: T): Promise<void>;\n}\n\nexport class RepositoryError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"RepositoryError\";\n }\n}\n\nexport class DuplicateObjectError extends RepositoryError {\n constructor(message: string) {\n super(message);\n this.name = \"DuplicateObjectError\";\n }\n}\n\nexport class ObjectNotFoundError extends RepositoryError {\n constructor(message: string) {\n super(message);\n this.name = \"ObjectNotFoundError\";\n }\n}\n","export enum Propagation {\n NEW = \"new\",\n EXISTING = \"existing\",\n NESTED = \"nested\",\n}\n\nexport type TransactionHook = () => void | Promise<void>;\n\nexport interface BaseUnitOfWorkOptions {\n propagation: Propagation;\n}\n\nexport interface UnitOfWork<\n Client = unknown,\n Options extends BaseUnitOfWorkOptions = BaseUnitOfWorkOptions,\n> {\n getClient(): Client;\n\n scope<T>(\n fn: () => Promise<T>,\n options?: Partial<Options>\n ): Promise<T>;\n\n /** @deprecated Use scope() for transaction boundaries and withClient() for client access. */\n wrap<T>(\n fn: (client: Client) => Promise<T>,\n options?: Partial<Options>\n ): Promise<T>;\n\n beforeCommit(hook: TransactionHook): void;\n afterCommit(hook: TransactionHook): void;\n afterRollback(hook: TransactionHook): void;\n}\n\n","import type { TransactionHook } from \"./unit-of-work\";\n\nexport class TransactionHooks {\n private beforeCommitHooks: TransactionHook[] = [];\n private afterCommitHooks: TransactionHook[] = [];\n private afterRollbackHooks: TransactionHook[] = [];\n\n addBeforeCommit(hook: TransactionHook): void {\n this.beforeCommitHooks.push(hook);\n }\n\n addAfterCommit(hook: TransactionHook): void {\n this.afterCommitHooks.push(hook);\n }\n\n addAfterRollback(hook: TransactionHook): void {\n this.afterRollbackHooks.push(hook);\n }\n\n async executeCommit(\n commitFn: () => Promise<void>,\n rollbackFn: () => Promise<void>\n ): Promise<void> {\n try {\n for (const hook of this.beforeCommitHooks) await hook();\n } catch (e) {\n await this.executeRollback(rollbackFn, e);\n throw e;\n }\n\n await commitFn();\n await this.runBestEffort(this.afterCommitHooks);\n }\n\n async executeRollback(\n rollbackFn: () => Promise<void>,\n cause?: unknown\n ): Promise<void> {\n await rollbackFn();\n await this.runBestEffort(this.afterRollbackHooks, cause);\n }\n\n private async runBestEffort(\n hooks: TransactionHook[],\n cause?: unknown\n ): Promise<void> {\n const errors: unknown[] = [];\n for (const hook of hooks) {\n try {\n await hook();\n } catch (e) {\n errors.push(e);\n }\n }\n if (errors.length > 0) {\n throw cause !== undefined\n ? new AggregateError(\n errors,\n \"Transaction hook(s) failed\",\n { cause }\n )\n : new AggregateError(errors);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC"}
@@ -1,9 +1,9 @@
1
1
  type Version = string | number | undefined;
2
- interface MessageTrace {
2
+ export interface MessageTrace {
3
3
  id: string;
4
4
  type: string;
5
5
  }
6
- interface MessageHeaders {
6
+ export interface MessageHeaders {
7
7
  id: string;
8
8
  type: string;
9
9
  intent?: string;
@@ -15,10 +15,10 @@ type ExtraHeaderField = Exclude<keyof MessageHeaders, "id" | "type" | "intent" |
15
15
  type RawMessageHeaders = Omit<MessageHeaders, "createdAt"> & {
16
16
  createdAt: string | Date;
17
17
  };
18
- interface MessageOptions {
18
+ export interface MessageOptions {
19
19
  headers?: Record<string, unknown>;
20
20
  }
21
- declare class Message<Payload = any> {
21
+ export declare class Message<Payload = any> {
22
22
  protected readonly payload: Payload;
23
23
  protected headers: MessageHeaders;
24
24
  static getSchemaVersion(): Version;
@@ -57,26 +57,14 @@ declare class Message<Payload = any> {
57
57
  withCausation(trace: MessageTrace): this;
58
58
  withCorrelation(trace: MessageTrace): this;
59
59
  }
60
- type AnyMessage = Message;
61
- type MessageClass<T extends Message = Message> = {
60
+ export type AnyMessage = Message;
61
+ export type MessageClass<T extends Message = Message> = {
62
62
  getSchemaVersion(): Version;
63
63
  getType(): string;
64
64
  getIntent(): string | undefined;
65
65
  from: (rawPayload: any, header?: MessageHeaders) => T;
66
66
  new (...args: any[]): T;
67
67
  };
68
- type PayloadOf<M> = M extends Message<infer P> ? P : never;
69
-
70
- interface StoredEvent {
71
- position: number;
72
- event: Message;
73
- }
74
- interface EventStoreFetchResult {
75
- events: StoredEvent[];
76
- lastPosition: number;
77
- }
78
- interface EventStore {
79
- fetch(afterPosition: number, limit?: number): Promise<EventStoreFetchResult>;
80
- }
81
-
82
- export { type AnyMessage as A, type EventStore as E, Message as M, type PayloadOf as P, type StoredEvent as S, type EventStoreFetchResult as a, type MessageClass as b, type MessageHeaders as c, type MessageOptions as d, type MessageTrace as e };
68
+ export type PayloadOf<M> = M extends Message<infer P> ? P : never;
69
+ export {};
70
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ import { v4 as uuid } from "uuid";
2
+ export class Message {
3
+ payload;
4
+ headers;
5
+ static getSchemaVersion() {
6
+ return this.schemaVersion ?? undefined;
7
+ }
8
+ static getType() {
9
+ return this.type ?? this.name;
10
+ }
11
+ static getIntent() {
12
+ return this.intent ?? undefined;
13
+ }
14
+ static newHeaders(...excludes) {
15
+ return generateHeaderFor(this, ...excludes);
16
+ }
17
+ static from(rawPayload, headers) {
18
+ const payload = this.deserializeRawPayload(rawPayload);
19
+ return new this(payload, {
20
+ headers: headers
21
+ ? this.deserializeRawHeaders(headers)
22
+ : this.newHeaders(),
23
+ });
24
+ }
25
+ static deserializeRawPayload(rawPayload) {
26
+ return rawPayload;
27
+ }
28
+ static deserializeRawHeaders(headers) {
29
+ headers.createdAt = new Date(headers.createdAt);
30
+ return headers;
31
+ }
32
+ constructor(payload, options) {
33
+ this.payload = payload;
34
+ this.headers = Object.freeze(this.constructor.mergeHeaders(options?.headers ?? {}));
35
+ if (payload && typeof payload === "object") {
36
+ Object.freeze(payload);
37
+ }
38
+ }
39
+ static mergeHeaders(headers) {
40
+ return {
41
+ ...this.newHeaders(...Object.keys(headers)),
42
+ ...headers,
43
+ };
44
+ }
45
+ withHeader(field, value) {
46
+ const newHeaders = { ...this.headers, [field]: value };
47
+ return this.cloneWithHeaders(newHeaders);
48
+ }
49
+ clone() {
50
+ const cloned = Object.create(Object.getPrototypeOf(this));
51
+ Object.assign(cloned, this);
52
+ return cloned;
53
+ }
54
+ cloneWithHeaders(headers) {
55
+ const cloned = this.clone();
56
+ Object.defineProperty(cloned, "headers", {
57
+ value: Object.freeze(headers),
58
+ writable: false,
59
+ configurable: true,
60
+ });
61
+ return cloned;
62
+ }
63
+ getHeader(field) {
64
+ return this.headers[field];
65
+ }
66
+ getHeaders() {
67
+ return Object.freeze({ ...this.headers });
68
+ }
69
+ getPayload() {
70
+ return this.payload;
71
+ }
72
+ getMessageId() {
73
+ return this.headers.id;
74
+ }
75
+ getMessageType() {
76
+ return this.headers.type;
77
+ }
78
+ getSchemaVersion() {
79
+ return this.headers.schemaVersion;
80
+ }
81
+ getTimestamp() {
82
+ return this.headers.createdAt;
83
+ }
84
+ getIntent() {
85
+ return this.constructor.getIntent();
86
+ }
87
+ toJSON() {
88
+ return {
89
+ headers: { ...this.headers },
90
+ payload: this.serializePayload(this.payload),
91
+ };
92
+ }
93
+ serialize() {
94
+ return JSON.parse(JSON.stringify(this.toJSON()));
95
+ }
96
+ serializePayload(payload) {
97
+ return payload;
98
+ }
99
+ asType(cls) {
100
+ const { headers, payload } = this.serialize();
101
+ return cls.from(payload, headers);
102
+ }
103
+ asTrace() {
104
+ return { id: this.getMessageId(), type: this.getMessageType() };
105
+ }
106
+ getCausation() {
107
+ return this.getHeader("causation");
108
+ }
109
+ getCorrelation() {
110
+ return this.getHeader("correlation");
111
+ }
112
+ withCausation(trace) {
113
+ return this.withHeader("causation", trace);
114
+ }
115
+ withCorrelation(trace) {
116
+ return this.withHeader("correlation", trace);
117
+ }
118
+ }
119
+ function generateHeaderFor(cls, ...excludes) {
120
+ const headers = {};
121
+ if (!excludes.includes("id")) {
122
+ headers.id = uuid();
123
+ }
124
+ if (!excludes.includes("type")) {
125
+ headers.type = cls.getType();
126
+ }
127
+ if (!excludes.includes("intent")) {
128
+ const intent = cls.getIntent();
129
+ if (intent !== undefined) {
130
+ headers.intent = intent;
131
+ }
132
+ }
133
+ if (!excludes.includes("schemaVersion")) {
134
+ const schemaVersion = cls.getSchemaVersion();
135
+ if (schemaVersion !== undefined) {
136
+ headers.schemaVersion = schemaVersion;
137
+ }
138
+ }
139
+ if (!excludes.includes("createdAt")) {
140
+ headers.createdAt = new Date();
141
+ }
142
+ return headers;
143
+ }
144
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Message, MessageHeaders } from "../message.js";
2
+ export declare class DummyMessage extends Message<Record<never, never>> {
3
+ static type: string;
4
+ static create(): DummyMessage;
5
+ static createMany(number: number): DummyMessage[];
6
+ static from(_: Record<never, never>, headers?: MessageHeaders): DummyMessage;
7
+ }
8
+ //# sourceMappingURL=dummy-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dummy-message.d.ts","sourceRoot":"","sources":["../../src/test/dummy-message.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAExD,qBAAa,YAAa,SAAQ,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3D,MAAM,CAAC,IAAI,SAAwB;IAEnC,OAAc,MAAM,iBAEnB;IAED,OAAc,UAAU,CAAC,MAAM,EAAE,MAAM,kBAEtC;IAED,OAAc,IAAI,CACd,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EACvB,OAAO,CAAC,EAAE,cAAc,GACzB,YAAY,CAEd;CACJ"}
@@ -0,0 +1,15 @@
1
+ import _ from "lodash";
2
+ import { Message } from "../message.js";
3
+ export class DummyMessage extends Message {
4
+ static type = "test.dummy-message";
5
+ static create() {
6
+ return new this({});
7
+ }
8
+ static createMany(number) {
9
+ return _.times(number, () => this.create());
10
+ }
11
+ static from(_, headers) {
12
+ return new this({}, { headers });
13
+ }
14
+ }
15
+ //# sourceMappingURL=dummy-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dummy-message.js","sourceRoot":"","sources":["../../src/test/dummy-message.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAkB,MAAM,eAAe,CAAC;AAExD,MAAM,OAAO,YAAa,SAAQ,OAA6B;IAC3D,MAAM,CAAC,IAAI,GAAG,oBAAoB,CAAC;IAE5B,MAAM,CAAC,MAAM;QAChB,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,MAAc;QACnC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;IAEM,MAAM,CAAC,IAAI,CACd,CAAuB,EACvB,OAAwB;QAExB,OAAO,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC;CACJ"}
@@ -0,0 +1,11 @@
1
+ import { EventStore, EventStoreFetchResult, StoredEvent } from "../event-store.js";
2
+ import { Message } from "../message.js";
3
+ export declare class InMemoryEventStore implements EventStore {
4
+ private events;
5
+ store(event: Message): Promise<StoredEvent>;
6
+ storeAll(events: Message[]): Promise<StoredEvent[]>;
7
+ fetch(afterPosition: number, limit?: number): Promise<EventStoreFetchResult>;
8
+ getLastPosition(): Promise<number>;
9
+ clear(): void;
10
+ }
11
+ //# sourceMappingURL=in-memory-event-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-event-store.d.ts","sourceRoot":"","sources":["../../src/test/in-memory-event-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,qBAAa,kBAAmB,YAAW,UAAU;IACjD,OAAO,CAAC,MAAM,CAAqB;IAE7B,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAKhD;IAEK,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAMxD;IAEK,KAAK,CACP,aAAa,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,CAAC,CAYhC;IAEK,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAEvC;IAED,KAAK,IAAI,IAAI,CAEZ;CACJ"}
@@ -0,0 +1,34 @@
1
+ export class InMemoryEventStore {
2
+ events = [];
3
+ async store(event) {
4
+ const position = this.events.length + 1;
5
+ const storedEvent = { position, event };
6
+ this.events.push(storedEvent);
7
+ return storedEvent;
8
+ }
9
+ async storeAll(events) {
10
+ const storedEvents = [];
11
+ for (const event of events) {
12
+ storedEvents.push(await this.store(event));
13
+ }
14
+ return storedEvents;
15
+ }
16
+ async fetch(afterPosition, limit) {
17
+ const lastPosition = await this.getLastPosition();
18
+ let filtered = this.events.filter((e) => e.position > afterPosition);
19
+ if (limit !== undefined) {
20
+ filtered = filtered.slice(0, limit);
21
+ }
22
+ return {
23
+ events: filtered,
24
+ lastPosition,
25
+ };
26
+ }
27
+ async getLastPosition() {
28
+ return this.events.length;
29
+ }
30
+ clear() {
31
+ this.events = [];
32
+ }
33
+ }
34
+ //# sourceMappingURL=in-memory-event-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-event-store.js","sourceRoot":"","sources":["../../src/test/in-memory-event-store.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,kBAAkB;IACnB,MAAM,GAAkB,EAAE,CAAC;IAEnC,KAAK,CAAC,KAAK,CAAC,KAAc;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACxC,MAAM,WAAW,GAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9B,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAiB;QAC5B,MAAM,YAAY,GAAkB,EAAE,CAAC;QACvC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,KAAK,CACP,aAAqB,EACrB,KAAc;QAEd,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,aAAa,CAAC,CAAC;QAErE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;QAED,OAAO;YACH,MAAM,EAAE,QAAQ;YAChB,YAAY;SACf,CAAC;IACN,CAAC;IAED,KAAK,CAAC,eAAe;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,KAAK;QACD,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACrB,CAAC;CACJ"}
@@ -1,38 +1,6 @@
1
- import { M as Message, b as MessageClass, c as MessageHeaders, E as EventStore, S as StoredEvent, a as EventStoreFetchResult } from '../event-store-UbTJSE4H.js';
2
-
3
- declare function expectMessagesToBeFullyEqual(messages: Message[], expectedMessages: Message[]): void;
4
- declare function expectMessagesToContain(messages: Message[], expectedMessages: Message[]): void;
5
- declare function expectMessageToMatch(messages: Message[], messageType: string | MessageClass<any>, payload?: Record<string, unknown>): void;
6
-
7
- declare const matchers_expectMessageToMatch: typeof expectMessageToMatch;
8
- declare const matchers_expectMessagesToBeFullyEqual: typeof expectMessagesToBeFullyEqual;
9
- declare const matchers_expectMessagesToContain: typeof expectMessagesToContain;
10
- declare namespace matchers {
11
- export { matchers_expectMessageToMatch as expectMessageToMatch, matchers_expectMessagesToBeFullyEqual as expectMessagesToBeFullyEqual, matchers_expectMessagesToContain as expectMessagesToContain };
12
- }
13
-
14
- declare class DummyMessage extends Message<Record<never, never>> {
15
- static type: string;
16
- static create(): DummyMessage;
17
- static createMany(number: number): DummyMessage[];
18
- static from(_: Record<never, never>, headers?: MessageHeaders): DummyMessage;
19
- }
20
-
21
- declare function setExpect(expectStatic: any): void;
22
-
23
- declare function partialMatch(source: Record<any, any>, target: Record<any, any>): boolean;
24
-
25
- declare function waitForTicks(number?: number): Promise<void>;
26
- declare function waitForMs(number?: number): Promise<void>;
27
- declare function waitFor(type?: "ticks" | "ms", number?: number): Promise<void>;
28
-
29
- declare class InMemoryEventStore implements EventStore {
30
- private events;
31
- store(event: Message): Promise<StoredEvent>;
32
- storeAll(events: Message[]): Promise<StoredEvent[]>;
33
- fetch(afterPosition: number, limit?: number): Promise<EventStoreFetchResult>;
34
- getLastPosition(): Promise<number>;
35
- clear(): void;
36
- }
37
-
38
- export { DummyMessage, InMemoryEventStore, expectMessageToMatch, expectMessagesToBeFullyEqual, expectMessagesToContain, matchers, partialMatch, setExpect, waitFor, waitForMs, waitForTicks };
1
+ export * as matchers from "./matchers.js";
2
+ export * from "./matchers.js";
3
+ export * from "./dummy-message.js";
4
+ export * from "./utils.js";
5
+ export * from "./in-memory-event-store.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,4BAA4B,CAAC"}