babel/lib/6to5/transformers/modules.js
Sebastian McKenzie c97696c224 first commit
2014-09-28 23:39:22 +10:00

86 lines
2.1 KiB
JavaScript

var util = require("../util");
var _ = require("lodash");
exports.ImportDeclaration = function (node) {
var nodes = [];
_.each(node.specifiers, function (specifier) {
var variableName = specifier.name || specifier.id;
var key = specifier.id.name;
var templateName = "require-assign";
if (node.kind !== "default") templateName += "-key";
nodes.push(util.template(templateName, {
VARIABLE_NAME: variableName.name,
MODULE_NAME: node.source,
KEY: key
}));
});
return nodes;
};
exports.ModuleDeclaration = function (node) {
return util.template("require-assign", {
VARIABLE_NAME: node.id,
MODULE_NAME: node.source
});
};
exports.ExportDeclaration = function (node) {
var nodes = [];
_.each(node.specifiers, function (specifier) {
var variableName = specifier.name || specifier.id;
if (specifier.type === "ExportBatchSpecifier") {
nodes.push(util.template("exports-wildcard", {
MODULE_NAME: node.source
}, true));
} else {
nodes.push(util.template("exports-require-assign-key", {
VARIABLE_NAME: variableName.name,
MODULE_NAME: node.source,
KEY: specifier.id.name
}, true));
}
});
var declar = node.declaration;
if (declar) {
if (node.default) {
nodes.push(util.template("exports-default", {
VALUE: declar
}, true));
} else {
if (declar.type === "VariableDeclaration") {
nodes.push(declar);
_.each(declar.declarations, function (declar) {
nodes.push(util.template("exports-alias-var", {
STRING_KEY: {
type: "Literal",
value: declar.id.name
},
KEY: declar.id
}, true));
});
} else if (declar.type === "FunctionDeclaration") {
declar.type = "FunctionExpression";
nodes.push(util.template("exports-assign", {
KEY: declar.id,
VALUE: declar
}, true));
} else {
throw new Error("unsupported export declaration type " + declar.type);
}
}
}
return nodes;
};