UNPKG

@turbox3d/reactivity

Version:

Large-scale reactive state management library

72 lines 3.34 kB
import { deepMerge } from '@turbox3d/shared'; import { EMPTY_ACTION_NAME } from '../const/symbol'; import { normalNextReturn } from './common'; import { Action } from '../core/action'; import { ctx } from '../const/config'; import { TimeTravel } from '../core/time-travel'; import { isDomain } from '../utils/common'; import { materialCallStack } from '../utils/materialCallStack'; function createLoggerMiddleware() { return function () { return function (next) { return function (dispatchedAction) { var name = dispatchedAction.name, displayName = dispatchedAction.displayName, domain = dispatchedAction.domain; if (!domain || !ctx.middleware.logger) { return normalNextReturn(next, dispatchedAction); } var length = materialCallStack.stack.length; if (ctx.middleware.skipNestLog && length !== 1) { return normalNextReturn(next, dispatchedAction); } if (!ctx.middleware.diffLogger) { console.group("%c[TURBOX LOG]: PREV ".concat(domain.constructor.name, " ").concat(name, " ").concat(displayName !== EMPTY_ACTION_NAME ? displayName : ''), 'background: #929493; color: #fff; font-weight: bold; padding: 3px 5px;'); console.dir(deepMerge({}, domain.$$turboxProperties, { clone: true })); // deep copy,logger current state before change. console.groupEnd(); return normalNextReturn(next, dispatchedAction, function () { if (!domain) { return; } console.group("%c[TURBOX LOG]: NEXT ".concat(domain.constructor.name, " ").concat(name, " ").concat(displayName !== EMPTY_ACTION_NAME ? displayName : ''), 'background: #218D41; color: #fff; font-weight: bold; padding: 3px 5px;'); console.dir(deepMerge({}, domain.$$turboxProperties, { clone: true })); // deep copy,logger current state after change. console.groupEnd(); }); } return normalNextReturn(next, dispatchedAction, function () { if (!domain) { return; } var diffHistory = new Map(); if (Action.context) { diffHistory = new Map(Action.context.historyNode.history); } else if (TimeTravel.currentTimeTravel) { diffHistory = new Map(TimeTravel.currentTimeTravel.currentHistory); } var logArr = []; diffHistory.forEach(function (keyToDiffChangeMap, target) { keyToDiffChangeMap.forEach(function (diffInfo, key) { logArr.push({ name: target.constructor.name, target: isDomain(target) ? target.$$turboxProperties : target, property: key, before: diffInfo.beforeUpdate, after: diffInfo.didUpdate }); }); }); if (logArr.length) { console.group("%c[TURBOX LOG]: DIFF ".concat(domain.constructor.name, " ").concat(name, " ").concat(displayName !== EMPTY_ACTION_NAME ? displayName : ''), 'background: #FF5F0F; color: #fff; font-weight: bold; padding: 3px 5px;'); console.table(logArr); console.groupEnd(); } }); }; }; }; } export default createLoggerMiddleware();