From b60829663383adcaa8b2570f56242ce34e1d94a1 Mon Sep 17 00:00:00 2001 From: mgechev Date: Thu, 8 Jun 2017 18:48:26 -0700 Subject: [PATCH] fix: compatible with Angular 4.1.3 Fix #319 --- .../recursiveAngularExpressionVisitor.ts | 5 +++ src/angular/templates/templateParser.ts | 33 ++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/angular/templates/recursiveAngularExpressionVisitor.ts b/src/angular/templates/recursiveAngularExpressionVisitor.ts index 93427ea70..e60e5e93f 100644 --- a/src/angular/templates/recursiveAngularExpressionVisitor.ts +++ b/src/angular/templates/recursiveAngularExpressionVisitor.ts @@ -22,6 +22,11 @@ export class RecursiveAngularExpressionVisitor extends SourceMappingVisitor impl return null; } + visitNonNullAssert(ast: e.NonNullAssert, context: any) { + ast.visit(this); + return null; + } + visitBinary(ast: e.Binary, context: any): any { ast.left.visit(this); ast.right.visit(this); diff --git a/src/angular/templates/templateParser.ts b/src/angular/templates/templateParser.ts index cebad5885..1f7f20e23 100644 --- a/src/angular/templates/templateParser.ts +++ b/src/angular/templates/templateParser.ts @@ -66,9 +66,13 @@ export const parseTemplate = (template: string, directives: DirectiveDeclaration tmplParser = new TemplateParser(config, expressionParser, elementSchemaRegistry, htmlParser, ngConsole, []); }) - .else(() => { + .elseIf.lt('4.1.0', () => { tmplParser = new TemplateParser(expressionParser, elementSchemaRegistry, htmlParser, ngConsole, []); + }).else(() => { + const config = new compiler.CompilerConfig({}); + tmplParser = + new TemplateParser(config, new compiler.JitReflector(), expressionParser, elementSchemaRegistry, htmlParser, ngConsole, []); }); const interpolation = Config.interpolation; @@ -112,6 +116,7 @@ export const parseTemplate = (template: string, directives: DirectiveDeclaration identifier: null }; let result = null; + try { SemVerDSL.lt('4.1.0', () => { result = tmplParser.tryParse( (compiler.CompileDirectiveMetadata as any).create({ @@ -119,6 +124,29 @@ export const parseTemplate = (template: string, directives: DirectiveDeclaration template: templateMetadata }), template, defaultDirectives, [], [NO_ERRORS_SCHEMA], '').templateAst; + }).elseIf.lt('4.1.3', () => { + result = tmplParser.tryParse( + compiler.CompileDirectiveMetadata.create({ + type, + template: templateMetadata, + isHost: true, + isComponent: true, + selector: '', + exportAs: '', + changeDetection: ChangeDetectionStrategy.Default, + inputs: [], + outputs: [], + host: {}, + providers: [], + viewProviders: [], + queries: [], + viewQueries: [], + entryComponents: [], + componentViewType: null, + rendererType: null, + componentFactory: null + }), + template, defaultDirectives, [], [NO_ERRORS_SCHEMA], '').templateAst; }).else(() => { result = tmplParser.tryParse( compiler.CompileDirectiveMetadata.create({ @@ -143,5 +171,8 @@ export const parseTemplate = (template: string, directives: DirectiveDeclaration }), template, defaultDirectives, [], [NO_ERRORS_SCHEMA], '').templateAst; }); + } catch (e) { + console.log(e); + } return result; };