Skip to content

Commit 890257b

Browse files
Merge pull request #49 from jeffborg/master
Return param when using argument destructing
2 parents 775caf3 + ee28b83 commit 890257b

File tree

4 files changed

+19
-10
lines changed

4 files changed

+19
-10
lines changed

src/metadata/serializeType.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@ function createVoidZero() {
1616
* @todo Array and Objects spread are not supported.
1717
* @todo Rest parameters are not supported.
1818
*/
19-
function getTypedNode(param: Parameter): t.Identifier | t.ClassProperty | null {
19+
function getTypedNode(param: Parameter): t.Identifier | t.ClassProperty | t.ObjectPattern | null {
2020
if (param == null) return null;
2121

2222
if (param.type === 'ClassProperty') return param;
2323
if (param.type === 'Identifier') return param;
24+
if (param.type === 'ObjectPattern') return param;
2425

2526
if (param.type === 'AssignmentPattern' && param.left.type === 'Identifier')
2627
return param.left;

src/parameter/parameterVisitor.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export function parameterVisitor(
5353

5454
params.slice().forEach(function(param) {
5555
let identifier =
56-
param.node.type === 'Identifier'
56+
param.node.type === 'Identifier' || param.node.type === 'ObjectPattern'
5757
? param.node
5858
: param.node.type === 'TSParameterProperty' &&
5959
param.node.parameter.type === 'Identifier'

test/__fixtures__/parameter-decorator-typed/code.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ class MyOtherClass {
1414

1515
@decorate('named')
1616
method(@inject() param: Injected, @arg() schema: Schema) {}
17+
18+
methodWithObjectSpread(@argObjectSpread() { name }: SchemaObjectSpread) {}
1719
}
1820

1921
@Decorate

test/__fixtures__/parameter-decorator-typed/output.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
var _dec, _dec2, _dec3, _class, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _class2, _class3, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _dec22, _dec23, _class4, _class5;
1+
var _dec, _dec2, _dec3, _class, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _class2, _class3, _dec19, _dec20, _dec21, _dec22, _dec23, _dec24, _dec25, _dec26, _class4, _class5;
22

33
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(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.defineProperty(target, property, desc); desc = null; } return desc; }
44

@@ -20,7 +20,9 @@ let MyOtherClass = (_dec4 = function (target, key) {
2020
return inject()(target, key, 0);
2121
}, _dec13 = function (target, key) {
2222
return arg()(target, key, 1);
23-
}, _dec14 = Reflect.metadata("design:type", Function), _dec15 = Reflect.metadata("design:paramtypes", [typeof Injected === "undefined" ? Object : Injected, typeof Schema === "undefined" ? Object : Schema]), _dec4(_class2 = _dec5(_class2 = _dec6(_class2 = _dec7(_class2 = (_class3 = class MyOtherClass {
23+
}, _dec14 = Reflect.metadata("design:type", Function), _dec15 = Reflect.metadata("design:paramtypes", [typeof Injected === "undefined" ? Object : Injected, typeof Schema === "undefined" ? Object : Schema]), _dec16 = function (target, key) {
24+
return argObjectSpread()(target, key, 0);
25+
}, _dec17 = Reflect.metadata("design:type", Function), _dec18 = Reflect.metadata("design:paramtypes", [typeof SchemaObjectSpread === "undefined" ? Object : SchemaObjectSpread]), _dec4(_class2 = _dec5(_class2 = _dec6(_class2 = _dec7(_class2 = (_class3 = class MyOtherClass {
2426
constructor(parameter, otherParam) {
2527
this.parameter = parameter;
2628
}
@@ -29,18 +31,22 @@ let MyOtherClass = (_dec4 = function (target, key) {
2931

3032
method(param, schema) {}
3133

32-
}, (_applyDecoratedDescriptor(_class3.prototype, "methodUndecorated", [_dec8, _dec9, _dec10], Object.getOwnPropertyDescriptor(_class3.prototype, "methodUndecorated"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "method", [_dec11, _dec12, _dec13, _dec14, _dec15], Object.getOwnPropertyDescriptor(_class3.prototype, "method"), _class3.prototype)), _class3)) || _class2) || _class2) || _class2) || _class2);
33-
let DecoratedClass = (_dec16 = function (target, key) {
34+
methodWithObjectSpread({
35+
name
36+
}) {}
37+
38+
}, (_applyDecoratedDescriptor(_class3.prototype, "methodUndecorated", [_dec8, _dec9, _dec10], Object.getOwnPropertyDescriptor(_class3.prototype, "methodUndecorated"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "method", [_dec11, _dec12, _dec13, _dec14, _dec15], Object.getOwnPropertyDescriptor(_class3.prototype, "method"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "methodWithObjectSpread", [_dec16, _dec17, _dec18], Object.getOwnPropertyDescriptor(_class3.prototype, "methodWithObjectSpread"), _class3.prototype)), _class3)) || _class2) || _class2) || _class2) || _class2);
39+
let DecoratedClass = (_dec19 = function (target, key) {
3440
return inject()(target, undefined, 0);
35-
}, _dec17 = function (target, key) {
41+
}, _dec20 = function (target, key) {
3642
return inject()(target, undefined, 1);
37-
}, _dec18 = Reflect.metadata("design:type", Function), _dec19 = Reflect.metadata("design:paramtypes", [typeof Injected === "undefined" ? Object : Injected, typeof Injected === "undefined" ? Object : Injected]), _dec20 = decorate('example'), _dec21 = function (target, key) {
43+
}, _dec21 = Reflect.metadata("design:type", Function), _dec22 = Reflect.metadata("design:paramtypes", [typeof Injected === "undefined" ? Object : Injected, typeof Injected === "undefined" ? Object : Injected]), _dec23 = decorate('example'), _dec24 = function (target, key) {
3844
return inject()(target, key, 0);
39-
}, _dec22 = Reflect.metadata("design:type", Function), _dec23 = Reflect.metadata("design:paramtypes", [String]), Decorate(_class4 = _dec16(_class4 = _dec17(_class4 = _dec18(_class4 = _dec19(_class4 = (_class5 = class DecoratedClass {
45+
}, _dec25 = Reflect.metadata("design:type", Function), _dec26 = Reflect.metadata("design:paramtypes", [String]), Decorate(_class4 = _dec19(_class4 = _dec20(_class4 = _dec21(_class4 = _dec22(_class4 = (_class5 = class DecoratedClass {
4046
constructor(module, otherModule) {
4147
this.module = module;
4248
}
4349

4450
method(param) {}
4551

46-
}, (_applyDecoratedDescriptor(_class5.prototype, "method", [_dec20, _dec21, _dec22, _dec23], Object.getOwnPropertyDescriptor(_class5.prototype, "method"), _class5.prototype)), _class5)) || _class4) || _class4) || _class4) || _class4) || _class4);
52+
}, (_applyDecoratedDescriptor(_class5.prototype, "method", [_dec23, _dec24, _dec25, _dec26], Object.getOwnPropertyDescriptor(_class5.prototype, "method"), _class5.prototype)), _class5)) || _class4) || _class4) || _class4) || _class4) || _class4);

0 commit comments

Comments
 (0)