diff --git a/deno.json b/deno.json index ec118e8..d30456c 100644 --- a/deno.json +++ b/deno.json @@ -1,6 +1,6 @@ { "name": "@valkyr/event-store", - "version": "2.0.0", + "version": "2.0.1", "exports": { ".": "./mod.ts", "./browser": "./adapters/browser/adapter.ts", diff --git a/libraries/event.ts b/libraries/event.ts index a0fd23c..be54741 100644 --- a/libraries/event.ts +++ b/libraries/event.ts @@ -1,5 +1,6 @@ import z, { ZodType } from "zod"; +import { Prettify } from "../types/utilities.ts"; import { EventValidationError } from "./errors.ts"; import { getLogicalTimestamp } from "./time.ts"; import { toPrettyErrorLines } from "./zod.ts"; @@ -16,7 +17,7 @@ export class Event { * * @param data - Schema used to parse and infer the data supported by the event. */ - data(data: TData): Event & { data: TData }> { + data(data: TData): Event & { data: TData }>> { return new Event & { data: TData }>({ ...this.state, data }); } @@ -26,7 +27,7 @@ export class Event { * * @param meta - Schema used to parse and infer the meta supported by the event. */ - meta(meta: TMeta): Event & { meta: TMeta }> { + meta(meta: TMeta): Event & { meta: TMeta }>> { return new Event & { meta: TMeta }>({ ...this.state, meta }); } diff --git a/tests/mocks/aggregates.ts b/tests/mocks/aggregates.ts index 64f7bd7..f1f5c22 100644 --- a/tests/mocks/aggregates.ts +++ b/tests/mocks/aggregates.ts @@ -1,5 +1,5 @@ import { AggregateRoot } from "../../libraries/aggregate.ts"; -import { Events } from "./events.ts"; +import { EventRecord, Events } from "./events.ts"; export class User extends AggregateRoot { static override readonly name = "user"; @@ -19,7 +19,7 @@ export class User extends AggregateRoot { // Reducer // ------------------------------------------------------------------------- - with(event: Events["$events"][number]["$record"]) { + with(event: EventRecord) { switch (event.type) { case "user:name:given-set": { this.name.given = event.data; diff --git a/tests/mocks/events.ts b/tests/mocks/events.ts index 4964e6c..7c2ca2a 100644 --- a/tests/mocks/events.ts +++ b/tests/mocks/events.ts @@ -2,6 +2,7 @@ import z from "zod"; import { event } from "../../libraries/event.ts"; import { EventFactory } from "../../libraries/event-factory.ts"; +import { Prettify } from "../../types/utilities.ts"; export const auditor = z.strictObject({ auditor: z.string() }); @@ -33,3 +34,5 @@ export const events = new EventFactory([ ]); export type Events = typeof events; + +export type EventRecord = Prettify; diff --git a/types/utilities.ts b/types/utilities.ts index fec478c..11b389d 100644 --- a/types/utilities.ts +++ b/types/utilities.ts @@ -1,5 +1,9 @@ import type { Empty } from "./common.ts"; +export type Prettify = { + [K in keyof T]: T[K]; +} & {}; + export type ExcludeEmptyFields = { [K in keyof T as T[K] extends Empty ? never : K]: T[K]; };