@@ -206,11 +206,23 @@ function isDecorateAssignmentExpression(
206206 if ( expr . left . kind !== ts . SyntaxKind . Identifier ) {
207207 return false ;
208208 }
209- if ( expr . right . kind !== ts . SyntaxKind . CallExpression ) {
209+ const classIdent = expr . left as ts . Identifier ;
210+ let callExpr : ts . CallExpression ;
211+
212+ if ( expr . right . kind === ts . SyntaxKind . CallExpression ) {
213+ callExpr = expr . right as ts . CallExpression ;
214+ } else if ( expr . right . kind === ts . SyntaxKind . BinaryExpression ) {
215+ // `Clazz = Clazz_1 = __decorate([...], Clazz)` can be found when there are static property
216+ // accesses.
217+ const innerExpr = expr . right as ts . BinaryExpression ;
218+ if ( innerExpr . left . kind !== ts . SyntaxKind . Identifier
219+ || innerExpr . right . kind !== ts . SyntaxKind . CallExpression ) {
220+ return false ;
221+ }
222+ callExpr = innerExpr . right as ts . CallExpression ;
223+ } else {
210224 return false ;
211225 }
212- const classIdent = expr . left as ts . Identifier ;
213- const callExpr = expr . right as ts . CallExpression ;
214226
215227 if ( ! isTslibHelper ( callExpr , '__decorate' , tslibImports , checker ) ) {
216228 return false ;
@@ -372,9 +384,20 @@ function pickDecorateNodesToRemove(
372384
373385 const expr = expect < ts . BinaryExpression > ( exprStmt . expression , ts . SyntaxKind . BinaryExpression ) ;
374386 const classId = expect < ts . Identifier > ( expr . left , ts . SyntaxKind . Identifier ) ;
375- const callExpr = expect < ts . CallExpression > ( expr . right , ts . SyntaxKind . CallExpression ) ;
387+ let callExpr : ts . CallExpression ;
388+
389+ if ( expr . right . kind === ts . SyntaxKind . CallExpression ) {
390+ callExpr = expect < ts . CallExpression > ( expr . right , ts . SyntaxKind . CallExpression ) ;
391+ } else if ( expr . right . kind === ts . SyntaxKind . BinaryExpression ) {
392+ const innerExpr = expr . right as ts . BinaryExpression ;
393+ callExpr = expect < ts . CallExpression > ( innerExpr . right , ts . SyntaxKind . CallExpression ) ;
394+ } else {
395+ return [ ] ;
396+ }
397+
376398 const arrLiteral = expect < ts . ArrayLiteralExpression > ( callExpr . arguments [ 0 ] ,
377399 ts . SyntaxKind . ArrayLiteralExpression ) ;
400+
378401 if ( ! arrLiteral . elements . every ( ( elem ) => elem . kind === ts . SyntaxKind . CallExpression ) ) {
379402 return [ ] ;
380403 }
0 commit comments