Skip to content

@codesoul-co/hypha-core / modules/runtime/projection

模块用法

用于执行该边界的运行时行为。Projection 模块公开 2 类、1 函数、4 接口。

从包入口导入

ts
import {
  InMemoryProjectionStore,
  ProjectionEngine,
  validateProjectionRecord,
} from '@codesoul-co/hypha-core';

import type {
  ProjectionDefinition,
  ProjectionEngineOptions,
  ProjectionRecord,
  ProjectionStore,
} from '@codesoul-co/hypha-core';

使用要点

  • 4 个类型/接口用于应用代码、Adapter 或测试中的静态契约;请使用 import type,运行时不应依赖它们。
  • 2 个类提供可实例化的运行时实现;构造参数与公开方法在各自条目中完整列出。
  • 1 个函数是该模块的直接操作入口;每个 overload 的必需/可选参数与返回类型均在下方列出。

公共导出

Symbol种类签名说明
InMemoryProjectionStorenew InMemoryProjectionStore<TState = unknown>(): InMemoryProjectionStore<TState>In Memory Projection Store 类,共公开 4 个构造函数或成员;精确签名见本条目的声明与成员表。
ProjectionEnginenew ProjectionEngine(options: ProjectionEngineOptions): ProjectionEngineProjection Engine 类,共公开 3 个构造函数或成员;精确签名见本条目的声明与成员表。
validateProjectionRecord函数validateProjectionRecord<TState>(record: ProjectionRecord<TState>): voidValidate Projection Record 函数,提供 1 个公开调用签名;参数与返回类型见下表。
ProjectionDefinition接口interface ProjectionDefinitionProjection Definition 接口,共包含 5 个公开字段或方法。
ProjectionEngineOptions接口interface ProjectionEngineOptionsProjection Engine Options 接口,共包含 2 个公开字段或方法。
ProjectionRecord接口interface ProjectionRecordProjection Record 接口,共包含 7 个公开字段或方法。
ProjectionStore接口interface ProjectionStoreProjection Store 接口,共包含 3 个公开字段或方法。

InMemoryProjectionStore

In Memory Projection Store 类,共公开 4 个构造函数或成员;精确签名见本条目的声明与成员表。

声明

text
export declare class InMemoryProjectionStore<TState = unknown> implements ProjectionStore<TState> {
    get(projectionId: string, key: string): Promise<ProjectionRecord<TState> | null>;
    put(record: ProjectionRecord<TState>, expectedRevision?: number): Promise<void>;
    delete(projectionId: string, key: string): Promise<void>;
}

公开成员

成员种类签名说明
constructor构造函数<TState = unknown>(): InMemoryProjectionStore<TState>创建该类的实例。
delete方法delete(projectionId: string, key: string): Promise<void>公开方法;参数与返回类型以签名列为准。
get方法get(projectionId: string, key: string): Promise<ProjectionRecord<TState> | null>公开方法;参数与返回类型以签名列为准。
put方法put(record: ProjectionRecord<TState>, expectedRevision?: number): Promise<void>公开方法;参数与返回类型以签名列为准。

ProjectionEngine

Projection Engine 类,共公开 3 个构造函数或成员;精确签名见本条目的声明与成员表。

声明

text
export declare class ProjectionEngine {
    constructor(options: ProjectionEngineOptions);
    update<TState>(definition: ProjectionDefinition<TState>, store: ProjectionStore<TState>, scope: EventStreamScope, key?: string): Promise<ProjectionRecord<TState>>;
    rebuild<TState>(definition: ProjectionDefinition<TState>, store: ProjectionStore<TState>, scope: EventStreamScope, key?: string): Promise<ProjectionRecord<TState>>;
}

公开成员

成员种类签名说明
constructor构造函数(options: ProjectionEngineOptions): ProjectionEngine创建该类的实例。
rebuild方法rebuild<TState>(definition: ProjectionDefinition<TState>, store: ProjectionStore<TState>, scope: EventStreamScope, key?: string): Promise<ProjectionRecord<TState>>公开方法;参数与返回类型以签名列为准。
update方法update<TState>(definition: ProjectionDefinition<TState>, store: ProjectionStore<TState>, scope: EventStreamScope, key?: string): Promise<ProjectionRecord<TState>>公开方法;参数与返回类型以签名列为准。

