///
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import ts from 'typescript';
import { AstFactory, BinaryOperator, LeadingComment, ObjectLiteralProperty, SourceMapRange, TemplateLiteral, UnaryOperator, VariableDeclarationType } from './api/ast_factory';
/**
* A TypeScript flavoured implementation of the AstFactory.
*/
export declare class TypeScriptAstFactory implements AstFactory {
private annotateForClosureCompiler;
private externalSourceFiles;
constructor(annotateForClosureCompiler: boolean);
attachComments: typeof attachComments;
createArrayLiteral: (elements?: readonly ts.Expression[] | undefined, multiLine?: boolean | undefined) => ts.ArrayLiteralExpression;
createAssignment(target: ts.Expression, value: ts.Expression): ts.Expression;
createBinaryExpression(leftOperand: ts.Expression, operator: BinaryOperator, rightOperand: ts.Expression): ts.Expression;
createBlock(body: ts.Statement[]): ts.Statement;
createCallExpression(callee: ts.Expression, args: ts.Expression[], pure: boolean): ts.Expression;
createConditional: {
(condition: ts.Expression, whenTrue: ts.Expression, whenFalse: ts.Expression): ts.ConditionalExpression;
(condition: ts.Expression, questionToken: ts.QuestionToken, whenTrue: ts.Expression, colonToken: ts.ColonToken, whenFalse: ts.Expression): ts.ConditionalExpression;
};
createElementAccess: (expression: ts.Expression, index: number | ts.Expression) => ts.ElementAccessExpression;
createExpressionStatement: (expression: ts.Expression) => ts.ExpressionStatement;
createFunctionDeclaration(functionName: string, parameters: string[], body: ts.Statement): ts.Statement;
createFunctionExpression(functionName: string | null, parameters: string[], body: ts.Statement): ts.Expression;
createIdentifier: (text: string) => ts.Identifier;
createIfStatement(condition: ts.Expression, thenStatement: ts.Statement, elseStatement: ts.Statement | null): ts.Statement;
createLiteral(value: string | number | boolean | null | undefined): ts.Expression;
createNewExpression(expression: ts.Expression, args: ts.Expression[]): ts.Expression;
createObjectLiteral(properties: ObjectLiteralProperty[]): ts.Expression;
createParenthesizedExpression: (expression: ts.Expression) => ts.ParenthesizedExpression;
createPropertyAccess: (expression: ts.Expression, name: string | ts.MemberName) => ts.PropertyAccessExpression;
createReturnStatement(expression: ts.Expression | null): ts.Statement;
createTaggedTemplate(tag: ts.Expression, template: TemplateLiteral): ts.Expression;
createThrowStatement: (expression: ts.Expression) => ts.ThrowStatement;
createTypeOfExpression: (expression: ts.Expression) => ts.TypeOfExpression;
createUnaryExpression(operator: UnaryOperator, operand: ts.Expression): ts.Expression;
createVariableDeclaration(variableName: string, initializer: ts.Expression | null, type: VariableDeclarationType): ts.Statement;
setSourceMapRange(node: T, sourceMapRange: SourceMapRange | null): T;
}
export declare function createTemplateMiddle(cooked: string, raw: string): ts.TemplateMiddle;
export declare function createTemplateTail(cooked: string, raw: string): ts.TemplateTail;
/**
* Attach the given `leadingComments` to the `statement` node.
*
* @param statement The statement that will have comments attached.
* @param leadingComments The comments to attach to the statement.
*/
export declare function attachComments(statement: ts.Statement, leadingComments: LeadingComment[]): void;