UNPKG

event-reduce-js

Version:

javascript implementation of the event-reduce algorithm https://pubkey.github.io/event-reduce/

105 lines (98 loc) 2.56 kB
import type { ChangeEvent, ActionName, ResultKeyDocumentMap, QueryParams, StateSetToActionMap, StateSet, ActionFunction, StateResolveFunctionInput } from './types/index.js'; import { getStateSet } from './states/index.js'; import { actionFunctions, orderedActionList } from './actions/index.js'; import { resolveInput } from './bdd/bdd.generated.js'; /** * Export as type to ensure we do not * end with an import statement in the build output * which would increase the build size. */ export type { ActionFunction, ActionFunctionInput, ActionName, ChangeEvent, ChangeEventBase, ChangeEventDelete, ChangeEventInsert, ChangeEventUpdate, MongoQuery, QueryMatcher, QueryParams, ResultKeyDocumentMap, DeterministicSortComparator, StateName, StateResolveFunction, StateResolveFunctionInput, StateSet, StateSetToActionMap, WriteOperation } from './types/index.js'; export * from './states/index.js'; export * from './util.js'; export * from './actions/index.js'; export function calculateActionFromMap<DocType>( stateSetToActionMap: StateSetToActionMap, input: StateResolveFunctionInput<DocType> ): { action: ActionName, stateSet: StateSet } { const stateSet: StateSet = getStateSet(input); const actionName = stateSetToActionMap.get(stateSet); if (!actionName) { return { action: 'runFullQueryAgain', stateSet }; } else { return { action: actionName, stateSet }; } } export function calculateActionName<DocType>( input: StateResolveFunctionInput<DocType> ): ActionName { const resolvedActionId = resolveInput( input ); return orderedActionList[resolvedActionId]; } export function calculateActionFunction<DocType>( input: StateResolveFunctionInput<DocType> ): ActionFunction<DocType> { const actionName = calculateActionName(input); return actionFunctions[actionName]; } /** * for performance reasons, * @mutates the input * @returns the new results */ export function runAction<DocType>( action: ActionName, queryParams: QueryParams<DocType>, changeEvent: ChangeEvent<DocType>, previousResults: DocType[], keyDocumentMap?: ResultKeyDocumentMap<DocType> ): DocType[] { const fn: ActionFunction<DocType> = actionFunctions[action]; fn({ queryParams, changeEvent, previousResults, keyDocumentMap }); return previousResults; }