add extends helper instead of using Object.assign

This commit is contained in:
Sebastian McKenzie
2015-01-07 22:42:26 +11:00
parent a8a7587c1f
commit 8f64fe2332
13 changed files with 82 additions and 25 deletions

View File

@@ -35,7 +35,8 @@ File.helpers = [
"async-to-generator",
"interop-require-wildcard",
"typeof",
"exports-wildcard"
"exports-wildcard",
"extends"
];
File.excludeHelpersFromRuntime = [

View File

@@ -83,10 +83,12 @@ CommonJSFormatter.prototype.exportDeclaration = function (node, nodes) {
// 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 = Object.assign(exports["default"], exports)
// module.exports = _extends(exports["default"], exports)
//
assign = util.template("common-export-default-assign", true);
assign = util.template("common-export-default-assign", {
EXTENDS_HELPER: this.file.addHelper("extends")
}, true);
assign._blockHoist = 0;
nodes.push(assign);

View File

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

View File

@@ -0,0 +1,9 @@
(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;
})

View File

@@ -4,7 +4,7 @@ var t = require("../../types");
exports.experimental = true;
exports.ObjectExpression = function (node) {
exports.ObjectExpression = function (node, parent, file) {
var hasSpread = false;
var i;
var prop;
@@ -42,5 +42,5 @@ exports.ObjectExpression = function (node) {
args.unshift(t.objectExpression([]));
}
return t.callExpression(t.memberExpression(t.identifier("Object"), t.identifier("assign")), args);
return t.callExpression(file.addHelper("extends"), args);
};

View File

@@ -43,7 +43,7 @@ exports.ExpressionStatement = function (node, parent, file) {
}
};
exports.ObjectExpression = function (node) {
exports.ObjectExpression = function (node, parent, file) {
var proto;
for (var i in node.properties) {
@@ -58,6 +58,6 @@ exports.ObjectExpression = function (node) {
if (proto) {
var args = [t.objectExpression([]), proto];
if (node.properties.length) args.push(node);
return t.callExpression(OBJECT_ASSIGN_MEMBER, args);
return t.callExpression(file.addHelper("extends"), args);
}
};

View File

@@ -1,6 +1,17 @@
"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["default"] = new Cachier();
function Cachier(databaseName) {}
module.exports = Object.assign(exports["default"], exports);
module.exports = _extends(exports["default"], exports);

View File

@@ -1,3 +1,14 @@
"use strict";
z = Object.assign({ x: x }, y);
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;
};
z = _extends({ x: x }, y);

View File

@@ -1,3 +1,14 @@
"use strict";
Object.assign({ x: x }, y, { a: a }, b, { c: c });
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;
};
_extends({ x: x }, y, { a: a }, b, { c: c });

View File

@@ -1,3 +1,14 @@
"use strict";
var z = Object.assign({}, x);
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 z = _extends({}, x);

View File

@@ -1 +0,0 @@
var z = { ...x };

View File

@@ -1,9 +0,0 @@
"use strict";
var _interopRequire = function (obj) {
return obj && (obj["default"] || obj);
};
var _core = _interopRequire(require("core-js/library"));
var z = _core.Object.assign({}, x);

View File

@@ -1,10 +1,21 @@
"use strict";
var foo = Object.assign({}, bar);
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];
}
}
var foo = Object.assign({}, bar, {
return target;
};
var foo = _extends({}, bar);
var foo = _extends({}, bar, {
bar: "foo" });
var foo = Object.assign({}, bar, {
var foo = _extends({}, bar, {
bar: "foo"
});