36 lines
976 B
JavaScript
36 lines
976 B
JavaScript
import * as defineMap from "babel-helper-define-map";
|
|
|
|
export default function ({ types: t }) {
|
|
return {
|
|
visitor: {
|
|
ObjectExpression(path, file) {
|
|
let { node } = path;
|
|
let hasAny = false;
|
|
for (let prop of (node.properties: Array)) {
|
|
if (prop.kind === "get" || prop.kind === "set") {
|
|
hasAny = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!hasAny) return;
|
|
|
|
let mutatorMap = {};
|
|
|
|
node.properties = node.properties.filter(function (prop) {
|
|
if (!prop.computed && (prop.kind === "get" || prop.kind === "set")) {
|
|
defineMap.push(mutatorMap, prop, null, file);
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
});
|
|
|
|
path.replaceWith(t.callExpression(
|
|
t.memberExpression(t.identifier("Object"), t.identifier("defineProperties")),
|
|
[node, defineMap.toDefineObject(mutatorMap)]
|
|
));
|
|
}
|
|
}
|
|
};
|
|
}
|