Skip to content

Commit

Permalink
[decorators] Support async and generator methods (#8742)
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolo-ribaudo committed Sep 25, 2018
1 parent a19b72e commit af694eb
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 3 deletions.
9 changes: 6 additions & 3 deletions packages/babel-plugin-proposal-decorators/src/transformer.js
Expand Up @@ -7,8 +7,11 @@ function prop(key, value) {
return t.objectProperty(t.identifier(key), value);
}

function value(body, params = []) {
return t.objectMethod("method", t.identifier("value"), params, body);
function value(body, params = [], async, generator) {
const method = t.objectMethod("method", t.identifier("value"), params, body);
method.async = !!async;
method.generator = !!generator;
return method;
}

function hasDecorators({ node }) {
Expand Down Expand Up @@ -77,7 +80,7 @@ function getSingleElementDefinition(path, superRef, classRef, file) {
prop("static", node.static && t.booleanLiteral(true)),
prop("key", getKey(node)),
isMethod
? value(node.body, node.params)
? value(node.body, node.params, node.async, node.generator)
: node.value
? value(template.ast`{ return ${node.value} }`)
: prop("value", scope.buildUndefinedNode()),
Expand Down
@@ -0,0 +1,8 @@
@decorator
class Foo {
async f1() {}

*f2() {}

async *f3() {}
}
@@ -0,0 +1,8 @@
{
"plugins": [
["proposal-decorators", { "decoratorsBeforeExport": false }],
"proposal-class-properties",
"syntax-async-generators",
["external-helpers", { "helperVersion": "7.0.2" }]
]
}
@@ -0,0 +1,33 @@
let Foo = babelHelpers.decorate([decorator], function (_initialize) {
"use strict";

class Foo {
constructor() {
_initialize(this);
}

}

return {
F: Foo,
d: [{
kind: "method",
key: "f1",

async value() {}

}, {
kind: "method",
key: "f2",

*value() {}

}, {
kind: "method",
key: "f3",

async *value() {}

}]
};
});

0 comments on commit af694eb

Please sign in to comment.