@turbox3d/reactivity
Version:
Large-scale reactive state management library
72 lines • 3.34 kB
JavaScript
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();