validateProjectionRecord

Validate Projection Record 函数,提供 1 个公开调用签名;参数与返回类型见下表。

声明

text
export declare function validateProjectionRecord<TState>(record: ProjectionRecord<TState>): void;

调用签名

text
validateProjectionRecord<TState>(record: ProjectionRecord<TState>): void

参数

参数类型必需说明
recordProjectionRecord<TState>必需参数;接受的值由类型列定义。

返回值

  • 类型: void
  • 说明: 不返回值。

ProjectionDefinition

Projection Definition 接口,共包含 5 个公开字段或方法。

  • 种类: 接口
  • 导入: import type { ProjectionDefinition } from '@codesoul-co/hypha-core';
  • 源码模块: modules/runtime/projection

声明

text
export interface ProjectionDefinition<TState> {
    id: string;
    version: string;
    initialState(): TState;
    applies(event: PersistedFrameworkEvent): boolean;
    reduce(state: TState, event: PersistedFrameworkEvent): TState;
}

契约成员

成员种类签名说明
applies方法applies(event: PersistedFrameworkEvent): boolean公开方法;参数与返回类型以签名列为准。
id属性id: string公开属性;类型、只读和可选状态以签名列为准。
initialState方法initialState(): TState公开方法;参数与返回类型以签名列为准。
reduce方法reduce(state: TState, event: PersistedFrameworkEvent): TState公开方法;参数与返回类型以签名列为准。
version属性version: string公开属性;类型、只读和可选状态以签名列为准。

ProjectionEngineOptions

Projection Engine Options 接口,共包含 2 个公开字段或方法。

  • 种类: 接口
  • 导入: import type { ProjectionEngineOptions } from '@codesoul-co/hypha-core';
  • 源码模块: modules/runtime/projection

声明

text
export interface ProjectionEngineOptions {
    events: Pick<EventRuntime, 'read'>;
    now?: () => string;
}

契约成员

成员种类签名说明
events属性events: Pick<EventRuntime, "read">公开属性;类型、只读和可选状态以签名列为准。
now方法now?(): string公开方法;参数与返回类型以签名列为准。

ProjectionRecord

Projection Record 接口,共包含 7 个公开字段或方法。

声明

text
export interface ProjectionRecord<TState = unknown> {
    projectionId: string;
    projectionVersion: string;
    key: string;
    state: TState;
    lastSequence: number;
    revision: number;
    updatedAt: string;
}

契约成员

成员种类签名说明
key属性key: string公开属性;类型、只读和可选状态以签名列为准。
lastSequence属性lastSequence: number公开属性;类型、只读和可选状态以签名列为准。
projectionId属性projectionId: string公开属性;类型、只读和可选状态以签名列为准。
projectionVersion属性projectionVersion: string公开属性;类型、只读和可选状态以签名列为准。
revision属性revision: number公开属性;类型、只读和可选状态以签名列为准。
state属性state: TState公开属性;类型、只读和可选状态以签名列为准。
updatedAt属性updatedAt: string公开属性;类型、只读和可选状态以签名列为准。

ProjectionStore

Projection Store 接口,共包含 3 个公开字段或方法。

声明

text
export interface ProjectionStore<TState = unknown> {
    get(projectionId: string, key: string): Promise<ProjectionRecord<TState> | null>;
    put(record: ProjectionRecord<TState>, expectedRevision?: number): Promise<void>;
    delete?(projectionId: string, key: string): Promise<void>;
}

契约成员

成员种类签名说明
delete方法delete?(projectionId: string, key: string): Promise<void>公开方法;参数与返回类型以签名列为准。
get方法get(projectionId: string, key: string): Promise<ProjectionRecord<TState> | null>公开方法;参数与返回类型以签名列为准。
put方法put(record: ProjectionRecord<TState>, expectedRevision?: number): Promise<void>公开方法;参数与返回类型以签名列为准。