Merge branch 'master' into code-generator
Conflicts: lib/6to5/transformers/classes.js test/fixtures/transformation/source-maps/class/expected.js test/fixtures/transformation/source-maps/class/source-mappings.json
This commit is contained in:
commit
95f3ca6348
21
README.md
21
README.md
@ -102,9 +102,9 @@ map embedded in a comment at the bottom.
|
|||||||
Compile the entire `src` directory and output it to the `lib` directory.
|
Compile the entire `src` directory and output it to the `lib` directory.
|
||||||
|
|
||||||
$ 6to5 src --out-dir lib
|
$ 6to5 src --out-dir lib
|
||||||
|
|
||||||
Compile the entire `src` directory and output it to the one concatenated file.
|
Compile the entire `src` directory and output it to the one concatenated file.
|
||||||
|
|
||||||
$ 6to5 src --out-file script-compiled.js
|
$ 6to5 src --out-file script-compiled.js
|
||||||
|
|
||||||
Pipe a file in via stdin and output it to `script-compiled.js`
|
Pipe a file in via stdin and output it to `script-compiled.js`
|
||||||
@ -283,6 +283,23 @@ If you're inheriting from a class then static properties are inherited from it
|
|||||||
via [\_\_proto\_\_](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto),
|
via [\_\_proto\_\_](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto),
|
||||||
this is widely supported but you may run into problems with much older browsers.
|
this is widely supported but you may run into problems with much older browsers.
|
||||||
|
|
||||||
|
**NOTE:** `__proto__` is not supported on IE <= 9 so static properties
|
||||||
|
**will not** be inherited. A possible workaround is to use `super();`:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
class Foo {
|
||||||
|
static foo() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Bar extends Foo {
|
||||||
|
static foo() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### Generators
|
### Generators
|
||||||
|
|
||||||
The [regenerator runtime](https://github.com/facebook/regenerator/blob/master/runtime.js)
|
The [regenerator runtime](https://github.com/facebook/regenerator/blob/master/runtime.js)
|
||||||
|
|||||||
4
lib/6to5/templates/class-props.js
Normal file
4
lib/6to5/templates/class-props.js
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
(function (child, staticProps, instanceProps) {
|
||||||
|
if (staticProps) Object.defineProperties(child, staticProps);
|
||||||
|
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
|
||||||
|
})
|
||||||
@ -107,16 +107,28 @@ var buildClassBody = function (file, construct, body, className, superName, node
|
|||||||
}, true));
|
}, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var instanceProps;
|
||||||
|
var staticProps;
|
||||||
|
|
||||||
if (!_.isEmpty(instanceMutatorMap)) {
|
if (!_.isEmpty(instanceMutatorMap)) {
|
||||||
var protoId = util.template("prototype-identifier", {
|
var protoId = util.template("prototype-identifier", {
|
||||||
CLASS_NAME: className
|
CLASS_NAME: className
|
||||||
});
|
});
|
||||||
|
|
||||||
body.push(util.buildDefineProperties(instanceMutatorMap, protoId));
|
instanceProps = util.buildDefineProperties(instanceMutatorMap, protoId);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_.isEmpty(staticMutatorMap)) {
|
if (!_.isEmpty(staticMutatorMap)) {
|
||||||
body.push(util.buildDefineProperties(staticMutatorMap, className));
|
staticProps = util.buildDefineProperties(staticMutatorMap, className);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (instanceProps || staticProps) {
|
||||||
|
instanceProps = instanceProps || b.literal(null);
|
||||||
|
staticProps = staticProps || b.literal(null);
|
||||||
|
|
||||||
|
body.push(b.expressionStatement(
|
||||||
|
b.callExpression(file.addDeclaration("class-props"), [className, staticProps, instanceProps])
|
||||||
|
));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -24,6 +24,9 @@ exports.ObjectExpression = function (node, parent, file) {
|
|||||||
return util.template("object-define-properties-closure", {
|
return util.template("object-define-properties-closure", {
|
||||||
KEY: objId,
|
KEY: objId,
|
||||||
OBJECT: node,
|
OBJECT: node,
|
||||||
CONTENT: util.buildDefineProperties(mutatorMap, objId).expression
|
CONTENT: util.template("object-define-properties", {
|
||||||
|
OBJECT: objId,
|
||||||
|
PROPS: util.buildDefineProperties(mutatorMap)
|
||||||
|
})
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@ -100,7 +100,7 @@ exports.pushMutatorMap = function (mutatorMap, key, kind, method) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.buildDefineProperties = function (mutatorMap, keyNode) {
|
exports.buildDefineProperties = function (mutatorMap) {
|
||||||
var objExpr = b.objectExpression([]);
|
var objExpr = b.objectExpression([]);
|
||||||
|
|
||||||
_.each(mutatorMap, function (map, key) {
|
_.each(mutatorMap, function (map, key) {
|
||||||
@ -117,10 +117,7 @@ exports.buildDefineProperties = function (mutatorMap, keyNode) {
|
|||||||
objExpr.properties.push(propNode);
|
objExpr.properties.push(propNode);
|
||||||
});
|
});
|
||||||
|
|
||||||
return exports.template("object-define-properties", {
|
return objExpr;
|
||||||
OBJECT: keyNode,
|
|
||||||
PROPS: objExpr
|
|
||||||
}, true);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.template = function (name, nodes, keepExpression) {
|
exports.template = function (name, nodes, keepExpression) {
|
||||||
|
|||||||
@ -1,5 +1,12 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var _slice = Array.prototype.slice;
|
var _slice = Array.prototype.slice;
|
||||||
|
|
||||||
|
var _classProps = function (child, staticProps, instanceProps) {
|
||||||
|
if (staticProps) Object.defineProperties(child, staticProps);
|
||||||
|
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
|
||||||
|
};
|
||||||
|
|
||||||
var _extends = function (child, parent) {
|
var _extends = function (child, parent) {
|
||||||
child.prototype = Object.create(parent.prototype, {
|
child.prototype = Object.create(parent.prototype, {
|
||||||
constructor: {
|
constructor: {
|
||||||
@ -27,7 +34,17 @@ var Test = function(Foo) {
|
|||||||
|
|
||||||
_extends(Test, Foo);
|
_extends(Test, Foo);
|
||||||
|
|
||||||
Object.defineProperties(Test.prototype, {
|
_classProps(Test, {
|
||||||
|
foo: {
|
||||||
|
writable: true,
|
||||||
|
|
||||||
|
value: function() {
|
||||||
|
Foo.foo.call(this);
|
||||||
|
Foo.foo.call.apply(Foo.foo, [this].concat(_slice.call(arguments)));
|
||||||
|
Foo.foo.call.apply(Foo.foo, [this, "test"].concat(_slice.call(arguments)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, {
|
||||||
test: {
|
test: {
|
||||||
writable: true,
|
writable: true,
|
||||||
|
|
||||||
@ -39,17 +56,5 @@ var Test = function(Foo) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Object.defineProperties(Test, {
|
|
||||||
foo: {
|
|
||||||
writable: true,
|
|
||||||
|
|
||||||
value: function() {
|
|
||||||
Foo.foo.call(this);
|
|
||||||
Foo.foo.call.apply(Foo.foo, [this].concat(_slice.call(arguments)));
|
|
||||||
Foo.foo.call.apply(Foo.foo, [this, "test"].concat(_slice.call(arguments)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return Test;
|
return Test;
|
||||||
}(Foo);
|
}(Foo);
|
||||||
|
|||||||
@ -1,5 +1,10 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
var _classProps = function (child, staticProps, instanceProps) {
|
||||||
|
if (staticProps) Object.defineProperties(child, staticProps);
|
||||||
|
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
|
||||||
|
};
|
||||||
|
|
||||||
var _extends = function (child, parent) {
|
var _extends = function (child, parent) {
|
||||||
child.prototype = Object.create(parent.prototype, {
|
child.prototype = Object.create(parent.prototype, {
|
||||||
constructor: {
|
constructor: {
|
||||||
@ -13,7 +18,6 @@ var _extends = function (child, parent) {
|
|||||||
child.__proto__ = parent;
|
child.__proto__ = parent;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
var Test = function(Foo) {
|
var Test = function(Foo) {
|
||||||
var Test = function Test() {
|
var Test = function Test() {
|
||||||
Foo.prototype.test.whatever();
|
Foo.prototype.test.whatever();
|
||||||
@ -22,7 +26,7 @@ var Test = function(Foo) {
|
|||||||
|
|
||||||
_extends(Test, Foo);
|
_extends(Test, Foo);
|
||||||
|
|
||||||
Object.defineProperties(Test, {
|
_classProps(Test, {
|
||||||
test: {
|
test: {
|
||||||
writable: true,
|
writable: true,
|
||||||
|
|
||||||
@ -30,7 +34,7 @@ var Test = function(Foo) {
|
|||||||
return Foo.wow.call(this);
|
return Foo.wow.call(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}, null);
|
||||||
|
|
||||||
return Test;
|
return Test;
|
||||||
}(Foo);
|
}(Foo);
|
||||||
|
|||||||
@ -1,9 +1,14 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
var _classProps = function (child, staticProps, instanceProps) {
|
||||||
|
if (staticProps) Object.defineProperties(child, staticProps);
|
||||||
|
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
|
||||||
|
};
|
||||||
|
|
||||||
var Test = function() {
|
var Test = function() {
|
||||||
var Test = function Test() {};
|
var Test = function Test() {};
|
||||||
|
|
||||||
Object.defineProperties(Test.prototype, {
|
_classProps(Test, null, {
|
||||||
test: {
|
test: {
|
||||||
get: function() {
|
get: function() {
|
||||||
return 5 + 5;
|
return 5 + 5;
|
||||||
@ -16,4 +21,4 @@ var Test = function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return Test;
|
return Test;
|
||||||
}();
|
}();
|
||||||
|
|||||||
@ -1,9 +1,14 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
var _classProps = function (child, staticProps, instanceProps) {
|
||||||
|
if (staticProps) Object.defineProperties(child, staticProps);
|
||||||
|
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
|
||||||
|
};
|
||||||
|
|
||||||
var Test = function() {
|
var Test = function() {
|
||||||
var Test = function Test() {};
|
var Test = function Test() {};
|
||||||
|
|
||||||
Object.defineProperties(Test.prototype, {
|
_classProps(Test, null, {
|
||||||
test: {
|
test: {
|
||||||
get: function() {
|
get: function() {
|
||||||
return 5 + 5;
|
return 5 + 5;
|
||||||
@ -12,4 +17,4 @@ var Test = function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return Test;
|
return Test;
|
||||||
}();
|
}();
|
||||||
|
|||||||
@ -1,9 +1,14 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
var _classProps = function (child, staticProps, instanceProps) {
|
||||||
|
if (staticProps) Object.defineProperties(child, staticProps);
|
||||||
|
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
|
||||||
|
};
|
||||||
|
|
||||||
var Test = function() {
|
var Test = function() {
|
||||||
var Test = function Test() {};
|
var Test = function Test() {};
|
||||||
|
|
||||||
Object.defineProperties(Test.prototype, {
|
_classProps(Test, null, {
|
||||||
test: {
|
test: {
|
||||||
writable: true,
|
writable: true,
|
||||||
|
|
||||||
@ -14,4 +19,4 @@ var Test = function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return Test;
|
return Test;
|
||||||
}();
|
}();
|
||||||
|
|||||||
@ -1,9 +1,14 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
var _classProps = function (child, staticProps, instanceProps) {
|
||||||
|
if (staticProps) Object.defineProperties(child, staticProps);
|
||||||
|
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
|
||||||
|
};
|
||||||
|
|
||||||
var Test = function() {
|
var Test = function() {
|
||||||
var Test = function Test() {};
|
var Test = function Test() {};
|
||||||
|
|
||||||
Object.defineProperties(Test.prototype, {
|
_classProps(Test, null, {
|
||||||
test: {
|
test: {
|
||||||
set: function(val) {
|
set: function(val) {
|
||||||
this._test = val;
|
this._test = val;
|
||||||
@ -12,4 +17,4 @@ var Test = function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return Test;
|
return Test;
|
||||||
}();
|
}();
|
||||||
|
|||||||
@ -1,9 +1,14 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
var _classProps = function (child, staticProps, instanceProps) {
|
||||||
|
if (staticProps) Object.defineProperties(child, staticProps);
|
||||||
|
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
|
||||||
|
};
|
||||||
|
|
||||||
var A = function() {
|
var A = function() {
|
||||||
var A = function A() {};
|
var A = function A() {};
|
||||||
|
|
||||||
Object.defineProperties(A, {
|
_classProps(A, {
|
||||||
a: {
|
a: {
|
||||||
writable: true,
|
writable: true,
|
||||||
value: function() {}
|
value: function() {}
|
||||||
@ -13,7 +18,7 @@ var A = function() {
|
|||||||
get: function() {},
|
get: function() {},
|
||||||
set: function(b) {}
|
set: function(b) {}
|
||||||
}
|
}
|
||||||
});
|
}, null);
|
||||||
|
|
||||||
return A;
|
return A;
|
||||||
}();
|
}();
|
||||||
|
|||||||
@ -1,7 +1,11 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
var _classProps = function (child, staticProps, instanceProps) {
|
||||||
|
if (staticProps) Object.defineProperties(child, staticProps);
|
||||||
|
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
|
||||||
|
};
|
||||||
var Test = (function () {
|
var Test = (function () {
|
||||||
var Test = function Test() {};
|
var Test = function Test() {};
|
||||||
Object.defineProperties(Test.prototype, { bar: { get: function () {
|
_classProps(Test, null, { bar: { get: function () {
|
||||||
throw new Error("wow");
|
throw new Error("wow");
|
||||||
} } });
|
} } });
|
||||||
return Test;
|
return Test;
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
"column": 11
|
"column": 11
|
||||||
},
|
},
|
||||||
"generated": {
|
"generated": {
|
||||||
"line": 5,
|
"line": 9,
|
||||||
"column": 11
|
"column": 11
|
||||||
}
|
}
|
||||||
}]
|
}]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user