[decorators] Support async and generator methods (#8742)
This commit is contained in:
parent
a19b72e46d
commit
af694ebae1
@ -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 }) {
|
||||
@ -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()),
|
||||
|
||||
@ -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() {}
|
||||
|
||||
}]
|
||||
};
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user