diff --git a/bin/6to5-node b/bin/6to5-node index 2387551176..958d3cc5cc 100755 --- a/bin/6to5-node +++ b/bin/6to5-node @@ -5,7 +5,6 @@ * when found, before invoking the "real" _6to5-node(1) executable. */ -var spawn = require("child_process").spawn; var args = ["--harmony", __dirname + "/_6to5-node"]; process.argv.slice(2).forEach(function(arg){ @@ -49,13 +48,21 @@ process.argv.slice(2).forEach(function(arg){ } }); -var proc = spawn(process.argv[0], args, { stdio: "inherit" }); -proc.on("exit", function (code, signal) { - process.on("exit", function () { - if (signal) { - process.kill(process.pid, signal); - } else { - process.exit(code); - } +try { + var kexec = require("kexec"); + kexec(process.argv[0], args); +} catch (err) { + if (err.code !== "MODULE_NOT_FOUND") throw err; + + var child_process = require("child_process"); + var proc = child_process.spawn(process.argv[0], args, { stdio: "inherit" }); + proc.on("exit", function (code, signal) { + process.on("exit", function () { + if (signal) { + process.kill(process.pid, signal); + } else { + process.exit(code); + } + }) }); -}); +} diff --git a/doc/caveats.md b/doc/caveats.md index 097edfc781..d7431ca9ea 100644 --- a/doc/caveats.md +++ b/doc/caveats.md @@ -39,3 +39,10 @@ class Bar extends Foo { } } ``` + +## 6to5-node + +It is necessary to manually install `kexec` package on Unix-like OSes for +`6to5-node` to correctly handle signals. + +**It is not recommended to use `6to5-node` with a process manager (`supervisord`, `upstart`, `systemd`, ...) without first installing `kexec`!** diff --git a/lib/6to5/transformation/modules/amd.js b/lib/6to5/transformation/modules/amd.js index 49185c5a40..9a26d52b8f 100644 --- a/lib/6to5/transformation/modules/amd.js +++ b/lib/6to5/transformation/modules/amd.js @@ -74,21 +74,16 @@ AMDFormatter.prototype.import = function (node) { AMDFormatter.prototype.importSpecifier = function (specifier, node, nodes) { var key = t.getSpecifierName(specifier); - var id = specifier.id; - - // import foo from "foo"; - if (specifier.default) { - id = t.identifier("default"); - } - - var ref; + var ref = this._push(node); if (t.isImportBatchSpecifier(specifier)) { // import * as bar from "foo"; - ref = this._push(node); - } else { + } else if (specifier.default) { // import foo from "foo"; - ref = t.memberExpression(this._push(node), id, false); + ref = t.callExpression(this.file.addDeclaration("interop-require"), [ref]); + } else { + // import {foo} from "foo"; + ref = t.memberExpression(ref, specifier.id, false); } nodes.push(t.variableDeclaration("var", [ diff --git a/package.json b/package.json index 18179d8fce..e934fd78a1 100644 --- a/package.json +++ b/package.json @@ -61,5 +61,8 @@ "mocha": "1.21.4", "rimraf": "2.2.8", "uglify-js": "2.4.15" + }, + "optionalDependencies": { + "kexec": "^0.2.0" } } diff --git a/test/fixtures/transformation/es6-modules-amd/imports-default/expected.js b/test/fixtures/transformation/es6-modules-amd/imports-default/expected.js index e13da123e2..43e1ab9d53 100644 --- a/test/fixtures/transformation/es6-modules-amd/imports-default/expected.js +++ b/test/fixtures/transformation/es6-modules-amd/imports-default/expected.js @@ -1,6 +1,11 @@ define(["exports", "foo"], function (exports, _foo) { "use strict"; - var foo = _foo["default"]; + var _interopRequire = function (obj) { + return obj && (obj["default"] || obj); + }; + + var foo = _interopRequire(_foo); + var foo = _foo["default"]; }); diff --git a/test/fixtures/transformation/es6-modules-amd/imports-mixing/expected.js b/test/fixtures/transformation/es6-modules-amd/imports-mixing/expected.js index 5ff7a48899..7dd0e921bc 100644 --- a/test/fixtures/transformation/es6-modules-amd/imports-mixing/expected.js +++ b/test/fixtures/transformation/es6-modules-amd/imports-mixing/expected.js @@ -1,6 +1,11 @@ define(["exports", "foo"], function (exports, _foo) { "use strict"; - var foo = _foo["default"]; + var _interopRequire = function (obj) { + return obj && (obj["default"] || obj); + }; + + var foo = _interopRequire(_foo); + var xyz = _foo.baz; }); diff --git a/test/fixtures/transformation/es6-modules-amd/overview/expected.js b/test/fixtures/transformation/es6-modules-amd/overview/expected.js index 5fc0d32601..7e01bdc8ef 100644 --- a/test/fixtures/transformation/es6-modules-amd/overview/expected.js +++ b/test/fixtures/transformation/es6-modules-amd/overview/expected.js @@ -1,7 +1,12 @@ define(["exports", "foo", "foo-bar", "./directory/foo-bar"], function (exports, _foo, _fooBar, _directoryFooBar) { "use strict"; - var foo = _foo["default"]; + var _interopRequire = function (obj) { + return obj && (obj["default"] || obj); + }; + + var foo = _interopRequire(_foo); + var foo = _foo; var bar = _foo.bar; var bar = _foo.foo; diff --git a/test/fixtures/transformation/es6-modules-umd/imports-default/expected.js b/test/fixtures/transformation/es6-modules-umd/imports-default/expected.js index 10ec822646..b68de76392 100644 --- a/test/fixtures/transformation/es6-modules-umd/imports-default/expected.js +++ b/test/fixtures/transformation/es6-modules-umd/imports-default/expected.js @@ -7,6 +7,11 @@ })(function (exports, _foo) { "use strict"; - var foo = _foo["default"]; + var _interopRequire = function (obj) { + return obj && (obj["default"] || obj); + }; + + var foo = _interopRequire(_foo); + var foo = _foo["default"]; }); diff --git a/test/fixtures/transformation/es6-modules-umd/imports-mixing/expected.js b/test/fixtures/transformation/es6-modules-umd/imports-mixing/expected.js index 35f4b65e7f..a5fb4aa76e 100644 --- a/test/fixtures/transformation/es6-modules-umd/imports-mixing/expected.js +++ b/test/fixtures/transformation/es6-modules-umd/imports-mixing/expected.js @@ -7,6 +7,11 @@ })(function (exports, _foo) { "use strict"; - var foo = _foo["default"]; + var _interopRequire = function (obj) { + return obj && (obj["default"] || obj); + }; + + var foo = _interopRequire(_foo); + var xyz = _foo.baz; }); diff --git a/test/fixtures/transformation/es6-modules-umd/overview/expected.js b/test/fixtures/transformation/es6-modules-umd/overview/expected.js index 6a6a53fdc5..b78e1e2388 100644 --- a/test/fixtures/transformation/es6-modules-umd/overview/expected.js +++ b/test/fixtures/transformation/es6-modules-umd/overview/expected.js @@ -7,7 +7,12 @@ })(function (exports, _foo, _fooBar, _directoryFooBar) { "use strict"; - var foo = _foo["default"]; + var _interopRequire = function (obj) { + return obj && (obj["default"] || obj); + }; + + var foo = _interopRequire(_foo); + var foo = _foo; var bar = _foo.bar; var bar = _foo.foo;