UNPKG

gen-diff

Version:

utility for searching differences between config files

54 lines (44 loc) 1.82 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const getType = { added: '+ ', removed: '- ', unchanged: ' ', updated: ' ' }; const getIndent = level => ' '.repeat(level); const renderObj = (obj, level) => { const keys = Object.keys(obj); const arr = keys.map(key => _lodash2.default.isObject(obj[key]) ? `${getIndent(level + 1)}${key}: ${renderObj(obj[key], level + 2)}` : `${getIndent(level + 2)}${getType.unchanged}${key}: ${obj[key]}`); return `{\n${arr.join('\n')}\n ${getIndent(level)}}`; }; const drawValue = (value, level) => { if (_lodash2.default.isObject(value)) { return renderObj(value, level); } return value; }; const toPrettyDiff = (node, level) => { switch (node.type) { case 'added': return `${getIndent(level)}${getType[node.type]}${node.key}: ${drawValue(node.newValue, level)}`; case 'removed': return `${getIndent(level)}${getType[node.type]}${node.key}: ${drawValue(node.oldValue, level)}`; case 'updated': return [`${getIndent(level)}${getType.added}${node.key}: ${node.newValue}`, `${getIndent(level)}${getType.removed}${node.key}: ${node.oldValue}`].join('\n'); case 'unchanged': if (node.children) { return `${getIndent(level)}${getType[node.type]}${node.key}: { ${node.children.map(item => toPrettyDiff(item, level + 2)).join('\n')}\n${getIndent(level + 1)}}`; } return `${getIndent(level)}${getType[node.type]}${node.key}: ${node.oldValue}`; default: return `default_case ${node}`; } }; exports.default = ast => `{\n${ast.map(node => toPrettyDiff(node, 1)).join('\n')}\n}`;