Function getAggregateByQueryFactory

  • Factory function to create a typed aggregate getter for an EventMap.

    Returns

    A typed function that builds aggregates from query results

    Example

    type TodoListEventMap = {
    "todo-list-created": { todoListId: string; title: string };
    "todo-list-renamed": { title: string; renamedCount: number };
    };

    const getAggregate = getAggregateByQueryFactory<TodoListEventMap>(
    (query) => sorci.getEventsByQuery(query)
    );

    const query = {
    $where: {
    type: { $in: ["todo-list-created", "todo-list-renamed"] as const }
    }
    };

    const result = await getAggregate(query, (state, event) => {
    return { ...state, ...event.data };
    });

    // result.state is typed as: { todoListId: string; title: string; renamedCount: number }
    // result.query is the original query with full type information

    Type Parameters

    • TEventMap

    Parameters

    Returns (<TQuery>(query: TQuery, reducer: ((state: DeepPrettify<MergeProperties<UnionData<TEventMap, ExtractTypes<TQuery>>>>, event: PersistedEvent) => DeepPrettify<MergeProperties<UnionData<TEventMap, ExtractTypes<TQuery>>>>)) => Promise<{
        query: TQuery;
        state: DeepPrettify<MergeProperties<UnionData<TEventMap, ExtractTypes<TQuery>>>>;
    }>)

      • <TQuery>(query: TQuery, reducer: ((state: DeepPrettify<MergeProperties<UnionData<TEventMap, ExtractTypes<TQuery>>>>, event: PersistedEvent) => DeepPrettify<MergeProperties<UnionData<TEventMap, ExtractTypes<TQuery>>>>)): Promise<{
            query: TQuery;
            state: DeepPrettify<MergeProperties<UnionData<TEventMap, ExtractTypes<TQuery>>>>;
        }>
      • Type Parameters

        Parameters

        • query: TQuery
        • reducer: ((state: DeepPrettify<MergeProperties<UnionData<TEventMap, ExtractTypes<TQuery>>>>, event: PersistedEvent) => DeepPrettify<MergeProperties<UnionData<TEventMap, ExtractTypes<TQuery>>>>)
            • (state: DeepPrettify<MergeProperties<UnionData<TEventMap, ExtractTypes<TQuery>>>>, event: PersistedEvent): DeepPrettify<MergeProperties<UnionData<TEventMap, ExtractTypes<TQuery>>>>
            • Parameters

              • state: DeepPrettify<MergeProperties<UnionData<TEventMap, ExtractTypes<TQuery>>>>
              • event: PersistedEvent

              Returns DeepPrettify<MergeProperties<UnionData<TEventMap, ExtractTypes<TQuery>>>>

        Returns Promise<{
            query: TQuery;
            state: DeepPrettify<MergeProperties<UnionData<TEventMap, ExtractTypes<TQuery>>>>;
        }>

Generated using TypeDoc