migrate to improved module syntax - fixes #25

This commit is contained in:
Sebastian McKenzie 2014-10-09 23:16:55 +11:00
parent fd2187b37d
commit a1bf8ab788
13 changed files with 86 additions and 71 deletions

View File

@ -195,22 +195,23 @@ And open `test/browser/index.html` if it doesn't open automatically.
## Modules ## Modules
6to5 modules compile straight to CommonJS, because of this various liberties are 6to5 modules compile straight to CommonJS, because of this various liberties are
taken into account to easen their usage. taken into account to make their usage easier.
```javascript ```javascript
import "foo"; // var foo = require("foo"); import "foo"; // require("foo");
import "foo-bar"; // var fooBar = require("foo-bar"); import "foo-bar"; // require("foo-bar");
import "./directory/foo-bar"; // var fooBar = require("./directory/foo-bar"); import "./directory/foo-bar"; // require("./directory/foo-bar");
import foo from "foo"; // var foo = require("foo");
import foo from "foo"; // var foo = require("foo").default;
import * as foo from "foo"; // var foo = require("foo"); import * as foo from "foo"; // var foo = require("foo");
import { bar } from "foo"; // var bar = require("foo").bar; import {bar} from "foo"; // var bar = require("foo").bar;
import foo as bar from "foo"; // var bar = require("foo").foo; import {foo as bar} from "foo"; // var bar = require("foo").foo;
export { test }; // exports.test = test; export {test}; // exports.test = test;
export var test = 5; // var test = 5; exports.test = test; export var test = 5; // var test = 5; exports.test = test;
export default test; // module.exports = exports = test; export default test; // exports.default = test;
``` ```
If you'd like to disable this behaviour and use the more ES6-like If you'd like to disable this behaviour and use the more ES6-like

View File

@ -1 +1 @@
module.exports = exports = VALUE; exports.default = VALUE;

View File

@ -0,0 +1 @@
require(MODULE_NAME);

View File

