UNPKG

963 BJavaScriptView Raw
1const _ = require('lodash');
2
3function omit(node, fields) {
4 if (Array.isArray(node)) {
5 return node.map(child => omit(child, fields));
6 } else if (typeof node === 'object' && node !== null) {
7 return Object.keys(node).reduce((acc, k) => {
8 if (!fields.hasOwnProperty(k)) {
9 acc[k] = omit(node[k], fields);
10 }
11 return acc;
12 }, {});
13 }
14 return node;
15}
16
17function setTo(dst, src) {
18 const keysPendingDelete = new Set(Object.keys(dst));
19 Object.keys(src).forEach(key => {
20 dst[key] = src[key];
21 keysPendingDelete.delete(key);
22 });
23 keysPendingDelete.forEach(key => {
24 delete dst[key];
25 });
26 return dst;
27}
28
29function collectAllNodes(node, predicate, output) {
30 output = output || [];
31 if (_.isObjectLike(node)) {
32 if (predicate(node)) {
33 output.push(node);
34 }
35 _.forEach(node, child => collectAllNodes(child, predicate, output));
36 }
37 return output;
38}
39
40module.exports = {omit, collectAllNodes, setTo};