11import { Type , Json , isBlank , stringify } from 'angular2/src/core/facade/lang' ;
2+ import { BaseException } from 'angular2/src/core/facade/exceptions' ;
23import { ListWrapper , SetWrapper } from 'angular2/src/core/facade/collection' ;
34import { PromiseWrapper , Promise } from 'angular2/src/core/facade/async' ;
45import { CompiledTemplate , TemplateCmd } from 'angular2/src/core/compiler/template_commands' ;
@@ -58,18 +59,12 @@ export class TemplateCompiler {
5859 } ) ) ;
5960 }
6061
61- serializeDirectiveMetadata ( metadata : CompileDirectiveMetadata ) : string {
62- return Json . stringify ( metadata . toJson ( ) ) ;
63- }
64-
65- deserializeDirectiveMetadata ( data : string ) : CompileDirectiveMetadata {
66- return CompileDirectiveMetadata . fromJson ( Json . parse ( data ) ) ;
67- }
68-
6962 compileHostComponentRuntime ( type : Type ) : Promise < CompiledTemplate > {
7063 var compMeta : CompileDirectiveMetadata = this . _runtimeMetadataResolver . getMetadata ( type ) ;
64+ assertComponent ( compMeta ) ;
7165 var hostMeta : CompileDirectiveMetadata =
7266 createHostComponentMeta ( compMeta . type , compMeta . selector ) ;
67+
7368 this . _compileComponentRuntime ( hostMeta , [ compMeta ] , new Set ( ) ) ;
7469 return this . _compiledTemplateDone . get ( hostMeta . type . id ) ;
7570 }
@@ -93,28 +88,30 @@ export class TemplateCompiler {
9388 new CompiledTemplate ( compMeta . type . id , ( ) => [ changeDetectorFactory , commands , styles ] ) ;
9489 this . _compiledTemplateCache . set ( compMeta . type . id , compiledTemplate ) ;
9590 compilingComponentIds . add ( compMeta . type . id ) ;
96- done = PromiseWrapper . all ( [ < any > this . _styleCompiler . compileComponentRuntime ( compMeta ) ] . concat (
97- viewDirectives . map (
98- dirMeta => this . normalizeDirectiveMetadata ( dirMeta ) ) ) )
99- . then ( ( stylesAndNormalizedViewDirMetas : any [ ] ) => {
100- var childPromises = [ ] ;
101- var normalizedViewDirMetas = stylesAndNormalizedViewDirMetas . slice ( 1 ) ;
102- var parsedTemplate = this . _templateParser . parse (
103- compMeta . template . template , normalizedViewDirMetas , compMeta . type . name ) ;
104-
105- var changeDetectorFactories = this . _cdCompiler . compileComponentRuntime (
106- compMeta . type , compMeta . changeDetection , parsedTemplate ) ;
107- changeDetectorFactory = changeDetectorFactories [ 0 ] ;
108- styles = stylesAndNormalizedViewDirMetas [ 0 ] ;
109- commands = this . _compileCommandsRuntime ( compMeta , parsedTemplate ,
110- changeDetectorFactories ,
111- compilingComponentIds , childPromises ) ;
112- return PromiseWrapper . all ( childPromises ) ;
113- } )
114- . then ( ( _ ) => {
115- SetWrapper . delete ( compilingComponentIds , compMeta . type . id ) ;
116- return compiledTemplate ;
117- } ) ;
91+ done =
92+ PromiseWrapper
93+ . all ( [
94+ < any > this . _styleCompiler . compileComponentRuntime ( compMeta . type , compMeta . template )
95+ ] . concat ( viewDirectives . map ( dirMeta => this . normalizeDirectiveMetadata ( dirMeta ) ) ) )
96+ . then ( ( stylesAndNormalizedViewDirMetas : any [ ] ) => {
97+ var childPromises = [ ] ;
98+ var normalizedViewDirMetas = stylesAndNormalizedViewDirMetas . slice ( 1 ) ;
99+ var parsedTemplate = this . _templateParser . parse (
100+ compMeta . template . template , normalizedViewDirMetas , compMeta . type . name ) ;
101+
102+ var changeDetectorFactories = this . _cdCompiler . compileComponentRuntime (
103+ compMeta . type , compMeta . changeDetection , parsedTemplate ) ;
104+ changeDetectorFactory = changeDetectorFactories [ 0 ] ;
105+ styles = stylesAndNormalizedViewDirMetas [ 0 ] ;
106+ commands =
107+ this . _compileCommandsRuntime ( compMeta , parsedTemplate , changeDetectorFactories ,
108+ compilingComponentIds , childPromises ) ;
109+ return PromiseWrapper . all ( childPromises ) ;
110+ } )
111+ . then ( ( _ ) => {
112+ SetWrapper . delete ( compilingComponentIds , compMeta . type . id ) ;
113+ return compiledTemplate ;
114+ } ) ;
118115 this . _compiledTemplateDone . set ( compMeta . type . id , done ) ;
119116 }
120117 return compiledTemplate ;
@@ -148,6 +145,7 @@ export class TemplateCompiler {
148145 var componentMetas : CompileDirectiveMetadata [ ] = [ ] ;
149146 components . forEach ( componentWithDirs => {
150147 var compMeta = < CompileDirectiveMetadata > componentWithDirs . component ;
148+ assertComponent ( compMeta ) ;
151149 componentMetas . push ( compMeta ) ;
152150 this . _processTemplateCodeGen ( compMeta ,
153151 < CompileDirectiveMetadata [ ] > componentWithDirs . directives ,
@@ -174,7 +172,7 @@ export class TemplateCompiler {
174172 private _processTemplateCodeGen ( compMeta : CompileDirectiveMetadata ,
175173 directives : CompileDirectiveMetadata [ ] ,
176174 targetDeclarations : string [ ] , targetTemplateArguments : any [ ] [ ] ) {
177- var styleExpr = this . _styleCompiler . compileComponentCodeGen ( compMeta ) ;
175+ var styleExpr = this . _styleCompiler . compileComponentCodeGen ( compMeta . type , compMeta . template ) ;
178176 var parsedTemplate =
179177 this . _templateParser . parse ( compMeta . template . template , directives , compMeta . type . name ) ;
180178 var changeDetectorsExprs = this . _cdCompiler . compileComponentCodeGen (
@@ -197,6 +195,12 @@ export class NormalizedComponentWithViewDirectives {
197195 public directives : CompileDirectiveMetadata [ ] ) { }
198196}
199197
198+ function assertComponent ( meta : CompileDirectiveMetadata ) {
199+ if ( ! meta . isComponent ) {
200+ throw new BaseException ( `Could not compile '${ meta . type . name } ' because it is not a component.` ) ;
201+ }
202+ }
203+
200204function templateVariableName ( type : CompileTypeMetadata ) : string {
201205 return `${ type . name } Template` ;
202206}
0 commit comments