add amd module formatter #82

This commit is contained in:
Sebastian McKenzie
2014-10-19 17:05:24 +11:00
parent 209093a3f0
commit fceff4b52f
35 changed files with 391 additions and 25 deletions

View File

@@ -1,25 +1,21 @@
module.exports = CommonJSModuleFormatter;
module.exports = CommonJSFormatter;
var util = require("../util");
var b = require("recast").types.builders;
var getSpecifierName = function (specifier) {
return specifier.name || specifier.id;
};
function CommonJSModuleFormatter(file) {
function CommonJSFormatter(file) {
this.file = file;
}
CommonJSModuleFormatter.prototype.import = function (node, nodes) {
CommonJSFormatter.prototype.import = function (node, nodes) {
// import "foo";
nodes.push(util.template("require", {
MODULE_NAME: node.source.raw
}, true));
};
CommonJSModuleFormatter.prototype.importSpecifier = function (specifier, node, nodes) {
var variableName = getSpecifierName(specifier);
CommonJSFormatter.prototype.importSpecifier = function (specifier, node, nodes) {
var variableName = util.getSpecifierName(specifier);
// import foo from "foo";
if (specifier.default) {
@@ -32,13 +28,13 @@ CommonJSModuleFormatter.prototype.importSpecifier = function (specifier, node, n
if (specifier.type !== "ImportBatchSpecifier") templateName += "-key";
nodes.push(util.template(templateName, {
VARIABLE_NAME: variableName.name,
VARIABLE_NAME: variableName,
MODULE_NAME: node.source.raw,
KEY: specifier.id
}));
};
CommonJSModuleFormatter.prototype.export = function (node, nodes) {
CommonJSFormatter.prototype.export = function (node, nodes) {
var declar = node.declaration;
if (node.default) {
@@ -68,20 +64,21 @@ CommonJSModuleFormatter.prototype.export = function (node, nodes) {
}
};
CommonJSModuleFormatter.prototype.exportSpecifier = function (specifier, node, nodes) {
var variableName = getSpecifierName(specifier);
CommonJSFormatter.prototype.exportSpecifier = function (specifier, node, nodes) {
var variableName = util.getSpecifierName(specifier);
if (node.source) {
var object = b.callExpression(b.identifier("require"), [node.source]);
if (specifier.type === "ExportBatchSpecifier") {
// export * from "foo";
nodes.push(util.template("exports-wildcard", {
MODULE_NAME: node.source.raw
OBJECT: object
}, true));
} else {
// export { foo } from "test";
nodes.push(util.template("exports-require-assign-key", {
nodes.push(util.template("exports-assign-key", {
VARIABLE_NAME: variableName.name,
MODULE_NAME: node.source.raw,
OBJECT: object,
KEY: specifier.id
}, true));
}