121 lines
3.0 KiB
JavaScript
121 lines
3.0 KiB
JavaScript
var path = require("path");
|
|
var util = require("../util");
|
|
var b = require("ast-types").builders;
|
|
var _ = require("lodash");
|
|
|
|
var toModuleNameIdentifier = function (node) {
|
|
var id = node.source.value;
|
|
id = path.basename(id, path.extname(id));
|
|
id = util.camelCase(id);
|
|
return b.identifier(id);
|
|
};
|
|
|
|
exports.ImportDeclaration = function (node) {
|
|
var nodes = [];
|
|
|
|
if (node.specifiers.length) {
|
|
_.each(node.specifiers, function (specifier) {
|
|
var variableName = specifier.name || specifier.id;
|
|
var key = specifier.id.name;
|
|
|
|
var templateName = "require-assign";
|
|
if (specifier.type === "ImportSpecifier") {
|
|
if (key !== "default") templateName += "-key";
|
|
}
|
|
|
|
nodes.push(util.template(templateName, {
|
|
VARIABLE_NAME: variableName.name,
|
|
MODULE_NAME: node.source.raw,
|
|
KEY: key
|
|
}));
|
|
});
|
|
} else {
|
|
nodes.push(util.template("require-assign", {
|
|
VARIABLE_NAME: toModuleNameIdentifier(node),
|
|
MODULE_NAME: node.source.raw
|
|
}));
|
|
}
|
|
|
|
return nodes;
|
|
};
|
|
|
|
var pushSpecifiers = function (node, nodes) {
|
|
_.each(node.specifiers, function (specifier) {
|
|
var variableName = specifier.name || specifier.id;
|
|
|
|
if (node.source) {
|
|
if (specifier.type === "ExportBatchSpecifier") {
|
|
nodes.push(util.template("exports-wildcard", {
|
|
MODULE_NAME: node.source.raw
|
|
}, true));
|
|
} else {
|
|
var templateName;
|
|
|
|
if (variableName.name === "default") {
|
|
templateName = "exports-default-require";
|
|
} else {
|
|
templateName = "exports-require-assign";
|
|
}
|
|
|
|
if (specifier.id.name !== "default") templateName += "-key";
|
|
|
|
nodes.push(util.template(templateName, {
|
|
VARIABLE_NAME: variableName.name,
|
|
MODULE_NAME: node.source.raw,
|
|
KEY: specifier.id
|
|
}, true));
|
|
}
|
|
} else {
|
|
if (variableName.name === "default") {
|
|
nodes.push(util.template("exports-default", {
|
|
VALUE: specifier.id
|
|
}, true));
|
|
} else {
|
|
nodes.push(util.template("exports-assign", {
|
|
VALUE: specifier.id,
|
|
KEY: variableName
|
|
}, true));
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
var pushDeclaration = function (node, nodes) {
|
|
var declar = node.declaration;
|
|
|
|
if (node.default) {
|
|
if (declar.type === "FunctionDeclaration") {
|
|
declar.type = "FunctionExpression";
|
|
} else if (declar.type === "ClassDeclaration") {
|
|
declar.type = "ClassExpression";
|
|
}
|
|
|
|
nodes.push(util.template("exports-default", {
|
|
VALUE: declar
|
|
}, true));
|
|
} else {
|
|
var id = declar.id;
|
|
if (declar.type === "VariableDeclaration") {
|
|
id = declar.declarations[0].id;
|
|
}
|
|
|
|
nodes.push(declar);
|
|
nodes.push(util.template("exports-assign", {
|
|
VALUE: id,
|
|
KEY: id
|
|
}, true));
|
|
}
|
|
};
|
|
|
|
exports.ExportDeclaration = function (node) {
|
|
var nodes = [];
|
|
|
|
if (node.declaration) {
|
|
pushDeclaration(node, nodes);
|
|
} else {
|
|
pushSpecifiers(node, nodes);
|
|
}
|
|
|
|
return nodes;
|
|
};
|