js2flowchart
Version:
> Why? While I've been working on [Under-the-hood-ReactJS](https://github.com/Bogdan-Lyashenko/Under-the-hood-ReactJS) I spent enormous amount of time on creating schemes. Each change in code or flowchart affects all entire scheme instantly, forcing you t
61 lines • 1.84 kB
JavaScript
import { traversalSearch } from 'shared/utils/traversal';
var executeApplyFn = function executeApplyFn(apply, node) {
return typeof apply === 'function' ? apply(node) : apply;
};
var UpdatesMap = {
name: function name(node, apply) {
node.name = executeApplyFn(apply, node);
},
prefixName: function prefixName(node, apply) {
node.prefixName = executeApplyFn(apply, node);
},
type: function type(node, apply) {
node.type = executeApplyFn(apply, node);
},
body: function body(node, apply) {
node.body = executeApplyFn(apply, node);
},
parent: function parent(node, apply) {
node.parent = executeApplyFn(apply, node);
}
};
var applyModifierUpdates = function applyModifierUpdates(tree, modifier) {
var nodes = traversalSearch(tree, modifier.test);
if (!nodes.length) return;
var updates = Object.keys(modifier.updates || {});
updates.filter(function (i) {
return i !== 'subTreeUpdate';
}).forEach(function (updateName) {
nodes.forEach(function (node) {
UpdatesMap[updateName](node, modifier.updates[updateName]);
});
});
if (updates.includes('subTreeUpdate')) {
modifier.updates.subTreeUpdate(nodes, tree);
}
};
export default (function () {
var modifiersList = [];
return {
addModifier: function addModifier(modifier) {
[].concat(modifier).forEach(function (item) {
return modifiersList.push(item);
});
},
create: function create(test, updates) {
this.addModifier({
test: test,
updates: updates
});
},
runModifier: function runModifier(tree, modifier) {
applyModifierUpdates(tree, modifier);
},
applyTo: function applyTo(tree) {
var _this = this;
modifiersList.forEach(function (modifier) {
return _this.runModifier(tree, modifier);
});
}
};
});