Aggregate
The write side of the domain: a schema of events, a projection that folds them into state, and commands that inspect that state and decide on new events.
An aggregate is plain data. AggregateService gives it a store to run
against, and Fixture runs it in tests.
Classes
Section titled “Classes”Historical
Section titled “Historical”Defined in: src/Aggregate.ts:176
An event as it was stored in the past, in an older version of its schema. Construct one directly to replay JSON taken from a database.
Constructors
Section titled “Constructors”Constructor
Section titled “Constructor”new Historical(
options):Historical
Defined in: src/Aggregate.ts:180
Parameters
Section titled “Parameters”options
Section titled “options”payload
Section titled “payload”Json
schemaVersion
Section titled “schemaVersion”number
string
Returns
Section titled “Returns”Properties
Section titled “Properties”payload
Section titled “payload”
readonlypayload:Json
Defined in: src/Aggregate.ts:179
schemaVersion
Section titled “schemaVersion”
readonlyschemaVersion:number
Defined in: src/Aggregate.ts:178
readonlytype:string
Defined in: src/Aggregate.ts:177
Interfaces
Section titled “Interfaces”Aggregate
Section titled “Aggregate”Defined in: src/Aggregate.ts:86
Type Parameters
Section titled “Type Parameters”Name extends string
State
Events
Section titled “Events”Events extends EventSchema<any>
Commands
Section titled “Commands”Commands extends Record<string, AnyCommand>
V extends Versions<Events["Type"]> = { }
Properties
Section titled “Properties”commands
Section titled “commands”
readonlycommands:Commands
Defined in: src/Aggregate.ts:97
events
Section titled “events”
readonlyevents:Events
Defined in: src/Aggregate.ts:94
initial
Section titled “initial”
readonlyinitial:State
Defined in: src/Aggregate.ts:95
readonlyname:Name
Defined in: src/Aggregate.ts:93
projection
Section titled “projection”
readonlyprojection:Projection<State,Events["Type"]>
Defined in: src/Aggregate.ts:96
versions
Section titled “versions”
readonlyversions:V
Defined in: src/Aggregate.ts:98
Methods
Section titled “Methods”command()
Section titled “command()”command<
CommandName,Payload,E,R>(name,options):Aggregate<Name,State,Events,Commands&Record<CommandName,Command<Payload,State,Events["Type"],E,R>>,V>
Defined in: src/Aggregate.ts:100
Returns a new aggregate that also accepts this command.
Type Parameters
Section titled “Type Parameters”CommandName
Section titled “CommandName”CommandName extends string
Payload
Section titled “Payload”Payload extends PayloadSchema
E = never
R = never
Parameters
Section titled “Parameters”CommandName
options
Section titled “options”handler
Section titled “handler”CommandHandler<State, Payload["Type"], Events["Type"], E, R>
payload
Section titled “payload”Payload
Returns
Section titled “Returns”Aggregate<Name, State, Events, Commands & Record<CommandName, Command<Payload, State, Events["Type"], E, R>>, V>
AnyCommand
Section titled “AnyCommand”Defined in: src/Aggregate.ts:73
Properties
Section titled “Properties”handler
Section titled “handler”
readonlyhandler:CommandHandler<any,any,any,any,any>
Defined in: src/Aggregate.ts:75
payload
Section titled “payload”
readonlypayload:PayloadSchema
Defined in: src/Aggregate.ts:74
Command
Section titled “Command”Defined in: src/Aggregate.ts:68
Type Parameters
Section titled “Type Parameters”Payload
Section titled “Payload”Payload extends PayloadSchema
State
Event
E
R
Properties
Section titled “Properties”handler
Section titled “handler”
readonlyhandler:CommandHandler<State,Payload["Type"],Event,E,R>
Defined in: src/Aggregate.ts:70
payload
Section titled “payload”
readonlypayload:Payload
Defined in: src/Aggregate.ts:69
CommandContext
Section titled “CommandContext”Defined in: src/Aggregate.ts:43
Properties
Section titled “Properties”aggregateId
Section titled “aggregateId”
readonlyaggregateId:string
Defined in: src/Aggregate.ts:44
version
Section titled “version”
readonlyversion:number
Defined in: src/Aggregate.ts:45
EventMeta
Section titled “EventMeta”Defined in: src/Aggregate.ts:29
Where an event sits in its stream and in the store.
Properties
Section titled “Properties”aggregateId
Section titled “aggregateId”
readonlyaggregateId:string
Defined in: src/Aggregate.ts:31
aggregateName
Section titled “aggregateName”
readonlyaggregateName:string
Defined in: src/Aggregate.ts:30
causationId
Section titled “causationId”
readonlycausationId:string|null
Defined in: src/Aggregate.ts:38
What directly caused the command that recorded the event.
correlationId
Section titled “correlationId”
readonlycorrelationId:string|null
Defined in: src/Aggregate.ts:36
Shared by everything that follows from one original request, see Causation.
metadata
Section titled “metadata”
readonlymetadata:JsonObject
Defined in: src/Aggregate.ts:40
What the command carried beside its payload, such as the software version, see Metadata.
position
Section titled “position”
readonlyposition:number
Defined in: src/Aggregate.ts:33
timestamp
Section titled “timestamp”
readonlytimestamp:Utc
Defined in: src/Aggregate.ts:34
version
Section titled “version”
readonlyversion:number
Defined in: src/Aggregate.ts:32
Tagged
Section titled “Tagged”Defined in: src/Aggregate.ts:13
Properties
Section titled “Properties”
readonly_tag:string
Defined in: src/Aggregate.ts:14
Type Aliases
Section titled “Type Aliases”Any =
Aggregate<string,any,EventSchema<any>,Record<string,AnyCommand>,any>
Defined in: src/Aggregate.ts:109
CommandError
Section titled “CommandError”CommandError<
A,K> =A["commands"][K] extendsCommand<any,any,any, infer E,any> ?E:never
Defined in: src/Aggregate.ts:117
Type Parameters
Section titled “Type Parameters”A extends Any
K extends CommandName<A> = CommandName<A>
CommandHandler
Section titled “CommandHandler”CommandHandler<
State,Payload,Event,E,R> = (state,payload,context) =>Effect.Effect<Event|ReadonlyArray<Event>,E,R>
Defined in: src/Aggregate.ts:62
Decides on the events a command produces. It may run several times when concurrent writers collide, so it should only decide and leave side effects to view models. Returning an empty array records nothing.
Type Parameters
Section titled “Type Parameters”State
Payload
Section titled “Payload”Payload
Event
E
R
Parameters
Section titled “Parameters”State
payload
Section titled “payload”Payload
context
Section titled “context”Returns
Section titled “Returns”Effect.Effect<Event | ReadonlyArray<Event>, E, R>
CommandName
Section titled “CommandName”CommandName<
A> = keyofA["commands"] &string
Defined in: src/Aggregate.ts:115
Type Parameters
Section titled “Type Parameters”A extends Any
Commands
Section titled “Commands”Commands<
A> =A["commands"]
Defined in: src/Aggregate.ts:114
Type Parameters
Section titled “Type Parameters”A extends Any
Context
Section titled “Context”Context<
A> =A["commands"][CommandName<A>] extendsCommand<any,any,any,any, infer R> ?R:never
Defined in: src/Aggregate.ts:119
Type Parameters
Section titled “Type Parameters”A extends Any
Event<
A> =A["events"]["Type"]
Defined in: src/Aggregate.ts:113
Type Parameters
Section titled “Type Parameters”A extends Any
EventSchema
Section titled “EventSchema”EventSchema<
Event> =Schema.Top&object
Defined in: src/Aggregate.ts:17
Type Parameters
Section titled “Type Parameters”Type Declaration
Section titled “Type Declaration”DecodingServices
Section titled “DecodingServices”
readonlyDecodingServices:never
EncodingServices
Section titled “EncodingServices”
readonlyEncodingServices:never
readonlyType:Event
Name<
A> =A["name"]
Defined in: src/Aggregate.ts:111
Type Parameters
Section titled “Type Parameters”A extends Any
Payload
Section titled “Payload”Payload<
A,K> =A["commands"][K]["payload"]["Type"]
Defined in: src/Aggregate.ts:116
Type Parameters
Section titled “Type Parameters”A extends Any
K extends CommandName<A>
PayloadSchema
Section titled “PayloadSchema”PayloadSchema =
Schema.Top&object
Defined in: src/Aggregate.ts:23
Type Declaration
Section titled “Type Declaration”DecodingServices
Section titled “DecodingServices”
readonlyDecodingServices:never
EncodingServices
Section titled “EncodingServices”
readonlyEncodingServices:never
Projection
Section titled “Projection”Projection<
State,Event> ={ readonly [Tag in Event["_tag"]]: (state: State, event: Extract<Event, { _tag: Tag }>, meta: EventMeta) => State }
Defined in: src/Aggregate.ts:49
Exhaustive by event tag, so adding an event to the schema without folding it does not compile.
Type Parameters
Section titled “Type Parameters”State
Event extends Tagged
State<
A> =A["initial"]
Defined in: src/Aggregate.ts:112
Type Parameters
Section titled “Type Parameters”A extends Any
Versions
Section titled “Versions”Versions<
Event> ={ readonly [Tag in Event["_tag"]]?: Any<Extract<Event, { _tag: Tag }>> }
Defined in: src/Aggregate.ts:82
The older shapes of some events, keyed by tag. Each history has to end in the event’s current shape.
Type Parameters
Section titled “Type Parameters”Event extends Tagged
Functions
Section titled “Functions”evolve()
Section titled “evolve()”evolve<
A>(aggregate,state,event,meta):State<A>
Defined in: src/Aggregate.ts:159
Folds one event into the state.
Type Parameters
Section titled “Type Parameters”A extends Any
Parameters
Section titled “Parameters”aggregate
Section titled “aggregate”A
State<A>
Event<A>
Returns
Section titled “Returns”State<A>
historical()
Section titled “historical()”historical<
A,Tag,Version>(aggregate,tag,version,value):Historical
Defined in: src/Aggregate.ts:192
Encodes an event in an older version of its schema, as code from that time would have stored it. The value is checked against that version, so a test can’t seed a shape that never existed.
Type Parameters
Section titled “Type Parameters”A extends Any
Tag extends string
Version
Section titled “Version”Version extends number
Parameters
Section titled “Parameters”aggregate
Section titled “aggregate”A
Tag
version
Section titled “version”Version
SchemaAt<NonNullable<A["versions"][Tag]>, Version>["Type"]
Returns
Section titled “Returns”make()
Section titled “make()”make<
State>(): <Name,Events,V>(options) =>Aggregate<Name,State,Events, { },V>
Defined in: src/Aggregate.ts:147
The state is given explicitly, Aggregate.make<State>()({ ... }), so that the
projection’s return values are checked against it rather than widened.
Type Parameters
Section titled “Type Parameters”State
Returns
Section titled “Returns”<Name, Events, V>(options) => Aggregate<Name, State, Events, { }, V>
schemaVersion()
Section titled “schemaVersion()”schemaVersion(
aggregate,tag):number
Defined in: src/Aggregate.ts:169
The schema version new events with this tag are written with.
Parameters
Section titled “Parameters”aggregate
Section titled “aggregate”string
Returns
Section titled “Returns”number