refactor(core): stronger type for resolved angular decorators (#29608)

PR Close #29608
This commit is contained in:
Paul Gschwendtner 2019-03-28 11:45:33 +01:00 committed by Jason Aden
parent 780081def0
commit 15eb1e0ce1
3 changed files with 10 additions and 4 deletions

View File

@ -62,7 +62,7 @@ function getInputNamesFromMetadata(
return null; return null;
} }
const decoratorCall = decorator.node.expression as ts.CallExpression; const decoratorCall = decorator.node.expression;
// In case the decorator does define any metadata, there is no metadata // In case the decorator does define any metadata, there is no metadata
// where inputs could be declared. This is an edge case because there // where inputs could be declared. This is an edge case because there

View File

@ -16,7 +16,7 @@ import {NgQueryDefinition, QueryTiming} from './angular/query-definition';
*/ */
export function getTransformedQueryCallExpr( export function getTransformedQueryCallExpr(
query: NgQueryDefinition, timing: QueryTiming): ts.CallExpression|null { query: NgQueryDefinition, timing: QueryTiming): ts.CallExpression|null {
const queryExpr = query.decorator.node.expression as ts.CallExpression; const queryExpr = query.decorator.node.expression;
const queryArguments = queryExpr.arguments; const queryArguments = queryExpr.arguments;
const timingPropertyAssignment = ts.createPropertyAssignment( const timingPropertyAssignment = ts.createPropertyAssignment(
'static', timing === QueryTiming.STATIC ? ts.createTrue() : ts.createFalse()); 'static', timing === QueryTiming.STATIC ? ts.createTrue() : ts.createFalse());

View File

@ -9,9 +9,13 @@
import * as ts from 'typescript'; import * as ts from 'typescript';
import {getCallDecoratorImport} from './typescript/decorators'; import {getCallDecoratorImport} from './typescript/decorators';
export type CallExpressionDecorator = ts.Decorator & {
expression: ts.CallExpression;
}
export interface NgDecorator { export interface NgDecorator {
name: string; name: string;
node: ts.Decorator; node: CallExpressionDecorator;
} }
/** /**
@ -22,5 +26,7 @@ export function getAngularDecorators(
typeChecker: ts.TypeChecker, decorators: ReadonlyArray<ts.Decorator>): NgDecorator[] { typeChecker: ts.TypeChecker, decorators: ReadonlyArray<ts.Decorator>): NgDecorator[] {
return decorators.map(node => ({node, importData: getCallDecoratorImport(typeChecker, node)})) return decorators.map(node => ({node, importData: getCallDecoratorImport(typeChecker, node)}))
.filter(({importData}) => importData && importData.importModule.startsWith('@angular/')) .filter(({importData}) => importData && importData.importModule.startsWith('@angular/'))
.map(({node, importData}) => ({node, name: importData !.name})); .map(
({node, importData}) =>
({node: node as CallExpressionDecorator, name: importData !.name}));
} }