Skip to content

Commit 843e969

Browse files
clydinhansl
authored andcommitted
fix(@angular-devkit/build-optimizer): prefix classes with tslib namespace imports
1 parent 2dc193c commit 843e969

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

packages/angular_devkit/build_optimizer/src/transforms/prefix-classes.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export function testPrefixClasses(content: string) {
2727
exportVarSetter, multiLineComment,
2828
/\(/, multiLineComment,
2929
/\s*function \(_super\) {/, newLine,
30-
/\w*__extends\(\w+, _super\);/,
30+
/\w*\.?__extends\(\w+, _super\);/,
3131
],
3232
].map(arr => new RegExp(arr.map(x => x.source).join(''), 'm'));
3333

@@ -179,19 +179,24 @@ function isDownleveledClass(node: ts.Node): boolean {
179179
return false;
180180
}
181181

182-
if (functionStatements.length < 3) {
182+
if (functionStatements.length < 3 || !ts.isExpressionStatement(firstStatement)) {
183183
return false;
184184
}
185185

186-
if (!ts.isExpressionStatement(firstStatement)
187-
|| !ts.isCallExpression(firstStatement.expression)) {
186+
if (!ts.isCallExpression(firstStatement.expression)) {
188187
return false;
189188
}
190189

191190
const extendCallExpression = firstStatement.expression;
192191

193-
if (!ts.isIdentifier(extendCallExpression.expression)
194-
|| !extendCallExpression.expression.text.endsWith(extendsHelperName)) {
192+
let functionName;
193+
if (ts.isIdentifier(extendCallExpression.expression)) {
194+
functionName = extendCallExpression.expression.text;
195+
} else if (ts.isPropertyAccessExpression(extendCallExpression.expression)) {
196+
functionName = extendCallExpression.expression.name.text;
197+
}
198+
199+
if (!functionName || !functionName.endsWith(extendsHelperName)) {
195200
return false;
196201
}
197202

packages/angular_devkit/build_optimizer/src/transforms/prefix-classes_spec.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,30 @@ describe('prefix-classes', () => {
218218
expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`);
219219
});
220220

221+
it('works with tslib namespace import', () => {
222+
const input = tags.stripIndent`
223+
var BufferSubscriber = /** @class */ (function (_super) {
224+
tslib_1.__extends(BufferSubscriber, _super);
225+
function BufferSubscriber() {
226+
return _super !== null && _super.apply(this, arguments) || this;
227+
}
228+
return BufferSubscriber;
229+
}(OuterSubscriber));
230+
`;
231+
const output = tags.stripIndent`
232+
var BufferSubscriber = /*@__PURE__*/ (function (_super) {
233+
tslib_1.__extends(BufferSubscriber, _super);
234+
function BufferSubscriber() {
235+
return _super !== null && _super.apply(this, arguments) || this;
236+
}
237+
return BufferSubscriber;
238+
}(OuterSubscriber));
239+
`;
240+
241+
expect(testPrefixClasses(input)).toBeTruthy();
242+
expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`);
243+
});
244+
221245
it('fixes the RxJS use case (issue #214)', () => {
222246
const input = `
223247
var ExtendedClass = /*@__PURE__*/ (/*@__PURE__*/ function (_super) {

0 commit comments

Comments
 (0)