safer common interop - closes #493

This commit is contained in:
Sebastian McKenzie 2015-01-25 14:03:25 +11:00
parent 99a4343626
commit 3fdf492dcf
23 changed files with 36 additions and 82 deletions

View File

@ -1,3 +0,0 @@
"use strict";
module.exports = require("./_strict")(require("./amd"));

View File

@ -107,7 +107,7 @@ AMDFormatter.prototype.importSpecifier = function (specifier, node, nodes) {
};
AMDFormatter.prototype.exportDeclaration = function (node) {
if (node.default) {
if (node.default && !this.noInteropRequire) {
this.passModuleArg = true;
}

View File

@ -20,6 +20,7 @@ function CommonJSFormatter(file) {
var state = { hasNonDefaultExports: false };
traverse(file.ast, visitor, file.scope, state);
this.insertedModuleDeclaration = false;
this.hasNonDefaultExports = state.hasNonDefaultExports;
}
@ -71,33 +72,23 @@ CommonJSFormatter.prototype.exportDeclaration = function (node, nodes) {
var declar = node.declaration;
var assign;
// module.exports = VALUE;
var templateName = "exports-default-module";
// exports = module.exports = VALUE;
if (this.hasNonDefaultExports) templateName = "exports-default-module-override";
if (t.isFunctionDeclaration(declar) || !this.hasNonDefaultExports) {
assign = util.template(templateName, {
if (this.hasNonDefaultExports) {
if (!this.insertedModuleDeclaration) {
nodes.push(util.template("exports-module-declaration", true));
this.insertedModuleDeclaration = true;
}
} else {
var assign = util.template("exports-default-assign", {
VALUE: this._pushStatement(declar, nodes)
}, true);
// hoist to the top if this default is a function
nodes.push(this._hoistExport(declar, assign, 3));
return;
} else {
// this export isn't a function so we can't hoist it to the top so we need to set it
// at the very end of the file with something like:
//
// module.exports = _extends(exports["default"], exports)
//
assign = util.template("common-export-default-assign", {
EXTENDS_HELPER: this.file.addHelper("extends")
}, true);
assign._blockHoist = 0;
if (t.isFunctionDeclaration(declar)) {
// we can hoist this assignment to the top of the file
assign._blockHoist = 3;
}
nodes.push(assign);
return;
}
}

View File

@ -1 +0,0 @@
module.exports = EXTENDS_HELPER(exports["default"], exports);

View File

@ -1 +0,0 @@
exports = module.exports = VALUE;

View File

@ -0,0 +1 @@
exports.__esModule = true;

View File

@ -1,3 +1,3 @@
(function (obj) {
return obj && obj.constructor === Object ? obj : { default: obj };
return obj && obj.__esModule ? obj.default : { default: obj };
})

View File

@ -1,3 +1,3 @@
(function (obj) {
return obj && (obj["default"] || obj);
return obj && obj.__esModule ? obj.default : obj;
})

View File

@ -2,7 +2,7 @@ define(["exports", "foo"], function (exports, _foo) {
"use strict";
var _interopRequireWildcard = function (obj) {
return obj && obj.constructor === Object ? obj : {
return obj && obj.__esModule ? obj["default"] : {
"default": obj
};
};

View File

@ -2,7 +2,7 @@ define(["exports", "foo"], function (exports, _foo) {
"use strict";
var _interopRequire = function (obj) {
return obj && (obj["default"] || obj);
return obj && obj.__esModule ? obj["default"] : obj;
};
var foo = _interopRequire(_foo);

View File

@ -2,10 +2,10 @@ define(["exports", "foo"], function (exports, _foo) {
"use strict";
var _interopRequire = function (obj) {
return obj && (obj["default"] || obj);
return obj && obj.__esModule ? obj["default"] : obj;
};
var foo = _interopRequire(_foo);
var xyz = _foo.baz;
});
});

View File

@ -1,19 +1,8 @@
define(["exports", "module", "foo", "foo-bar", "./directory/foo-bar"], function (exports, module, _foo, _fooBar, _directoryFooBar) {
"use strict";
var _extends = function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
target[key] = source[key];
}
}
return target;
};
var _interopRequire = function (obj) {
return obj && (obj["default"] || obj);
return obj && obj.__esModule ? obj["default"] : obj;
};
var foo = _interopRequire(_foo);
@ -24,6 +13,6 @@ define(["exports", "module", "foo", "foo-bar", "./directory/foo-bar"], function
exports.test = test;
var test2 = exports.test2 = 5;
exports.__esModule = true;
exports["default"] = test;
module.exports = _extends(exports["default"], exports);
});

View File

@ -1,17 +1,6 @@
"use strict";
var _extends = function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
target[key] = source[key];
}
}
return target;
};
exports.Cachier = Cachier;
exports.__esModule = true;
exports["default"] = new Cachier();
function Cachier(databaseName) {}
module.exports = _extends(exports["default"], exports);

View File

@ -1,7 +1,7 @@
"use strict";
var _interopRequireWildcard = function (obj) {
return obj && obj.constructor === Object ? obj : {
return obj && obj.__esModule ? obj["default"] : {
"default": obj
};
};

View File

@ -1,7 +1,7 @@
"use strict";
var _interopRequire = function (obj) {
return obj && (obj["default"] || obj);
return obj && obj.__esModule ? obj["default"] : obj;
};
var foo = _interopRequire(require("foo"));

View File

@ -1,7 +1,7 @@
"use strict";
var _interopRequireWildcard = function (obj) {
return obj && obj.constructor === Object ? obj : {
return obj && obj.__esModule ? obj["default"] : {
"default": obj
};
};

View File

@ -1,7 +1,7 @@
"use strict";
var _interopRequire = function (obj) {
return obj && (obj["default"] || obj);
return obj && obj.__esModule ? obj["default"] : obj;
};
var foo = _interopRequire(require("foo"));

View File

@ -1,13 +1,13 @@
"use strict";
var _interopRequireWildcard = function (obj) {
return obj && obj.constructor === Object ? obj : {
return obj && obj.__esModule ? obj["default"] : {
"default": obj
};
};
var _interopRequire = function (obj) {
return obj && (obj["default"] || obj);
return obj && obj.__esModule ? obj["default"] : obj;
};
require("foo");

View File

@ -8,7 +8,7 @@
"use strict";
var _interopRequireWildcard = function (obj) {
return obj && obj.constructor === Object ? obj : {
return obj && obj.__esModule ? obj["default"] : {
"default": obj
};
};

View File

@ -8,7 +8,7 @@
"use strict";
var _interopRequire = function (obj) {
return obj && (obj["default"] || obj);
return obj && obj.__esModule ? obj["default"] : obj;
};
var foo = _interopRequire(_foo);

View File

@ -8,10 +8,10 @@
"use strict";
var _interopRequire = function (obj) {
return obj && (obj["default"] || obj);
return obj && obj.__esModule ? obj["default"] : obj;
};
var foo = _interopRequire(_foo);
var xyz = _foo.baz;
});
});

View File

@ -7,19 +7,8 @@
})(function (exports, module, _foo, _fooBar, _directoryFooBar) {
"use strict";
var _extends = function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
target[key] = source[key];
}
}
return target;
};
var _interopRequire = function (obj) {
return obj && (obj["default"] || obj);
return obj && obj.__esModule ? obj["default"] : obj;
};
var foo = _interopRequire(_foo);
@ -30,6 +19,6 @@
exports.test = test;
var test2 = exports.test2 = 5;
exports.__esModule = true;
exports["default"] = test;
module.exports = _extends(exports["default"], exports);
});