Skip to content

Commit 55f984c

Browse files
authored
Merge pull request #11 from timocov/ctor-params
Added handling constructor parameters
2 parents 7dc5e17 + 884a7e1 commit 55f984c

File tree

3 files changed

+59
-4
lines changed

3 files changed

+59
-4
lines changed

src/properties-minifier.ts

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
218246
function 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
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export class Class {
2+
public constructor(
3+
public publicField: number,
4+
protected protectedField: number,
5+
private privateField: number
6+
) {}
7+
8+
public method(): void {
9+
console.log(this.publicField, this.protectedField, this.privateField);
10+
}
11+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
var Class = /** @class */ (function () {
4+
function Class(publicField, protectedField, _private_privateField) {
5+
this.publicField = publicField;
6+
this.protectedField = protectedField;
7+
this._private_privateField = _private_privateField;
8+
}
9+
Class.prototype.method = function () {
10+
console.log(this.publicField, this.protectedField, this._private_privateField);
11+
};
12+
return Class;
13+
}());
14+
exports.Class = Class;

0 commit comments

Comments
 (0)