11import {
22 isPresent ,
33 isBlank ,
4+ isNumber ,
5+ isBoolean ,
46 normalizeBool ,
57 normalizeBlank ,
68 serializeEnum ,
79 Type ,
810 isString ,
911 RegExpWrapper ,
10- StringWrapper
12+ StringWrapper ,
13+ isArray
1114} from 'angular2/src/facade/lang' ;
1215import { unimplemented } from 'angular2/src/facade/exceptions' ;
1316import { StringMapWrapper } from 'angular2/src/facade/collection' ;
@@ -25,64 +28,70 @@ import {LifecycleHooks, LIFECYCLE_HOOKS_VALUES} from 'angular2/src/core/linker/i
2528var HOST_REG_EXP = / ^ (?: (?: \[ ( [ ^ \] ] + ) \] ) | (?: \( ( [ ^ \) ] + ) \) ) ) $ / g;
2629
2730export abstract class CompileMetadataWithIdentifier {
28- static fromJson ( data : { [ key : string ] : any } ) : CompileMetadataWithIdentifier {
29- return _COMPILE_METADATA_FROM_JSON [ data [ 'class' ] ] ( data ) ;
30- }
31-
3231 abstract toJson ( ) : { [ key : string ] : any } ;
3332
3433 get identifier ( ) : CompileIdentifierMetadata { return < CompileIdentifierMetadata > unimplemented ( ) ; }
3534}
3635
3736export abstract class CompileMetadataWithType extends CompileMetadataWithIdentifier {
38- static fromJson ( data : { [ key : string ] : any } ) : CompileMetadataWithType {
39- return _COMPILE_METADATA_FROM_JSON [ data [ 'class' ] ] ( data ) ;
40- }
41-
4237 abstract toJson ( ) : { [ key : string ] : any } ;
4338
4439 get type ( ) : CompileTypeMetadata { return < CompileTypeMetadata > unimplemented ( ) ; }
4540
4641 get identifier ( ) : CompileIdentifierMetadata { return < CompileIdentifierMetadata > unimplemented ( ) ; }
4742}
4843
44+ export function metadataFromJson ( data : { [ key : string ] : any } ) : any {
45+ return _COMPILE_METADATA_FROM_JSON [ data [ 'class' ] ] ( data ) ;
46+ }
47+
4948export class CompileIdentifierMetadata implements CompileMetadataWithIdentifier {
5049 runtime : any ;
5150 name : string ;
5251 prefix : string ;
5352 moduleUrl : string ;
5453 constConstructor : boolean ;
55- constructor ( { runtime, name, moduleUrl, prefix, constConstructor} : {
54+ value : any ;
55+
56+ constructor ( { runtime, name, moduleUrl, prefix, constConstructor, value} : {
5657 runtime ?: any ,
5758 name ?: string ,
59+ staticMethodName ?: string ,
5860 moduleUrl ?: string ,
5961 prefix ?: string ,
60- constConstructor ?: boolean
62+ constConstructor ?: boolean ,
63+ value ?: any
6164 } = { } ) {
6265 this . runtime = runtime ;
6366 this . name = name ;
6467 this . prefix = prefix ;
6568 this . moduleUrl = moduleUrl ;
6669 this . constConstructor = constConstructor ;
70+ this . value = value ;
6771 }
6872
6973 static fromJson ( data : { [ key : string ] : any } ) : CompileIdentifierMetadata {
74+ let value = isArray ( data [ 'value' ] ) ? arrayFromJson ( data [ 'value' ] , metadataFromJson ) :
75+ objFromJson ( data [ 'value' ] , metadataFromJson ) ;
7076 return new CompileIdentifierMetadata ( {
7177 name : data [ 'name' ] ,
7278 prefix : data [ 'prefix' ] ,
7379 moduleUrl : data [ 'moduleUrl' ] ,
74- constConstructor : data [ 'constConstructor' ]
80+ constConstructor : data [ 'constConstructor' ] ,
81+ value : value
7582 } ) ;
7683 }
7784
7885 toJson ( ) : { [ key : string ] : any } {
86+ let value = isArray ( this . value ) ? arrayToJson ( this . value ) : objToJson ( this . value ) ;
7987 return {
8088 // Note: Runtime type can't be serialized...
8189 'class' : 'Identifier' ,
8290 'name' : this . name ,
8391 'moduleUrl' : this . moduleUrl ,
8492 'prefix' : this . prefix ,
85- 'constConstructor' : this . constConstructor
93+ 'constConstructor' : this . constConstructor ,
94+ 'value' : value
8695 } ;
8796 }
8897
@@ -177,44 +186,78 @@ export class CompileProviderMetadata {
177186 static fromJson ( data : { [ key : string ] : any } ) : CompileProviderMetadata {
178187 return new CompileProviderMetadata ( {
179188 token : objFromJson ( data [ 'token' ] , CompileIdentifierMetadata . fromJson ) ,
180- useClass : objFromJson ( data [ 'useClass' ] , CompileTypeMetadata . fromJson )
189+ useClass : objFromJson ( data [ 'useClass' ] , CompileTypeMetadata . fromJson ) ,
190+ useExisting : objFromJson ( data [ 'useExisting' ] , CompileIdentifierMetadata . fromJson ) ,
191+ useValue : objFromJson ( data [ 'useValue' ] , CompileIdentifierMetadata . fromJson ) ,
192+ useFactory : objFromJson ( data [ 'useFactory' ] , CompileFactoryMetadata . fromJson )
181193 } ) ;
182194 }
183195
184196 toJson ( ) : { [ key : string ] : any } {
185197 return {
186198 // Note: Runtime type can't be serialized...
199+ 'class' : 'Provider' ,
187200 'token' : objToJson ( this . token ) ,
188- 'useClass' : objToJson ( this . useClass )
201+ 'useClass' : objToJson ( this . useClass ) ,
202+ 'useExisting' : objToJson ( this . useExisting ) ,
203+ 'useValue' : objToJson ( this . useValue ) ,
204+ 'useFactory' : objToJson ( this . useFactory )
189205 } ;
190206 }
191207}
192208
193- export class CompileFactoryMetadata implements CompileIdentifierMetadata {
209+ export class CompileFactoryMetadata implements CompileIdentifierMetadata ,
210+ CompileMetadataWithIdentifier {
194211 runtime : Function ;
195212 name : string ;
196213 prefix : string ;
197214 moduleUrl : string ;
198215 constConstructor : boolean ;
216+ value : any ;
199217 diDeps : CompileDiDependencyMetadata [ ] ;
200218
201- constructor ( { runtime, name, moduleUrl, constConstructor, diDeps} : {
219+ constructor ( { runtime, name, moduleUrl, prefix , constConstructor, diDeps, value } : {
202220 runtime ?: Function ,
203221 name ?: string ,
222+ prefix ?: string ,
204223 moduleUrl ?: string ,
205224 constConstructor ?: boolean ,
225+ value ?: boolean ,
206226 diDeps ?: CompileDiDependencyMetadata [ ]
207227 } ) {
208228 this . runtime = runtime ;
209229 this . name = name ;
230+ this . prefix = prefix ;
210231 this . moduleUrl = moduleUrl ;
211232 this . diDeps = diDeps ;
212233 this . constConstructor = constConstructor ;
234+ this . value = value ;
213235 }
214236
215237 get identifier ( ) : CompileIdentifierMetadata { return this ; }
216238
217- toJson ( ) { return null ; }
239+ static fromJson ( data : { [ key : string ] : any } ) : CompileFactoryMetadata {
240+ return new CompileFactoryMetadata ( {
241+ name : data [ 'name' ] ,
242+ prefix : data [ 'prefix' ] ,
243+ moduleUrl : data [ 'moduleUrl' ] ,
244+ constConstructor : data [ 'constConstructor' ] ,
245+ value : data [ 'value' ] ,
246+ diDeps : arrayFromJson ( data [ 'diDeps' ] , CompileDiDependencyMetadata . fromJson )
247+ } ) ;
248+ }
249+
250+ toJson ( ) : { [ key : string ] : any } {
251+ return {
252+ 'class' : 'Factory' ,
253+ 'name' : this . name ,
254+ 'prefix' : this . prefix ,
255+ 'moduleUrl' : this . moduleUrl ,
256+ 'constConstructor' : this . constConstructor ,
257+ 'value' : this . value ,
258+ 'diDeps' : arrayToJson ( this . diDeps )
259+ } ;
260+ }
218261}
219262
220263/**
@@ -227,15 +270,17 @@ export class CompileTypeMetadata implements CompileIdentifierMetadata, CompileMe
227270 moduleUrl : string ;
228271 isHost : boolean ;
229272 constConstructor : boolean ;
273+ value : any ;
230274 diDeps : CompileDiDependencyMetadata [ ] ;
231275
232- constructor ( { runtime, name, moduleUrl, prefix, isHost, constConstructor, diDeps} : {
276+ constructor ( { runtime, name, moduleUrl, prefix, isHost, constConstructor, value , diDeps} : {
233277 runtime ?: Type ,
234278 name ?: string ,
235279 moduleUrl ?: string ,
236280 prefix ?: string ,
237281 isHost ?: boolean ,
238282 constConstructor ?: boolean ,
283+ value ?: any ,
239284 diDeps ?: CompileDiDependencyMetadata [ ]
240285 } = { } ) {
241286 this . runtime = runtime ;
@@ -244,6 +289,7 @@ export class CompileTypeMetadata implements CompileIdentifierMetadata, CompileMe
244289 this . prefix = prefix ;
245290 this . isHost = normalizeBool ( isHost ) ;
246291 this . constConstructor = constConstructor ;
292+ this . value = value ;
247293 this . diDeps = normalizeBlank ( diDeps ) ;
248294 }
249295
@@ -254,6 +300,7 @@ export class CompileTypeMetadata implements CompileIdentifierMetadata, CompileMe
254300 prefix : data [ 'prefix' ] ,
255301 isHost : data [ 'isHost' ] ,
256302 constConstructor : data [ 'constConstructor' ] ,
303+ value : data [ 'value' ] ,
257304 diDeps : arrayFromJson ( data [ 'diDeps' ] , CompileDiDependencyMetadata . fromJson )
258305 } ) ;
259306 }
@@ -270,6 +317,7 @@ export class CompileTypeMetadata implements CompileIdentifierMetadata, CompileMe
270317 'prefix' : this . prefix ,
271318 'isHost' : this . isHost ,
272319 'constConstructor' : this . constConstructor ,
320+ 'value' : this . value ,
273321 'diDeps' : arrayToJson ( this . diDeps )
274322 } ;
275323 }
@@ -382,8 +430,10 @@ export class CompileDirectiveMetadata implements CompileMetadataWithType {
382430 outputs ?: string [ ] ,
383431 host ?: { [ key : string ] : string } ,
384432 lifecycleHooks ?: LifecycleHooks [ ] ,
385- providers ?: Array < CompileProviderMetadata | CompileTypeMetadata | any [ ] > ,
386- viewProviders ?: Array < CompileProviderMetadata | CompileTypeMetadata | any [ ] > ,
433+ providers ?:
434+ Array < CompileProviderMetadata | CompileTypeMetadata | CompileIdentifierMetadata | any [ ] > ,
435+ viewProviders ?:
436+ Array < CompileProviderMetadata | CompileTypeMetadata | CompileIdentifierMetadata | any [ ] > ,
387437 queries ?: CompileQueryMetadata [ ] ,
388438 viewQueries ?: CompileQueryMetadata [ ] ,
389439 template ?: CompileTemplateMetadata
@@ -474,8 +524,10 @@ export class CompileDirectiveMetadata implements CompileMetadataWithType {
474524 hostProperties ?: { [ key : string ] : string } ,
475525 hostAttributes ?: { [ key : string ] : string } ,
476526 lifecycleHooks ?: LifecycleHooks [ ] ,
477- providers ?: Array < CompileProviderMetadata | CompileTypeMetadata | any [ ] > ,
478- viewProviders ?: Array < CompileProviderMetadata | CompileTypeMetadata | any [ ] > ,
527+ providers ?:
528+ Array < CompileProviderMetadata | CompileTypeMetadata | CompileIdentifierMetadata | any [ ] > ,
529+ viewProviders ?:
530+ Array < CompileProviderMetadata | CompileTypeMetadata | CompileIdentifierMetadata | any [ ] > ,
479531 queries ?: CompileQueryMetadata [ ] ,
480532 viewQueries ?: CompileQueryMetadata [ ] ,
481533 template ?: CompileTemplateMetadata
@@ -494,8 +546,8 @@ export class CompileDirectiveMetadata implements CompileMetadataWithType {
494546 this . lifecycleHooks = lifecycleHooks ;
495547 this . providers = normalizeBlank ( providers ) ;
496548 this . viewProviders = normalizeBlank ( viewProviders ) ;
497- this . queries = queries ;
498- this . viewQueries = viewQueries ;
549+ this . queries = normalizeBlank ( queries ) ;
550+ this . viewQueries = normalizeBlank ( viewQueries ) ;
499551 this . template = template ;
500552 }
501553
@@ -520,7 +572,10 @@ export class CompileDirectiveMetadata implements CompileMetadataWithType {
520572 ( < any [ ] > data [ 'lifecycleHooks' ] ) . map ( hookValue => LIFECYCLE_HOOKS_VALUES [ hookValue ] ) ,
521573 template : isPresent ( data [ 'template' ] ) ? CompileTemplateMetadata . fromJson ( data [ 'template' ] ) :
522574 data [ 'template' ] ,
523- providers : arrayFromJson ( data [ 'providers' ] , CompileProviderMetadata . fromJson )
575+ providers : arrayFromJson ( data [ 'providers' ] , metadataFromJson ) ,
576+ viewProviders : arrayFromJson ( data [ 'viewProviders' ] , metadataFromJson ) ,
577+ queries : arrayFromJson ( data [ 'queries' ] , CompileQueryMetadata . fromJson ) ,
578+ viewQueries : arrayFromJson ( data [ 'viewQueries' ] , CompileQueryMetadata . fromJson )
524579 } ) ;
525580 }
526581
@@ -541,7 +596,10 @@ export class CompileDirectiveMetadata implements CompileMetadataWithType {
541596 'hostAttributes' : this . hostAttributes ,
542597 'lifecycleHooks' : this . lifecycleHooks . map ( hook => serializeEnum ( hook ) ) ,
543598 'template' : isPresent ( this . template ) ? this . template . toJson ( ) : this . template ,
544- 'providers' : arrayToJson ( this . providers )
599+ 'providers' : arrayToJson ( this . providers ) ,
600+ 'viewProviders' : arrayToJson ( this . viewProviders ) ,
601+ 'queries' : arrayToJson ( this . queries ) ,
602+ 'viewQueries' : arrayToJson ( this . viewQueries )
545603 } ;
546604 }
547605}
@@ -611,7 +669,9 @@ var _COMPILE_METADATA_FROM_JSON = {
611669 'Directive' : CompileDirectiveMetadata . fromJson ,
612670 'Pipe' : CompilePipeMetadata . fromJson ,
613671 'Type' : CompileTypeMetadata . fromJson ,
614- 'Identifier' : CompileIdentifierMetadata . fromJson
672+ 'Provider' : CompileProviderMetadata . fromJson ,
673+ 'Identifier' : CompileIdentifierMetadata . fromJson ,
674+ 'Factory' : CompileFactoryMetadata . fromJson
615675} ;
616676
617677function arrayFromJson ( obj : any [ ] , fn : ( a : { [ key : string ] : any } ) => any ) : any {
@@ -623,9 +683,9 @@ function arrayToJson(obj: any[]): string | {[key: string]: any} {
623683}
624684
625685function objFromJson ( obj : any , fn : ( a : { [ key : string ] : any } ) => any ) : any {
626- return ( isString ( obj ) || isBlank ( obj ) ) ? obj : fn ( obj ) ;
686+ return ( isString ( obj ) || isBlank ( obj ) || isBoolean ( obj ) || isNumber ( obj ) ) ? obj : fn ( obj ) ;
627687}
628688
629689function objToJson ( obj : any ) : string | { [ key : string ] : any } {
630- return ( isString ( obj ) || isBlank ( obj ) ) ? obj : obj . toJson ( ) ;
690+ return ( isString ( obj ) || isBlank ( obj ) || isBoolean ( obj ) || isNumber ( obj ) ) ? obj : obj . toJson ( ) ;
631691}
0 commit comments