From aac63036968f9bf0e3dbb7928e70f9fca1b18481 Mon Sep 17 00:00:00 2001 From: Christopher Monsanto Date: Sat, 13 Dec 2014 01:41:57 -0500 Subject: [PATCH 1/5] run _6to5-node using execvp() if available --- bin/6to5-node | 27 +++++++++++++++++---------- doc/caveats.md | 7 +++++++ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/bin/6to5-node b/bin/6to5-node index 2387551176..85311725a8 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(e) { + if (e.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 32049b2f98..269d114207 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`!** From 4c1ad04b2c751d05a38755c3d305794b99fad62d Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Sat, 13 Dec 2014 17:56:17 +1100 Subject: [PATCH 2/5] fix wrong variable name for bin/6to5-node kexec catch --- bin/6to5-node | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/6to5-node b/bin/6to5-node index 85311725a8..958d3cc5cc 100755 --- a/bin/6to5-node +++ b/bin/6to5-node @@ -51,9 +51,9 @@ process.argv.slice(2).forEach(function(arg){ try { var kexec = require("kexec"); kexec(process.argv[0], args); -} catch(e) { - if (e.code !== "MODULE_NOT_FOUND") throw err; - +} 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) { From 3a261a5e056b18508c09f045d0ac7871fbc55230 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Sat, 13 Dec 2014 18:02:26 +1100 Subject: [PATCH 3/5] add kexec to optionalDependencies --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index c8a00f30f0..6b825114b2 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" } } From 5da4397392207ccdcdf2b037c0961f090ee65aed Mon Sep 17 00:00:00 2001 From: Casey Foster Date: Sun, 14 Dec 2014 20:44:38 -0600 Subject: [PATCH 4/5] Add interop require support for AMD and UMD --- lib/6to5/transformation/modules/amd.js | 4 ++++ .../es6-modules-amd/imports-default/expected.js | 7 ++++++- .../es6-modules-amd/imports-mixing/expected.js | 7 ++++++- .../transformation/es6-modules-amd/overview/expected.js | 7 ++++++- .../es6-modules-umd/imports-default/expected.js | 7 ++++++- .../es6-modules-umd/imports-mixing/expected.js | 7 ++++++- .../transformation/es6-modules-umd/overview/expected.js | 7 ++++++- 7 files changed, 40 insertions(+), 6 deletions(-) diff --git a/lib/6to5/transformation/modules/amd.js b/lib/6to5/transformation/modules/amd.js index 3a0469cd7e..94c168f3eb 100644 --- a/lib/6to5/transformation/modules/amd.js +++ b/lib/6to5/transformation/modules/amd.js @@ -80,6 +80,10 @@ AMDFormatter.prototype.importSpecifier = function (specifier, node, nodes) { } else { // import foo from "foo"; ref = t.memberExpression(this._push(node), id, false); + + if (specifier.default) { + ref = t.callExpression(this.file.addDeclaration("interop-require"), [ref]); + } } nodes.push(t.variableDeclaration("var", [ 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..05ef11cead 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["default"]); + 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..884403c1a5 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["default"]); + 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..5d42f028e1 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["default"]); + 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..94f58aca2a 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["default"]); + 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..00ace69089 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["default"]); + 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..9409903d86 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["default"]); + var foo = _foo; var bar = _foo.bar; var bar = _foo.foo; From f4fdc3adc692d47de11aa9efcd2aa121c8363fb0 Mon Sep 17 00:00:00 2001 From: Casey Foster Date: Sun, 14 Dec 2014 20:57:32 -0600 Subject: [PATCH 5/5] Fix incorrect object reference in #295 --- lib/6to5/transformation/modules/amd.js | 21 ++++++------------- .../imports-default/expected.js | 2 +- .../imports-mixing/expected.js | 2 +- .../es6-modules-amd/overview/expected.js | 2 +- .../imports-default/expected.js | 2 +- .../imports-mixing/expected.js | 2 +- .../es6-modules-umd/overview/expected.js | 2 +- 7 files changed, 12 insertions(+), 21 deletions(-) diff --git a/lib/6to5/transformation/modules/amd.js b/lib/6to5/transformation/modules/amd.js index 94c168f3eb..17432a1235 100644 --- a/lib/6to5/transformation/modules/amd.js +++ b/lib/6to5/transformation/modules/amd.js @@ -65,25 +65,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); - - if (specifier.default) { - ref = t.callExpression(this.file.addDeclaration("interop-require"), [ref]); - } + 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/test/fixtures/transformation/es6-modules-amd/imports-default/expected.js b/test/fixtures/transformation/es6-modules-amd/imports-default/expected.js index 05ef11cead..43e1ab9d53 100644 --- a/test/fixtures/transformation/es6-modules-amd/imports-default/expected.js +++ b/test/fixtures/transformation/es6-modules-amd/imports-default/expected.js @@ -5,7 +5,7 @@ define(["exports", "foo"], function (exports, _foo) { return obj && (obj["default"] || obj); }; - var foo = _interopRequire(_foo["default"]); + 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 884403c1a5..7dd0e921bc 100644 --- a/test/fixtures/transformation/es6-modules-amd/imports-mixing/expected.js +++ b/test/fixtures/transformation/es6-modules-amd/imports-mixing/expected.js @@ -5,7 +5,7 @@ define(["exports", "foo"], function (exports, _foo) { return obj && (obj["default"] || obj); }; - var foo = _interopRequire(_foo["default"]); + 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 5d42f028e1..7e01bdc8ef 100644 --- a/test/fixtures/transformation/es6-modules-amd/overview/expected.js +++ b/test/fixtures/transformation/es6-modules-amd/overview/expected.js @@ -5,7 +5,7 @@ define(["exports", "foo", "foo-bar", "./directory/foo-bar"], function (exports, return obj && (obj["default"] || obj); }; - var foo = _interopRequire(_foo["default"]); + var foo = _interopRequire(_foo); var foo = _foo; var bar = _foo.bar; 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 94f58aca2a..b68de76392 100644 --- a/test/fixtures/transformation/es6-modules-umd/imports-default/expected.js +++ b/test/fixtures/transformation/es6-modules-umd/imports-default/expected.js @@ -11,7 +11,7 @@ return obj && (obj["default"] || obj); }; - var foo = _interopRequire(_foo["default"]); + 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 00ace69089..a5fb4aa76e 100644 --- a/test/fixtures/transformation/es6-modules-umd/imports-mixing/expected.js +++ b/test/fixtures/transformation/es6-modules-umd/imports-mixing/expected.js @@ -11,7 +11,7 @@ return obj && (obj["default"] || obj); }; - var foo = _interopRequire(_foo["default"]); + 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 9409903d86..b78e1e2388 100644 --- a/test/fixtures/transformation/es6-modules-umd/overview/expected.js +++ b/test/fixtures/transformation/es6-modules-umd/overview/expected.js @@ -11,7 +11,7 @@ return obj && (obj["default"] || obj); }; - var foo = _interopRequire(_foo["default"]); + var foo = _interopRequire(_foo); var foo = _foo; var bar = _foo.bar;