feat: pretty build output

This commit is contained in:
2025-09-19 18:49:09 +02:00
parent 3593228aa8
commit d55573b2db
5 changed files with 13 additions and 5 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "@valkyr/event-store", "name": "@valkyr/event-store",
"version": "2.0.0", "version": "2.0.1",
"exports": { "exports": {
".": "./mod.ts", ".": "./mod.ts",
"./browser": "./adapters/browser/adapter.ts", "./browser": "./adapters/browser/adapter.ts",

View File

@@ -1,5 +1,6 @@
import z, { ZodType } from "zod"; import z, { ZodType } from "zod";
import { Prettify } from "../types/utilities.ts";
import { EventValidationError } from "./errors.ts"; import { EventValidationError } from "./errors.ts";
import { getLogicalTimestamp } from "./time.ts"; import { getLogicalTimestamp } from "./time.ts";
import { toPrettyErrorLines } from "./zod.ts"; import { toPrettyErrorLines } from "./zod.ts";
@@ -16,7 +17,7 @@ export class Event<TEventState extends EventState = EventState> {
* *
* @param data - Schema used to parse and infer the data supported by the event. * @param data - Schema used to parse and infer the data supported by the event.
*/ */
data<TData extends ZodType>(data: TData): Event<Omit<TEventState, "data"> & { data: TData }> { data<TData extends ZodType>(data: TData): Event<Prettify<Omit<TEventState, "data"> & { data: TData }>> {
return new Event<Omit<TEventState, "data"> & { data: TData }>({ ...this.state, data }); return new Event<Omit<TEventState, "data"> & { data: TData }>({ ...this.state, data });
} }
@@ -26,7 +27,7 @@ export class Event<TEventState extends EventState = EventState> {
* *
* @param meta - Schema used to parse and infer the meta supported by the event. * @param meta - Schema used to parse and infer the meta supported by the event.
*/ */
meta<TMeta extends ZodType>(meta: TMeta): Event<Omit<TEventState, "meta"> & { meta: TMeta }> { meta<TMeta extends ZodType>(meta: TMeta): Event<Prettify<Omit<TEventState, "meta"> & { meta: TMeta }>> {
return new Event<Omit<TEventState, "meta"> & { meta: TMeta }>({ ...this.state, meta }); return new Event<Omit<TEventState, "meta"> & { meta: TMeta }>({ ...this.state, meta });
} }

View File

@@ -1,5 +1,5 @@
import { AggregateRoot } from "../../libraries/aggregate.ts"; import { AggregateRoot } from "../../libraries/aggregate.ts";
import { Events } from "./events.ts"; import { EventRecord, Events } from "./events.ts";
export class User extends AggregateRoot<Events> { export class User extends AggregateRoot<Events> {
static override readonly name = "user"; static override readonly name = "user";
@@ -19,7 +19,7 @@ export class User extends AggregateRoot<Events> {
// Reducer // Reducer
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
with(event: Events["$events"][number]["$record"]) { with(event: EventRecord) {
switch (event.type) { switch (event.type) {
case "user:name:given-set": { case "user:name:given-set": {
this.name.given = event.data; this.name.given = event.data;

View File

@@ -2,6 +2,7 @@ import z from "zod";
import { event } from "../../libraries/event.ts"; import { event } from "../../libraries/event.ts";
import { EventFactory } from "../../libraries/event-factory.ts"; import { EventFactory } from "../../libraries/event-factory.ts";
import { Prettify } from "../../types/utilities.ts";
export const auditor = z.strictObject({ auditor: z.string() }); export const auditor = z.strictObject({ auditor: z.string() });
@@ -33,3 +34,5 @@ export const events = new EventFactory([
]); ]);
export type Events = typeof events; export type Events = typeof events;
export type EventRecord = Prettify<Events["$events"][number]["$record"]>;

View File

@@ -1,5 +1,9 @@
import type { Empty } from "./common.ts"; import type { Empty } from "./common.ts";
export type Prettify<T> = {
[K in keyof T]: T[K];
} & {};
export type ExcludeEmptyFields<T> = { export type ExcludeEmptyFields<T> = {
[K in keyof T as T[K] extends Empty ? never : K]: T[K]; [K in keyof T as T[K] extends Empty ? never : K]: T[K];
}; };