Fix default descriptor setting for class properties with decorators (#7429)
(legacy decorators)
This commit is contained in:
parent
ffa8e6cbae
commit
c75a00bd56
@ -978,9 +978,7 @@ helpers.applyDecoratedDescriptor = helper("7.0.0-beta.0")`
|
|||||||
});
|
});
|
||||||
desc.enumerable = !!desc.enumerable;
|
desc.enumerable = !!desc.enumerable;
|
||||||
desc.configurable = !!desc.configurable;
|
desc.configurable = !!desc.configurable;
|
||||||
if ('value' in desc || desc.initializer){
|
desc.writable = !!desc.writable;
|
||||||
desc.writable = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
desc = decorators.slice().reverse().reduce(function(desc, decorator){
|
desc = decorators.slice().reverse().reduce(function(desc, decorator){
|
||||||
return decorator(target, property, desc) || desc;
|
return decorator(target, property, desc) || desc;
|
||||||
|
|||||||
@ -168,10 +168,18 @@ function applyTargetDecorators(path, state, decoratedProps) {
|
|||||||
decorators.map(dec => t.cloneNode(dec.expression)),
|
decorators.map(dec => t.cloneNode(dec.expression)),
|
||||||
),
|
),
|
||||||
t.objectExpression([
|
t.objectExpression([
|
||||||
|
t.objectProperty(
|
||||||
|
t.identifier("configurable"),
|
||||||
|
t.booleanLiteral(true),
|
||||||
|
),
|
||||||
t.objectProperty(
|
t.objectProperty(
|
||||||
t.identifier("enumerable"),
|
t.identifier("enumerable"),
|
||||||
t.booleanLiteral(true),
|
t.booleanLiteral(true),
|
||||||
),
|
),
|
||||||
|
t.objectProperty(
|
||||||
|
t.identifier("writable"),
|
||||||
|
t.booleanLiteral(true),
|
||||||
|
),
|
||||||
t.objectProperty(t.identifier("initializer"), initializer),
|
t.objectProperty(t.identifier("initializer"), initializer),
|
||||||
]),
|
]),
|
||||||
]),
|
]),
|
||||||
|
|||||||
@ -16,6 +16,16 @@ function dec(target, name, descriptor) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function plainDec(target, name, descriptor) {
|
||||||
|
expect(target).toBeTruthy();
|
||||||
|
expect(typeof name).toBe("string");
|
||||||
|
expect(typeof descriptor).toBe("object");
|
||||||
|
|
||||||
|
target.decoratedProps = (target.decoratedProps || []).concat([name]);
|
||||||
|
|
||||||
|
return descriptor;
|
||||||
|
}
|
||||||
|
|
||||||
class Example {
|
class Example {
|
||||||
@dec
|
@dec
|
||||||
enumconfwrite = 1;
|
enumconfwrite = 1;
|
||||||
@ -40,6 +50,9 @@ class Example {
|
|||||||
|
|
||||||
@dec
|
@dec
|
||||||
_ = 8;
|
_ = 8;
|
||||||
|
|
||||||
|
@plainDec
|
||||||
|
plain = 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
const inst = new Example();
|
const inst = new Example();
|
||||||
@ -54,6 +67,7 @@ expect(inst.decoratedProps).toEqual([
|
|||||||
"conf",
|
"conf",
|
||||||
"write",
|
"write",
|
||||||
"_",
|
"_",
|
||||||
|
"plain",
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const descs = Object.getOwnPropertyDescriptors(inst);
|
const descs = Object.getOwnPropertyDescriptors(inst);
|
||||||
@ -97,3 +111,8 @@ expect(descs._.enumerable).toBe(false);
|
|||||||
expect(descs._.writable).toBe(false);
|
expect(descs._.writable).toBe(false);
|
||||||
expect(descs._.configurable).toBe(false);
|
expect(descs._.configurable).toBe(false);
|
||||||
expect(inst._).toBe("__8__");
|
expect(inst._).toBe("__8__");
|
||||||
|
|
||||||
|
expect(descs.plain.enumerable).toBeTruthy();
|
||||||
|
expect(descs.plain.writable).toBeTruthy();
|
||||||
|
expect(descs.plain.configurable).toBeTruthy();
|
||||||
|
expect(inst.plain).toBe(9);
|
||||||
|
|||||||
@ -1,5 +1,11 @@
|
|||||||
function dec(target, name, descriptor) {
|
function dec(target, name, descriptor) {
|
||||||
|
expect(target).toBeTruthy();
|
||||||
|
expect(typeof name).toBe("string");
|
||||||
|
expect(typeof descriptor).toBe("object");
|
||||||
|
|
||||||
|
target.decoratedProps = (target.decoratedProps || []).concat([name]);
|
||||||
|
|
||||||
|
return descriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Example {
|
class Example {
|
||||||
@ -7,5 +13,17 @@ class Example {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let inst = new Example();
|
let inst = new Example();
|
||||||
|
|
||||||
|
expect(Example.prototype).toHaveProperty("decoratedProps");
|
||||||
|
expect(inst.decoratedProps).toEqual([
|
||||||
|
"prop",
|
||||||
|
]);
|
||||||
|
|
||||||
expect(inst).toHaveProperty("prop");
|
expect(inst).toHaveProperty("prop");
|
||||||
expect(inst.prop).toBeUndefined();
|
expect(inst.prop).toBeUndefined();
|
||||||
|
|
||||||
|
const descs = Object.getOwnPropertyDescriptors(inst);
|
||||||
|
|
||||||
|
expect(descs.prop.enumerable).toBeTruthy();
|
||||||
|
expect(descs.prop.writable).toBeTruthy();
|
||||||
|
expect(descs.prop.configurable).toBeTruthy();
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
var _class, _class2;
|
var _class, _class2;
|
||||||
|
|
||||||
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object['ke' + 'ys'](descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object['define' + 'Property'](target, property, desc); desc = null; } return desc; }
|
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object['ke' + 'ys'](descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; desc.writable = !!desc.writable; desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object['define' + 'Property'](target, property, desc); desc = null; } return desc; }
|
||||||
|
|
||||||
let A = (_class2 = class A {
|
let A = (_class2 = class A {
|
||||||
foo() {}
|
foo() {}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
var _class2;
|
var _class2;
|
||||||
|
|
||||||
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object['ke' + 'ys'](descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object['define' + 'Property'](target, property, desc); desc = null; } return desc; }
|
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object['ke' + 'ys'](descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; desc.writable = !!desc.writable; desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object['define' + 'Property'](target, property, desc); desc = null; } return desc; }
|
||||||
|
|
||||||
let _class = (_class2 = class {
|
let _class = (_class2 = class {
|
||||||
bar() {}
|
bar() {}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user