/** * @since 1.0.0 */ import type * as Error from "@effect/platform/Error"; import * as KeyValueStore from "@effect/platform/KeyValueStore"; import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; import type * as ParseResult from "effect/ParseResult"; import { type Pipeable } from "effect/Pipeable"; import type * as Record from "effect/Record"; import * as Redacted from "effect/Redacted"; import * as Schema from "effect/Schema"; import type { Scope } from "effect/Scope"; import type { Covariant } from "effect/Types"; import type { Event } from "./Event.js"; import type { EventGroup } from "./EventGroup.js"; import type { EventJournalError } from "./EventJournal.js"; import { Entry, EventJournal } from "./EventJournal.js"; import { type EventLogRemote } from "./EventLogRemote.js"; /** * @since 1.0.0 * @category schema */ export declare const SchemaTypeId: unique symbol; /** * @since 1.0.0 * @category schema */ export type SchemaTypeId = typeof SchemaTypeId; /** * @since 1.0.0 * @category schema */ export declare const isEventLogSchema: (u: unknown) => u is EventLogSchema; /** * @since 1.0.0 * @category schema */ export interface EventLogSchema { new (_: never): {}; readonly [SchemaTypeId]: SchemaTypeId; readonly groups: ReadonlyArray; } /** * @since 1.0.0 * @category schema */ export declare const schema: >(...groups: Groups) => EventLogSchema; /** * @since 1.0.0 * @category handlers */ export declare const HandlersTypeId: unique symbol; /** * @since 1.0.0 * @category handlers */ export type HandlersTypeId = typeof HandlersTypeId; /** * Represents a handled `EventGroup`. * * @since 1.0.0 * @category handlers */ export interface Handlers extends Pipeable { readonly [HandlersTypeId]: { _Endpoints: Covariant; }; readonly group: EventGroup.AnyWithProps; readonly handlers: Record.ReadonlyRecord>; readonly context: Context.Context; /** * Add the implementation for an `Event` to a `Handlers` group. */ handle(name: Tag, handler: (options: { readonly payload: Event.PayloadWithTag; readonly entry: Entry; readonly conflicts: Array<{ readonly entry: Entry; readonly payload: Event.PayloadWithTag; }>; }) => Effect.Effect, Event.ErrorWithTag, R1>): Handlers>; } /** * @since 1.0.0 * @category handlers */ export declare namespace Handlers { /** * @since 1.0.0 * @category handlers */ interface Any { readonly [HandlersTypeId]: any; } /** * @since 1.0.0 * @category handlers */ type Item = { readonly event: Event.AnyWithProps; readonly context: Context.Context; readonly handler: (options: { readonly payload: any; readonly entry: Entry; readonly conflicts: Array<{ readonly entry: Entry; readonly payload: any; }>; }) => Effect.Effect; }; /** * @since 1.0.0 * @category handlers */ type ValidateReturn = A extends (Handlers | Effect.Effect, infer _EX, infer _RX>) ? [_Events] extends [never] ? A : `Event not handled: ${Event.Tag<_Events>}` : `Must return the implemented handlers`; /** * @since 1.0.0 * @category handlers */ type Error = A extends Effect.Effect, infer _EX, infer _RX> ? _EX : never; /** * @since 1.0.0 * @category handlers */ type Context = A extends Handlers ? _R | Event.Context<_Events> : A extends Effect.Effect, infer _EX, infer _RX> ? _R | _RX | Event.Context<_Events> : never; } /** * @since 1.0.0 * @category handlers */ export declare const group: (group: EventGroup, f: (handlers: Handlers) => Handlers.ValidateReturn) => Layer.Layer, Handlers.Error, Exclude, Scope>>; /** * @since 1.0.0 * @category compaction */ export declare const groupCompaction: (group: EventGroup, effect: (options: { readonly primaryKey: string; readonly entries: Array; readonly events: Array>; readonly write: >(tag: Tag, payload: Event.PayloadWithTag) => Effect.Effect; }) => Effect.Effect) => Layer.Layer>; /** * @since 1.0.0 * @category reactivity */ export declare const groupReactivity: (group: EventGroup, keys: { readonly [Tag in Event.Tag]?: ReadonlyArray; } | ReadonlyArray) => Layer.Layer; declare const Registry_base: Context.TagClass Effect.Effect; readonly handlers: Effect.Effect>>; }>; /** * @since 1.0.0 * @category layers */ export declare class Registry extends Registry_base { /** * @since 1.0.0 */ static layer: Layer.Layer; } declare const Identity_base: Context.TagClass; }>; /** * @since 1.0.0 * @category tags */ export declare class Identity extends Identity_base { /** * @since 1.0.0 */ static makeRandom(): { readonly publicKey: string; readonly privateKey: Redacted.Redacted; }; /** * @since 1.0.0 */ static readonly Schema: Schema.Struct<{ publicKey: typeof Schema.String; privateKey: Schema.Redacted, string, never>>; }>; /** * @since 1.0.0 */ static readonly SchemaFromString: Schema.transform, Schema.transform, Schema.Struct<{ publicKey: typeof Schema.String; privateKey: Schema.Redacted, string, never>>; }>>>; /** * @since 1.0.0 */ static decodeString: (s: string) => Identity["Type"]; /** * @since 1.0.0 */ static encodeString: (identity: Identity["Type"]) => string; } /** * Generates a random `Identity` and stores it in a `KeyValueStore`. * * @since 1.0.0 * @category layers */ export declare const layerIdentityKvs: (options: { readonly key: string; }) => Layer.Layer; declare const EventLog_base: Context.TagClass>>(options: { readonly schema: EventLogSchema; readonly event: Tag; readonly payload: Event.PayloadWithTag, Tag>; }) => Effect.Effect, Tag>, Event.ErrorWithTag, Tag> | EventJournalError>; readonly registerRemote: (remote: EventLogRemote) => Effect.Effect; readonly registerCompaction: (options: { readonly events: ReadonlyArray; readonly effect: (options: { readonly entries: ReadonlyArray; readonly write: (entry: Entry) => Effect.Effect; }) => Effect.Effect; }) => Effect.Effect; readonly registerReactivity: (keys: Record>) => Effect.Effect; readonly entries: Effect.Effect, EventJournalError>; readonly destroy: Effect.Effect; }>; /** * @since 1.0.0 * @category tags */ export declare class EventLog extends EventLog_base { } /** * @since 1.0.0 * @category layers */ export declare const layerEventLog: Layer.Layer; /** * @since 1.0.0 * @category layers */ export declare const layer: (_schema: EventLogSchema) => Layer.Layer | EventJournal | Identity>; /** * @since 1.0.0 * @category client */ export declare const makeClient: (schema: EventLogSchema) => Effect.Effect<(>>(event: Tag, payload: Event.PayloadWithTag, Tag>) => Effect.Effect, Tag>, Event.ErrorWithTag, Tag> | EventJournalError>), never, EventLog>; export {}; //# sourceMappingURL=EventLog.d.ts.map