I'm extremely stupid and didn't commit as I go. To anyone reading this I'm extremely sorry. A lot of these changes are very broad and I plan on releasing Babel 6.0.0 today live on stage at Ember Camp London so I'm afraid I couldn't wait. If you're ever in London I'll buy you a beer (or assorted beverage!) to make up for it, also I'll kiss your feet and give you a back massage, maybe.
48 lines
1.3 KiB
JavaScript
48 lines
1.3 KiB
JavaScript
import ReplaceSupers from "babel-helper-replace-supers";
|
|
|
|
export default function ({ types: t }) {
|
|
function Property(path, node, scope, getObjectRef, file) {
|
|
let replaceSupers = new ReplaceSupers({
|
|
getObjectRef: getObjectRef,
|
|
methodNode: node,
|
|
methodPath: path,
|
|
isStatic: true,
|
|
scope: scope,
|
|
file: file
|
|
});
|
|
|
|
replaceSupers.replace();
|
|
}
|
|
|
|
let CONTAINS_SUPER = Symbol();
|
|
|
|
return {
|
|
visitor: {
|
|
Super(path) {
|
|
let parentObj = path.findParent((path) => path.isObjectExpression());
|
|
if (parentObj) parentObj.node[CONTAINS_SUPER] = true;
|
|
},
|
|
|
|
ObjectExpression: {
|
|
exit(path, file) {
|
|
if (!path.node[CONTAINS_SUPER]) return;
|
|
|
|
let objectRef;
|
|
let getObjectRef = () => objectRef = objectRef || path.scope.generateUidIdentifier("obj");
|
|
|
|
let propPaths: Array = path.get("properties");
|
|
for (let propPath of propPaths) {
|
|
if (propPath.isObjectProperty()) propPath = propPath.get("value");
|
|
Property(propPath, propPath.node, path.scope, getObjectRef, file);
|
|
}
|
|
|
|
if (objectRef) {
|
|
path.scope.push({ id: objectRef });
|
|
path.replaceWith(t.assignmentExpression("=", objectRef, path.node));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
}
|