import findDeclarationByKey from '../AST/findDeclarationByKey';
import { Unset, UpdateDeclarations, } from '../CSSTransformers';
import diffDeclarations from './diffDeclarations';
/**
* Compare declarations between rules and apply diff transformation.
* @memberof diff
* @param {Rule} originalRule Original rule.
* @param {Rule} expectedRule Expected rule.
* @returns {Rule}
*/
function transformDiffDeclarations(originalRule, expectedRule) {
const diff = diffDeclarations(originalRule, expectedRule);
diff.map(({ state, declaration, }) => {
switch (state) {
case -1:
Unset.transform(
findDeclarationByKey(
declaration.props, originalRule.children
)
);
break;
case 1:
originalRule.children.push(declaration);
break;
case 0: {
const { original: originalDeclaration, expected: expectedDeclaration, } = declaration;
if (originalDeclaration.children !== expectedDeclaration.children) {
originalDeclaration.children = expectedDeclaration.children;
UpdateDeclarations.transform(originalDeclaration);
} else {
originalRule.children.splice(originalRule.children.indexOf(originalDeclaration), 1);
}
break;
}
}
});
return originalRule;
}
export default transformDiffDeclarations;