import type { EntityStreamOperation, EntityStreamSpec, SourceLocation } from "../internal/service-spec.js"; import type { ServiceContext } from "../service.js"; import type { Attributes } from "./entity.js"; import type { EntityCompositeKeyPart, KeyMap } from "./key.js"; export interface EntityStreamStreamContext { streamName: string; entityName: string; } export interface EntityStreamContext { /** * Information about the stream. */ stream: EntityStreamStreamContext; /** * Information about the containing service. */ service: ServiceContext; } export interface EntityStreamHandler = EntityCompositeKeyPart, Sort extends EntityCompositeKeyPart | undefined = EntityCompositeKeyPart | undefined, Operations extends EntityStreamOperation[] = EntityStreamOperation[], IncludeOld extends boolean = false> { /** * Provides the keys, new value */ (item: EntityStreamItem, context: EntityStreamContext): Promise | void | false; } export interface EntityBatchStreamHandler = EntityCompositeKeyPart, Sort extends EntityCompositeKeyPart | undefined = EntityCompositeKeyPart | undefined, Operations extends EntityStreamOperation[] = EntityStreamOperation[]> { /** * Provides the keys, new value */ (items: EntityStreamItem[], context: EntityStreamContext): Promise | void | { failedItemIds?: string[]; }; } export interface EntityStreamItemBase = EntityCompositeKeyPart, Sort extends EntityCompositeKeyPart | undefined = EntityCompositeKeyPart | undefined> { key: KeyMap; } export type EntityStreamItem = EntityCompositeKeyPart, Sort extends EntityCompositeKeyPart | undefined = EntityCompositeKeyPart | undefined, Operations extends EntityStreamOperation[] = EntityStreamOperation[], IncludeOld extends boolean = false> = (EntityStreamInsertItem | EntityStreamModifyItem | EntityStreamRemoveItem) & { id: string; operation: Operations[number]; }; export interface EntityStreamInsertItem = EntityCompositeKeyPart, Sort extends EntityCompositeKeyPart | undefined = EntityCompositeKeyPart | undefined> extends EntityStreamItemBase { newValue: Attr; newVersion: number; operation: "insert"; } export interface EntityStreamModifyItem = EntityCompositeKeyPart, Sort extends EntityCompositeKeyPart | undefined = EntityCompositeKeyPart | undefined, IncludeOld extends boolean = false> extends EntityStreamItemBase { operation: "modify"; newValue: Attr; newVersion: number; oldValue: IncludeOld extends true ? Attr : undefined; oldVersion: number; } export interface EntityStreamRemoveItem = EntityCompositeKeyPart, Sort extends EntityCompositeKeyPart | undefined = EntityCompositeKeyPart | undefined, IncludeOld extends boolean = false> extends EntityStreamItemBase { operation: "remove"; oldValue?: IncludeOld extends true ? Attr : undefined; oldVersion?: number; } export interface EntityStream, Sort extends EntityCompositeKeyPart | undefined> extends EntityStreamSpec { kind: "EntityStream"; handler: EntityStreamHandler; sourceLocation?: SourceLocation; } export interface EntityBatchStream, Sort extends EntityCompositeKeyPart | undefined> extends EntityStreamSpec { kind: "EntityBatchStream"; handler: EntityBatchStreamHandler; sourceLocation?: SourceLocation; } //# sourceMappingURL=stream.d.ts.map