Socket
Socket
Sign inDemoInstall

@romainberger/css-diff

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@romainberger/css-diff - npm Package Compare versions

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"
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc