43 lines
1.0 KiB
JavaScript
43 lines
1.0 KiB
JavaScript
import { declare } from "@babel/helper-plugin-utils";
|
|
import ReplaceSupers from "@babel/helper-replace-supers";
|
|
import { types as t } from "@babel/core";
|
|
|
|
function replacePropertySuper(path, getObjectRef, file) {
|
|
const replaceSupers = new ReplaceSupers({
|
|
getObjectRef: getObjectRef,
|
|
methodPath: path,
|
|
file: file,
|
|
});
|
|
|
|
replaceSupers.replace();
|
|
}
|
|
|
|
export default declare(api => {
|
|
api.assertVersion(7);
|
|
|
|
return {
|
|
name: "transform-object-super",
|
|
|
|
visitor: {
|
|
ObjectExpression(path, state) {
|
|
let objectRef;
|
|
const getObjectRef = () =>
|
|
(objectRef = objectRef || path.scope.generateUidIdentifier("obj"));
|
|
|
|
path.get("properties").forEach(propPath => {
|
|
if (!propPath.isMethod()) return;
|
|
|
|
replacePropertySuper(propPath, getObjectRef, state);
|
|
});
|
|
|
|
if (objectRef) {
|
|
path.scope.push({ id: t.cloneNode(objectRef) });
|
|
path.replaceWith(
|
|
t.assignmentExpression("=", t.cloneNode(objectRef), path.node),
|
|
);
|
|
}
|
|
},
|
|
},
|
|
};
|
|
});
|