fix(tsc-wrapped): validate metadata in static members of a class (#14772)
Fixes #13481
This commit is contained in:
parent
6bae7378b1
commit
a6996a9cdd
|
@ -581,6 +581,16 @@ function validateMetadata(
|
|||
Object.getOwnPropertyNames(classData.members)
|
||||
.forEach(name => classData.members[name].forEach((m) => validateMember(classData, m)));
|
||||
}
|
||||
if (classData.statics) {
|
||||
Object.getOwnPropertyNames(classData.statics).forEach(name => {
|
||||
const staticMember = classData.statics[name];
|
||||
if (isFunctionMetadata(staticMember)) {
|
||||
validateExpression(staticMember.value);
|
||||
} else {
|
||||
validateExpression(staticMember);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function validateFunction(functionDeclaration: FunctionMetadata) {
|
||||
|
|
|
@ -28,6 +28,7 @@ describe('Collector', () => {
|
|||
'/promise.ts',
|
||||
'/unsupported-1.ts',
|
||||
'/unsupported-2.ts',
|
||||
'/unsupported-3.ts',
|
||||
'class-arity.ts',
|
||||
'import-star.ts',
|
||||
'exported-classes.ts',
|
||||
|
@ -621,10 +622,16 @@ describe('Collector', () => {
|
|||
});
|
||||
|
||||
it('should throw for references to unexpected types', () => {
|
||||
const unsupported1 = program.getSourceFile('/unsupported-2.ts');
|
||||
expect(() => collector.getMetadata(unsupported1, true))
|
||||
const unsupported2 = program.getSourceFile('/unsupported-2.ts');
|
||||
expect(() => collector.getMetadata(unsupported2, true))
|
||||
.toThrowError(/Reference to non-exported class/);
|
||||
});
|
||||
|
||||
it('should throw for errors in a static method', () => {
|
||||
const unsupported3 = program.getSourceFile('/unsupported-3.ts');
|
||||
expect(() => collector.getMetadata(unsupported3, true))
|
||||
.toThrowError(/Reference to a non-exported class/);
|
||||
});
|
||||
});
|
||||
|
||||
describe('with invalid input', () => {
|
||||
|
@ -911,6 +918,15 @@ const FILES: Directory = {
|
|||
constructor(private f: Foo) {}
|
||||
}
|
||||
`,
|
||||
'unsupported-3.ts': `
|
||||
class Foo {}
|
||||
|
||||
export class SomeClass {
|
||||
static someStatic() {
|
||||
return Foo;
|
||||
}
|
||||
}
|
||||
`,
|
||||
'import-star.ts': `
|
||||
import {Injectable} from 'angular2/core';
|
||||
import * as common from 'angular2/common';
|
||||
|
|
Loading…
Reference in New Issue