@@ -42,17 +42,41 @@ export class PropertiesMinifier {
4242 }
4343
4444 private visitNode ( node : ts . Node , program : ts . Program ) : ts . Node {
45- if ( isClassMember ( node ) && isPrivateNonStaticMember ( node ) ) {
45+ if ( isClassMember ( node ) && isPrivateNonStatic ( node ) ) {
4646 return this . createNewClassMember ( node , program ) ;
4747 } else if ( isAccessExpression ( node ) ) {
4848 return this . createNewAccessExpression ( node , program ) ;
4949 } else if ( ts . isBindingElement ( node ) ) {
5050 return this . createNewBindingElement ( node , program ) ;
51+ } else if ( isConstructorParameter ( node ) && isPrivateNonStatic ( node ) ) {
52+ return this . createNewConstructorParameter ( node , program ) ;
5153 }
5254
5355 return node ;
5456 }
5557
58+ private createNewConstructorParameter ( oldParameter : ts . ParameterDeclaration , program : ts . Program ) : ts . ParameterDeclaration {
59+ if ( ! ts . isIdentifier ( oldParameter . name ) ) {
60+ return oldParameter ;
61+ }
62+
63+ return this . createNewNode (
64+ program ,
65+ oldParameter . name ,
66+ ( newName : string ) => {
67+ return ts . createParameter (
68+ oldParameter . decorators ,
69+ oldParameter . modifiers ,
70+ oldParameter . dotDotDotToken ,
71+ newName ,
72+ oldParameter . questionToken ,
73+ oldParameter . type ,
74+ oldParameter . initializer
75+ ) ;
76+ }
77+ ) ;
78+ }
79+
5680 private createNewClassMember ( oldMember : ClassMember , program : ts . Program ) : ClassMember {
5781 let creator : NodeCreator < ClassMember > ;
5882
@@ -191,11 +215,11 @@ export class PropertiesMinifier {
191215 }
192216}
193217
194- function isPrivateNonStaticMember ( node : ClassMember ) : boolean {
218+ function isPrivateNonStatic ( node : ClassMember | ts . ParameterDeclaration ) : boolean {
195219 return hasPrivateKeyword ( node ) && ! hasModifier ( node , ts . SyntaxKind . StaticKeyword ) ;
196220}
197221
198- function hasPrivateKeyword ( node : ClassMember ) : boolean {
222+ function hasPrivateKeyword ( node : ClassMember | ts . ParameterDeclaration ) : boolean {
199223 return hasModifier ( node , ts . SyntaxKind . PrivateKeyword ) ;
200224}
201225
@@ -215,6 +239,10 @@ function isClassMember(node: ts.Node): node is ClassMember {
215239 return ts . isMethodDeclaration ( node ) || ts . isPropertyDeclaration ( node ) ;
216240}
217241
242+ function isConstructorParameter ( node : ts . Node ) : node is ts . ParameterDeclaration {
243+ return ts . isParameter ( node ) && ts . isConstructorDeclaration ( node . parent as ts . Node ) ;
244+ }
245+
218246function getClassName ( classNode : ts . ClassLikeDeclaration ) : string {
219247 if ( classNode . name === undefined ) {
220248 return 'anonymous class' ;
@@ -229,5 +257,7 @@ function isPrivateNonStaticClassMember(symbol: ts.Symbol | undefined): boolean {
229257 return false ;
230258 }
231259
232- return symbol . declarations . some ( ( x : ts . Declaration ) => isClassMember ( x ) && isPrivateNonStaticMember ( x ) ) ;
260+ return symbol . declarations . some ( ( x : ts . Declaration ) => {
261+ return ( isClassMember ( x ) || isConstructorParameter ( x ) ) && isPrivateNonStatic ( x ) ;
262+ } ) ;
233263}
0 commit comments