split up util.pushMutatorMap and util.buildDefineProperties
This commit is contained in:
parent
e712c5225b
commit
8e23d623c8
71
lib/6to5/transformation/helpers/define-map.js
Normal file
71
lib/6to5/transformation/helpers/define-map.js
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
var clone = require("lodash/lang/clone");
|
||||||
|
var each = require("lodash/collection/each");
|
||||||
|
var has = require("lodash/object/has");
|
||||||
|
var t = require("../../types");
|
||||||
|
|
||||||
|
exports.push = function (mutatorMap, key, kind, computed, value) {
|
||||||
|
var alias;
|
||||||
|
|
||||||
|
if (t.isIdentifier(key)) {
|
||||||
|
alias = key.name;
|
||||||
|
if (computed) alias = "computed:" + alias;
|
||||||
|
} else if (t.isLiteral(key)) {
|
||||||
|
alias = String(key.value);
|
||||||
|
} else {
|
||||||
|
alias = JSON.stringify(traverse.removeProperties(cloneDeep(key)));
|
||||||
|
}
|
||||||
|
|
||||||
|
var map;
|
||||||
|
if (has(mutatorMap, alias)) {
|
||||||
|
map = mutatorMap[alias];
|
||||||
|
} else {
|
||||||
|
map = {};
|
||||||
|
}
|
||||||
|
mutatorMap[alias] = map;
|
||||||
|
|
||||||
|
map._key = key;
|
||||||
|
if (computed) {
|
||||||
|
map._computed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
map[kind] = value;
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.build = function (mutatorMap) {
|
||||||
|
var objExpr = t.objectExpression([]);
|
||||||
|
|
||||||
|
each(mutatorMap, function (map) {
|
||||||
|
var mapNode = t.objectExpression([]);
|
||||||
|
|
||||||
|
var propNode = t.property("init", map._key, mapNode, map._computed);
|
||||||
|
|
||||||
|
if (!map.get && !map.set) {
|
||||||
|
map.writable = t.literal(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (map.enumerable === false) {
|
||||||
|
delete map.enumerable;
|
||||||
|
} else {
|
||||||
|
map.enumerable = t.literal(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
map.configurable = t.literal(true);
|
||||||
|
|
||||||
|
each(map, function (node, key) {
|
||||||
|
if (key[0] === "_") return;
|
||||||
|
|
||||||
|
node = clone(node);
|
||||||
|
var inheritNode = node;
|
||||||
|
if (t.isMethodDefinition(node)) node = node.value;
|
||||||
|
|
||||||
|
var prop = t.property("init", t.identifier(key), node);
|
||||||
|
t.inheritsComments(prop, inheritNode);
|
||||||
|
t.removeComments(inheritNode);
|
||||||
|
mapNode.properties.push(prop);
|
||||||
|
});
|
||||||
|
|
||||||
|
objExpr.properties.push(propNode);
|
||||||
|
});
|
||||||
|
|
||||||
|
return objExpr;
|
||||||
|
};
|
||||||
@ -1,7 +1,8 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var util = require("../../../util");
|
var defineMap = require("../../helpers/define-map");
|
||||||
var t = require("../../../types");
|
var util = require("../../../util");
|
||||||
|
var t = require("../../../types");
|
||||||
|
|
||||||
exports.ObjectExpression = function (node) {
|
exports.ObjectExpression = function (node) {
|
||||||
var mutatorMap = {};
|
var mutatorMap = {};
|
||||||
@ -10,7 +11,7 @@ exports.ObjectExpression = function (node) {
|
|||||||
node.properties = node.properties.filter(function (prop) {
|
node.properties = node.properties.filter(function (prop) {
|
||||||
if (prop.kind === "get" || prop.kind === "set") {
|
if (prop.kind === "get" || prop.kind === "set") {
|
||||||
hasAny = true;
|
hasAny = true;
|
||||||
util.pushMutatorMap(mutatorMap, prop.key, prop.kind, prop.computed, prop.value);
|
defineMap.push(mutatorMap, prop.key, prop.kind, prop.computed, prop.value);
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
@ -21,6 +22,6 @@ exports.ObjectExpression = function (node) {
|
|||||||
|
|
||||||
return t.callExpression(
|
return t.callExpression(
|
||||||
t.memberExpression(t.identifier("Object"), t.identifier("defineProperties")),
|
t.memberExpression(t.identifier("Object"), t.identifier("defineProperties")),
|
||||||
[node, util.buildDefineProperties(mutatorMap)]
|
[node, defineMap.build(mutatorMap)]
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
var ReplaceSupers = require("../../helpers/replace-supers");
|
var ReplaceSupers = require("../../helpers/replace-supers");
|
||||||
var nameMethod = require("../../helpers/name-method");
|
var nameMethod = require("../../helpers/name-method");
|
||||||
|
var defineMap = require("../../helpers/define-map");
|
||||||
var util = require("../../../util");
|
var util = require("../../../util");
|
||||||
var t = require("../../../types");
|
var t = require("../../../types");
|
||||||
|
|
||||||
@ -173,11 +174,11 @@ Class.prototype.buildBody = function () {
|
|||||||
var staticProps;
|
var staticProps;
|
||||||
|
|
||||||
if (this.hasInstanceMutators) {
|
if (this.hasInstanceMutators) {
|
||||||
instanceProps = util.buildDefineProperties(this.instanceMutatorMap);
|
instanceProps = defineMap.build(this.instanceMutatorMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.hasStaticMutators) {
|
if (this.hasStaticMutators) {
|
||||||
staticProps = util.buildDefineProperties(this.staticMutatorMap);
|
staticProps = defineMap.build(this.staticMutatorMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (instanceProps || staticProps) {
|
if (instanceProps || staticProps) {
|
||||||
@ -230,8 +231,8 @@ Class.prototype.pushMethod = function (node) {
|
|||||||
this.hasInstanceMutators = true;
|
this.hasInstanceMutators = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
util.pushMutatorMap(mutatorMap, methodName, kind, node.computed, node);
|
defineMap.push(mutatorMap, methodName, kind, node.computed, node);
|
||||||
util.pushMutatorMap(mutatorMap, methodName, "enumerable", node.computed, false);
|
defineMap.push(mutatorMap, methodName, "enumerable", node.computed, false);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -81,73 +81,6 @@ exports.sourceMapToComment = function (map) {
|
|||||||
return "//# sourceMappingURL=data:application/json;base64," + base64;
|
return "//# sourceMappingURL=data:application/json;base64," + base64;
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.pushMutatorMap = function (mutatorMap, key, kind, computed, value) {
|
|
||||||
var alias;
|
|
||||||
|
|
||||||
if (t.isIdentifier(key)) {
|
|
||||||
alias = key.name;
|
|
||||||
if (computed) alias = "computed:" + alias;
|
|
||||||
} else if (t.isLiteral(key)) {
|
|
||||||
alias = String(key.value);
|
|
||||||
} else {
|
|
||||||
alias = JSON.stringify(traverse.removeProperties(cloneDeep(key)));
|
|
||||||
}
|
|
||||||
|
|
||||||
var map;
|
|
||||||
if (has(mutatorMap, alias)) {
|
|
||||||
map = mutatorMap[alias];
|
|
||||||
} else {
|
|
||||||
map = {};
|
|
||||||
}
|
|
||||||
mutatorMap[alias] = map;
|
|
||||||
|
|
||||||
map._key = key;
|
|
||||||
if (computed) {
|
|
||||||
map._computed = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
map[kind] = value;
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.buildDefineProperties = function (mutatorMap) {
|
|
||||||
var objExpr = t.objectExpression([]);
|
|
||||||
|
|
||||||
each(mutatorMap, function (map) {
|
|
||||||
var mapNode = t.objectExpression([]);
|
|
||||||
|
|
||||||
var propNode = t.property("init", map._key, mapNode, map._computed);
|
|
||||||
|
|
||||||
if (!map.get && !map.set) {
|
|
||||||
map.writable = t.literal(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (map.enumerable === false) {
|
|
||||||
delete map.enumerable;
|
|
||||||
} else {
|
|
||||||
map.enumerable = t.literal(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
map.configurable = t.literal(true);
|
|
||||||
|
|
||||||
each(map, function (node, key) {
|
|
||||||
if (key[0] === "_") return;
|
|
||||||
|
|
||||||
node = clone(node);
|
|
||||||
var inheritNode = node;
|
|
||||||
if (t.isMethodDefinition(node)) node = node.value;
|
|
||||||
|
|
||||||
var prop = t.property("init", t.identifier(key), node);
|
|
||||||
t.inheritsComments(prop, inheritNode);
|
|
||||||
t.removeComments(inheritNode);
|
|
||||||
mapNode.properties.push(prop);
|
|
||||||
});
|
|
||||||
|
|
||||||
objExpr.properties.push(propNode);
|
|
||||||
});
|
|
||||||
|
|
||||||
return objExpr;
|
|
||||||
};
|
|
||||||
|
|
||||||
var templateVisitor = {
|
var templateVisitor = {
|
||||||
enter: function (node, parent, scope, context, nodes) {
|
enter: function (node, parent, scope, context, nodes) {
|
||||||
if (t.isIdentifier(node) && has(nodes, node.name)) {
|
if (t.isIdentifier(node) && has(nodes, node.name)) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user