@romainberger/css-diff
Advanced tools
Comparing version 1.0.2 to 1.0.3
104
lib/index.js
@@ -5,3 +5,61 @@ 'use strict'; | ||
module.exports = function (source, reversed) { | ||
var _lodash = require('lodash.merge'); | ||
var _lodash2 = _interopRequireDefault(_lodash); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
var parse = function parse(css) { | ||
var ast = (0, _postcss.parse)(css); | ||
var result = {}; | ||
ast.nodes.forEach(function (node) { | ||
if (node.type === 'rule') { | ||
(function () { | ||
var declarations = {}; | ||
node.nodes.forEach(function (dcl) { | ||
if (dcl.type !== 'decl') { | ||
return; | ||
} | ||
declarations[dcl.prop] = dcl.value; | ||
}); | ||
result = (0, _lodash2.default)(result, _defineProperty({}, node.selector, declarations)); | ||
})(); | ||
} | ||
}); | ||
return result; | ||
}; | ||
var toString = function toString(css) { | ||
var result = ''; | ||
Object.keys(css).forEach(function (selector) { | ||
result = '' + result + selector + ' {\n'; | ||
Object.keys(css[selector]).forEach(function (prop) { | ||
result = result + ' ' + prop + ': ' + css[selector][prop] + ';\n'; | ||
}); | ||
result = result + '}\n'; | ||
}); | ||
return result; | ||
}; | ||
var addProp = function addProp(diff, selector, prop, value) { | ||
if (diff[selector]) { | ||
diff[selector][prop] = value; | ||
} else { | ||
diff[selector] = _defineProperty({}, prop, value); | ||
} | ||
return diff; | ||
}; | ||
var cssDiff = function cssDiff(source, reversed) { | ||
var isStringified = false; | ||
@@ -15,34 +73,20 @@ | ||
var sourceAst = (0, _postcss.parse)(source); | ||
var reversedAst = (0, _postcss.parse)(reversed); | ||
var totalNodes = reversedAst.nodes.length; | ||
var sourceObject = parse(source); | ||
var reversedObject = parse(reversed); | ||
var diff = {}; | ||
var diff = ''; | ||
var _loop = function _loop(i) { | ||
var isAdded = false; | ||
var sNode = sourceAst.nodes[i]; | ||
var rNode = reversedAst.nodes[i]; | ||
var sDcl = sNode.nodes; | ||
var rDcl = rNode.nodes; | ||
sDcl.forEach(function (dcl, index) { | ||
if (dcl.toString() !== rDcl[index].toString()) { | ||
if (!isAdded) { | ||
diff += rNode.selector + ' {\n'; | ||
isAdded = true; | ||
Object.keys(reversedObject).forEach(function (selector) { | ||
Object.keys(reversedObject[selector]).forEach(function (prop) { | ||
if (sourceObject[selector][prop]) { | ||
if (sourceObject[selector][prop] !== reversedObject[selector][prop]) { | ||
diff = addProp(diff, selector, prop, reversedObject[selector][prop]); | ||
} | ||
diff += ' ' + rDcl[index].toString() + ';\n'; | ||
} else { | ||
diff = addProp(diff, selector, prop, reversedObject[selector][prop]); | ||
} | ||
}); | ||
}); | ||
if (isAdded) { | ||
diff += '}\n'; | ||
} | ||
}; | ||
diff = toString(diff); | ||
for (var i = 0; i < totalNodes; i++) { | ||
_loop(i); | ||
} | ||
if (isStringified) { | ||
@@ -53,2 +97,6 @@ diff = JSON.stringify(diff); | ||
return diff; | ||
}; | ||
}; | ||
module.exports = cssDiff; | ||
module.exports.parse = parse; | ||
module.exports.toString = toString; |
{ | ||
"name": "@romainberger/css-diff", | ||
"version": "1.0.2", | ||
"version": "1.0.3", | ||
"description": "Get the diff between two css", | ||
@@ -36,4 +36,5 @@ "main": "lib/index.js", | ||
"dependencies": { | ||
"lodash.merge": "^4.4.0", | ||
"postcss": "^5.0.21" | ||
} | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
5159
73
2
+ Addedlodash.merge@^4.4.0
+ Addedlodash.merge@4.6.2(transitive)