EdgeAIG's picture
download
raw
3.75 kB
/**
* Defines groups of typed events for the unstable event-log system.
*
* An `EventGroup` collects event definitions that belong together. Start with
* `empty`, add events with their payload, success, and error schemas, then use
* the group to build clients with `EventLog.schema` and server handlers with
* `EventLog.group`. The group only describes events; it does not write or run
* them.
*
* @since 4.0.0
*/
import { type Pipeable } from "../../Pipeable.ts";
import * as Record from "../../Record.ts";
import type * as Schema from "../../Schema.ts";
import * as Event from "./Event.ts";
/**
* Unique type identifier used to mark event log event groups.
*
* @category type IDs
* @since 4.0.0
*/
export type TypeId = "~effect/eventlog/EventGroup";
/**
* Runtime type identifier used to mark event log event groups.
*
* @category type IDs
* @since 4.0.0
*/
export declare const TypeId: TypeId;
/**
* Returns `true` when a value is an event log event group.
*
* @category guards
* @since 4.0.0
*/
export declare const isEventGroup: (u: unknown) => u is Any;
/**
* Typed collection of event definitions that represents a portion of an event log
* domain.
*
* **When to use**
*
* Use when build groups from `empty.add(...)`, then provide implementations for the events
* with `EventLog.group`.
*
* @category models
* @since 4.0.0
*/
export interface EventGroup<out Events extends Event.Any = Event.Any> extends Pipeable {
readonly [TypeId]: TypeId;
readonly events: Record.ReadonlyRecord<string, Events>;
/**
* Add an `Event` to the `EventGroup`.
*/
add<Tag extends string, Payload extends Schema.Top = typeof Schema.Void, Success extends Schema.Top = typeof Schema.Void, Error extends Schema.Top = typeof Schema.Never>(options: {
readonly tag: Tag;
readonly primaryKey: (payload: Schema.Schema.Type<Payload>) => string;
readonly payload?: Payload;
readonly success?: Success;
readonly error?: Error;
}): EventGroup<Events | Event.Event<Tag, Payload, Success, Error>>;
/**
* Add an error schema to all the events in the `EventGroup`.
*/
addError<Error extends Schema.Top>(error: Error): EventGroup<Event.AddError<Events, Error>>;
}
/**
* Type-erased marker for an event log event group.
*
* @category models
* @since 4.0.0
*/
export interface Any {
readonly [TypeId]: TypeId;
}
/**
* Type-erased event group with its events record available structurally.
*
* @category models
* @since 4.0.0
*/
export type AnyWithProps = EventGroup<Event.Any>;
/**
* Derives the handler service markers required for all events in an event group.
*
* @category models
* @since 4.0.0
*/
export type ToService<A> = A extends EventGroup<infer _Events> ? Event.ToService<_Events> : never;
/**
* Extracts the union of event definitions contained in an event group.
*
* @category models
* @since 4.0.0
*/
export type Events<Group> = Group extends EventGroup<infer _Events> ? _Events : never;
/**
* Client-side schema services required by all events in an event group.
*
* @category models
* @since 4.0.0
*/
export type ServicesClient<Group> = Event.ServicesClient<Events<Group>>;
/**
* Server-side schema services required by all events in an event group.
*
* @category models
* @since 4.0.0
*/
export type ServicesServer<Group> = Event.ServicesServer<Events<Group>>;
/**
* Creates an empty event group used as the starting point for defining a group.
*
* **When to use**
*
* Use when you need the starting `EventGroup` value before adding event
* definitions with `.add(...)`.
*
* @category constructors
* @since 4.0.0
*/
export declare const empty: EventGroup<never>;
//# sourceMappingURL=EventGroup.d.ts.map

Xet Storage Details

Size:
3.75 kB
·
Xet hash:
09f367597cd3e7e6d45ec7b8a67c87d2fcfd56d73fdf708a98140a927236e52a

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.