1
0
mirror of https://github.com/S2-/minifyfromhtml.git synced 2025-08-03 20:30:04 +02:00
Files
minifyfromhtml/node_modules/babel-plugin-transform-inline-consecutive-adds/lib/object-collapser.js
2018-05-05 13:54:07 +02:00

60 lines
1.2 KiB
JavaScript

"use strict";
const Collapser = require("./collapser");
class ObjectCollapser extends Collapser {
isInitTypeValid(init) {
return init.isObjectExpression();
}
isExpressionTypeValid(expr) {
return expr.isAssignmentExpression();
}
getExpressionChecker(objName, checkReference) {
return expr => {
// checks expr is of form:
// foo.a = rval | foo[a] = rval
const left = expr.get("left");
if (!left.isMemberExpression()) {
return false;
}
const obj = left.get("object"),
prop = left.get("property");
if (!obj.isIdentifier() || obj.node.name !== objName) {
return false;
}
if (!prop.isIdentifier() && checkReference(prop)) {
return false;
}
if (left.node.computed && !(prop.isStringLiteral() || prop.isNumericLiteral())) {
return false;
}
const right = expr.get("right");
if (checkReference(right)) {
return false;
}
return true;
};
}
extractAssignment(expr) {
return [expr.node.left.property, expr.node.right];
}
addSuccessfully(t, [left, right], init) {
init.properties.push(t.objectProperty(left, right));
return true;
}
}
module.exports = ObjectCollapser;