in src/mutator.ts [10:34]
export default function mutator<TAction extends ActionMessage, TReturn>(
actionCreator: ActionCreator<TAction>,
target: MutatorFunction<TAction, TReturn>
): MutatorFunction<TAction, TReturn> {
let actionId = getPrivateActionId(actionCreator);
if (!actionId) {
throw new Error('Mutators can only subscribe to action creators.');
}
// Wrap the callback in a MobX action so it can modify the store
const actionType = getPrivateActionType(actionCreator);
let wrappedTarget = action(actionType, (actionMessage: TAction) => {
try {
getGlobalContext().currentMutator = actionType;
target(actionMessage);
} finally {
getGlobalContext().currentMutator = null;
}
});
// Subscribe to the action
subscribe(actionId, wrappedTarget);
return target;
}