refactor(compiler-cli): implement BabelAstFactory and AstHosts (#38866)

This commit adds the `AstHost` interface, along with implementations for
both Babel and TS.

It also implements the Babel vesion of the `AstFactory` interface, along
with a linker specific implementation of the `ImportGenerator` interface.

These classes will be used by the new "ng-linker" to transform prelinked
library code using a Babel plugin.

PR Close #38866
This commit is contained in:
Pete Bacon Darwin
2020-09-16 11:19:56 +01:00
committed by Joey Perrott
parent 1f5d7dc394
commit 7dd0db6d4f
20 changed files with 1746 additions and 4 deletions

View File

@ -6,7 +6,7 @@
* found in the LICENSE file at https://angular.io/license
*/
export {AstFactory, BinaryOperator, LeadingComment, ObjectLiteralProperty, SourceMapLocation, SourceMapRange, TemplateElement, TemplateLiteral, UnaryOperator} from './src/api/ast_factory';
export {AstFactory, BinaryOperator, LeadingComment, ObjectLiteralProperty, SourceMapLocation, SourceMapRange, TemplateElement, TemplateLiteral, UnaryOperator, VariableDeclarationType} from './src/api/ast_factory';
export {Import, ImportGenerator, NamedImport} from './src/api/import_generator';
export {ImportManager} from './src/import_manager';
export {RecordWrappedNodeExprFn} from './src/translator';

View File

@ -21,7 +21,7 @@ export interface AstFactory<TStatement, TExpression> {
* @param leadingComments the comments to attach.
* @returns the node passed in as `statement` with the comments attached.
*/
attachComments(statement: TStatement, leadingComments?: LeadingComment[]): TStatement;
attachComments(statement: TStatement, leadingComments: LeadingComment[]|undefined): TStatement;
/**
* Create a literal array expresion (e.g. `[expr1, expr2]`).

View File

@ -235,7 +235,7 @@ export function createTemplateTail(cooked: string, raw: string): ts.TemplateTail
* @param leadingComments The comments to attach to the statement.
*/
export function attachComments<T extends ts.Statement>(
statement: T, leadingComments?: LeadingComment[]): T {
statement: T, leadingComments: LeadingComment[]|undefined): T {
if (leadingComments === undefined) {
return statement;
}