@ -3,13 +3,6 @@ var util = require("../util");
var b = require("ast-types").builders; var b = require("ast-types").builders;
var _ = require("lodash"); 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) { exports.ImportDeclaration = function (node) {
var nodes = []; var nodes = [];
@ -18,11 +11,16 @@ exports.ImportDeclaration = function (node) {
var variableName = specifier.name || specifier.id; var variableName = specifier.name || specifier.id;
var key = specifier.id.name; var key = specifier.id.name;
var templateName = "require-assign"; // import foo from "foo";
if (specifier.type === "ImportSpecifier") { if (specifier.type === "ImportDefaultSpecifier") {
if (key !== "default") templateName += "-key"; key = b.identifier("default");
} }
var templateName = "require-assign";
// import * as bar from "foo";
if (specifier.type !== "ImportNamespaceSpecifier") templateName += "-key";
nodes.push(util.template(templateName, { nodes.push(util.template(templateName, {
VARIABLE_NAME: variableName.name, VARIABLE_NAME: variableName.name,
MODULE_NAME: node.source.raw, MODULE_NAME: node.source.raw,
@ -30,16 +28,15 @@ exports.ImportDeclaration = function (node) {
})); }));
}); });
} else { } else {
nodes.push(util.template("require-assign", { nodes.push(util.template("require", {
VARIABLE_NAME: toModuleNameIdentifier(node), MODULE_NAME: node.source.raw
MODULE_NAME: node.source.raw }, true));
}));
} }
return nodes; return nodes;
}; };
var pushSpecifiers = function (node, nodes) { var pushExportSpecifiers = function (node, nodes) {
_.each(node.specifiers, function (specifier) { _.each(node.specifiers, function (specifier) {
var variableName = specifier.name || specifier.id; var variableName = specifier.name || specifier.id;
@ -49,38 +46,22 @@ var pushSpecifiers = function (node, nodes) {
MODULE_NAME: node.source.raw MODULE_NAME: node.source.raw
}, true)); }, true));
} else { } else {
var templateName; nodes.push(util.template("exports-require-assign-key", {
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, VARIABLE_NAME: variableName.name,
MODULE_NAME: node.source.raw, MODULE_NAME: node.source.raw,
KEY: specifier.id KEY: specifier.id
}, true)); }, true));
} }
} else { } else {
if (variableName.name === "default") { nodes.push(util.template("exports-assign", {
nodes.push(util.template("exports-default", { VALUE: specifier.id,
VALUE: specifier.id KEY: variableName
}, true)); }, true));
} else {
nodes.push(util.template("exports-assign", {
VALUE: specifier.id,
KEY: variableName
}, true));
}
} }
}); });
}; };
var pushDeclaration = function (node, nodes) { var pushExportDeclaration = function (node, nodes) {
var declar = node.declaration; var declar = node.declaration;
if (node.default) { if (node.default) {
@ -111,9 +92,9 @@ exports.ExportDeclaration = function (node) {
var nodes = []; var nodes = [];
if (node.declaration) { if (node.declaration) {
pushDeclaration(node, nodes); pushExportDeclaration(node, nodes);
} else { } else {
pushSpecifiers(node, nodes); pushExportSpecifiers(node, nodes);
} }
return nodes; return nodes;

View File

@ -1,7 +1,7 @@
{ {
"name": "6to5", "name": "6to5",
"description": "Turn ES6 code into vanilla ES5 with source maps and no runtime", "description": "Turn ES6 code into vanilla ES5 with source maps and no runtime",
"version": "1.5.5", "version": "1.6.0",
"author": "Sebastian McKenzie <sebmck@gmail.com>", "author": "Sebastian McKenzie <sebmck@gmail.com>",
"homepage": "https://github.com/sebmck/6to5", "homepage": "https://github.com/sebmck/6to5",
"repository": { "repository": {

View File

@ -1,21 +1,21 @@
module.exports = exports = 42; exports.default = 42;
module.exports = exports = {}; exports.default = {};
module.exports = exports = []; exports.default = [];
module.exports = exports = foo; exports.default = foo;
module.exports = exports = function () {} exports.default = function () {}
module.exports = exports = function () { exports.default = function () {
function Anonymous() { function Anonymous() {
} }
return Anonymous; return Anonymous;
}(); }();
module.exports = exports = function foo () {} exports.default = function foo () {}
module.exports = exports = function () { exports.default = function () {
function foo() { function foo() {
} }
return foo; return foo;

View File

@ -11,12 +11,12 @@ exports.bar = require("foo").bar;
exports.bar = require("foo").foo; exports.bar = require("foo").foo;
module.exports = exports = require("foo").foo; exports.default = require("foo").foo;
module.exports = exports = require("foo").foo; exports.default = require("foo").foo;
exports.bar = require("foo").bar; exports.bar = require("foo").bar;
module.exports = exports = require("foo"); exports.default = require("foo").default;
exports.foo = require("foo"); exports.foo = require("foo").default;

View File

@ -5,7 +5,7 @@ exports.bar = bar;
exports.bar = foo; exports.bar = foo;
module.exports = exports = foo; exports.default = foo;
module.exports = exports = foo; exports.default = foo;
exports.bar = bar; exports.bar = bar;

View File

@ -1,2 +1,2 @@
var foo = require("foo"); var foo = require("foo").default;
var foo = require("foo"); var foo = require("foo").default;

View File

@ -1,5 +1,5 @@
var foo = require("foo"); var foo = require("foo").default;
var xyz = require("foo").baz; var xyz = require("foo").baz;
var foo = require("foo"); var foo = require("foo").default;
var bar = require("foo"); var bar = require("foo");

View File

@ -1,3 +1,3 @@
var foo = require("foo"); require("foo");
var fooBar = require("foo-bar"); require("foo-bar");
var fooBar = require("./directory/foo-bar"); require("./directory/foo-bar");

View File

@ -0,0 +1,12 @@
import "foo";
import "foo-bar";
import "./directory/foo-bar";
import foo from "foo";
import * as foo from "foo";
import {bar} from "foo";
import {foo as bar} from "foo";
export {test};
export var test = 5;
export default test;

View File

@ -0,0 +1,20 @@
require("foo");
require("foo-bar");
require("./directory/foo-bar");
var foo = require("foo").default;
var foo = require("foo");
var bar = require("foo").bar;
var bar = require("foo").foo;
exports.test = test;
var test = 5;
exports.test = test;
exports.default = test;