Socket
Socket
Sign inDemoInstall

@angular/compiler

Package Overview
Dependencies
1
Maintainers
1
Versions
812
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 2.0.0-rc.4 to 2.0.0-rc.5

core_private_testing.d.ts

15

core_private.d.ts

@@ -19,3 +19,2 @@ /**

export declare var ReflectorReader: typeof t.ReflectorReader;
export declare var ReflectorComponentResolver: typeof t.ReflectorComponentResolver;
export declare type AppElement = t.AppElement;

@@ -27,2 +26,3 @@ export declare var AppElement: typeof t.AppElement;

export declare var DebugAppView: typeof t.DebugAppView;
export declare var NgModuleInjector: typeof t.NgModuleInjector;
export declare type ViewType = t.ViewType;

@@ -39,3 +39,3 @@ export declare var ViewType: typeof t.ViewType;

export declare var devModeEqual: typeof t.devModeEqual;
export declare var uninitialized: typeof t.uninitialized;
export declare var UNINITIALIZED: typeof t.UNINITIALIZED;
export declare var ValueUnwrapper: typeof t.ValueUnwrapper;

@@ -45,6 +45,2 @@ export declare var TemplateRef_: typeof t.TemplateRef_;

export declare var RenderDebugInfo: typeof t.RenderDebugInfo;
export declare var SecurityContext: typeof t.SecurityContext;
export declare type SecurityContext = t.SecurityContext;
export declare var SanitizationService: typeof t.SanitizationService;
export declare type SanitizationService = t.SanitizationService;
export declare var createProvider: typeof t.createProvider;

@@ -68,3 +64,6 @@ export declare var isProviderLiteral: typeof t.isProviderLiteral;

export declare var reflector: t.Reflector;
export declare var Reflector: typeof t.Reflector;
export declare type Reflector = t.Reflector;
export declare var ReflectionCapabilities: typeof t.ReflectionCapabilities;
export declare type ReflectionCapabilities = t.ReflectionCapabilities;
export declare type NoOpAnimationPlayer = t.NoOpAnimationPlayer;

@@ -74,6 +73,2 @@ export declare var NoOpAnimationPlayer: typeof t.NoOpAnimationPlayer;

export declare var AnimationPlayer: typeof t.AnimationPlayer;
export declare type NoOpAnimationDriver = t.NoOpAnimationDriver;
export declare var NoOpAnimationDriver: typeof t.NoOpAnimationDriver;
export declare type AnimationDriver = t.AnimationDriver;
export declare var AnimationDriver: typeof t.AnimationDriver;
export declare type AnimationSequencePlayer = t.AnimationSequencePlayer;

@@ -80,0 +75,0 @@ export declare var AnimationSequencePlayer: typeof t.AnimationSequencePlayer;

@@ -17,3 +17,2 @@ /**

exports.ReflectorReader = core_1.__core_private__.ReflectorReader;
exports.ReflectorComponentResolver = core_1.__core_private__.ReflectorComponentResolver;
exports.AppElement = core_1.__core_private__.AppElement;

@@ -23,2 +22,3 @@ exports.CodegenComponentFactoryResolver = core_1.__core_private__.CodegenComponentFactoryResolver;

exports.DebugAppView = core_1.__core_private__.DebugAppView;
exports.NgModuleInjector = core_1.__core_private__.NgModuleInjector;
exports.ViewType = core_1.__core_private__.ViewType;

@@ -34,8 +34,6 @@ exports.MAX_INTERPOLATION_VALUES = core_1.__core_private__.MAX_INTERPOLATION_VALUES;

exports.devModeEqual = core_1.__core_private__.devModeEqual;
exports.uninitialized = core_1.__core_private__.uninitialized;
exports.UNINITIALIZED = core_1.__core_private__.UNINITIALIZED;
exports.ValueUnwrapper = core_1.__core_private__.ValueUnwrapper;
exports.TemplateRef_ = core_1.__core_private__.TemplateRef_;
exports.RenderDebugInfo = core_1.__core_private__.RenderDebugInfo;
exports.SecurityContext = core_1.__core_private__.SecurityContext;
exports.SanitizationService = core_1.__core_private__.SanitizationService;
exports.createProvider = core_1.__core_private__.createProvider;

@@ -58,6 +56,6 @@ exports.isProviderLiteral = core_1.__core_private__.isProviderLiteral;

exports.reflector = core_1.__core_private__.reflector;
exports.Reflector = core_1.__core_private__.Reflector;
exports.ReflectionCapabilities = core_1.__core_private__.ReflectionCapabilities;
exports.NoOpAnimationPlayer = core_1.__core_private__.NoOpAnimationPlayer;
exports.AnimationPlayer = core_1.__core_private__.AnimationPlayer;
exports.NoOpAnimationDriver = core_1.__core_private__.NoOpAnimationDriver;
exports.AnimationDriver = core_1.__core_private__.AnimationDriver;
exports.AnimationSequencePlayer = core_1.__core_private__.AnimationSequencePlayer;

@@ -64,0 +62,0 @@ exports.AnimationGroupPlayer = core_1.__core_private__.AnimationGroupPlayer;

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"isDefaultChangeDetectionStrategy":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"isDefaultChangeDetectionStrategy"},"ChangeDetectorStatus":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ChangeDetectorStatus"},"CHANGE_DETECTION_STRATEGY_VALUES":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"CHANGE_DETECTION_STRATEGY_VALUES"},"constructDependencies":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"constructDependencies"},"LifecycleHooks":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"LifecycleHooks"},"LIFECYCLE_HOOKS_VALUES":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"LIFECYCLE_HOOKS_VALUES"},"ReflectorReader":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ReflectorReader"},"ReflectorComponentResolver":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ReflectorComponentResolver"},"AppElement":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AppElement"},"CodegenComponentFactoryResolver":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"CodegenComponentFactoryResolver"},"AppView":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AppView"},"DebugAppView":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"DebugAppView"},"ViewType":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ViewType"},"MAX_INTERPOLATION_VALUES":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"MAX_INTERPOLATION_VALUES"},"checkBinding":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"checkBinding"},"flattenNestedViewRenderNodes":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"flattenNestedViewRenderNodes"},"interpolate":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"interpolate"},"ViewUtils":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ViewUtils"},"VIEW_ENCAPSULATION_VALUES":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"VIEW_ENCAPSULATION_VALUES"},"DebugContext":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"DebugContext"},"StaticNodeDebugInfo":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"StaticNodeDebugInfo"},"devModeEqual":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"devModeEqual"},"uninitialized":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"uninitialized"},"ValueUnwrapper":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ValueUnwrapper"},"TemplateRef_":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"TemplateRef_"},"RenderDebugInfo":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"RenderDebugInfo"},"SecurityContext":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"SecurityContext"},"SanitizationService":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"SanitizationService"},"createProvider":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"createProvider"},"isProviderLiteral":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"isProviderLiteral"},"EMPTY_ARRAY":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"EMPTY_ARRAY"},"EMPTY_MAP":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"EMPTY_MAP"},"pureProxy1":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy1"},"pureProxy2":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy2"},"pureProxy3":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy3"},"pureProxy4":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy4"},"pureProxy5":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy5"},"pureProxy6":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy6"},"pureProxy7":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy7"},"pureProxy8":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy8"},"pureProxy9":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy9"},"pureProxy10":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy10"},"castByValue":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"castByValue"},"Console":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"Console"},"reflector":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"reflector"},"NoOpAnimationPlayer":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"NoOpAnimationPlayer"},"AnimationPlayer":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationPlayer"},"NoOpAnimationDriver":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"NoOpAnimationDriver"},"AnimationDriver":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationDriver"},"AnimationSequencePlayer":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationSequencePlayer"},"AnimationGroupPlayer":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationGroupPlayer"},"AnimationKeyframe":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationKeyframe"},"AnimationStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationStyles"},"ANY_STATE":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ANY_STATE"},"DEFAULT_STATE":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"DEFAULT_STATE"},"EMPTY_STATE":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"EMPTY_STATE"},"FILL_STYLE_FLAG":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"FILL_STYLE_FLAG"},"prepareFinalAnimationStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"prepareFinalAnimationStyles"},"balanceAnimationKeyframes":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"balanceAnimationKeyframes"},"flattenStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"flattenStyles"},"clearStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"clearStyles"},"collectAndResolveStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"collectAndResolveStyles"},"renderStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"renderStyles"}}}
{"__symbolic":"module","version":1,"metadata":{"isDefaultChangeDetectionStrategy":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"isDefaultChangeDetectionStrategy"},"ChangeDetectorStatus":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ChangeDetectorStatus"},"CHANGE_DETECTION_STRATEGY_VALUES":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"CHANGE_DETECTION_STRATEGY_VALUES"},"constructDependencies":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"constructDependencies"},"LifecycleHooks":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"LifecycleHooks"},"LIFECYCLE_HOOKS_VALUES":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"LIFECYCLE_HOOKS_VALUES"},"ReflectorReader":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ReflectorReader"},"AppElement":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AppElement"},"CodegenComponentFactoryResolver":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"CodegenComponentFactoryResolver"},"AppView":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AppView"},"DebugAppView":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"DebugAppView"},"NgModuleInjector":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"NgModuleInjector"},"ViewType":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ViewType"},"MAX_INTERPOLATION_VALUES":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"MAX_INTERPOLATION_VALUES"},"checkBinding":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"checkBinding"},"flattenNestedViewRenderNodes":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"flattenNestedViewRenderNodes"},"interpolate":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"interpolate"},"ViewUtils":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ViewUtils"},"VIEW_ENCAPSULATION_VALUES":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"VIEW_ENCAPSULATION_VALUES"},"DebugContext":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"DebugContext"},"StaticNodeDebugInfo":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"StaticNodeDebugInfo"},"devModeEqual":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"devModeEqual"},"UNINITIALIZED":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"UNINITIALIZED"},"ValueUnwrapper":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ValueUnwrapper"},"TemplateRef_":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"TemplateRef_"},"RenderDebugInfo":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"RenderDebugInfo"},"createProvider":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"createProvider"},"isProviderLiteral":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"isProviderLiteral"},"EMPTY_ARRAY":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"EMPTY_ARRAY"},"EMPTY_MAP":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"EMPTY_MAP"},"pureProxy1":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy1"},"pureProxy2":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy2"},"pureProxy3":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy3"},"pureProxy4":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy4"},"pureProxy5":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy5"},"pureProxy6":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy6"},"pureProxy7":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy7"},"pureProxy8":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy8"},"pureProxy9":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy9"},"pureProxy10":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy10"},"castByValue":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"castByValue"},"Console":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"Console"},"reflector":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"reflector"},"Reflector":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"Reflector"},"ReflectionCapabilities":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ReflectionCapabilities"},"NoOpAnimationPlayer":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"NoOpAnimationPlayer"},"AnimationPlayer":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationPlayer"},"AnimationSequencePlayer":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationSequencePlayer"},"AnimationGroupPlayer":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationGroupPlayer"},"AnimationKeyframe":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationKeyframe"},"AnimationStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationStyles"},"ANY_STATE":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ANY_STATE"},"DEFAULT_STATE":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"DEFAULT_STATE"},"EMPTY_STATE":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"EMPTY_STATE"},"FILL_STYLE_FLAG":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"FILL_STYLE_FLAG"},"prepareFinalAnimationStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"prepareFinalAnimationStyles"},"balanceAnimationKeyframes":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"balanceAnimationKeyframes"},"flattenStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"flattenStyles"},"clearStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"clearStyles"},"collectAndResolveStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"collectAndResolveStyles"},"renderStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"renderStyles"}}}

@@ -19,3 +19,2 @@ /**

export declare var ReflectorReader: typeof t.ReflectorReader;
export declare var ReflectorComponentResolver: typeof t.ReflectorComponentResolver;
export declare type AppElement = t.AppElement;

@@ -27,2 +26,3 @@ export declare var AppElement: typeof t.AppElement;

export declare var DebugAppView: typeof t.DebugAppView;
export declare var NgModuleInjector: typeof t.NgModuleInjector;
export declare type ViewType = t.ViewType;

@@ -39,3 +39,3 @@ export declare var ViewType: typeof t.ViewType;

export declare var devModeEqual: typeof t.devModeEqual;
export declare var uninitialized: typeof t.uninitialized;
export declare var UNINITIALIZED: typeof t.UNINITIALIZED;
export declare var ValueUnwrapper: typeof t.ValueUnwrapper;

@@ -45,6 +45,2 @@ export declare var TemplateRef_: typeof t.TemplateRef_;

export declare var RenderDebugInfo: typeof t.RenderDebugInfo;
export declare var SecurityContext: typeof t.SecurityContext;
export declare type SecurityContext = t.SecurityContext;
export declare var SanitizationService: typeof t.SanitizationService;
export declare type SanitizationService = t.SanitizationService;
export declare var createProvider: typeof t.createProvider;

@@ -68,3 +64,6 @@ export declare var isProviderLiteral: typeof t.isProviderLiteral;

export declare var reflector: t.Reflector;
export declare var Reflector: typeof t.Reflector;
export declare type Reflector = t.Reflector;
export declare var ReflectionCapabilities: typeof t.ReflectionCapabilities;
export declare type ReflectionCapabilities = t.ReflectionCapabilities;
export declare type NoOpAnimationPlayer = t.NoOpAnimationPlayer;

@@ -74,6 +73,2 @@ export declare var NoOpAnimationPlayer: typeof t.NoOpAnimationPlayer;

export declare var AnimationPlayer: typeof t.AnimationPlayer;
export declare type NoOpAnimationDriver = t.NoOpAnimationDriver;
export declare var NoOpAnimationDriver: typeof t.NoOpAnimationDriver;
export declare type AnimationDriver = t.AnimationDriver;
export declare var AnimationDriver: typeof t.AnimationDriver;
export declare type AnimationSequencePlayer = t.AnimationSequencePlayer;

@@ -80,0 +75,0 @@ export declare var AnimationSequencePlayer: typeof t.AnimationSequencePlayer;

@@ -16,3 +16,2 @@ /**

export var ReflectorReader = r.ReflectorReader;
export var ReflectorComponentResolver = r.ReflectorComponentResolver;
export var AppElement = r.AppElement;

@@ -22,2 +21,3 @@ export var CodegenComponentFactoryResolver = r.CodegenComponentFactoryResolver;

export var DebugAppView = r.DebugAppView;
export var NgModuleInjector = r.NgModuleInjector;
export var ViewType = r.ViewType;

@@ -33,8 +33,6 @@ export var MAX_INTERPOLATION_VALUES = r.MAX_INTERPOLATION_VALUES;

export var devModeEqual = r.devModeEqual;
export var uninitialized = r.uninitialized;
export var UNINITIALIZED = r.UNINITIALIZED;
export var ValueUnwrapper = r.ValueUnwrapper;
export var TemplateRef_ = r.TemplateRef_;
export var RenderDebugInfo = r.RenderDebugInfo;
export var SecurityContext = r.SecurityContext;
export var SanitizationService = r.SanitizationService;
export var createProvider = r.createProvider;

@@ -57,6 +55,6 @@ export var isProviderLiteral = r.isProviderLiteral;

export var reflector = r.reflector;
export var Reflector = r.Reflector;
export var ReflectionCapabilities = r.ReflectionCapabilities;
export var NoOpAnimationPlayer = r.NoOpAnimationPlayer;
export var AnimationPlayer = r.AnimationPlayer;
export var NoOpAnimationDriver = r.NoOpAnimationDriver;
export var AnimationDriver = r.AnimationDriver;
export var AnimationSequencePlayer = r.AnimationSequencePlayer;

@@ -63,0 +61,0 @@ export var AnimationGroupPlayer = r.AnimationGroupPlayer;

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"isDefaultChangeDetectionStrategy":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"isDefaultChangeDetectionStrategy"},"ChangeDetectorStatus":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ChangeDetectorStatus"},"CHANGE_DETECTION_STRATEGY_VALUES":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"CHANGE_DETECTION_STRATEGY_VALUES"},"constructDependencies":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"constructDependencies"},"LifecycleHooks":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"LifecycleHooks"},"LIFECYCLE_HOOKS_VALUES":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"LIFECYCLE_HOOKS_VALUES"},"ReflectorReader":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ReflectorReader"},"ReflectorComponentResolver":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ReflectorComponentResolver"},"AppElement":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AppElement"},"CodegenComponentFactoryResolver":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"CodegenComponentFactoryResolver"},"AppView":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AppView"},"DebugAppView":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"DebugAppView"},"ViewType":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ViewType"},"MAX_INTERPOLATION_VALUES":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"MAX_INTERPOLATION_VALUES"},"checkBinding":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"checkBinding"},"flattenNestedViewRenderNodes":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"flattenNestedViewRenderNodes"},"interpolate":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"interpolate"},"ViewUtils":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ViewUtils"},"VIEW_ENCAPSULATION_VALUES":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"VIEW_ENCAPSULATION_VALUES"},"DebugContext":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"DebugContext"},"StaticNodeDebugInfo":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"StaticNodeDebugInfo"},"devModeEqual":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"devModeEqual"},"uninitialized":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"uninitialized"},"ValueUnwrapper":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ValueUnwrapper"},"TemplateRef_":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"TemplateRef_"},"RenderDebugInfo":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"RenderDebugInfo"},"SecurityContext":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"SecurityContext"},"SanitizationService":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"SanitizationService"},"createProvider":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"createProvider"},"isProviderLiteral":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"isProviderLiteral"},"EMPTY_ARRAY":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"EMPTY_ARRAY"},"EMPTY_MAP":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"EMPTY_MAP"},"pureProxy1":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy1"},"pureProxy2":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy2"},"pureProxy3":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy3"},"pureProxy4":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy4"},"pureProxy5":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy5"},"pureProxy6":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy6"},"pureProxy7":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy7"},"pureProxy8":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy8"},"pureProxy9":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy9"},"pureProxy10":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy10"},"castByValue":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"castByValue"},"Console":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"Console"},"reflector":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"reflector"},"NoOpAnimationPlayer":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"NoOpAnimationPlayer"},"AnimationPlayer":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationPlayer"},"NoOpAnimationDriver":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"NoOpAnimationDriver"},"AnimationDriver":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationDriver"},"AnimationSequencePlayer":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationSequencePlayer"},"AnimationGroupPlayer":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationGroupPlayer"},"AnimationKeyframe":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationKeyframe"},"AnimationStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationStyles"},"ANY_STATE":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ANY_STATE"},"DEFAULT_STATE":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"DEFAULT_STATE"},"EMPTY_STATE":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"EMPTY_STATE"},"FILL_STYLE_FLAG":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"FILL_STYLE_FLAG"},"prepareFinalAnimationStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"prepareFinalAnimationStyles"},"balanceAnimationKeyframes":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"balanceAnimationKeyframes"},"flattenStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"flattenStyles"},"clearStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"clearStyles"},"collectAndResolveStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"collectAndResolveStyles"},"renderStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"renderStyles"}}}
{"__symbolic":"module","version":1,"metadata":{"isDefaultChangeDetectionStrategy":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"isDefaultChangeDetectionStrategy"},"ChangeDetectorStatus":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ChangeDetectorStatus"},"CHANGE_DETECTION_STRATEGY_VALUES":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"CHANGE_DETECTION_STRATEGY_VALUES"},"constructDependencies":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"constructDependencies"},"LifecycleHooks":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"LifecycleHooks"},"LIFECYCLE_HOOKS_VALUES":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"LIFECYCLE_HOOKS_VALUES"},"ReflectorReader":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ReflectorReader"},"AppElement":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AppElement"},"CodegenComponentFactoryResolver":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"CodegenComponentFactoryResolver"},"AppView":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AppView"},"DebugAppView":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"DebugAppView"},"NgModuleInjector":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"NgModuleInjector"},"ViewType":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ViewType"},"MAX_INTERPOLATION_VALUES":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"MAX_INTERPOLATION_VALUES"},"checkBinding":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"checkBinding"},"flattenNestedViewRenderNodes":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"flattenNestedViewRenderNodes"},"interpolate":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"interpolate"},"ViewUtils":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ViewUtils"},"VIEW_ENCAPSULATION_VALUES":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"VIEW_ENCAPSULATION_VALUES"},"DebugContext":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"DebugContext"},"StaticNodeDebugInfo":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"StaticNodeDebugInfo"},"devModeEqual":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"devModeEqual"},"UNINITIALIZED":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"UNINITIALIZED"},"ValueUnwrapper":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ValueUnwrapper"},"TemplateRef_":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"TemplateRef_"},"RenderDebugInfo":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"RenderDebugInfo"},"createProvider":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"createProvider"},"isProviderLiteral":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"isProviderLiteral"},"EMPTY_ARRAY":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"EMPTY_ARRAY"},"EMPTY_MAP":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"EMPTY_MAP"},"pureProxy1":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy1"},"pureProxy2":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy2"},"pureProxy3":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy3"},"pureProxy4":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy4"},"pureProxy5":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy5"},"pureProxy6":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy6"},"pureProxy7":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy7"},"pureProxy8":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy8"},"pureProxy9":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy9"},"pureProxy10":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"pureProxy10"},"castByValue":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"castByValue"},"Console":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"Console"},"reflector":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"reflector"},"Reflector":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"Reflector"},"ReflectionCapabilities":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ReflectionCapabilities"},"NoOpAnimationPlayer":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"NoOpAnimationPlayer"},"AnimationPlayer":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationPlayer"},"AnimationSequencePlayer":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationSequencePlayer"},"AnimationGroupPlayer":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationGroupPlayer"},"AnimationKeyframe":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationKeyframe"},"AnimationStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"AnimationStyles"},"ANY_STATE":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"ANY_STATE"},"DEFAULT_STATE":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"DEFAULT_STATE"},"EMPTY_STATE":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"EMPTY_STATE"},"FILL_STYLE_FLAG":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"FILL_STYLE_FLAG"},"prepareFinalAnimationStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"prepareFinalAnimationStyles"},"balanceAnimationKeyframes":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"balanceAnimationKeyframes"},"flattenStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"flattenStyles"},"clearStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"clearStyles"},"collectAndResolveStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"collectAndResolveStyles"},"renderStyles":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"___core_private__"},"member":"renderStyles"}}}

@@ -8,2 +8,13 @@ /**

*/
export * from './compiler';
/**
* @module
* @description
* Starting point to import all compiler APIs.
*/
import * as i18n from './src/i18n/index';
export { COMPILER_PROVIDERS, CompileDiDependencyMetadata, CompileDirectiveMetadata, CompileFactoryMetadata, CompileIdentifierMetadata, CompileMetadataWithIdentifier, CompilePipeMetadata, CompileProviderMetadata, CompileQueryMetadata, CompileTemplateMetadata, CompileTokenMetadata, CompileTypeMetadata, CompilerConfig, DEFAULT_PACKAGE_URL_PROVIDER, DirectiveResolver, NgModuleResolver, OfflineCompiler, PipeResolver, RenderTypes, RuntimeCompiler, SourceModule, TEMPLATE_TRANSFORMS, UrlResolver, XHR, analyzeAppProvidersForDeprecatedConfiguration, createOfflineCompileUrlResolver, platformCoreDynamic } from './src/compiler';
export { InterpolationConfig } from './src/ml_parser/interpolation_config';
export { ElementSchemaRegistry } from './src/schema/element_schema_registry';
export { i18n };
export * from './src/template_parser/template_ast';
export * from './private_export';

@@ -8,3 +8,9 @@ /**

*/
export * from './compiler';
import * as i18n from './src/i18n/index';
export { COMPILER_PROVIDERS, CompileDiDependencyMetadata, CompileDirectiveMetadata, CompileFactoryMetadata, CompileIdentifierMetadata, CompileMetadataWithIdentifier, CompilePipeMetadata, CompileProviderMetadata, CompileQueryMetadata, CompileTemplateMetadata, CompileTokenMetadata, CompileTypeMetadata, CompilerConfig, DEFAULT_PACKAGE_URL_PROVIDER, DirectiveResolver, NgModuleResolver, OfflineCompiler, PipeResolver, RenderTypes, RuntimeCompiler, SourceModule, TEMPLATE_TRANSFORMS, UrlResolver, XHR, analyzeAppProvidersForDeprecatedConfiguration, createOfflineCompileUrlResolver, platformCoreDynamic } from './src/compiler';
export { InterpolationConfig } from './src/ml_parser/interpolation_config';
export { ElementSchemaRegistry } from './src/schema/element_schema_registry';
export { i18n };
export * from './src/template_parser/template_ast';
export * from './private_export';
//# sourceMappingURL=index.js.map

@@ -11,8 +11,6 @@ /**

import * as parser from './src/expression_parser/parser';
import * as html_parser from './src/html_parser';
import * as i18n_html_parser from './src/i18n/i18n_html_parser';
import * as i18n_message from './src/i18n/message';
import * as i18n_extractor from './src/i18n/message_extractor';
import * as xmb_serializer from './src/i18n/xmb_serializer';
import * as metadata_resolver from './src/metadata_resolver';
import * as html_parser from './src/ml_parser/html_parser';
import * as interpolation_config from './src/ml_parser/interpolation_config';
import * as ng_module_compiler from './src/ng_module_compiler';
import * as path_util from './src/output/path_util';

@@ -24,3 +22,3 @@ import * as ts_emitter from './src/output/ts_emitter';

import * as style_compiler from './src/style_compiler';
import * as template_parser from './src/template_parser';
import * as template_parser from './src/template_parser/template_parser';
import * as view_compiler from './src/view_compiler/view_compiler';

@@ -40,13 +38,4 @@ export declare namespace __compiler_private__ {

var HtmlParser: typeof html_parser.HtmlParser;
type I18nHtmlParser = i18n_html_parser.I18nHtmlParser;
var I18nHtmlParser: typeof i18n_html_parser.I18nHtmlParser;
type ExtractionResult = i18n_extractor.ExtractionResult;
var ExtractionResult: typeof i18n_extractor.ExtractionResult;
type Message = i18n_message.Message;
var Message: typeof i18n_message.Message;
type MessageExtractor = i18n_extractor.MessageExtractor;
var MessageExtractor: typeof i18n_extractor.MessageExtractor;
var removeDuplicates: typeof i18n_extractor.removeDuplicates;
var serializeXmb: typeof xmb_serializer.serializeXmb;
var deserializeXmb: typeof xmb_serializer.deserializeXmb;
type InterpolationConfig = interpolation_config.InterpolationConfig;
var InterpolationConfig: typeof interpolation_config.InterpolationConfig;
type DirectiveNormalizer = directive_normalizer.DirectiveNormalizer;

@@ -77,4 +66,6 @@ var DirectiveNormalizer: typeof directive_normalizer.DirectiveNormalizer;

var ViewCompiler: typeof view_compiler.ViewCompiler;
type NgModuleCompiler = ng_module_compiler.NgModuleCompiler;
var NgModuleCompiler: typeof ng_module_compiler.NgModuleCompiler;
type TypeScriptEmitter = ts_emitter.TypeScriptEmitter;
var TypeScriptEmitter: typeof ts_emitter.TypeScriptEmitter;
}

@@ -11,8 +11,6 @@ /**

import * as parser from './src/expression_parser/parser';
import * as html_parser from './src/html_parser';
import * as i18n_html_parser from './src/i18n/i18n_html_parser';
import * as i18n_message from './src/i18n/message';
import * as i18n_extractor from './src/i18n/message_extractor';
import * as xmb_serializer from './src/i18n/xmb_serializer';
import * as metadata_resolver from './src/metadata_resolver';
import * as html_parser from './src/ml_parser/html_parser';
import * as interpolation_config from './src/ml_parser/interpolation_config';
import * as ng_module_compiler from './src/ng_module_compiler';
import * as path_util from './src/output/path_util';

@@ -24,3 +22,3 @@ import * as ts_emitter from './src/output/ts_emitter';

import * as style_compiler from './src/style_compiler';
import * as template_parser from './src/template_parser';
import * as template_parser from './src/template_parser/template_parser';
import * as view_compiler from './src/view_compiler/view_compiler';

@@ -35,9 +33,3 @@ export var __compiler_private__;

__compiler_private__.HtmlParser = html_parser.HtmlParser;
__compiler_private__.I18nHtmlParser = i18n_html_parser.I18nHtmlParser;
__compiler_private__.ExtractionResult = i18n_extractor.ExtractionResult;
__compiler_private__.Message = i18n_message.Message;
__compiler_private__.MessageExtractor = i18n_extractor.MessageExtractor;
__compiler_private__.removeDuplicates = i18n_extractor.removeDuplicates;
__compiler_private__.serializeXmb = xmb_serializer.serializeXmb;
__compiler_private__.deserializeXmb = xmb_serializer.deserializeXmb;
__compiler_private__.InterpolationConfig = interpolation_config.InterpolationConfig;
__compiler_private__.DirectiveNormalizer = directive_normalizer.DirectiveNormalizer;

@@ -55,4 +47,5 @@ __compiler_private__.Lexer = lexer.Lexer;

__compiler_private__.ViewCompiler = view_compiler.ViewCompiler;
__compiler_private__.NgModuleCompiler = ng_module_compiler.NgModuleCompiler;
__compiler_private__.TypeScriptEmitter = ts_emitter.TypeScriptEmitter;
})(__compiler_private__ || (__compiler_private__ = {}));
//# sourceMappingURL=private_export.js.map
import { CompileDirectiveMetadata } from '../compile_metadata';
import * as o from '../output/output_ast';
import * as t from '../template_parser/template_ast';
export declare class CompiledAnimation {

@@ -12,3 +13,3 @@ name: string;

export declare class AnimationCompiler {
compileComponent(component: CompileDirectiveMetadata): CompiledAnimation[];
compileComponent(component: CompileDirectiveMetadata, template: t.TemplateAst[]): CompiledAnimation[];
}

@@ -14,4 +14,5 @@ /**

import * as o from '../output/output_ast';
import * as t from '../template_parser/template_ast';
import { AnimationStepAst } from './animation_ast';
import { parseAnimationEntry } from './animation_parser';
import { AnimationParseError, parseAnimationEntry } from './animation_parser';
export class CompiledAnimation {

@@ -27,19 +28,34 @@ constructor(name, statesMapStatement, statesVariableName, fnStatement, fnVariable) {

export class AnimationCompiler {
compileComponent(component) {
compileComponent(component, template) {
var compiledAnimations = [];
var index = 0;
var groupedErrors = [];
var triggerLookup = {};
var componentName = component.type.name;
component.template.animations.forEach(entry => {
var result = parseAnimationEntry(entry);
var triggerName = entry.name;
if (result.errors.length > 0) {
var errorMessage = '';
result.errors.forEach((error) => { errorMessage += '\n- ' + error.msg; });
// todo (matsko): include the component name when throwing
throw new BaseException(`Unable to parse the animation sequence for "${entry.name}" due to the following errors: ` +
errorMessage);
var errorMessage = `Unable to parse the animation sequence for "${triggerName}" due to the following errors:`;
result.errors.forEach((error) => { errorMessage += '\n-- ' + error.msg; });
groupedErrors.push(errorMessage);
}
var factoryName = `${component.type.name}_${entry.name}_${index}`;
index++;
var visitor = new _AnimationBuilder(entry.name, factoryName);
compiledAnimations.push(visitor.build(result.ast));
if (triggerLookup[triggerName]) {
groupedErrors.push(`The animation trigger "${triggerName}" has already been registered on "${componentName}"`);
}
else {
var factoryName = `${componentName}_${entry.name}`;
var visitor = new _AnimationBuilder(triggerName, factoryName);
var compileResult = visitor.build(result.ast);
compiledAnimations.push(compileResult);
triggerLookup[entry.name] = compileResult;
}
});
_validateAnimationProperties(compiledAnimations, template).forEach(entry => {
groupedErrors.push(entry.msg);
});
if (groupedErrors.length > 0) {
var errorMessageStr = `Animation parsing for ${component.type.name} has failed due to the following errors:`;
groupedErrors.forEach(error => errorMessageStr += `\n- ${error}`);
throw new BaseException(errorMessageStr);
}
return compiledAnimations;

@@ -200,3 +216,3 @@ }

statements.push(_ANIMATION_FACTORY_VIEW_VAR
.callMethod('registerAndStartAnimation', [
.callMethod('queueAnimation', [
_ANIMATION_FACTORY_ELEMENT_VAR, o.literal(this.animationName),

@@ -276,2 +292,36 @@ _ANIMATION_PLAYER_VAR

}
function _validateAnimationProperties(compiledAnimations, template) {
var visitor = new _AnimationTemplatePropertyVisitor(compiledAnimations);
t.templateVisitAll(visitor, template);
return visitor.errors;
}
class _AnimationTemplatePropertyVisitor {
constructor(animations) {
this._animationRegistry = {};
this.errors = [];
animations.forEach(entry => { this._animationRegistry[entry.name] = true; });
}
visitElement(ast, ctx) {
ast.inputs.forEach(input => {
if (input.type == t.PropertyBindingType.Animation) {
var animationName = input.name;
if (!isPresent(this._animationRegistry[animationName])) {
this.errors.push(new AnimationParseError(`couldn't find an animation entry for ${animationName}`));
}
}
});
t.templateVisitAll(this, ast.children);
}
visitBoundText(ast, ctx) { }
visitText(ast, ctx) { }
visitEmbeddedTemplate(ast, ctx) { }
visitNgContent(ast, ctx) { }
visitAttr(ast, ctx) { }
visitDirective(ast, ctx) { }
visitEvent(ast, ctx) { }
visitReference(ast, ctx) { }
visitVariable(ast, ctx) { }
visitDirectiveProperty(ast, ctx) { }
visitElementProperty(ast, ctx) { }
}
//# sourceMappingURL=animation_compiler.js.map

@@ -11,3 +11,3 @@ /**

import { ListWrapper, StringMapWrapper } from '../facade/collection';
import { NumberWrapper, RegExpWrapper, isArray, isBlank, isPresent, isString, isStringMap } from '../facade/lang';
import { NumberWrapper, isArray, isBlank, isPresent, isString, isStringMap } from '../facade/lang';
import { Math } from '../facade/math';

@@ -272,3 +272,3 @@ import { ParseError } from '../parse_util';

var firstKeyframeStyles = firstKeyframe[1];
var limit = rawKeyframes.length - 1;
limit = rawKeyframes.length - 1;
var lastKeyframe = rawKeyframes[limit];

@@ -399,3 +399,3 @@ if (lastKeyframe[0] != _TERMINAL_KEYFRAME) {

function _parseTimeExpression(exp, errors) {
var regex = /^([\.\d]+)(m?s)(?:\s+([\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?/gi;
var regex = /^([\.\d]+)(m?s)(?:\s+([\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?/i;
var duration;

@@ -405,4 +405,4 @@ var delay = 0;

if (isString(exp)) {
var matches = RegExpWrapper.firstMatch(regex, exp);
if (!isPresent(matches)) {
const matches = exp.match(regex);
if (matches === null) {
errors.push(new AnimationParseError(`The provided timing value "${exp}" is invalid.`));

@@ -409,0 +409,0 @@ return new _AnimationTimings(0, 0, null);

@@ -9,4 +9,3 @@ /**

import { isDevMode } from '@angular/core';
import { BaseException } from '../src/facade/exceptions';
import { isArray, isBlank, isString } from '../src/facade/lang';
import { isArray, isBlank, isPresent, isString } from '../src/facade/lang';
export function assertArrayOfStrings(identifier, value) {

@@ -17,7 +16,7 @@ if (!isDevMode() || isBlank(value)) {

if (!isArray(value)) {
throw new BaseException(`Expected '${identifier}' to be an array of strings.`);
throw new Error(`Expected '${identifier}' to be an array of strings.`);
}
for (var i = 0; i < value.length; i += 1) {
if (!isString(value[i])) {
throw new BaseException(`Expected '${identifier}' to be an array of strings.`);
throw new Error(`Expected '${identifier}' to be an array of strings.`);
}

@@ -31,6 +30,7 @@ }

/&(#|[a-z])/i,
/^\/\//,
];
export function assertInterpolationSymbols(identifier, value) {
if (isDevMode() && !isBlank(value) && (!isArray(value) || value.length != 2)) {
throw new BaseException(`Expected '${identifier}' to be an array, [start, end].`);
if (isPresent(value) && !(isArray(value) && value.length == 2)) {
throw new Error(`Expected '${identifier}' to be an array, [start, end].`);
}

@@ -43,3 +43,3 @@ else if (isDevMode() && !isBlank(value)) {

if (regexp.test(start) || regexp.test(end)) {
throw new BaseException(`['${start}', '${end}'] contains unusable interpolation symbol.`);
throw new Error(`['${start}', '${end}'] contains unusable interpolation symbol.`);
}

@@ -46,0 +46,0 @@ });

@@ -8,31 +8,15 @@ /**

*/
import { ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';
import { ChangeDetectionStrategy, SchemaMetadata, ViewEncapsulation } from '@angular/core';
import { LifecycleHooks } from '../core_private';
import { Type } from '../src/facade/lang';
import { Type } from './facade/lang';
export declare abstract class CompileMetadataWithIdentifier {
abstract toJson(): {
[key: string]: any;
};
readonly identifier: CompileIdentifierMetadata;
readonly runtimeCacheKey: any;
readonly assetCacheKey: any;
equalsTo(id2: CompileMetadataWithIdentifier): boolean;
}
export declare abstract class CompileMetadataWithType extends CompileMetadataWithIdentifier {
abstract toJson(): {
[key: string]: any;
};
readonly type: CompileTypeMetadata;
readonly identifier: CompileIdentifierMetadata;
}
export declare function metadataFromJson(data: {
[key: string]: any;
}): any;
export declare class CompileAnimationEntryMetadata {
name: string;
definitions: CompileAnimationStateMetadata[];
static fromJson(data: {
[key: string]: any;
}): CompileAnimationEntryMetadata;
constructor(name?: string, definitions?: CompileAnimationStateMetadata[]);
toJson(): {
[key: string]: any;
};
}

@@ -44,9 +28,3 @@ export declare abstract class CompileAnimationStateMetadata {

styles: CompileAnimationStyleMetadata;
static fromJson(data: {
[key: string]: any;
}): CompileAnimationStateDeclarationMetadata;
constructor(stateNameExpr: string, styles: CompileAnimationStyleMetadata);
toJson(): {
[key: string]: any;
};
}

@@ -56,24 +34,9 @@ export declare class CompileAnimationStateTransitionMetadata extends CompileAnimationStateMetadata {

steps: CompileAnimationMetadata;
static fromJson(data: {
[key: string]: any;
}): CompileAnimationStateTransitionMetadata;
constructor(stateChangeExpr: string, steps: CompileAnimationMetadata);
toJson(): {
[key: string]: any;
};
}
export declare abstract class CompileAnimationMetadata {
abstract toJson(): {
[key: string]: any;
};
}
export declare class CompileAnimationKeyframesSequenceMetadata extends CompileAnimationMetadata {
steps: CompileAnimationStyleMetadata[];
static fromJson(data: {
[key: string]: any;
}): CompileAnimationKeyframesSequenceMetadata;
constructor(steps?: CompileAnimationStyleMetadata[]);
toJson(): {
[key: string]: any;
};
}

@@ -85,11 +48,5 @@ export declare class CompileAnimationStyleMetadata extends CompileAnimationMetadata {

}>;
static fromJson(data: {
[key: string]: any;
}): CompileAnimationStyleMetadata;
constructor(offset: number, styles?: Array<string | {
[key: string]: string | number;
}>);
toJson(): {
[key: string]: any;
};
}

@@ -99,9 +56,3 @@ export declare class CompileAnimationAnimateMetadata extends CompileAnimationMetadata {

styles: CompileAnimationStyleMetadata | CompileAnimationKeyframesSequenceMetadata;
static fromJson(data: {
[key: string]: any;
}): CompileAnimationAnimateMetadata;
constructor(timings?: string | number, styles?: CompileAnimationStyleMetadata | CompileAnimationKeyframesSequenceMetadata);
toJson(): {
[key: string]: any;
};
}

@@ -113,18 +64,6 @@ export declare abstract class CompileAnimationWithStepsMetadata extends CompileAnimationMetadata {

export declare class CompileAnimationSequenceMetadata extends CompileAnimationWithStepsMetadata {
static fromJson(data: {
[key: string]: any;
}): CompileAnimationSequenceMetadata;
constructor(steps?: CompileAnimationMetadata[]);
toJson(): {
[key: string]: any;
};
}
export declare class CompileAnimationGroupMetadata extends CompileAnimationWithStepsMetadata {
static fromJson(data: {
[key: string]: any;
}): CompileAnimationGroupMetadata;
constructor(steps?: CompileAnimationMetadata[]);
toJson(): {
[key: string]: any;
};
}

@@ -137,2 +76,3 @@ export declare class CompileIdentifierMetadata implements CompileMetadataWithIdentifier {

value: any;
private _assetCacheKey;
constructor({runtime, name, moduleUrl, prefix, value}?: {

@@ -145,9 +85,6 @@ runtime?: any;

});
static fromJson(data: {
[key: string]: any;
}): CompileIdentifierMetadata;
toJson(): {
[key: string]: any;
};
readonly identifier: CompileIdentifierMetadata;
readonly runtimeCacheKey: any;
readonly assetCacheKey: any;
equalsTo(id2: CompileIdentifierMetadata): boolean;
}

@@ -177,8 +114,2 @@ export declare class CompileDiDependencyMetadata {

});
static fromJson(data: {
[key: string]: any;
}): CompileDiDependencyMetadata;
toJson(): {
[key: string]: any;
};
}

@@ -202,15 +133,4 @@ export declare class CompileProviderMetadata {

});
static fromJson(data: {
[key: string]: any;
}): CompileProviderMetadata;
toJson(): {
[key: string]: any;
};
}
export declare class CompileFactoryMetadata implements CompileIdentifierMetadata, CompileMetadataWithIdentifier {
runtime: Function;
name: string;
prefix: string;
moduleUrl: string;
value: any;
export declare class CompileFactoryMetadata extends CompileIdentifierMetadata {
diDeps: CompileDiDependencyMetadata[];

@@ -225,9 +145,2 @@ constructor({runtime, name, moduleUrl, prefix, diDeps, value}: {

});
readonly identifier: CompileIdentifierMetadata;
static fromJson(data: {
[key: string]: any;
}): CompileFactoryMetadata;
toJson(): {
[key: string]: any;
};
}

@@ -238,3 +151,2 @@ export declare class CompileTokenMetadata implements CompileMetadataWithIdentifier {

identifierIsInstance: boolean;
private _assetCacheKey;
constructor({value, identifier, identifierIsInstance}: {

@@ -245,8 +157,2 @@ value?: any;

});
static fromJson(data: {
[key: string]: any;
}): CompileTokenMetadata;
toJson(): {
[key: string]: any;
};
readonly runtimeCacheKey: any;

@@ -257,7 +163,17 @@ readonly assetCacheKey: any;

}
export declare class CompileTokenMap<VALUE> {
/**
* Note: We only need this in places where we need to support identifiers that
* don't have a `runtime` value given by the `StaticReflector`. E.g. see the `identifiers`
* file where we have some identifiers hard coded by name/module path.
*
* TODO(tbosch): Eventually, all of these places should go through the static reflector
* as well, providing them with a valid `StaticSymbol` that is again a singleton.
*/
export declare class CompileIdentifierMap<KEY extends CompileMetadataWithIdentifier, VALUE> {
private _valueMap;
private _values;
add(token: CompileTokenMetadata, value: VALUE): void;
get(token: CompileTokenMetadata): VALUE;
private _tokens;
add(token: KEY, value: VALUE): void;
get(token: KEY): VALUE;
keys(): KEY[];
values(): VALUE[];

@@ -269,11 +185,7 @@ readonly size: number;

*/
export declare class CompileTypeMetadata implements CompileIdentifierMetadata, CompileMetadataWithType {
runtime: Type;
name: string;
prefix: string;
moduleUrl: string;
export declare class CompileTypeMetadata extends CompileIdentifierMetadata {
isHost: boolean;
value: any;
diDeps: CompileDiDependencyMetadata[];
constructor({runtime, name, moduleUrl, prefix, isHost, value, diDeps}?: {
lifecycleHooks: LifecycleHooks[];
constructor({runtime, name, moduleUrl, prefix, isHost, value, diDeps, lifecycleHooks}?: {
runtime?: Type;

@@ -286,11 +198,4 @@ name?: string;

diDeps?: CompileDiDependencyMetadata[];
lifecycleHooks?: LifecycleHooks[];
});
static fromJson(data: {
[key: string]: any;
}): CompileTypeMetadata;
readonly identifier: CompileIdentifierMetadata;
readonly type: CompileTypeMetadata;
toJson(): {
[key: string]: any;
};
}

@@ -310,8 +215,2 @@ export declare class CompileQueryMetadata {

});
static fromJson(data: {
[key: string]: any;
}): CompileQueryMetadata;
toJson(): {
[key: string]: any;
};
}

@@ -330,8 +229,2 @@ /**

});
static fromJson(data: {
[key: string]: any;
}): CompileStylesheetMetadata;
toJson(): {
[key: string]: any;
};
}

@@ -362,8 +255,2 @@ /**

});
static fromJson(data: {
[key: string]: any;
}): CompileTemplateMetadata;
toJson(): {
[key: string]: any;
};
}

@@ -373,4 +260,4 @@ /**

*/
export declare class CompileDirectiveMetadata implements CompileMetadataWithType {
static create({type, isComponent, selector, exportAs, changeDetection, inputs, outputs, host, lifecycleHooks, providers, viewProviders, queries, viewQueries, precompile, template}?: {
export declare class CompileDirectiveMetadata implements CompileMetadataWithIdentifier {
static create({type, isComponent, selector, exportAs, changeDetection, inputs, outputs, host, providers, viewProviders, queries, viewQueries, entryComponents, viewDirectives, viewPipes, template}?: {
type?: CompileTypeMetadata;

@@ -386,3 +273,2 @@ isComponent?: boolean;

};
lifecycleHooks?: LifecycleHooks[];
providers?: Array<CompileProviderMetadata | CompileTypeMetadata | CompileIdentifierMetadata | any[]>;

@@ -392,3 +278,5 @@ viewProviders?: Array<CompileProviderMetadata | CompileTypeMetadata | CompileIdentifierMetadata | any[]>;

viewQueries?: CompileQueryMetadata[];
precompile?: CompileTypeMetadata[];
entryComponents?: CompileTypeMetadata[];
viewDirectives?: CompileTypeMetadata[];
viewPipes?: CompileTypeMetadata[];
template?: CompileTemplateMetadata;

@@ -416,3 +304,2 @@ }): CompileDirectiveMetadata;

};
lifecycleHooks: LifecycleHooks[];
providers: CompileProviderMetadata[];

@@ -422,5 +309,7 @@ viewProviders: CompileProviderMetadata[];

viewQueries: CompileQueryMetadata[];
precompile: CompileTypeMetadata[];
entryComponents: CompileTypeMetadata[];
viewDirectives: CompileTypeMetadata[];
viewPipes: CompileTypeMetadata[];
template: CompileTemplateMetadata;
constructor({type, isComponent, selector, exportAs, changeDetection, inputs, outputs, hostListeners, hostProperties, hostAttributes, lifecycleHooks, providers, viewProviders, queries, viewQueries, precompile, template}?: {
constructor({type, isComponent, selector, exportAs, changeDetection, inputs, outputs, hostListeners, hostProperties, hostAttributes, providers, viewProviders, queries, viewQueries, entryComponents, viewDirectives, viewPipes, template}?: {
type?: CompileTypeMetadata;

@@ -446,3 +335,2 @@ isComponent?: boolean;

};
lifecycleHooks?: LifecycleHooks[];
providers?: Array<CompileProviderMetadata | CompileTypeMetadata | CompileIdentifierMetadata | any[]>;

@@ -452,12 +340,11 @@ viewProviders?: Array<CompileProviderMetadata | CompileTypeMetadata | CompileIdentifierMetadata | any[]>;

viewQueries?: CompileQueryMetadata[];
precompile?: CompileTypeMetadata[];
entryComponents?: CompileTypeMetadata[];
viewDirectives?: CompileTypeMetadata[];
viewPipes?: CompileTypeMetadata[];
template?: CompileTemplateMetadata;
});
readonly identifier: CompileIdentifierMetadata;
static fromJson(data: {
[key: string]: any;
}): CompileDirectiveMetadata;
toJson(): {
[key: string]: any;
};
readonly runtimeCacheKey: any;
readonly assetCacheKey: any;
equalsTo(other: CompileMetadataWithIdentifier): boolean;
}

@@ -467,21 +354,67 @@ /**

*/
export declare function createHostComponentMeta(componentType: CompileTypeMetadata, componentSelector: string): CompileDirectiveMetadata;
export declare class CompilePipeMetadata implements CompileMetadataWithType {
export declare function createHostComponentMeta(compMeta: CompileDirectiveMetadata): CompileDirectiveMetadata;
export declare class CompilePipeMetadata implements CompileMetadataWithIdentifier {
type: CompileTypeMetadata;
name: string;
pure: boolean;
lifecycleHooks: LifecycleHooks[];
constructor({type, name, pure, lifecycleHooks}?: {
constructor({type, name, pure}?: {
type?: CompileTypeMetadata;
name?: string;
pure?: boolean;
lifecycleHooks?: LifecycleHooks[];
});
readonly identifier: CompileIdentifierMetadata;
static fromJson(data: {
[key: string]: any;
}): CompilePipeMetadata;
toJson(): {
[key: string]: any;
};
readonly runtimeCacheKey: any;
readonly assetCacheKey: any;
equalsTo(other: CompileMetadataWithIdentifier): boolean;
}
/**
* Metadata regarding compilation of a directive.
*/
export declare class CompileNgModuleMetadata implements CompileMetadataWithIdentifier {
type: CompileTypeMetadata;
declaredDirectives: CompileDirectiveMetadata[];
exportedDirectives: CompileDirectiveMetadata[];
declaredPipes: CompilePipeMetadata[];
exportedPipes: CompilePipeMetadata[];
entryComponents: CompileTypeMetadata[];
bootstrapComponents: CompileTypeMetadata[];
providers: CompileProviderMetadata[];
importedModules: CompileNgModuleMetadata[];
exportedModules: CompileNgModuleMetadata[];
schemas: SchemaMetadata[];
transitiveModule: TransitiveCompileNgModuleMetadata;
constructor({type, providers, declaredDirectives, exportedDirectives, declaredPipes, exportedPipes, entryComponents, bootstrapComponents, importedModules, exportedModules, schemas, transitiveModule}?: {
type?: CompileTypeMetadata;
providers?: Array<CompileProviderMetadata | CompileTypeMetadata | CompileIdentifierMetadata | any[]>;
declaredDirectives?: CompileDirectiveMetadata[];
exportedDirectives?: CompileDirectiveMetadata[];
declaredPipes?: CompilePipeMetadata[];
exportedPipes?: CompilePipeMetadata[];
entryComponents?: CompileTypeMetadata[];
bootstrapComponents?: CompileTypeMetadata[];
importedModules?: CompileNgModuleMetadata[];
exportedModules?: CompileNgModuleMetadata[];
transitiveModule?: TransitiveCompileNgModuleMetadata;
schemas?: SchemaMetadata[];
});
readonly identifier: CompileIdentifierMetadata;
readonly runtimeCacheKey: any;
readonly assetCacheKey: any;
equalsTo(other: CompileMetadataWithIdentifier): boolean;
}
export declare class TransitiveCompileNgModuleMetadata {
modules: CompileNgModuleMetadata[];
providers: CompileProviderMetadata[];
entryComponents: CompileTypeMetadata[];
directives: CompileDirectiveMetadata[];
pipes: CompilePipeMetadata[];
directivesSet: Set<Type>;
pipesSet: Set<Type>;
constructor(modules: CompileNgModuleMetadata[], providers: CompileProviderMetadata[], entryComponents: CompileTypeMetadata[], directives: CompileDirectiveMetadata[], pipes: CompilePipeMetadata[]);
}
export declare function removeIdentifierDuplicates<T extends CompileMetadataWithIdentifier>(items: T[]): T[];
export declare function isStaticSymbol(value: any): value is StaticSymbol;
export interface StaticSymbol {
name: string;
filePath: string;
}

@@ -9,21 +9,21 @@ /**

import { ChangeDetectionStrategy } from '@angular/core';
import { CHANGE_DETECTION_STRATEGY_VALUES, LIFECYCLE_HOOKS_VALUES, VIEW_ENCAPSULATION_VALUES, reflector } from '../core_private';
import { ListWrapper, StringMapWrapper } from '../src/facade/collection';
import { BaseException, unimplemented } from '../src/facade/exceptions';
import { NumberWrapper, RegExpWrapper, isArray, isBlank, isBoolean, isNumber, isPresent, isString, normalizeBlank, normalizeBool, serializeEnum } from '../src/facade/lang';
import { reflector } from '../core_private';
import { ListWrapper, StringMapWrapper } from './facade/collection';
import { BaseException, unimplemented } from './facade/exceptions';
import { isBlank, isPresent, isStringMap, normalizeBlank, normalizeBool } from './facade/lang';
import { CssSelector } from './selector';
import { getUrlScheme } from './url_resolver';
import { sanitizeIdentifier, splitAtColon } from './util';
// group 0: "[prop] or (event) or @trigger"
// group 1: "prop" from "[prop]"
// group 2: "event" from "(event)"
var HOST_REG_EXP = /^(?:(?:\[([^\]]+)\])|(?:\(([^\)]+)\)))$/g;
// group 3: "@trigger" from "@trigger"
const HOST_REG_EXP = /^(?:(?:\[([^\]]+)\])|(?:\(([^\)]+)\)))|(\@[-\w]+)$/;
const UNDEFINED = new Object();
export class CompileMetadataWithIdentifier {
get identifier() { return unimplemented(); }
get runtimeCacheKey() { return unimplemented(); }
get assetCacheKey() { return unimplemented(); }
equalsTo(id2) { return unimplemented(); }
}
export class CompileMetadataWithType extends CompileMetadataWithIdentifier {
get type() { return unimplemented(); }
get identifier() { return unimplemented(); }
}
export function metadataFromJson(data) {
return _COMPILE_METADATA_FROM_JSON[data['class']](data);
}
export class CompileAnimationEntryMetadata {

@@ -34,13 +34,2 @@ constructor(name = null, definitions = null) {

}
static fromJson(data) {
var value = data['value'];
var defs = _arrayFromJson(value['definitions'], metadataFromJson);
return new CompileAnimationEntryMetadata(value['name'], defs);
}
toJson() {
return {
'class': 'AnimationEntryMetadata',
'value': { 'name': this.name, 'definitions': _arrayToJson(this.definitions) }
};
}
}

@@ -55,13 +44,2 @@ export class CompileAnimationStateMetadata {

}
static fromJson(data) {
var value = data['value'];
var styles = _objFromJson(value['styles'], metadataFromJson);
return new CompileAnimationStateDeclarationMetadata(value['stateNameExpr'], styles);
}
toJson() {
return {
'class': 'AnimationStateDeclarationMetadata',
'value': { 'stateNameExpr': this.stateNameExpr, 'styles': this.styles.toJson() }
};
}
}

@@ -74,13 +52,2 @@ export class CompileAnimationStateTransitionMetadata extends CompileAnimationStateMetadata {

}
static fromJson(data) {
var value = data['value'];
var steps = _objFromJson(value['steps'], metadataFromJson);
return new CompileAnimationStateTransitionMetadata(value['stateChangeExpr'], steps);
}
toJson() {
return {
'class': 'AnimationStateTransitionMetadata',
'value': { 'stateChangeExpr': this.stateChangeExpr, 'steps': this.steps.toJson() }
};
}
}

@@ -94,9 +61,2 @@ export class CompileAnimationMetadata {

}
static fromJson(data) {
var steps = _arrayFromJson(data['value'], metadataFromJson);
return new CompileAnimationKeyframesSequenceMetadata(steps);
}
toJson() {
return { 'class': 'AnimationKeyframesSequenceMetadata', 'value': _arrayToJson(this.steps) };
}
}

@@ -109,15 +69,2 @@ export class CompileAnimationStyleMetadata extends CompileAnimationMetadata {

}
static fromJson(data) {
var value = data['value'];
var offsetVal = value['offset'];
var offset = isPresent(offsetVal) ? NumberWrapper.parseFloat(offsetVal) : null;
var styles = value['styles'];
return new CompileAnimationStyleMetadata(offset, styles);
}
toJson() {
return {
'class': 'AnimationStyleMetadata',
'value': { 'offset': this.offset, 'styles': this.styles }
};
}
}

@@ -130,14 +77,2 @@ export class CompileAnimationAnimateMetadata extends CompileAnimationMetadata {

}
static fromJson(data) {
var value = data['value'];
var timings = value['timings'];
var styles = _objFromJson(value['styles'], metadataFromJson);
return new CompileAnimationAnimateMetadata(timings, styles);
}
toJson() {
return {
'class': 'AnimationAnimateMetadata',
'value': { 'timings': this.timings, 'styles': _objToJson(this.styles) }
};
}
}

@@ -154,9 +89,2 @@ export class CompileAnimationWithStepsMetadata extends CompileAnimationMetadata {

}
static fromJson(data) {
var steps = _arrayFromJson(data['value'], metadataFromJson);
return new CompileAnimationSequenceMetadata(steps);
}
toJson() {
return { 'class': 'AnimationSequenceMetadata', 'value': _arrayToJson(this.steps) };
}
}

@@ -167,12 +95,6 @@ export class CompileAnimationGroupMetadata extends CompileAnimationWithStepsMetadata {

}
static fromJson(data) {
var steps = _arrayFromJson(data['value'], metadataFromJson);
return new CompileAnimationGroupMetadata(steps);
}
toJson() {
return { 'class': 'AnimationGroupMetadata', 'value': _arrayToJson(this.steps) };
}
}
export class CompileIdentifierMetadata {
constructor({ runtime, name, moduleUrl, prefix, value } = {}) {
this._assetCacheKey = UNDEFINED;
this.runtime = runtime;

@@ -184,19 +106,22 @@ this.name = name;

}
static fromJson(data) {
let value = isArray(data['value']) ? _arrayFromJson(data['value'], metadataFromJson) :
_objFromJson(data['value'], metadataFromJson);
return new CompileIdentifierMetadata({ name: data['name'], prefix: data['prefix'], moduleUrl: data['moduleUrl'], value: value });
get identifier() { return this; }
get runtimeCacheKey() { return this.identifier.runtime; }
get assetCacheKey() {
if (this._assetCacheKey === UNDEFINED) {
if (isPresent(this.moduleUrl) && isPresent(getUrlScheme(this.moduleUrl))) {
var uri = reflector.importUri({ 'filePath': this.moduleUrl, 'name': this.name });
this._assetCacheKey = `${this.name}|${uri}`;
}
else {
this._assetCacheKey = null;
}
}
return this._assetCacheKey;
}
toJson() {
let value = isArray(this.value) ? _arrayToJson(this.value) : _objToJson(this.value);
return {
// Note: Runtime type can't be serialized...
'class': 'Identifier',
'name': this.name,
'moduleUrl': this.moduleUrl,
'prefix': this.prefix,
'value': value
};
equalsTo(id2) {
var rk = this.runtimeCacheKey;
var ak = this.assetCacheKey;
return (isPresent(rk) && rk == id2.runtimeCacheKey) ||
(isPresent(ak) && ak == id2.assetCacheKey);
}
get identifier() { return this; }
}

@@ -216,30 +141,2 @@ export class CompileDiDependencyMetadata {

}
static fromJson(data) {
return new CompileDiDependencyMetadata({
token: _objFromJson(data['token'], CompileTokenMetadata.fromJson),
query: _objFromJson(data['query'], CompileQueryMetadata.fromJson),
viewQuery: _objFromJson(data['viewQuery'], CompileQueryMetadata.fromJson),
value: data['value'],
isAttribute: data['isAttribute'],
isSelf: data['isSelf'],
isHost: data['isHost'],
isSkipSelf: data['isSkipSelf'],
isOptional: data['isOptional'],
isValue: data['isValue']
});
}
toJson() {
return {
'token': _objToJson(this.token),
'query': _objToJson(this.query),
'viewQuery': _objToJson(this.viewQuery),
'value': this.value,
'isAttribute': this.isAttribute,
'isSelf': this.isSelf,
'isHost': this.isHost,
'isSkipSelf': this.isSkipSelf,
'isOptional': this.isOptional,
'isValue': this.isValue
};
}
}

@@ -256,61 +153,11 @@ export class CompileProviderMetadata {

}
static fromJson(data) {
return new CompileProviderMetadata({
token: _objFromJson(data['token'], CompileTokenMetadata.fromJson),
useClass: _objFromJson(data['useClass'], CompileTypeMetadata.fromJson),
useExisting: _objFromJson(data['useExisting'], CompileTokenMetadata.fromJson),
useValue: _objFromJson(data['useValue'], CompileIdentifierMetadata.fromJson),
useFactory: _objFromJson(data['useFactory'], CompileFactoryMetadata.fromJson),
multi: data['multi'],
deps: _arrayFromJson(data['deps'], CompileDiDependencyMetadata.fromJson)
});
}
toJson() {
return {
// Note: Runtime type can't be serialized...
'class': 'Provider',
'token': _objToJson(this.token),
'useClass': _objToJson(this.useClass),
'useExisting': _objToJson(this.useExisting),
'useValue': _objToJson(this.useValue),
'useFactory': _objToJson(this.useFactory),
'multi': this.multi,
'deps': _arrayToJson(this.deps)
};
}
}
export class CompileFactoryMetadata {
export class CompileFactoryMetadata extends CompileIdentifierMetadata {
constructor({ runtime, name, moduleUrl, prefix, diDeps, value }) {
this.runtime = runtime;
this.name = name;
this.prefix = prefix;
this.moduleUrl = moduleUrl;
super({ runtime: runtime, name: name, prefix: prefix, moduleUrl: moduleUrl, value: value });
this.diDeps = _normalizeArray(diDeps);
this.value = value;
}
get identifier() { return this; }
static fromJson(data) {
return new CompileFactoryMetadata({
name: data['name'],
prefix: data['prefix'],
moduleUrl: data['moduleUrl'],
value: data['value'],
diDeps: _arrayFromJson(data['diDeps'], CompileDiDependencyMetadata.fromJson)
});
}
toJson() {
return {
'class': 'Factory',
'name': this.name,
'prefix': this.prefix,
'moduleUrl': this.moduleUrl,
'value': this.value,
'diDeps': _arrayToJson(this.diDeps)
};
}
}
var UNDEFINED = new Object();
export class CompileTokenMetadata {
constructor({ value, identifier, identifierIsInstance }) {
this._assetCacheKey = UNDEFINED;
this.value = value;

@@ -320,19 +167,5 @@ this.identifier = identifier;

}
static fromJson(data) {
return new CompileTokenMetadata({
value: data['value'],
identifier: _objFromJson(data['identifier'], CompileIdentifierMetadata.fromJson),
identifierIsInstance: data['identifierIsInstance']
});
}
toJson() {
return {
'value': this.value,
'identifier': _objToJson(this.identifier),
'identifierIsInstance': this.identifierIsInstance
};
}
get runtimeCacheKey() {
if (isPresent(this.identifier)) {
return this.identifier.runtime;
return this.identifier.runtimeCacheKey;
}

@@ -344,18 +177,8 @@ else {

get assetCacheKey() {
if (this._assetCacheKey === UNDEFINED) {
if (isPresent(this.identifier)) {
if (isPresent(this.identifier.moduleUrl) &&
isPresent(getUrlScheme(this.identifier.moduleUrl))) {
var uri = reflector.importUri({ 'filePath': this.identifier.moduleUrl, 'name': this.identifier.name });
this._assetCacheKey = `${this.identifier.name}|${uri}|${this.identifierIsInstance}`;
}
else {
this._assetCacheKey = null;
}
}
else {
this._assetCacheKey = this.value;
}
if (isPresent(this.identifier)) {
return this.identifier.assetCacheKey;
}
return this._assetCacheKey;
else {
return this.value;
}
}

@@ -372,6 +195,15 @@ equalsTo(token2) {

}
export class CompileTokenMap {
/**
* Note: We only need this in places where we need to support identifiers that
* don't have a `runtime` value given by the `StaticReflector`. E.g. see the `identifiers`
* file where we have some identifiers hard coded by name/module path.
*
* TODO(tbosch): Eventually, all of these places should go through the static reflector
* as well, providing them with a valid `StaticSymbol` that is again a singleton.
*/
export class CompileIdentifierMap {
constructor() {
this._valueMap = new Map();
this._values = [];
this._tokens = [];
}

@@ -381,4 +213,5 @@ add(token, value) {

if (isPresent(existing)) {
throw new BaseException(`Can only add to a TokenMap! Token: ${token.name}`);
throw new BaseException(`Cannot overwrite in a CompileIdentifierMap! Token: ${token.identifier.name}`);
}
this._tokens.push(token);
this._values.push(value);

@@ -406,2 +239,3 @@ var rk = token.runtimeCacheKey;

}
keys() { return this._tokens; }
values() { return this._values; }

@@ -413,36 +247,9 @@ get size() { return this._values.length; }

*/
export class CompileTypeMetadata {
constructor({ runtime, name, moduleUrl, prefix, isHost, value, diDeps } = {}) {
this.runtime = runtime;
this.name = name;
this.moduleUrl = moduleUrl;
this.prefix = prefix;
export class CompileTypeMetadata extends CompileIdentifierMetadata {
constructor({ runtime, name, moduleUrl, prefix, isHost, value, diDeps, lifecycleHooks } = {}) {
super({ runtime: runtime, name: name, moduleUrl: moduleUrl, prefix: prefix, value: value });
this.isHost = normalizeBool(isHost);
this.value = value;
this.diDeps = _normalizeArray(diDeps);
this.lifecycleHooks = _normalizeArray(lifecycleHooks);
}
static fromJson(data) {
return new CompileTypeMetadata({
name: data['name'],
moduleUrl: data['moduleUrl'],
prefix: data['prefix'],
isHost: data['isHost'],
value: data['value'],
diDeps: _arrayFromJson(data['diDeps'], CompileDiDependencyMetadata.fromJson)
});
}
get identifier() { return this; }
get type() { return this; }
toJson() {
return {
// Note: Runtime type can't be serialized...
'class': 'Type',
'name': this.name,
'moduleUrl': this.moduleUrl,
'prefix': this.prefix,
'isHost': this.isHost,
'value': this.value,
'diDeps': _arrayToJson(this.diDeps)
};
}
}

@@ -457,20 +264,2 @@ export class CompileQueryMetadata {

}
static fromJson(data) {
return new CompileQueryMetadata({
selectors: _arrayFromJson(data['selectors'], CompileTokenMetadata.fromJson),
descendants: data['descendants'],
first: data['first'],
propertyName: data['propertyName'],
read: _objFromJson(data['read'], CompileTokenMetadata.fromJson)
});
}
toJson() {
return {
'selectors': _arrayToJson(this.selectors),
'descendants': this.descendants,
'first': this.first,
'propertyName': this.propertyName,
'read': _objToJson(this.read)
};
}
}

@@ -486,8 +275,2 @@ /**

}
static fromJson(data) {
return new CompileStylesheetMetadata({ moduleUrl: data['moduleUrl'], styles: data['styles'], styleUrls: data['styleUrls'] });
}
toJson() {
return { 'moduleUrl': this.moduleUrl, 'styles': this.styles, 'styleUrls': this.styleUrls };
}
}

@@ -512,32 +295,2 @@ /**

}
static fromJson(data) {
var animations = _arrayFromJson(data['animations'], metadataFromJson);
return new CompileTemplateMetadata({
encapsulation: isPresent(data['encapsulation']) ?
VIEW_ENCAPSULATION_VALUES[data['encapsulation']] :
data['encapsulation'],
template: data['template'],
templateUrl: data['templateUrl'],
styles: data['styles'],
styleUrls: data['styleUrls'],
externalStylesheets: _arrayFromJson(data['externalStylesheets'], CompileStylesheetMetadata.fromJson),
animations: animations,
ngContentSelectors: data['ngContentSelectors'],
interpolation: data['interpolation']
});
}
toJson() {
return {
'encapsulation': isPresent(this.encapsulation) ? serializeEnum(this.encapsulation) :
this.encapsulation,
'template': this.template,
'templateUrl': this.templateUrl,
'styles': this.styles,
'styleUrls': this.styleUrls,
'externalStylesheets': _objToJson(this.externalStylesheets),
'animations': _objToJson(this.animations),
'ngContentSelectors': this.ngContentSelectors,
'interpolation': this.interpolation
};
}
}

@@ -548,3 +301,3 @@ /**

export class CompileDirectiveMetadata {
constructor({ type, isComponent, selector, exportAs, changeDetection, inputs, outputs, hostListeners, hostProperties, hostAttributes, lifecycleHooks, providers, viewProviders, queries, viewQueries, precompile, template } = {}) {
constructor({ type, isComponent, selector, exportAs, changeDetection, inputs, outputs, hostListeners, hostProperties, hostAttributes, providers, viewProviders, queries, viewQueries, entryComponents, viewDirectives, viewPipes, template } = {}) {
this.type = type;

@@ -560,3 +313,2 @@ this.isComponent = isComponent;

this.hostAttributes = hostAttributes;
this.lifecycleHooks = _normalizeArray(lifecycleHooks);
this.providers = _normalizeArray(providers);

@@ -566,6 +318,8 @@ this.viewProviders = _normalizeArray(viewProviders);

this.viewQueries = _normalizeArray(viewQueries);
this.precompile = _normalizeArray(precompile);
this.entryComponents = _normalizeArray(entryComponents);
this.viewDirectives = _normalizeArray(viewDirectives);
this.viewPipes = _normalizeArray(viewPipes);
this.template = template;
}
static create({ type, isComponent, selector, exportAs, changeDetection, inputs, outputs, host, lifecycleHooks, providers, viewProviders, queries, viewQueries, precompile, template } = {}) {
static create({ type, isComponent, selector, exportAs, changeDetection, inputs, outputs, host, providers, viewProviders, queries, viewQueries, entryComponents, viewDirectives, viewPipes, template } = {}) {
var hostListeners = {};

@@ -576,4 +330,4 @@ var hostProperties = {};

StringMapWrapper.forEach(host, (value, key) => {
var matches = RegExpWrapper.firstMatch(HOST_REG_EXP, key);
if (isBlank(matches)) {
const matches = key.match(HOST_REG_EXP);
if (matches === null) {
hostAttributes[key] = value;

@@ -587,2 +341,5 @@ }

}
else if (isPresent(matches[3])) {
hostProperties['@' + matches[3]] = value;
}
});

@@ -609,69 +366,25 @@ }

return new CompileDirectiveMetadata({
type: type,
isComponent: normalizeBool(isComponent),
selector: selector,
exportAs: exportAs,
changeDetection: changeDetection,
type,
isComponent: normalizeBool(isComponent), selector, exportAs, changeDetection,
inputs: inputsMap,
outputs: outputsMap,
hostListeners: hostListeners,
hostProperties: hostProperties,
hostAttributes: hostAttributes,
lifecycleHooks: isPresent(lifecycleHooks) ? lifecycleHooks : [],
providers: providers,
viewProviders: viewProviders,
queries: queries,
viewQueries: viewQueries,
precompile: precompile,
template: template
hostListeners,
hostProperties,
hostAttributes,
providers,
viewProviders,
queries,
viewQueries,
entryComponents,
viewDirectives,
viewPipes,
template,
});
}
get identifier() { return this.type; }
static fromJson(data) {
return new CompileDirectiveMetadata({
isComponent: data['isComponent'],
selector: data['selector'],
exportAs: data['exportAs'],
type: isPresent(data['type']) ? CompileTypeMetadata.fromJson(data['type']) : data['type'],
changeDetection: isPresent(data['changeDetection']) ?
CHANGE_DETECTION_STRATEGY_VALUES[data['changeDetection']] :
data['changeDetection'],
inputs: data['inputs'],
outputs: data['outputs'],
hostListeners: data['hostListeners'],
hostProperties: data['hostProperties'],
hostAttributes: data['hostAttributes'],
lifecycleHooks: data['lifecycleHooks'].map(hookValue => LIFECYCLE_HOOKS_VALUES[hookValue]),
template: isPresent(data['template']) ? CompileTemplateMetadata.fromJson(data['template']) :
data['template'],
providers: _arrayFromJson(data['providers'], metadataFromJson),
viewProviders: _arrayFromJson(data['viewProviders'], metadataFromJson),
queries: _arrayFromJson(data['queries'], CompileQueryMetadata.fromJson),
viewQueries: _arrayFromJson(data['viewQueries'], CompileQueryMetadata.fromJson),
precompile: _arrayFromJson(data['precompile'], CompileTypeMetadata.fromJson)
});
get runtimeCacheKey() { return this.type.runtimeCacheKey; }
get assetCacheKey() { return this.type.assetCacheKey; }
equalsTo(other) {
return this.type.equalsTo(other.identifier);
}
toJson() {
return {
'class': 'Directive',
'isComponent': this.isComponent,
'selector': this.selector,
'exportAs': this.exportAs,
'type': isPresent(this.type) ? this.type.toJson() : this.type,
'changeDetection': isPresent(this.changeDetection) ? serializeEnum(this.changeDetection) :
this.changeDetection,
'inputs': this.inputs,
'outputs': this.outputs,
'hostListeners': this.hostListeners,
'hostProperties': this.hostProperties,
'hostAttributes': this.hostAttributes,
'lifecycleHooks': this.lifecycleHooks.map(hook => serializeEnum(hook)),
'template': isPresent(this.template) ? this.template.toJson() : this.template,
'providers': _arrayToJson(this.providers),
'viewProviders': _arrayToJson(this.viewProviders),
'queries': _arrayToJson(this.queries),
'viewQueries': _arrayToJson(this.viewQueries),
'precompile': _arrayToJson(this.precompile)
};
}
}

@@ -681,9 +394,9 @@ /**

*/
export function createHostComponentMeta(componentType, componentSelector) {
var template = CssSelector.parse(componentSelector)[0].getMatchingElementTemplate();
export function createHostComponentMeta(compMeta) {
var template = CssSelector.parse(compMeta.selector)[0].getMatchingElementTemplate();
return CompileDirectiveMetadata.create({
type: new CompileTypeMetadata({
runtime: Object,
name: `${componentType.name}_Host`,
moduleUrl: componentType.moduleUrl,
name: `${compMeta.type.name}_Host`,
moduleUrl: compMeta.type.moduleUrl,
isHost: true

@@ -703,3 +416,2 @@ }),

host: {},
lifecycleHooks: [],
isComponent: true,

@@ -714,64 +426,67 @@ selector: '*',

export class CompilePipeMetadata {
constructor({ type, name, pure, lifecycleHooks } = {}) {
constructor({ type, name, pure } = {}) {
this.type = type;
this.name = name;
this.pure = normalizeBool(pure);
this.lifecycleHooks = _normalizeArray(lifecycleHooks);
}
get identifier() { return this.type; }
static fromJson(data) {
return new CompilePipeMetadata({
type: isPresent(data['type']) ? CompileTypeMetadata.fromJson(data['type']) : data['type'],
name: data['name'],
pure: data['pure']
});
get runtimeCacheKey() { return this.type.runtimeCacheKey; }
get assetCacheKey() { return this.type.assetCacheKey; }
equalsTo(other) {
return this.type.equalsTo(other.identifier);
}
toJson() {
return {
'class': 'Pipe',
'type': isPresent(this.type) ? this.type.toJson() : null,
'name': this.name,
'pure': this.pure
};
}
/**
* Metadata regarding compilation of a directive.
*/
export class CompileNgModuleMetadata {
constructor({ type, providers, declaredDirectives, exportedDirectives, declaredPipes, exportedPipes, entryComponents, bootstrapComponents, importedModules, exportedModules, schemas, transitiveModule } = {}) {
this.type = type;
this.declaredDirectives = _normalizeArray(declaredDirectives);
this.exportedDirectives = _normalizeArray(exportedDirectives);
this.declaredPipes = _normalizeArray(declaredPipes);
this.exportedPipes = _normalizeArray(exportedPipes);
this.providers = _normalizeArray(providers);
this.entryComponents = _normalizeArray(entryComponents);
this.bootstrapComponents = _normalizeArray(bootstrapComponents);
this.importedModules = _normalizeArray(importedModules);
this.exportedModules = _normalizeArray(exportedModules);
this.schemas = _normalizeArray(schemas);
this.transitiveModule = transitiveModule;
}
get identifier() { return this.type; }
get runtimeCacheKey() { return this.type.runtimeCacheKey; }
get assetCacheKey() { return this.type.assetCacheKey; }
equalsTo(other) {
return this.type.equalsTo(other.identifier);
}
}
var _COMPILE_METADATA_FROM_JSON = {
'Directive': CompileDirectiveMetadata.fromJson,
'Pipe': CompilePipeMetadata.fromJson,
'Type': CompileTypeMetadata.fromJson,
'Provider': CompileProviderMetadata.fromJson,
'Identifier': CompileIdentifierMetadata.fromJson,
'Factory': CompileFactoryMetadata.fromJson,
'AnimationEntryMetadata': CompileAnimationEntryMetadata.fromJson,
'AnimationStateDeclarationMetadata': CompileAnimationStateDeclarationMetadata.fromJson,
'AnimationStateTransitionMetadata': CompileAnimationStateTransitionMetadata.fromJson,
'AnimationSequenceMetadata': CompileAnimationSequenceMetadata.fromJson,
'AnimationGroupMetadata': CompileAnimationGroupMetadata.fromJson,
'AnimationAnimateMetadata': CompileAnimationAnimateMetadata.fromJson,
'AnimationStyleMetadata': CompileAnimationStyleMetadata.fromJson,
'AnimationKeyframesSequenceMetadata': CompileAnimationKeyframesSequenceMetadata.fromJson
};
function _arrayFromJson(obj, fn) {
return isBlank(obj) ? null : obj.map(o => _objFromJson(o, fn));
export class TransitiveCompileNgModuleMetadata {
constructor(modules, providers, entryComponents, directives, pipes) {
this.modules = modules;
this.providers = providers;
this.entryComponents = entryComponents;
this.directives = directives;
this.pipes = pipes;
this.directivesSet = new Set();
this.pipesSet = new Set();
directives.forEach(dir => this.directivesSet.add(dir.type.runtime));
pipes.forEach(pipe => this.pipesSet.add(pipe.type.runtime));
}
}
function _arrayToJson(obj) {
return isBlank(obj) ? null : obj.map(_objToJson);
export function removeIdentifierDuplicates(items) {
const map = new CompileIdentifierMap();
items.forEach((item) => {
if (!map.get(item)) {
map.add(item, item);
}
});
return map.keys();
}
function _objFromJson(obj, fn) {
if (isArray(obj))
return _arrayFromJson(obj, fn);
if (isString(obj) || isBlank(obj) || isBoolean(obj) || isNumber(obj))
return obj;
return fn(obj);
}
function _objToJson(obj) {
if (isArray(obj))
return _arrayToJson(obj);
if (isString(obj) || isBlank(obj) || isBoolean(obj) || isNumber(obj))
return obj;
return obj.toJson();
}
function _normalizeArray(obj) {
return isPresent(obj) ? obj : [];
}
export function isStaticSymbol(value) {
return isStringMap(value) && isPresent(value['name']) && isPresent(value['filePath']);
}
//# sourceMappingURL=compile_metadata.js.map

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"metadataFromJson":{"__symbolic":"function","parameters":["data"],"value":{"__symbolic":"error","message":"Expression form not supported","line":38,"character":10}}}}
{"__symbolic":"module","version":1,"metadata":{"isStaticSymbol":{"__symbolic":"function","parameters":["value"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"./facade/lang","name":"isStringMap"},"arguments":[{"__symbolic":"reference","name":"value"}]},"right":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"./facade/lang","name":"isPresent"},"arguments":[{"__symbolic":"index","expression":{"__symbolic":"reference","name":"value"},"index":"name"}]}},"right":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"./facade/lang","name":"isPresent"},"arguments":[{"__symbolic":"index","expression":{"__symbolic":"reference","name":"value"},"index":"filePath"}]}}}}}

@@ -8,5 +8,5 @@ /**

*/
import { Type } from '@angular/core';
export * from './template_ast';
export { TEMPLATE_TRANSFORMS } from './template_parser';
import { Compiler, CompilerFactory, CompilerOptions, PlatformRef, Type } from '@angular/core';
export * from './template_parser/template_ast';
export { TEMPLATE_TRANSFORMS } from './template_parser/template_parser';
export { CompilerConfig, RenderTypes } from './config';

@@ -18,5 +18,5 @@ export * from './compile_metadata';

export * from './xhr';
export { ViewResolver } from './view_resolver';
export { DirectiveResolver } from './directive_resolver';
export { PipeResolver } from './pipe_resolver';
export { NgModuleResolver } from './ng_module_resolver';
/**

@@ -29,1 +29,17 @@ * A set of providers that provide `RuntimeCompiler` and its dependencies to use for

} | any[]>;
export declare function analyzeAppProvidersForDeprecatedConfiguration(appProviders?: any[]): {
compilerOptions: CompilerOptions;
moduleDeclarations: Type[];
deprecationMessages: string[];
};
export declare class RuntimeCompilerFactory implements CompilerFactory {
private _defaultOptions;
constructor(defaultOptions: CompilerOptions[]);
createCompiler(options?: CompilerOptions[]): Compiler;
}
/**
* A platform that included corePlatform and the compiler.
*
* @experimental
*/
export declare const platformCoreDynamic: (extraProviders?: any[]) => PlatformRef;

@@ -8,5 +8,5 @@ /**

*/
import { Compiler, ComponentResolver } from '@angular/core';
export * from './template_ast';
export { TEMPLATE_TRANSFORMS } from './template_parser';
import { COMPILER_OPTIONS, Compiler, CompilerFactory, Component, Inject, Injectable, PLATFORM_DIRECTIVES, PLATFORM_INITIALIZER, PLATFORM_PIPES, ReflectiveInjector, ViewEncapsulation, createPlatformFactory, isDevMode, platformCore } from '@angular/core';
export * from './template_parser/template_ast';
export { TEMPLATE_TRANSFORMS } from './template_parser/template_parser';
export { CompilerConfig, RenderTypes } from './config';

@@ -18,7 +18,9 @@ export * from './compile_metadata';

export * from './xhr';
export { ViewResolver } from './view_resolver';
export { DirectiveResolver } from './directive_resolver';
export { PipeResolver } from './pipe_resolver';
import { TemplateParser } from './template_parser';
import { HtmlParser } from './html_parser';
export { NgModuleResolver } from './ng_module_resolver';
import { stringify } from './facade/lang';
import { ListWrapper } from './facade/collection';
import { TemplateParser } from './template_parser/template_parser';
import { HtmlParser } from './ml_parser/html_parser';
import { DirectiveNormalizer } from './directive_normalizer';

@@ -28,2 +30,3 @@ import { CompileMetadataResolver } from './metadata_resolver';

import { ViewCompiler } from './view_compiler/view_compiler';
import { NgModuleCompiler } from './ng_module_compiler';
import { CompilerConfig } from './config';

@@ -36,5 +39,12 @@ import { RuntimeCompiler } from './runtime_compiler';

import { Lexer } from './expression_parser/lexer';
import { ViewResolver } from './view_resolver';
import { DirectiveResolver } from './directive_resolver';
import { PipeResolver } from './pipe_resolver';
import { NgModuleResolver } from './ng_module_resolver';
import { Console, Reflector, reflector, ReflectorReader, ReflectionCapabilities } from '../core_private';
import { XHR } from './xhr';
const _NO_XHR = {
get(url) {
throw new Error(`No XHR implementation has been provided. Can't read the url "${url}"`);
}
};
/**

@@ -44,14 +54,163 @@ * A set of providers that provide `RuntimeCompiler` and its dependencies to use for

*/
export const COMPILER_PROVIDERS =
/*@ts2dart_const*/ [
Lexer, Parser, HtmlParser, TemplateParser, DirectiveNormalizer, CompileMetadataResolver,
DEFAULT_PACKAGE_URL_PROVIDER, StyleCompiler, ViewCompiler,
/*@ts2dart_Provider*/ { provide: CompilerConfig, useValue: new CompilerConfig() },
export const COMPILER_PROVIDERS = [
{ provide: Reflector, useValue: reflector },
{ provide: ReflectorReader, useExisting: Reflector },
{ provide: XHR, useValue: _NO_XHR },
Console,
Lexer,
Parser,
HtmlParser,
TemplateParser,
DirectiveNormalizer,
CompileMetadataResolver,
DEFAULT_PACKAGE_URL_PROVIDER,
StyleCompiler,
ViewCompiler,
NgModuleCompiler,
{ provide: CompilerConfig, useValue: new CompilerConfig() },
RuntimeCompiler,
/*@ts2dart_Provider*/ { provide: ComponentResolver, useExisting: RuntimeCompiler },
/*@ts2dart_Provider*/ { provide: Compiler, useExisting: RuntimeCompiler },
{ provide: Compiler, useExisting: RuntimeCompiler },
DomElementSchemaRegistry,
/*@ts2dart_Provider*/ { provide: ElementSchemaRegistry, useExisting: DomElementSchemaRegistry },
UrlResolver, ViewResolver, DirectiveResolver, PipeResolver
{ provide: ElementSchemaRegistry, useExisting: DomElementSchemaRegistry },
UrlResolver,
DirectiveResolver,
PipeResolver,
NgModuleResolver
];
export function analyzeAppProvidersForDeprecatedConfiguration(appProviders = []) {
let platformDirectives = [];
let platformPipes = [];
let compilerProviders = [];
let useDebug;
let useJit;
let defaultEncapsulation;
const deprecationMessages = [];
// Note: This is a hack to still support the old way
// of configuring platform directives / pipes and the compiler xhr.
// This will soon be deprecated!
const tempInj = ReflectiveInjector.resolveAndCreate(appProviders);
const compilerConfig = tempInj.get(CompilerConfig, null);
if (compilerConfig) {
platformDirectives = compilerConfig.platformDirectives;
platformPipes = compilerConfig.platformPipes;
useJit = compilerConfig.useJit;
useDebug = compilerConfig.genDebugInfo;
defaultEncapsulation = compilerConfig.defaultEncapsulation;
deprecationMessages.push(`Passing CompilerConfig as a regular provider is deprecated. Use the "compilerOptions" parameter of "bootstrap()" or use a custom "CompilerFactory" platform provider instead.`);
}
else {
// If nobody provided a CompilerConfig, use the
// PLATFORM_DIRECTIVES / PLATFORM_PIPES values directly if existing
platformDirectives = tempInj.get(PLATFORM_DIRECTIVES, []);
platformPipes = tempInj.get(PLATFORM_PIPES, []);
}
platformDirectives = ListWrapper.flatten(platformDirectives);
platformPipes = ListWrapper.flatten(platformPipes);
const xhr = tempInj.get(XHR, null);
if (xhr) {
compilerProviders.push([{ provide: XHR, useValue: xhr }]);
deprecationMessages.push(`Passing XHR as regular provider is deprecated. Pass the provider via "compilerOptions" instead.`);
}
if (platformDirectives.length > 0) {
deprecationMessages.push(`The PLATFORM_DIRECTIVES provider and CompilerConfig.platformDirectives is deprecated. Add the directives to an NgModule instead! ` +
`(Directives: ${platformDirectives.map(type => stringify(type))})`);
}
if (platformPipes.length > 0) {
deprecationMessages.push(`The PLATFORM_PIPES provider and CompilerConfig.platformPipes is deprecated. Add the pipes to an NgModule instead! ` +
`(Pipes: ${platformPipes.map(type => stringify(type))})`);
}
const compilerOptions = {
useJit: useJit,
useDebug: useDebug,
defaultEncapsulation: defaultEncapsulation,
providers: compilerProviders
};
class DynamicComponent {
}
/** @nocollapse */
DynamicComponent.decorators = [
{ type: Component, args: [{ directives: platformDirectives, pipes: platformPipes, template: '' },] },
];
return {
compilerOptions,
moduleDeclarations: [DynamicComponent],
deprecationMessages: deprecationMessages
};
}
export class RuntimeCompilerFactory {
constructor(defaultOptions) {
this._defaultOptions = [{
useDebug: isDevMode(),
useJit: true,
defaultEncapsulation: ViewEncapsulation.Emulated
}].concat(defaultOptions);
}
createCompiler(options = []) {
const mergedOptions = _mergeOptions(this._defaultOptions.concat(options));
const injector = ReflectiveInjector.resolveAndCreate([
COMPILER_PROVIDERS, {
provide: CompilerConfig,
useFactory: () => {
return new CompilerConfig({
// let explicit values from the compiler options overwrite options
// from the app providers. E.g. important for the testing platform.
genDebugInfo: mergedOptions.useDebug,
// let explicit values from the compiler options overwrite options
// from the app providers
useJit: mergedOptions.useJit,
// let explicit values from the compiler options overwrite options
// from the app providers
defaultEncapsulation: mergedOptions.defaultEncapsulation,
logBindingUpdate: mergedOptions.useDebug
});
},
deps: []
},
mergedOptions.providers
]);
return injector.get(Compiler);
}
}
/** @nocollapse */
RuntimeCompilerFactory.decorators = [
{ type: Injectable },
];
/** @nocollapse */
RuntimeCompilerFactory.ctorParameters = [
{ type: Array, decorators: [{ type: Inject, args: [COMPILER_OPTIONS,] },] },
];
function _initReflector() {
reflector.reflectionCapabilities = new ReflectionCapabilities();
}
/**
* A platform that included corePlatform and the compiler.
*
* @experimental
*/
export const platformCoreDynamic = createPlatformFactory(platformCore, 'coreDynamic', [
{ provide: COMPILER_OPTIONS, useValue: {}, multi: true },
{ provide: CompilerFactory, useClass: RuntimeCompilerFactory },
{ provide: PLATFORM_INITIALIZER, useValue: _initReflector, multi: true },
]);
function _mergeOptions(optionsArr) {
return {
useDebug: _lastDefined(optionsArr.map(options => options.useDebug)),
useJit: _lastDefined(optionsArr.map(options => options.useJit)),
defaultEncapsulation: _lastDefined(optionsArr.map(options => options.defaultEncapsulation)),
providers: _mergeArrays(optionsArr.map(options => options.providers))
};
}
function _lastDefined(args) {
for (var i = args.length - 1; i >= 0; i--) {
if (args[i] !== undefined) {
return args[i];
}
}
return undefined;
}
function _mergeArrays(parts) {
let result = [];
parts.forEach((part) => part && result.push(...part));
return result;
}
//# sourceMappingURL=compiler.js.map

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"COMPILER_PROVIDERS":[{"__symbolic":"reference","module":"./expression_parser/lexer","name":"Lexer"},{"__symbolic":"reference","module":"./expression_parser/parser","name":"Parser"},{"__symbolic":"reference","module":"./html_parser","name":"HtmlParser"},{"__symbolic":"reference","module":"./template_parser","name":"TemplateParser"},{"__symbolic":"reference","module":"./directive_normalizer","name":"DirectiveNormalizer"},{"__symbolic":"reference","module":"./metadata_resolver","name":"CompileMetadataResolver"},{"__symbolic":"reference","module":"./url_resolver","name":"DEFAULT_PACKAGE_URL_PROVIDER"},{"__symbolic":"reference","module":"./style_compiler","name":"StyleCompiler"},{"__symbolic":"reference","module":"./view_compiler/view_compiler","name":"ViewCompiler"},{"provide":{"__symbolic":"reference","module":"./config","name":"CompilerConfig"},"useValue":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"./config","name":"CompilerConfig"}}},{"__symbolic":"reference","module":"./runtime_compiler","name":"RuntimeCompiler"},{"provide":{"__symbolic":"reference","module":"@angular/core","name":"ComponentResolver"},"useExisting":{"__symbolic":"reference","module":"./runtime_compiler","name":"RuntimeCompiler"}},{"provide":{"__symbolic":"reference","module":"@angular/core","name":"Compiler"},"useExisting":{"__symbolic":"reference","module":"./runtime_compiler","name":"RuntimeCompiler"}},{"__symbolic":"reference","module":"./schema/dom_element_schema_registry","name":"DomElementSchemaRegistry"},{"provide":{"__symbolic":"reference","module":"./schema/element_schema_registry","name":"ElementSchemaRegistry"},"useExisting":{"__symbolic":"reference","module":"./schema/dom_element_schema_registry","name":"DomElementSchemaRegistry"}},{"__symbolic":"reference","module":"./url_resolver","name":"UrlResolver"},{"__symbolic":"reference","module":"./view_resolver","name":"ViewResolver"},{"__symbolic":"reference","module":"./directive_resolver","name":"DirectiveResolver"},{"__symbolic":"reference","module":"./pipe_resolver","name":"PipeResolver"}]}}
{"__symbolic":"module","version":1,"metadata":{"COMPILER_PROVIDERS":{"__symbolic":"error","message":"Reference to a local symbol","line":45,"character":5,"context":{"name":"_NO_XHR"}},"RuntimeCompilerFactory":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject"},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"COMPILER_OPTIONS"}]}]],"parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","module":"@angular/core","name":"CompilerOptions"}]}]}],"createCompiler":[{"__symbolic":"method"}]}},"platformCoreDynamic":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"createPlatformFactory"},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"platformCore"},"coreDynamic",[{"provide":{"__symbolic":"reference","module":"@angular/core","name":"COMPILER_OPTIONS"},"useValue":{},"multi":true},{"provide":{"__symbolic":"reference","module":"@angular/core","name":"CompilerFactory"},"useClass":{"__symbolic":"reference","name":"RuntimeCompilerFactory"}},{"provide":{"__symbolic":"reference","module":"@angular/core","name":"PLATFORM_INITIALIZER"},"useValue":{"__symbolic":"reference","name":"_initReflector"},"multi":true}]]}},"exports":[{"from":"./template_parser/template_ast"},{"from":"./template_parser/template_parser","export":["TEMPLATE_TRANSFORMS"]},{"from":"./config","export":["CompilerConfig","RenderTypes"]},{"from":"./compile_metadata"},{"from":"./offline_compiler"},{"from":"./runtime_compiler","export":["RuntimeCompiler"]},{"from":"./url_resolver"},{"from":"./xhr"},{"from":"./directive_resolver","export":["DirectiveResolver"]},{"from":"./pipe_resolver","export":["PipeResolver"]},{"from":"./ng_module_resolver","export":["NgModuleResolver"]}]}

@@ -16,5 +16,13 @@ /**

useJit: boolean;
/**
* @deprecated Providing platform directives via the {@link CompilerConfig} is deprecated. Provide
* platform directives via an {@link NgModule} instead.
*/
platformDirectives: any[];
/**
* @deprecated Providing platform pipes via the {@link CompilerConfig} is deprecated. Provide
* platform pipes via an {@link NgModule} instead.
*/
platformPipes: any[];
constructor({renderTypes, defaultEncapsulation, genDebugInfo, logBindingUpdate, useJit, platformDirectives, platformPipes}?: {
constructor({renderTypes, defaultEncapsulation, genDebugInfo, logBindingUpdate, useJit, deprecatedPlatformDirectives, deprecatedPlatformPipes}?: {
renderTypes?: RenderTypes;

@@ -25,4 +33,4 @@ defaultEncapsulation?: ViewEncapsulation;

useJit?: boolean;
platformDirectives?: any[];
platformPipes?: any[];
deprecatedPlatformDirectives?: any[];
deprecatedPlatformPipes?: any[];
});

@@ -29,0 +37,0 @@ readonly genDebugInfo: boolean;

@@ -12,3 +12,3 @@ /**

export class CompilerConfig {
constructor({ renderTypes = new DefaultRenderTypes(), defaultEncapsulation = ViewEncapsulation.Emulated, genDebugInfo, logBindingUpdate, useJit = true, platformDirectives = [], platformPipes = [] } = {}) {
constructor({ renderTypes = new DefaultRenderTypes(), defaultEncapsulation = ViewEncapsulation.Emulated, genDebugInfo, logBindingUpdate, useJit = true, deprecatedPlatformDirectives = [], deprecatedPlatformPipes = [] } = {}) {
this.renderTypes = renderTypes;

@@ -19,4 +19,4 @@ this.defaultEncapsulation = defaultEncapsulation;

this.useJit = useJit;
this.platformDirectives = platformDirectives;
this.platformPipes = platformPipes;
this.platformDirectives = deprecatedPlatformDirectives;
this.platformPipes = deprecatedPlatformPipes;
}

@@ -23,0 +23,0 @@ get genDebugInfo() {

import { CompileDirectiveMetadata, CompileStylesheetMetadata, CompileTemplateMetadata, CompileTypeMetadata } from './compile_metadata';
import { CompilerConfig } from './config';
import { HtmlParser } from './html_parser';
import { HtmlParser } from './ml_parser/html_parser';
import { UrlResolver } from './url_resolver';
import { SyncAsyncResult } from './util';
import { XHR } from './xhr';
export declare class NormalizeDirectiveResult {
syncResult: CompileDirectiveMetadata;
asyncResult: Promise<CompileDirectiveMetadata>;
constructor(syncResult: CompileDirectiveMetadata, asyncResult: Promise<CompileDirectiveMetadata>);
}
export declare class DirectiveNormalizer {

@@ -21,3 +17,3 @@ private _xhr;

private _fetch(url);
normalizeDirective(directive: CompileDirectiveMetadata): NormalizeDirectiveResult;
normalizeDirective(directive: CompileDirectiveMetadata): SyncAsyncResult<CompileDirectiveMetadata>;
normalizeTemplateSync(directiveType: CompileTypeMetadata, template: CompileTemplateMetadata): CompileTemplateMetadata;

@@ -24,0 +20,0 @@ normalizeTemplateAsync(directiveType: CompileTypeMetadata, template: CompileTemplateMetadata): Promise<CompileTemplateMetadata>;

@@ -9,19 +9,15 @@ /**

import { Injectable, ViewEncapsulation } from '@angular/core';
import { MapWrapper } from '../src/facade/collection';
import { BaseException } from '../src/facade/exceptions';
import { isBlank, isPresent } from '../src/facade/lang';
import { CompileDirectiveMetadata, CompileStylesheetMetadata, CompileTemplateMetadata } from './compile_metadata';
import { CompilerConfig } from './config';
import { HtmlTextAst, htmlVisitAll } from './html_ast';
import { HtmlParser } from './html_parser';
import { MapWrapper } from './facade/collection';
import { BaseException } from './facade/exceptions';
import { isBlank, isPresent } from './facade/lang';
import * as html from './ml_parser/ast';
import { HtmlParser } from './ml_parser/html_parser';
import { InterpolationConfig } from './ml_parser/interpolation_config';
import { extractStyleUrls, isStyleUrlResolvable } from './style_url_resolver';
import { PreparsedElementType, preparseElement } from './template_preparser';
import { PreparsedElementType, preparseElement } from './template_parser/template_preparser';
import { UrlResolver } from './url_resolver';
import { SyncAsyncResult } from './util';
import { XHR } from './xhr';
export class NormalizeDirectiveResult {
constructor(syncResult, asyncResult) {
this.syncResult = syncResult;
this.asyncResult = asyncResult;
}
}
export class DirectiveNormalizer {

@@ -54,3 +50,3 @@ constructor(_xhr, _urlResolver, _htmlParser, _config) {

// For non components there is nothing to be normalized yet.
return new NormalizeDirectiveResult(directive, Promise.resolve(directive));
return new SyncAsyncResult(directive, Promise.resolve(directive));
}

@@ -72,7 +68,7 @@ let normalizedTemplateSync = null;

let normalizedDirective = _cloneDirectiveWithTemplate(directive, normalizedTemplateSync);
return new NormalizeDirectiveResult(normalizedDirective, Promise.resolve(normalizedDirective));
return new SyncAsyncResult(normalizedDirective, Promise.resolve(normalizedDirective));
}
else {
// async case
return new NormalizeDirectiveResult(null, normalizedTemplateAsync
return new SyncAsyncResult(null, normalizedTemplateAsync
.then((normalizedTemplate) => this.normalizeExternalStylesheets(normalizedTemplate))

@@ -91,8 +87,9 @@ .then((normalizedTemplate) => _cloneDirectiveWithTemplate(directive, normalizedTemplate)));

normalizeLoadedTemplate(directiveType, templateMeta, template, templateAbsUrl) {
var rootNodesAndErrors = this._htmlParser.parse(template, directiveType.name);
const interpolationConfig = InterpolationConfig.fromArray(templateMeta.interpolation);
const rootNodesAndErrors = this._htmlParser.parse(template, directiveType.name, false, interpolationConfig);
if (rootNodesAndErrors.errors.length > 0) {
var errorString = rootNodesAndErrors.errors.join('\n');
const errorString = rootNodesAndErrors.errors.join('\n');
throw new BaseException(`Template parse errors:\n${errorString}`);
}
var templateMetadataStyles = this.normalizeStylesheet(new CompileStylesheetMetadata({
const templateMetadataStyles = this.normalizeStylesheet(new CompileStylesheetMetadata({
styles: templateMeta.styles,

@@ -102,8 +99,8 @@ styleUrls: templateMeta.styleUrls,

}));
var visitor = new TemplatePreparseVisitor();
htmlVisitAll(visitor, rootNodesAndErrors.rootNodes);
var templateStyles = this.normalizeStylesheet(new CompileStylesheetMetadata({ styles: visitor.styles, styleUrls: visitor.styleUrls, moduleUrl: templateAbsUrl }));
var allStyles = templateMetadataStyles.styles.concat(templateStyles.styles);
var allStyleUrls = templateMetadataStyles.styleUrls.concat(templateStyles.styleUrls);
var encapsulation = templateMeta.encapsulation;
const visitor = new TemplatePreparseVisitor();
html.visitAll(visitor, rootNodesAndErrors.rootNodes);
const templateStyles = this.normalizeStylesheet(new CompileStylesheetMetadata({ styles: visitor.styles, styleUrls: visitor.styleUrls, moduleUrl: templateAbsUrl }));
const allStyles = templateMetadataStyles.styles.concat(templateStyles.styles);
const allStyleUrls = templateMetadataStyles.styleUrls.concat(templateStyles.styleUrls);
let encapsulation = templateMeta.encapsulation;
if (isBlank(encapsulation)) {

@@ -117,3 +114,3 @@ encapsulation = this._config.defaultEncapsulation;

return new CompileTemplateMetadata({
encapsulation: encapsulation,
encapsulation,
template: template,

@@ -193,3 +190,3 @@ templateUrl: templateAbsUrl,

ast.children.forEach(child => {
if (child instanceof HtmlTextAst) {
if (child instanceof html.Text) {
textContent += child.value;

@@ -204,4 +201,2 @@ }

default:
// DDC reports this as error. See:
// https://github.com/dart-lang/dev_compiler/issues/428
break;

@@ -212,3 +207,3 @@ }

}
htmlVisitAll(this, ast.children);
html.visitAll(this, ast.children);
if (preparsedElement.nonBindable) {

@@ -220,3 +215,3 @@ this.ngNonBindableStackCount--;

visitComment(ast, context) { return null; }
visitAttr(ast, context) { return null; }
visitAttribute(ast, context) { return null; }
visitText(ast, context) { return null; }

@@ -238,3 +233,2 @@ visitExpansion(ast, context) { return null; }

hostAttributes: directive.hostAttributes,
lifecycleHooks: directive.lifecycleHooks,
providers: directive.providers,

@@ -244,3 +238,3 @@ viewProviders: directive.viewProviders,

viewQueries: directive.viewQueries,
precompile: directive.precompile,
entryComponents: directive.entryComponents,
template: template

@@ -247,0 +241,0 @@ });

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"DirectiveNormalizer":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"./xhr","name":"XHR"},{"__symbolic":"reference","module":"./url_resolver","name":"UrlResolver"},{"__symbolic":"reference","module":"./html_parser","name":"HtmlParser"},{"__symbolic":"reference","module":"./config","name":"CompilerConfig"}]}],"clearCache":[{"__symbolic":"method"}],"clearCacheFor":[{"__symbolic":"method"}],"_fetch":[{"__symbolic":"method"}],"normalizeDirective":[{"__symbolic":"method"}],"normalizeTemplateSync":[{"__symbolic":"method"}],"normalizeTemplateAsync":[{"__symbolic":"method"}],"normalizeLoadedTemplate":[{"__symbolic":"method"}],"normalizeExternalStylesheets":[{"__symbolic":"method"}],"_loadMissingExternalStylesheets":[{"__symbolic":"method"}],"normalizeStylesheet":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"DirectiveNormalizer":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"./xhr","name":"XHR"},{"__symbolic":"reference","module":"./url_resolver","name":"UrlResolver"},{"__symbolic":"reference","module":"./ml_parser/html_parser","name":"HtmlParser"},{"__symbolic":"reference","module":"./config","name":"CompilerConfig"}]}],"clearCache":[{"__symbolic":"method"}],"clearCacheFor":[{"__symbolic":"method"}],"_fetch":[{"__symbolic":"method"}],"normalizeDirective":[{"__symbolic":"method"}],"normalizeTemplateSync":[{"__symbolic":"method"}],"normalizeTemplateAsync":[{"__symbolic":"method"}],"normalizeLoadedTemplate":[{"__symbolic":"method"}],"normalizeExternalStylesheets":[{"__symbolic":"method"}],"_loadMissingExternalStylesheets":[{"__symbolic":"method"}],"normalizeStylesheet":[{"__symbolic":"method"}]}}}}

@@ -10,3 +10,3 @@ /**

import { ReflectorReader } from '../core_private';
import { Type } from '../src/facade/lang';
import { Type } from './facade/lang';
export declare class DirectiveResolver {

@@ -18,6 +18,6 @@ private _reflector;

*/
resolve(type: Type): DirectiveMetadata;
resolve(type: Type, throwIfNotFound?: boolean): DirectiveMetadata;
private _mergeWithPropertyMetadata(dm, propertyMetadata, directiveType);
private _extractPublicName(def);
private _merge(dm, inputs, outputs, host, queries, directiveType);
}
export declare var CODEGEN_DIRECTIVE_RESOLVER: DirectiveResolver;

@@ -10,5 +10,6 @@ /**

import { ReflectorReader, reflector } from '../core_private';
import { ListWrapper, StringMapWrapper } from '../src/facade/collection';
import { BaseException } from '../src/facade/exceptions';
import { isPresent, stringify } from '../src/facade/lang';
import { StringMapWrapper } from './facade/collection';
import { BaseException } from './facade/exceptions';
import { isPresent, stringify } from './facade/lang';
import { splitAtColon } from './util';
function _isDirectiveMetadata(type) {

@@ -24,3 +25,3 @@ return type instanceof DirectiveMetadata;

*/
resolve(type) {
resolve(type, throwIfNotFound = true) {
var typeMetadata = this._reflector.annotations(resolveForwardRef(type));

@@ -34,3 +35,6 @@ if (isPresent(typeMetadata)) {

}
throw new BaseException(`No Directive annotation found on ${stringify(type)}`);
if (throwIfNotFound) {
throw new BaseException(`No Directive annotation found on ${stringify(type)}`);
}
return null;
}

@@ -52,3 +56,3 @@ _mergeWithPropertyMetadata(dm, propertyMetadata, directiveType) {

}
if (a instanceof OutputMetadata) {
else if (a instanceof OutputMetadata) {
if (isPresent(a.bindingPropertyName)) {

@@ -61,3 +65,3 @@ outputs.push(`${propName}: ${a.bindingPropertyName}`);

}
if (a instanceof HostBindingMetadata) {
else if (a instanceof HostBindingMetadata) {
if (isPresent(a.hostPropertyName)) {

@@ -70,7 +74,7 @@ host[`[${a.hostPropertyName}]`] = propName;

}
if (a instanceof HostListenerMetadata) {
else if (a instanceof HostListenerMetadata) {
var args = isPresent(a.args) ? a.args.join(', ') : '';
host[`(${a.eventName})`] = `${propName}(${args})`;
}
if (a instanceof QueryMetadata) {
else if (a instanceof QueryMetadata) {
queries[propName] = a;

@@ -82,12 +86,28 @@ }

}
_extractPublicName(def) { return splitAtColon(def, [null, def])[1].trim(); }
_merge(dm, inputs, outputs, host, queries, directiveType) {
var mergedInputs = isPresent(dm.inputs) ? ListWrapper.concat(dm.inputs, inputs) : inputs;
var mergedOutputs;
let mergedInputs;
if (isPresent(dm.inputs)) {
const inputNames = dm.inputs.map((def) => this._extractPublicName(def));
inputs.forEach((inputDef) => {
const publicName = this._extractPublicName(inputDef);
if (inputNames.indexOf(publicName) > -1) {
throw new BaseException(`Input '${publicName}' defined multiple times in '${stringify(directiveType)}'`);
}
});
mergedInputs = dm.inputs.concat(inputs);
}
else {
mergedInputs = inputs;
}
let mergedOutputs;
if (isPresent(dm.outputs)) {
dm.outputs.forEach((propName) => {
if (ListWrapper.contains(outputs, propName)) {
throw new BaseException(`Output event '${propName}' defined multiple times in '${stringify(directiveType)}'`);
const outputNames = dm.outputs.map((def) => this._extractPublicName(def));
outputs.forEach((outputDef) => {
const publicName = this._extractPublicName(outputDef);
if (outputNames.indexOf(publicName) > -1) {
throw new BaseException(`Output event '${publicName}' defined multiple times in '${stringify(directiveType)}'`);
}
});
mergedOutputs = ListWrapper.concat(dm.outputs, outputs);
mergedOutputs = dm.outputs.concat(outputs);
}

@@ -111,3 +131,12 @@ else {

viewProviders: dm.viewProviders,
precompile: dm.precompile
entryComponents: dm.entryComponents,
directives: dm.directives,
pipes: dm.pipes,
template: dm.template,
templateUrl: dm.templateUrl,
styles: dm.styles,
styleUrls: dm.styleUrls,
encapsulation: dm.encapsulation,
animations: dm.animations,
interpolation: dm.interpolation
});

@@ -136,3 +165,2 @@ }

];
export var CODEGEN_DIRECTIVE_RESOLVER = new DirectiveResolver(reflector);
//# sourceMappingURL=directive_resolver.js.map

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"DirectiveResolver":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../core_private","name":"ReflectorReader"}]}],"resolve":[{"__symbolic":"method"}],"_mergeWithPropertyMetadata":[{"__symbolic":"method"}],"_merge":[{"__symbolic":"method"}]}},"CODEGEN_DIRECTIVE_RESOLVER":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"DirectiveResolver"},"arguments":[{"__symbolic":"reference","module":"../core_private","name":"reflector"}]}}}
{"__symbolic":"module","version":1,"metadata":{"DirectiveResolver":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../core_private","name":"ReflectorReader"}]}],"resolve":[{"__symbolic":"method"}],"_mergeWithPropertyMetadata":[{"__symbolic":"method"}],"_extractPublicName":[{"__symbolic":"method"}],"_merge":[{"__symbolic":"method"}]}}}}

@@ -0,2 +1,16 @@

export declare class ParserError {
input: string;
errLocation: string;
ctxLocation: any;
message: string;
constructor(message: string, input: string, errLocation: string, ctxLocation?: any);
}
export declare class ParseSpan {
start: number;
end: number;
constructor(start: number, end: number);
}
export declare class AST {
span: ParseSpan;
constructor(span: ParseSpan);
visit(visitor: AstVisitor, context?: any): any;

@@ -22,3 +36,3 @@ toString(): string;

location: any;
constructor(prefix: string, uninterpretedExpression: string, location: any);
constructor(span: ParseSpan, prefix: string, uninterpretedExpression: string, location: any);
visit(visitor: AstVisitor, context?: any): any;

@@ -38,3 +52,3 @@ toString(): string;

expressions: any[];
constructor(expressions: any[]);
constructor(span: ParseSpan, expressions: any[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -46,3 +60,3 @@ }

falseExp: AST;
constructor(condition: AST, trueExp: AST, falseExp: AST);
constructor(span: ParseSpan, condition: AST, trueExp: AST, falseExp: AST);
visit(visitor: AstVisitor, context?: any): any;

@@ -53,3 +67,3 @@ }

name: string;
constructor(receiver: AST, name: string);
constructor(span: ParseSpan, receiver: AST, name: string);
visit(visitor: AstVisitor, context?: any): any;

@@ -61,3 +75,3 @@ }

value: AST;
constructor(receiver: AST, name: string, value: AST);
constructor(span: ParseSpan, receiver: AST, name: string, value: AST);
visit(visitor: AstVisitor, context?: any): any;

@@ -68,3 +82,3 @@ }

name: string;
constructor(receiver: AST, name: string);
constructor(span: ParseSpan, receiver: AST, name: string);
visit(visitor: AstVisitor, context?: any): any;

@@ -75,3 +89,3 @@ }

key: AST;
constructor(obj: AST, key: AST);
constructor(span: ParseSpan, obj: AST, key: AST);
visit(visitor: AstVisitor, context?: any): any;

@@ -83,3 +97,3 @@ }

value: AST;
constructor(obj: AST, key: AST, value: AST);
constructor(span: ParseSpan, obj: AST, key: AST, value: AST);
visit(visitor: AstVisitor, context?: any): any;

@@ -91,3 +105,3 @@ }

args: any[];
constructor(exp: AST, name: string, args: any[]);
constructor(span: ParseSpan, exp: AST, name: string, args: any[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -97,3 +111,3 @@ }

value: any;
constructor(value: any);
constructor(span: ParseSpan, value: any);
visit(visitor: AstVisitor, context?: any): any;

@@ -103,3 +117,3 @@ }

expressions: any[];
constructor(expressions: any[]);
constructor(span: ParseSpan, expressions: any[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -110,3 +124,3 @@ }

values: any[];
constructor(keys: any[], values: any[]);
constructor(span: ParseSpan, keys: any[], values: any[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -117,3 +131,3 @@ }

expressions: any[];
constructor(strings: any[], expressions: any[]);
constructor(span: ParseSpan, strings: any[], expressions: any[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -125,3 +139,3 @@ }

right: AST;
constructor(operation: string, left: AST, right: AST);
constructor(span: ParseSpan, operation: string, left: AST, right: AST);
visit(visitor: AstVisitor, context?: any): any;

@@ -131,3 +145,3 @@ }

expression: AST;
constructor(expression: AST);
constructor(span: ParseSpan, expression: AST);
visit(visitor: AstVisitor, context?: any): any;

@@ -139,3 +153,3 @@ }

args: any[];
constructor(receiver: AST, name: string, args: any[]);
constructor(span: ParseSpan, receiver: AST, name: string, args: any[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -147,3 +161,3 @@ }

args: any[];
constructor(receiver: AST, name: string, args: any[]);
constructor(span: ParseSpan, receiver: AST, name: string, args: any[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -154,3 +168,3 @@ }

args: any[];
constructor(target: AST, args: any[]);
constructor(span: ParseSpan, target: AST, args: any[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -162,3 +176,4 @@ }

location: string;
constructor(ast: AST, source: string, location: string);
errors: ParserError[];
constructor(ast: AST, source: string, location: string, errors: ParserError[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -165,0 +180,0 @@ toString(): string;

@@ -9,3 +9,21 @@ /**

import { ListWrapper } from '../facade/collection';
import { isBlank } from '../facade/lang';
export class ParserError {
constructor(message, input, errLocation, ctxLocation) {
this.input = input;
this.errLocation = errLocation;
this.ctxLocation = ctxLocation;
this.message = `Parser Error: ${message} ${errLocation} [${input}] in ${ctxLocation}`;
}
}
export class ParseSpan {
constructor(start, end) {
this.start = start;
this.end = end;
}
}
export class AST {
constructor(span) {
this.span = span;
}
visit(visitor, context = null) { return null; }

@@ -28,4 +46,4 @@ toString() { return 'AST'; }

export class Quote extends AST {
constructor(prefix, uninterpretedExpression, location) {
super();
constructor(span, prefix, uninterpretedExpression, location) {
super(span);
this.prefix = prefix;

@@ -52,4 +70,4 @@ this.uninterpretedExpression = uninterpretedExpression;

export class Chain extends AST {
constructor(expressions) {
super();
constructor(span, expressions) {
super(span);
this.expressions = expressions;

@@ -60,4 +78,4 @@ }

export class Conditional extends AST {
constructor(condition, trueExp, falseExp) {
super();
constructor(span, condition, trueExp, falseExp) {
super(span);
this.condition = condition;

@@ -72,4 +90,4 @@ this.trueExp = trueExp;

export class PropertyRead extends AST {
constructor(receiver, name) {
super();
constructor(span, receiver, name) {
super(span);
this.receiver = receiver;

@@ -83,4 +101,4 @@ this.name = name;

export class PropertyWrite extends AST {
constructor(receiver, name, value) {
super();
constructor(span, receiver, name, value) {
super(span);
this.receiver = receiver;

@@ -95,4 +113,4 @@ this.name = name;

export class SafePropertyRead extends AST {
constructor(receiver, name) {
super();
constructor(span, receiver, name) {
super(span);
this.receiver = receiver;

@@ -106,4 +124,4 @@ this.name = name;

export class KeyedRead extends AST {
constructor(obj, key) {
super();
constructor(span, obj, key) {
super(span);
this.obj = obj;

@@ -117,4 +135,4 @@ this.key = key;

export class KeyedWrite extends AST {
constructor(obj, key, value) {
super();
constructor(span, obj, key, value) {
super(span);
this.obj = obj;

@@ -129,4 +147,4 @@ this.key = key;

export class BindingPipe extends AST {
constructor(exp, name, args) {
super();
constructor(span, exp, name, args) {
super(span);
this.exp = exp;

@@ -139,4 +157,4 @@ this.name = name;

export class LiteralPrimitive extends AST {
constructor(value) {
super();
constructor(span, value) {
super(span);
this.value = value;

@@ -149,4 +167,4 @@ }

export class LiteralArray extends AST {
constructor(expressions) {
super();
constructor(span, expressions) {
super(span);
this.expressions = expressions;

@@ -159,4 +177,4 @@ }

export class LiteralMap extends AST {
constructor(keys, values) {
super();
constructor(span, keys, values) {
super(span);
this.keys = keys;

@@ -170,4 +188,4 @@ this.values = values;

export class Interpolation extends AST {
constructor(strings, expressions) {
super();
constructor(span, strings, expressions) {
super(span);
this.strings = strings;

@@ -181,4 +199,4 @@ this.expressions = expressions;

export class Binary extends AST {
constructor(operation, left, right) {
super();
constructor(span, operation, left, right) {
super(span);
this.operation = operation;

@@ -193,4 +211,4 @@ this.left = left;

export class PrefixNot extends AST {
constructor(expression) {
super();
constructor(span, expression) {
super(span);
this.expression = expression;

@@ -203,4 +221,4 @@ }

export class MethodCall extends AST {
constructor(receiver, name, args) {
super();
constructor(span, receiver, name, args) {
super(span);
this.receiver = receiver;

@@ -215,4 +233,4 @@ this.name = name;

export class SafeMethodCall extends AST {
constructor(receiver, name, args) {
super();
constructor(span, receiver, name, args) {
super(span);
this.receiver = receiver;

@@ -227,4 +245,4 @@ this.name = name;

export class FunctionCall extends AST {
constructor(target, args) {
super();
constructor(span, target, args) {
super(span);
this.target = target;

@@ -238,7 +256,8 @@ this.args = args;

export class ASTWithSource extends AST {
constructor(ast, source, location) {
super();
constructor(ast, source, location, errors) {
super(new ParseSpan(0, isBlank(source) ? 0 : source.length));
this.ast = ast;
this.source = source;
this.location = location;
this.errors = errors;
}

@@ -333,48 +352,48 @@ visit(visitor, context = null) { return this.ast.visit(visitor, context); }

visitInterpolation(ast, context) {
return new Interpolation(ast.strings, this.visitAll(ast.expressions));
return new Interpolation(ast.span, ast.strings, this.visitAll(ast.expressions));
}
visitLiteralPrimitive(ast, context) {
return new LiteralPrimitive(ast.value);
return new LiteralPrimitive(ast.span, ast.value);
}
visitPropertyRead(ast, context) {
return new PropertyRead(ast.receiver.visit(this), ast.name);
return new PropertyRead(ast.span, ast.receiver.visit(this), ast.name);
}
visitPropertyWrite(ast, context) {
return new PropertyWrite(ast.receiver.visit(this), ast.name, ast.value);
return new PropertyWrite(ast.span, ast.receiver.visit(this), ast.name, ast.value);
}
visitSafePropertyRead(ast, context) {
return new SafePropertyRead(ast.receiver.visit(this), ast.name);
return new SafePropertyRead(ast.span, ast.receiver.visit(this), ast.name);
}
visitMethodCall(ast, context) {
return new MethodCall(ast.receiver.visit(this), ast.name, this.visitAll(ast.args));
return new MethodCall(ast.span, ast.receiver.visit(this), ast.name, this.visitAll(ast.args));
}
visitSafeMethodCall(ast, context) {
return new SafeMethodCall(ast.receiver.visit(this), ast.name, this.visitAll(ast.args));
return new SafeMethodCall(ast.span, ast.receiver.visit(this), ast.name, this.visitAll(ast.args));
}
visitFunctionCall(ast, context) {
return new FunctionCall(ast.target.visit(this), this.visitAll(ast.args));
return new FunctionCall(ast.span, ast.target.visit(this), this.visitAll(ast.args));
}
visitLiteralArray(ast, context) {
return new LiteralArray(this.visitAll(ast.expressions));
return new LiteralArray(ast.span, this.visitAll(ast.expressions));
}
visitLiteralMap(ast, context) {
return new LiteralMap(ast.keys, this.visitAll(ast.values));
return new LiteralMap(ast.span, ast.keys, this.visitAll(ast.values));
}
visitBinary(ast, context) {
return new Binary(ast.operation, ast.left.visit(this), ast.right.visit(this));
return new Binary(ast.span, ast.operation, ast.left.visit(this), ast.right.visit(this));
}
visitPrefixNot(ast, context) {
return new PrefixNot(ast.expression.visit(this));
return new PrefixNot(ast.span, ast.expression.visit(this));
}
visitConditional(ast, context) {
return new Conditional(ast.condition.visit(this), ast.trueExp.visit(this), ast.falseExp.visit(this));
return new Conditional(ast.span, ast.condition.visit(this), ast.trueExp.visit(this), ast.falseExp.visit(this));
}
visitPipe(ast, context) {
return new BindingPipe(ast.exp.visit(this), ast.name, this.visitAll(ast.args));
return new BindingPipe(ast.span, ast.exp.visit(this), ast.name, this.visitAll(ast.args));
}
visitKeyedRead(ast, context) {
return new KeyedRead(ast.obj.visit(this), ast.key.visit(this));
return new KeyedRead(ast.span, ast.obj.visit(this), ast.key.visit(this));
}
visitKeyedWrite(ast, context) {
return new KeyedWrite(ast.obj.visit(this), ast.key.visit(this), ast.value.visit(this));
return new KeyedWrite(ast.span, ast.obj.visit(this), ast.key.visit(this), ast.value.visit(this));
}

@@ -388,7 +407,9 @@ visitAll(asts) {

}
visitChain(ast, context) { return new Chain(this.visitAll(ast.expressions)); }
visitChain(ast, context) {
return new Chain(ast.span, this.visitAll(ast.expressions));
}
visitQuote(ast, context) {
return new Quote(ast.prefix, ast.uninterpretedExpression, ast.location);
return new Quote(ast.span, ast.prefix, ast.uninterpretedExpression, ast.location);
}
}
//# sourceMappingURL=ast.js.map

@@ -1,2 +0,1 @@

import { BaseException } from '../facade/exceptions';
export declare enum TokenType {

@@ -9,5 +8,6 @@ Character = 0,

Number = 5,
Error = 6,
}
export declare class Lexer {
tokenize(text: string): any[];
tokenize(text: string): Token[];
}

@@ -32,2 +32,4 @@ export declare class Token {

isKeywordFalse(): boolean;
isKeywordThis(): boolean;
isError(): boolean;
toNumber(): number;

@@ -37,8 +39,3 @@ toString(): string;

export declare var EOF: Token;
export declare class ScannerError extends BaseException {
message: string;
constructor(message: string);
toString(): string;
}
export declare function isIdentifier(input: string): boolean;
export declare function isQuote(code: number): boolean;

@@ -10,3 +10,2 @@ /**

import * as chars from '../chars';
import { BaseException } from '../facade/exceptions';
import { NumberWrapper, StringJoiner, StringWrapper, isPresent } from '../facade/lang';

@@ -21,9 +20,10 @@ export var TokenType;

TokenType[TokenType["Number"] = 5] = "Number";
TokenType[TokenType["Error"] = 6] = "Error";
})(TokenType || (TokenType = {}));
const KEYWORDS = ['var', 'let', 'null', 'undefined', 'true', 'false', 'if', 'else'];
const KEYWORDS = ['var', 'let', 'null', 'undefined', 'true', 'false', 'if', 'else', 'this'];
export class Lexer {
tokenize(text) {
var scanner = new _Scanner(text);
var tokens = [];
var token = scanner.scanToken();
const scanner = new _Scanner(text);
const tokens = [];
let token = scanner.scanToken();
while (token != null) {

@@ -48,25 +48,24 @@ tokens.push(token);

isCharacter(code) {
return (this.type == TokenType.Character && this.numValue == code);
return this.type == TokenType.Character && this.numValue == code;
}
isNumber() { return (this.type == TokenType.Number); }
isString() { return (this.type == TokenType.String); }
isNumber() { return this.type == TokenType.Number; }
isString() { return this.type == TokenType.String; }
isOperator(operater) {
return (this.type == TokenType.Operator && this.strValue == operater);
return this.type == TokenType.Operator && this.strValue == operater;
}
isIdentifier() { return (this.type == TokenType.Identifier); }
isKeyword() { return (this.type == TokenType.Keyword); }
isIdentifier() { return this.type == TokenType.Identifier; }
isKeyword() { return this.type == TokenType.Keyword; }
isKeywordDeprecatedVar() {
return (this.type == TokenType.Keyword && this.strValue == 'var');
return this.type == TokenType.Keyword && this.strValue == 'var';
}
isKeywordLet() { return (this.type == TokenType.Keyword && this.strValue == 'let'); }
isKeywordNull() { return (this.type == TokenType.Keyword && this.strValue == 'null'); }
isKeywordLet() { return this.type == TokenType.Keyword && this.strValue == 'let'; }
isKeywordNull() { return this.type == TokenType.Keyword && this.strValue == 'null'; }
isKeywordUndefined() {
return (this.type == TokenType.Keyword && this.strValue == 'undefined');
return this.type == TokenType.Keyword && this.strValue == 'undefined';
}
isKeywordTrue() { return (this.type == TokenType.Keyword && this.strValue == 'true'); }
isKeywordFalse() { return (this.type == TokenType.Keyword && this.strValue == 'false'); }
toNumber() {
// -1 instead of NULL ok?
return (this.type == TokenType.Number) ? this.numValue : -1;
}
isKeywordTrue() { return this.type == TokenType.Keyword && this.strValue == 'true'; }
isKeywordFalse() { return this.type == TokenType.Keyword && this.strValue == 'false'; }
isKeywordThis() { return this.type == TokenType.Keyword && this.strValue == 'this'; }
isError() { return this.type == TokenType.Error; }
toNumber() { return this.type == TokenType.Number ? this.numValue : -1; }
toString() {

@@ -79,2 +78,3 @@ switch (this.type) {

case TokenType.String:
case TokenType.Error:
return this.strValue;

@@ -106,10 +106,6 @@ case TokenType.Number:

}
function newErrorToken(index, message) {
return new Token(index, TokenType.Error, 0, message);
}
export var EOF = new Token(-1, TokenType.Character, 0, '');
export class ScannerError extends BaseException {
constructor(message) {
super();
this.message = message;
}
toString() { return this.message; }
}
class _Scanner {

@@ -193,4 +189,4 @@ constructor(input) {

}
this.error(`Unexpected character [${StringWrapper.fromCharCode(peek)}]`, 0);
return null;
this.advance();
return this.error(`Unexpected character [${StringWrapper.fromCharCode(peek)}]`, 0);
}

@@ -252,3 +248,3 @@ scanCharacter(start, code) {

if (!chars.isDigit(this.peek))
this.error('Invalid exponent', -1);
return this.error('Invalid exponent', -1);
simple = false;

@@ -286,3 +282,3 @@ }

catch (e) {
this.error(`Invalid unicode escape [\\u${hex}]`, 0);
return this.error(`Invalid unicode escape [\\u${hex}]`, 0);
}

@@ -301,3 +297,3 @@ for (var i = 0; i < 5; i++) {

else if (this.peek == chars.$EOF) {
this.error('Unterminated quote', 0);
return this.error('Unterminated quote', 0);
}

@@ -319,4 +315,4 @@ else {

error(message, offset) {
var position = this.index + offset;
throw new ScannerError(`Lexer Error: ${message} at column ${position} in expression [${this.input}]`);
const position = this.index + offset;
return newErrorToken(position, `Lexer Error: ${message} at column ${position} in expression [${this.input}]`);
}

@@ -323,0 +319,0 @@ }

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"Lexer":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"tokenize":[{"__symbolic":"method"}]}},"EOF":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"Token"},"arguments":[-1,{"__symbolic":"select","expression":{"__symbolic":"reference","name":"TokenType"},"member":"Character"},0,""]},"isQuote":{"__symbolic":"function","parameters":["code"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"code"},"right":{"__symbolic":"reference","module":"../chars","name":"$SQ"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"code"},"right":{"__symbolic":"reference","module":"../chars","name":"$DQ"}}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"code"},"right":{"__symbolic":"reference","module":"../chars","name":"$BT"}}}}}}
{"__symbolic":"module","version":1,"metadata":{"TokenType":{"Character":0,"Identifier":1,"Keyword":2,"String":3,"Operator":4,"Number":5,"Error":6},"Lexer":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"tokenize":[{"__symbolic":"method"}]}},"EOF":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"Token"},"arguments":[-1,{"__symbolic":"select","expression":{"__symbolic":"reference","name":"TokenType"},"member":"Character"},0,""]},"isQuote":{"__symbolic":"function","parameters":["code"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"code"},"right":{"__symbolic":"reference","module":"../chars","name":"$SQ"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"code"},"right":{"__symbolic":"reference","module":"../chars","name":"$DQ"}}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"code"},"right":{"__symbolic":"reference","module":"../chars","name":"$BT"}}}}}}

@@ -1,3 +0,3 @@

import { InterpolationConfig } from '../interpolation_config';
import { AST, ASTWithSource, BindingPipe, LiteralMap, TemplateBinding } from './ast';
import { InterpolationConfig } from '../ml_parser/interpolation_config';
import { AST, ASTWithSource, BindingPipe, LiteralMap, ParseSpan, ParserError, TemplateBinding } from './ast';
import { Lexer, Token } from './lexer';

@@ -12,10 +12,13 @@ export declare class SplitInterpolation {

warnings: string[];
constructor(templateBindings: TemplateBinding[], warnings: string[]);
errors: ParserError[];
constructor(templateBindings: TemplateBinding[], warnings: string[], errors: ParserError[]);
}
export declare class Parser {
/** @internal */ _lexer: Lexer;
constructor(/** @internal */ _lexer: Lexer);
private _lexer;
private errors;
constructor(_lexer: Lexer);
parseAction(input: string, location: any, interpolationConfig?: InterpolationConfig): ASTWithSource;
parseBinding(input: string, location: any, interpolationConfig?: InterpolationConfig): ASTWithSource;
parseSimpleBinding(input: string, location: string, interpolationConfig?: InterpolationConfig): ASTWithSource;
private _reportError(message, input, errLocation, ctxLocation?);
private _parseBindingAst(input, location, interpolationConfig);

@@ -37,7 +40,12 @@ private _parseQuote(input, location);

parseAction: boolean;
private errors;
private rparensExpected;
private rbracketsExpected;
private rbracesExpected;
index: number;
constructor(input: string, location: any, tokens: any[], parseAction: boolean);
constructor(input: string, location: any, tokens: any[], parseAction: boolean, errors: ParserError[]);
peek(offset: number): Token;
readonly next: Token;
readonly inputIndex: number;
span(start: number): ParseSpan;
advance(): void;

@@ -76,2 +84,4 @@ optionalCharacter(code: number): boolean;

error(message: string, index?: number): void;
private locationText(index?);
private skip();
}

@@ -10,14 +10,6 @@ /**

import * as chars from '../chars';
import { ListWrapper } from '../facade/collection';
import { BaseException } from '../facade/exceptions';
import { RegExpWrapper, StringWrapper, escapeRegExp, isBlank, isPresent } from '../facade/lang';
import { DEFAULT_INTERPOLATION_CONFIG } from '../interpolation_config';
import { ASTWithSource, Binary, BindingPipe, Chain, Conditional, EmptyExpr, FunctionCall, ImplicitReceiver, Interpolation, KeyedRead, KeyedWrite, LiteralArray, LiteralMap, LiteralPrimitive, MethodCall, PrefixNot, PropertyRead, PropertyWrite, Quote, SafeMethodCall, SafePropertyRead, TemplateBinding } from './ast';
import { EOF, Lexer, isIdentifier, isQuote } from './lexer';
var _implicitReceiver = new ImplicitReceiver();
class ParseException extends BaseException {
constructor(message, input, errLocation, ctxLocation) {
super(`Parser Error: ${message} ${errLocation} [${input}] in ${ctxLocation}`);
}
}
import { StringWrapper, escapeRegExp, isBlank, isPresent } from '../facade/lang';
import { DEFAULT_INTERPOLATION_CONFIG } from '../ml_parser/interpolation_config';
import { ASTWithSource, Binary, BindingPipe, Chain, Conditional, EmptyExpr, FunctionCall, ImplicitReceiver, Interpolation, KeyedRead, KeyedWrite, LiteralArray, LiteralMap, LiteralPrimitive, MethodCall, ParseSpan, ParserError, PrefixNot, PropertyRead, PropertyWrite, Quote, SafeMethodCall, SafePropertyRead, TemplateBinding } from './ast';
import { EOF, Lexer, TokenType, isIdentifier, isQuote } from './lexer';
export class SplitInterpolation {

@@ -30,24 +22,26 @@ constructor(strings, expressions) {

export class TemplateBindingParseResult {
constructor(templateBindings, warnings) {
constructor(templateBindings, warnings, errors) {
this.templateBindings = templateBindings;
this.warnings = warnings;
this.errors = errors;
}
}
function _createInterpolateRegExp(config) {
const regexp = escapeRegExp(config.start) + '([\\s\\S]*?)' + escapeRegExp(config.end);
return RegExpWrapper.create(regexp, 'g');
const pattern = escapeRegExp(config.start) + '([\\s\\S]*?)' + escapeRegExp(config.end);
return new RegExp(pattern, 'g');
}
export class Parser {
constructor(/** @internal */ _lexer) {
constructor(_lexer) {
this._lexer = _lexer;
this.errors = [];
}
parseAction(input, location, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
this._checkNoInterpolation(input, location, interpolationConfig);
var tokens = this._lexer.tokenize(this._stripComments(input));
var ast = new _ParseAST(input, location, tokens, true).parseChain();
return new ASTWithSource(ast, input, location);
const tokens = this._lexer.tokenize(this._stripComments(input));
const ast = new _ParseAST(input, location, tokens, true, this.errors).parseChain();
return new ASTWithSource(ast, input, location, this.errors);
}
parseBinding(input, location, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
var ast = this._parseBindingAst(input, location, interpolationConfig);
return new ASTWithSource(ast, input, location);
return new ASTWithSource(ast, input, location, this.errors);
}

@@ -57,6 +51,9 @@ parseSimpleBinding(input, location, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {

if (!SimpleExpressionChecker.check(ast)) {
throw new ParseException('Host binding expression can only contain field access and constants', input, location);
this._reportError('Host binding expression can only contain field access and constants', input, location);
}
return new ASTWithSource(ast, input, location);
return new ASTWithSource(ast, input, location, this.errors);
}
_reportError(message, input, errLocation, ctxLocation) {
this.errors.push(new ParserError(message, input, errLocation, ctxLocation));
}
_parseBindingAst(input, location, interpolationConfig) {

@@ -71,3 +68,3 @@ // Quotes expressions use 3rd-party expression language. We don't want to use

var tokens = this._lexer.tokenize(this._stripComments(input));
return new _ParseAST(input, location, tokens, false).parseChain();
return new _ParseAST(input, location, tokens, false, this.errors).parseChain();
}

@@ -84,7 +81,7 @@ _parseQuote(input, location) {

var uninterpretedExpression = input.substring(prefixSeparatorIndex + 1);
return new Quote(prefix, uninterpretedExpression, location);
return new Quote(new ParseSpan(0, input.length), prefix, uninterpretedExpression, location);
}
parseTemplateBindings(input, location) {
var tokens = this._lexer.tokenize(input);
return new _ParseAST(input, location, tokens, false).parseTemplateBindings();
return new _ParseAST(input, location, tokens, false, this.errors).parseTemplateBindings();
}

@@ -98,6 +95,6 @@ parseInterpolation(input, location, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {

var tokens = this._lexer.tokenize(this._stripComments(split.expressions[i]));
var ast = new _ParseAST(input, location, tokens, false).parseChain();
var ast = new _ParseAST(input, location, tokens, false, this.errors).parseChain();
expressions.push(ast);
}
return new ASTWithSource(new Interpolation(split.strings, expressions), input, location);
return new ASTWithSource(new Interpolation(new ParseSpan(0, isBlank(input) ? 0 : input.length), split.strings, expressions), input, location, this.errors);
}

@@ -110,5 +107,5 @@ splitInterpolation(input, location, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {

}
var strings = [];
var expressions = [];
for (var i = 0; i < parts.length; i++) {
const strings = [];
const expressions = [];
for (let i = 0; i < parts.length; i++) {
var part = parts[i];

@@ -123,3 +120,3 @@ if (i % 2 === 0) {

else {
throw new ParseException('Blank expressions are not allowed in interpolated strings', input, `at column ${this._findInterpolationErrorColumn(parts, i, interpolationConfig)} in`, location);
this._reportError('Blank expressions are not allowed in interpolated strings', input, `at column ${this._findInterpolationErrorColumn(parts, i, interpolationConfig)} in`, location);
}

@@ -130,6 +127,6 @@ }

wrapLiteralPrimitive(input, location) {
return new ASTWithSource(new LiteralPrimitive(input), input, location);
return new ASTWithSource(new LiteralPrimitive(new ParseSpan(0, isBlank(input) ? 0 : input.length), input), input, location, this.errors);
}
_stripComments(input) {
let i = this._commentStart(input);
const i = this._commentStart(input);
return isPresent(i) ? input.substring(0, i).trim() : input;

@@ -139,5 +136,5 @@ }

var outerQuote = null;
for (var i = 0; i < input.length - 1; i++) {
let char = StringWrapper.charCodeAt(input, i);
let nextChar = StringWrapper.charCodeAt(input, i + 1);
for (let i = 0; i < input.length - 1; i++) {
const char = StringWrapper.charCodeAt(input, i);
const nextChar = StringWrapper.charCodeAt(input, i + 1);
if (char === chars.$SLASH && nextChar == chars.$SLASH && isBlank(outerQuote))

@@ -158,3 +155,3 @@ return i;

if (parts.length > 1) {
throw new ParseException(`Got interpolation (${interpolationConfig.start}${interpolationConfig.end}) where expression was expected`, input, `at column ${this._findInterpolationErrorColumn(parts, 1, interpolationConfig)} in`, location);
this._reportError(`Got interpolation (${interpolationConfig.start}${interpolationConfig.end}) where expression was expected`, input, `at column ${this._findInterpolationErrorColumn(parts, 1, interpolationConfig)} in`, location);
}

@@ -181,3 +178,3 @@ }

export class _ParseAST {
constructor(input, location, tokens, parseAction) {
constructor(input, location, tokens, parseAction, errors) {
this.input = input;

@@ -187,2 +184,6 @@ this.location = location;

this.parseAction = parseAction;
this.errors = errors;
this.rparensExpected = 0;
this.rbracketsExpected = 0;
this.rbracesExpected = 0;
this.index = 0;

@@ -198,2 +199,3 @@ }

}
span(start) { return new ParseSpan(start, this.inputIndex); }
advance() { this.index++; }

@@ -235,2 +237,3 @@ optionalCharacter(code) {

this.error(`Unexpected token ${n}, expected identifier or keyword`);
return '';
}

@@ -244,2 +247,3 @@ this.advance();

this.error(`Unexpected token ${n}, expected identifier, keyword, or string`);
return '';
}

@@ -251,2 +255,3 @@ this.advance();

var exprs = [];
const start = this.inputIndex;
while (this.index < this.tokens.length) {

@@ -267,6 +272,6 @@ var expr = this.parsePipe();

if (exprs.length == 0)
return new EmptyExpr();
return new EmptyExpr(this.span(start));
if (exprs.length == 1)
return exprs[0];
return new Chain(exprs);
return new Chain(this.span(start), exprs);
}

@@ -285,3 +290,3 @@ parsePipe() {

}
result = new BindingPipe(result, name, args);
result = new BindingPipe(this.span(result.span.start), result, name, args);
} while (this.optionalOperator('|'));

@@ -293,6 +298,7 @@ }

parseConditional() {
var start = this.inputIndex;
var result = this.parseLogicalOr();
const start = this.inputIndex;
const result = this.parseLogicalOr();
if (this.optionalOperator('?')) {
var yes = this.parsePipe();
const yes = this.parsePipe();
let no;
if (!this.optionalCharacter(chars.$COLON)) {

@@ -302,5 +308,8 @@ var end = this.inputIndex;

this.error(`Conditional expression ${expression} requires all 3 expressions`);
no = new EmptyExpr(this.span(start));
}
var no = this.parsePipe();
return new Conditional(result, yes, no);
else {
no = this.parsePipe();
}
return new Conditional(this.span(start), result, yes, no);
}

@@ -313,5 +322,6 @@ else {

// '||'
var result = this.parseLogicalAnd();
let result = this.parseLogicalAnd();
while (this.optionalOperator('||')) {
result = new Binary('||', result, this.parseLogicalAnd());
const right = this.parseLogicalAnd();
result = new Binary(this.span(result.span.start), '||', result, right);
}

@@ -322,5 +332,6 @@ return result;

// '&&'
var result = this.parseEquality();
let result = this.parseEquality();
while (this.optionalOperator('&&')) {
result = new Binary('&&', result, this.parseEquality());
const right = this.parseEquality();
result = new Binary(this.span(result.span.start), '&&', result, right);
}

@@ -331,91 +342,96 @@ return result;

// '==','!=','===','!=='
var result = this.parseRelational();
while (true) {
if (this.optionalOperator('==')) {
result = new Binary('==', result, this.parseRelational());
let result = this.parseRelational();
while (this.next.type == TokenType.Operator) {
let operator = this.next.strValue;
switch (operator) {
case '==':
case '===':
case '!=':
case '!==':
this.advance();
const right = this.parseRelational();
result = new Binary(this.span(result.span.start), operator, result, right);
continue;
}
else if (this.optionalOperator('===')) {
result = new Binary('===', result, this.parseRelational());
}
else if (this.optionalOperator('!=')) {
result = new Binary('!=', result, this.parseRelational());
}
else if (this.optionalOperator('!==')) {
result = new Binary('!==', result, this.parseRelational());
}
else {
return result;
}
break;
}
return result;
}
parseRelational() {
// '<', '>', '<=', '>='
var result = this.parseAdditive();
while (true) {
if (this.optionalOperator('<')) {
result = new Binary('<', result, this.parseAdditive());
let result = this.parseAdditive();
while (this.next.type == TokenType.Operator) {
let operator = this.next.strValue;
switch (operator) {
case '<':
case '>':
case '<=':
case '>=':
this.advance();
const right = this.parseAdditive();
result = new Binary(this.span(result.span.start), operator, result, right);
continue;
}
else if (this.optionalOperator('>')) {
result = new Binary('>', result, this.parseAdditive());
}
else if (this.optionalOperator('<=')) {
result = new Binary('<=', result, this.parseAdditive());
}
else if (this.optionalOperator('>=')) {
result = new Binary('>=', result, this.parseAdditive());
}
else {
return result;
}
break;
}
return result;
}
parseAdditive() {
// '+', '-'
var result = this.parseMultiplicative();
while (true) {
if (this.optionalOperator('+')) {
result = new Binary('+', result, this.parseMultiplicative());
let result = this.parseMultiplicative();
while (this.next.type == TokenType.Operator) {
const operator = this.next.strValue;
switch (operator) {
case '+':
case '-':
this.advance();
let right = this.parseMultiplicative();
result = new Binary(this.span(result.span.start), operator, result, right);
continue;
}
else if (this.optionalOperator('-')) {
result = new Binary('-', result, this.parseMultiplicative());
}
else {
return result;
}
break;
}
return result;
}
parseMultiplicative() {
// '*', '%', '/'
var result = this.parsePrefix();
while (true) {
if (this.optionalOperator('*')) {
result = new Binary('*', result, this.parsePrefix());
let result = this.parsePrefix();
while (this.next.type == TokenType.Operator) {
const operator = this.next.strValue;
switch (operator) {
case '*':
case '%':
case '/':
this.advance();
let right = this.parsePrefix();
result = new Binary(this.span(result.span.start), operator, result, right);
continue;
}
else if (this.optionalOperator('%')) {
result = new Binary('%', result, this.parsePrefix());
}
else if (this.optionalOperator('/')) {
result = new Binary('/', result, this.parsePrefix());
}
else {
return result;
}
break;
}
return result;
}
parsePrefix() {
if (this.optionalOperator('+')) {
return this.parsePrefix();
if (this.next.type == TokenType.Operator) {
const start = this.inputIndex;
const operator = this.next.strValue;
let result;
switch (operator) {
case '+':
this.advance();
return this.parsePrefix();
case '-':
this.advance();
result = this.parsePrefix();
return new Binary(this.span(start), operator, new LiteralPrimitive(new ParseSpan(start, start), 0), result);
case '!':
this.advance();
result = this.parsePrefix();
return new PrefixNot(this.span(start), result);
}
}
else if (this.optionalOperator('-')) {
return new Binary('-', new LiteralPrimitive(0), this.parsePrefix());
}
else if (this.optionalOperator('!')) {
return new PrefixNot(this.parsePrefix());
}
else {
return this.parseCallChain();
}
return this.parseCallChain();
}
parseCallChain() {
var result = this.parsePrimary();
let result = this.parsePrimary();
while (true) {

@@ -429,16 +445,20 @@ if (this.optionalCharacter(chars.$PERIOD)) {

else if (this.optionalCharacter(chars.$LBRACKET)) {
var key = this.parsePipe();
this.rbracketsExpected++;
const key = this.parsePipe();
this.rbracketsExpected--;
this.expectCharacter(chars.$RBRACKET);
if (this.optionalOperator('=')) {
var value = this.parseConditional();
result = new KeyedWrite(result, key, value);
const value = this.parseConditional();
result = new KeyedWrite(this.span(result.span.start), result, key, value);
}
else {
result = new KeyedRead(result, key);
result = new KeyedRead(this.span(result.span.start), result, key);
}
}
else if (this.optionalCharacter(chars.$LPAREN)) {
var args = this.parseCallArguments();
this.rparensExpected++;
const args = this.parseCallArguments();
this.rparensExpected--;
this.expectCharacter(chars.$RPAREN);
result = new FunctionCall(result, args);
result = new FunctionCall(this.span(result.span.start), result, args);
}

@@ -451,23 +471,36 @@ else {

parsePrimary() {
const start = this.inputIndex;
if (this.optionalCharacter(chars.$LPAREN)) {
let result = this.parsePipe();
this.rparensExpected++;
const result = this.parsePipe();
this.rparensExpected--;
this.expectCharacter(chars.$RPAREN);
return result;
}
else if (this.next.isKeywordNull() || this.next.isKeywordUndefined()) {
else if (this.next.isKeywordNull()) {
this.advance();
return new LiteralPrimitive(null);
return new LiteralPrimitive(this.span(start), null);
}
else if (this.next.isKeywordUndefined()) {
this.advance();
return new LiteralPrimitive(this.span(start), void 0);
}
else if (this.next.isKeywordTrue()) {
this.advance();
return new LiteralPrimitive(true);
return new LiteralPrimitive(this.span(start), true);
}
else if (this.next.isKeywordFalse()) {
this.advance();
return new LiteralPrimitive(false);
return new LiteralPrimitive(this.span(start), false);
}
else if (this.next.isKeywordThis()) {
this.advance();
return new ImplicitReceiver(this.span(start));
}
else if (this.optionalCharacter(chars.$LBRACKET)) {
var elements = this.parseExpressionList(chars.$RBRACKET);
this.rbracketsExpected++;
const elements = this.parseExpressionList(chars.$RBRACKET);
this.rbracketsExpected--;
this.expectCharacter(chars.$RBRACKET);
return new LiteralArray(elements);
return new LiteralArray(this.span(start), elements);
}

@@ -478,25 +511,25 @@ else if (this.next.isCharacter(chars.$LBRACE)) {

else if (this.next.isIdentifier()) {
return this.parseAccessMemberOrMethodCall(_implicitReceiver, false);
return this.parseAccessMemberOrMethodCall(new ImplicitReceiver(this.span(start)), false);
}
else if (this.next.isNumber()) {
var value = this.next.toNumber();
const value = this.next.toNumber();
this.advance();
return new LiteralPrimitive(value);
return new LiteralPrimitive(this.span(start), value);
}
else if (this.next.isString()) {
var literalValue = this.next.toString();
const literalValue = this.next.toString();
this.advance();
return new LiteralPrimitive(literalValue);
return new LiteralPrimitive(this.span(start), literalValue);
}
else if (this.index >= this.tokens.length) {
this.error(`Unexpected end of expression: ${this.input}`);
return new EmptyExpr(this.span(start));
}
else {
this.error(`Unexpected token ${this.next}`);
return new EmptyExpr(this.span(start));
}
// error() throws, so we don't reach here.
throw new BaseException('Fell through all cases in parsePrimary');
}
parseExpressionList(terminator) {
var result = [];
let result = [];
if (!this.next.isCharacter(terminator)) {

@@ -510,6 +543,8 @@ do {

parseLiteralMap() {
var keys = [];
var values = [];
let keys = [];
let values = [];
const start = this.inputIndex;
this.expectCharacter(chars.$LBRACE);
if (!this.optionalCharacter(chars.$RBRACE)) {
this.rbracesExpected++;
do {

@@ -521,12 +556,18 @@ var key = this.expectIdentifierOrKeywordOrString();

} while (this.optionalCharacter(chars.$COMMA));
this.rbracesExpected--;
this.expectCharacter(chars.$RBRACE);
}
return new LiteralMap(keys, values);
return new LiteralMap(this.span(start), keys, values);
}
parseAccessMemberOrMethodCall(receiver, isSafe = false) {
let id = this.expectIdentifierOrKeyword();
const start = receiver.span.start;
const id = this.expectIdentifierOrKeyword();
if (this.optionalCharacter(chars.$LPAREN)) {
let args = this.parseCallArguments();
this.rparensExpected++;
const args = this.parseCallArguments();
this.expectCharacter(chars.$RPAREN);
return isSafe ? new SafeMethodCall(receiver, id, args) : new MethodCall(receiver, id, args);
this.rparensExpected--;
let span = this.span(start);
return isSafe ? new SafeMethodCall(span, receiver, id, args) :
new MethodCall(span, receiver, id, args);
}

@@ -537,5 +578,6 @@ else {

this.error('The \'?.\' operator cannot be used in the assignment');
return new EmptyExpr(this.span(start));
}
else {
return new SafePropertyRead(receiver, id);
return new SafePropertyRead(this.span(start), receiver, id);
}

@@ -547,12 +589,12 @@ }

this.error('Bindings cannot contain assignments');
return new EmptyExpr(this.span(start));
}
let value = this.parseConditional();
return new PropertyWrite(receiver, id, value);
return new PropertyWrite(this.span(start), receiver, id, value);
}
else {
return new PropertyRead(receiver, id);
return new PropertyRead(this.span(start), receiver, id);
}
}
}
return null;
}

@@ -572,4 +614,4 @@ parseCallArguments() {

expectTemplateBindingKey() {
var result = '';
var operatorFound = false;
let result = '';
let operatorFound = false;
do {

@@ -585,5 +627,5 @@ result += this.expectIdentifierOrKeywordOrString();

parseTemplateBindings() {
var bindings = [];
var prefix = null;
var warnings = [];
let bindings = [];
let prefix = null;
let warnings = [];
while (this.index < this.tokens.length) {

@@ -624,6 +666,6 @@ var keyIsVar = this.peekKeywordLet();

!this.peekDeprecatedOperatorHash()) {
var start = this.inputIndex;
const start = this.inputIndex;
var ast = this.parsePipe();
var source = this.input.substring(start, this.inputIndex);
expression = new ASTWithSource(ast, source, this.location);
expression = new ASTWithSource(ast, source, this.location, this.errors);
}

@@ -635,11 +677,39 @@ bindings.push(new TemplateBinding(key, keyIsVar, name, expression));

}
return new TemplateBindingParseResult(bindings, warnings);
return new TemplateBindingParseResult(bindings, warnings, this.errors);
}
error(message, index = null) {
this.errors.push(new ParserError(message, this.input, this.locationText(index), this.location));
this.skip();
}
locationText(index = null) {
if (isBlank(index))
index = this.index;
var location = (index < this.tokens.length) ? `at column ${this.tokens[index].index + 1} in` :
return (index < this.tokens.length) ? `at column ${this.tokens[index].index + 1} in` :
`at the end of the expression`;
throw new ParseException(message, this.input, location, this.location);
}
// Error recovery should skip tokens until it encounters a recovery point. skip() treats
// the end of input and a ';' as unconditionally a recovery point. It also treats ')',
// '}' and ']' as conditional recovery points if one of calling productions is expecting
// one of these symbols. This allows skip() to recover from errors such as '(a.) + 1' allowing
// more of the AST to be retained (it doesn't skip any tokens as the ')' is retained because
// of the '(' begins an '(' <expr> ')' production). The recovery points of grouping symbols
// must be conditional as they must be skipped if none of the calling productions are not
// expecting the closing token else we will never make progress in the case of an
// extrainious group closing symbol (such as a stray ')'). This is not the case for ';' because
// parseChain() is always the root production and it expects a ';'.
// If a production expects one of these token it increments the corresponding nesting count,
// and then decrements it just prior to checking if the token is in the input.
skip() {
let n = this.next;
while (this.index < this.tokens.length && !n.isCharacter(chars.$SEMICOLON) &&
(this.rparensExpected <= 0 || !n.isCharacter(chars.$RPAREN)) &&
(this.rbracesExpected <= 0 || !n.isCharacter(chars.$RBRACE)) &&
(this.rbracketsExpected <= 0 || !n.isCharacter(chars.$RBRACKET))) {
if (this.next.isError()) {
this.errors.push(new ParserError(this.next.toString(), this.input, this.locationText(), this.location));
}
this.advance();
n = this.next;
}
}
}

@@ -672,9 +742,3 @@ class SimpleExpressionChecker {

visitKeyedWrite(ast, context) { this.simple = false; }
visitAll(asts) {
var res = ListWrapper.createFixedSize(asts.length);
for (var i = 0; i < asts.length; ++i) {
res[i] = asts[i].visit(this);
}
return res;
}
visitAll(asts) { return asts.map(node => node.visit(this)); }
visitChain(ast, context) { this.simple = false; }

@@ -681,0 +745,0 @@ visitQuote(ast, context) { this.simple = false; }

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"Parser":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"./lexer","name":"Lexer"}]}],"parseAction":[{"__symbolic":"method"}],"parseBinding":[{"__symbolic":"method"}],"parseSimpleBinding":[{"__symbolic":"method"}],"_parseBindingAst":[{"__symbolic":"method"}],"_parseQuote":[{"__symbolic":"method"}],"parseTemplateBindings":[{"__symbolic":"method"}],"parseInterpolation":[{"__symbolic":"method"}],"splitInterpolation":[{"__symbolic":"method"}],"wrapLiteralPrimitive":[{"__symbolic":"method"}],"_stripComments":[{"__symbolic":"method"}],"_commentStart":[{"__symbolic":"method"}],"_checkNoInterpolation":[{"__symbolic":"method"}],"_findInterpolationErrorColumn":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"Parser":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"./lexer","name":"Lexer"}]}],"parseAction":[{"__symbolic":"method"}],"parseBinding":[{"__symbolic":"method"}],"parseSimpleBinding":[{"__symbolic":"method"}],"_reportError":[{"__symbolic":"method"}],"_parseBindingAst":[{"__symbolic":"method"}],"_parseQuote":[{"__symbolic":"method"}],"parseTemplateBindings":[{"__symbolic":"method"}],"parseInterpolation":[{"__symbolic":"method"}],"splitInterpolation":[{"__symbolic":"method"}],"wrapLiteralPrimitive":[{"__symbolic":"method"}],"_stripComments":[{"__symbolic":"method"}],"_commentStart":[{"__symbolic":"method"}],"_checkNoInterpolation":[{"__symbolic":"method"}],"_findInterpolationErrorColumn":[{"__symbolic":"method"}]}}}}

@@ -47,3 +47,3 @@ export declare var Map: MapConstructor;

[key: string]: V;
}, callback: Function): void;
}, callback: (v: V, K: string) => void): void;
static merge<V>(m1: {

@@ -50,0 +50,0 @@ [key: string]: V;

@@ -120,6 +120,3 @@ /**

static values(map) {
return Object.keys(map).reduce((r, a) => {
r.push(map[a]);
return r;
}, []);
return Object.keys(map).map((k) => map[k]);
}

@@ -134,6 +131,4 @@ static isEmpty(map) {

static forEach(map, callback) {
for (var prop in map) {
if (map.hasOwnProperty(prop)) {
callback(map[prop], prop);
}
for (let k of Object.keys(map)) {
callback(map[k], k);
}

@@ -143,11 +138,7 @@ }

var m = {};
for (var attr in m1) {
if (m1.hasOwnProperty(attr)) {
m[attr] = m1[attr];
}
for (let k of Object.keys(m1)) {
m[k] = m1[k];
}
for (var attr in m2) {
if (m2.hasOwnProperty(attr)) {
m[attr] = m2[attr];
}
for (let k of Object.keys(m2)) {
m[k] = m2[k];
}

@@ -154,0 +145,0 @@ return m;

@@ -18,3 +18,3 @@ /**

*
* bootstrap(MyApp, {provide: ExceptionHandler, useClass: MyExceptionHandler}])
* bootstrap(MyApp, [{provide: ExceptionHandler, useClass: MyExceptionHandler}])
*

@@ -21,0 +21,0 @@ * ```

@@ -38,3 +38,3 @@ /**

*
* bootstrap(MyApp, {provide: ExceptionHandler, useClass: MyExceptionHandler}])
* bootstrap(MyApp, [{provide: ExceptionHandler, useClass: MyExceptionHandler}])
*

@@ -41,0 +41,0 @@ * ```

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"makeTypeError":{"__symbolic":"function","parameters":["message"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"TypeError"},"arguments":[{"__symbolic":"reference","name":"message"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"makeTypeError":{"__symbolic":"function","parameters":["message"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"TypeError"},"arguments":[{"__symbolic":"reference","name":"message"}]}}},"exports":[{"from":"./exception_handler","export":["ExceptionHandler"]}]}

@@ -30,3 +30,2 @@ /**

export declare function scheduleMicroTask(fn: Function): void;
export declare const IS_DART: boolean;
declare var _global: BrowserNodeGlobal;

@@ -109,18 +108,2 @@ export { _global as global };

export declare var RegExp: RegExpConstructor;
export declare class RegExpWrapper {
static create(regExpStr: string, flags?: string): RegExp;
static firstMatch(regExp: RegExp, input: string): RegExpExecArray;
static test(regExp: RegExp, input: string): boolean;
static matcher(regExp: RegExp, input: string): {
re: RegExp;
input: string;
};
static replaceAll(regExp: RegExp, input: string, replace: Function): string;
}
export declare class RegExpMatcherWrapper {
static next(matcher: {
re: RegExp;
input: string;
}): RegExpExecArray;
}
export declare class FunctionWrapper {

@@ -127,0 +110,0 @@ static apply(fn: Function, posArgs: any): any;

@@ -24,3 +24,2 @@ /**

}
export const IS_DART = false;
// Need to declare a new variable for global here since TypeScript

@@ -82,3 +81,5 @@ // exports the original value of the symbol.

export function isPromise(obj) {
return obj instanceof _global.Promise;
// allow any Promise/A+ compliant thenable.
// It's up to the caller to ensure that obj.then conforms to the spec
return isPresent(obj) && isFunction(obj.then);
}

@@ -99,8 +100,8 @@ export function isArray(obj) {

}
if (token.overriddenName) {
return token.overriddenName;
}
if (token.name) {
return token.name;
}
if (token.overriddenName) {
return token.overriddenName;
}
var res = token.toString();

@@ -231,44 +232,2 @@ var newLineIndex = res.indexOf('\n');

export var RegExp = _global.RegExp;
export class RegExpWrapper {
static create(regExpStr, flags = '') {
flags = flags.replace(/g/g, '');
return new _global.RegExp(regExpStr, flags + 'g');
}
static firstMatch(regExp, input) {
// Reset multimatch regex state
regExp.lastIndex = 0;
return regExp.exec(input);
}
static test(regExp, input) {
regExp.lastIndex = 0;
return regExp.test(input);
}
static matcher(regExp, input) {
// Reset regex state for the case
// someone did not loop over all matches
// last time.
regExp.lastIndex = 0;
return { re: regExp, input: input };
}
static replaceAll(regExp, input, replace) {
let c = regExp.exec(input);
let res = '';
regExp.lastIndex = 0;
let prev = 0;
while (c) {
res += input.substring(prev, c.index);
res += replace(c);
prev = c.index + c[0].length;
regExp.lastIndex = prev;
c = regExp.exec(input);
}
res += input.substring(prev);
return res;
}
}
export class RegExpMatcherWrapper {
static next(matcher) {
return matcher.re.exec(matcher.input);
}
}
export class FunctionWrapper {

@@ -275,0 +234,0 @@ static apply(fn, posArgs) { return fn.apply(null, posArgs); }

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"IS_DART":false,"Type":{"__symbolic":"reference","name":"Function"},"Math":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"_global"},"member":"Math"},"Date":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"_global"},"member":"Date"},"isPresent":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"reference","name":"obj"},"right":{"__symbolic":"reference","name":"undefined"}},"right":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"reference","name":"obj"},"right":null}}},"isBlank":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"obj"},"right":{"__symbolic":"reference","name":"undefined"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"obj"},"right":null}}},"isBoolean":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":106,"character":8},"right":"boolean"}},"isNumber":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":110,"character":8},"right":"number"}},"isString":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":114,"character":8},"right":"string"}},"isFunction":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":118,"character":8},"right":"function"}},"isType":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isFunction"},"arguments":[{"__symbolic":"reference","name":"obj"}]}},"isStringMap":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":126,"character":8},"right":"object"},"right":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"reference","name":"obj"},"right":null}}},"isStrictStringMap":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isStringMap"},"arguments":[{"__symbolic":"reference","name":"obj"}]},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Object"},"member":"getPrototypeOf"},"arguments":[{"__symbolic":"reference","name":"obj"}]},"right":{"__symbolic":"reference","name":"STRING_MAP_PROTO"}}}},"isPromise":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"instanceof","left":{"__symbolic":"reference","name":"obj"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"_global"},"member":"Promise"}}},"isArray":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Array"},"member":"isArray"},"arguments":[{"__symbolic":"reference","name":"obj"}]}},"isDate":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"instanceof","left":{"__symbolic":"reference","name":"obj"},"right":{"__symbolic":"reference","name":"Date"}},"right":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isNaN"},"arguments":[{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"obj"},"member":"valueOf"}}]}}}},"serializeEnum":{"__symbolic":"function","parameters":["val"],"value":{"__symbolic":"reference","name":"val"}},"deserializeEnum":{"__symbolic":"function","parameters":["val","values"],"value":{"__symbolic":"reference","name":"val"}},"resolveEnumToken":{"__symbolic":"function","parameters":["enumValue","val"],"value":{"__symbolic":"index","expression":{"__symbolic":"reference","name":"enumValue"},"index":{"__symbolic":"reference","name":"val"}}},"RegExp":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"_global"},"member":"RegExp"},"looseIdentical":{"__symbolic":"function","parameters":["a","b"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"a"},"right":{"__symbolic":"reference","name":"b"}},"right":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":366,"character":19},"right":"number"},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":366,"character":44},"right":"number"}},"right":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isNaN"},"arguments":[{"__symbolic":"reference","name":"a"}]}},"right":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isNaN"},"arguments":[{"__symbolic":"reference","name":"b"}]}}}},"getMapKey":{"__symbolic":"function","parameters":["value"],"value":{"__symbolic":"reference","name":"value"}},"normalizeBlank":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"error","message":"Expression form not supported","line":376,"character":8}},"normalizeBool":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"error","message":"Expression form not supported","line":380,"character":8}},"isJsObject":{"__symbolic":"function","parameters":["o"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"reference","name":"o"},"right":null},"right":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":384,"character":24},"right":"function"},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":384,"character":50},"right":"object"}}}},"isPrimitive":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isJsObject"},"arguments":[{"__symbolic":"reference","name":"obj"}]}}},"hasConstructor":{"__symbolic":"function","parameters":["value","type"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"value"},"member":"constructor"},"right":{"__symbolic":"reference","name":"type"}}},"escape":{"__symbolic":"function","parameters":["s"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"_global"},"member":"encodeURI"},"arguments":[{"__symbolic":"reference","name":"s"}]}},"escapeRegExp":{"__symbolic":"function","parameters":["s"],"value":{"__symbolic":"error","message":"Expression form not supported","line":481,"character":19}}}}
{"__symbolic":"module","version":1,"metadata":{"Type":{"__symbolic":"reference","name":"Function"},"Math":{"__symbolic":"error","message":"Reference to a local symbol","line":55,"character":3,"context":{"name":"_global"}},"Date":{"__symbolic":"error","message":"Reference to a local symbol","line":55,"character":3,"context":{"name":"_global"}},"isPresent":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"reference","name":"obj"},"right":{"__symbolic":"reference","name":"undefined"}},"right":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"reference","name":"obj"},"right":null}}},"isBlank":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"obj"},"right":{"__symbolic":"reference","name":"undefined"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"obj"},"right":null}}},"isBoolean":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":104,"character":8},"right":"boolean"}},"isNumber":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":108,"character":8},"right":"number"}},"isString":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":112,"character":8},"right":"string"}},"isFunction":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":116,"character":8},"right":"function"}},"isType":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isFunction"},"arguments":[{"__symbolic":"reference","name":"obj"}]}},"isStringMap":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":124,"character":8},"right":"object"},"right":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"reference","name":"obj"},"right":null}}},"isStrictStringMap":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isStringMap"},"arguments":[{"__symbolic":"reference","name":"obj"}]},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Object"},"member":"getPrototypeOf"},"arguments":[{"__symbolic":"reference","name":"obj"}]},"right":{"__symbolic":"error","message":"Reference to a local symbol","line":127,"character":5,"context":{"name":"STRING_MAP_PROTO"}}}}},"isPromise":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isPresent"},"arguments":[{"__symbolic":"reference","name":"obj"}]},"right":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isFunction"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"obj"},"member":"then"}]}}},"isArray":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Array"},"member":"isArray"},"arguments":[{"__symbolic":"reference","name":"obj"}]}},"isDate":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"instanceof","left":{"__symbolic":"reference","name":"obj"},"right":{"__symbolic":"reference","name":"Date"}},"right":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isNaN"},"arguments":[{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"obj"},"member":"valueOf"}}]}}}},"serializeEnum":{"__symbolic":"function","parameters":["val"],"value":{"__symbolic":"reference","name":"val"}},"deserializeEnum":{"__symbolic":"function","parameters":["val","values"],"value":{"__symbolic":"reference","name":"val"}},"resolveEnumToken":{"__symbolic":"function","parameters":["enumValue","val"],"value":{"__symbolic":"index","expression":{"__symbolic":"reference","name":"enumValue"},"index":{"__symbolic":"reference","name":"val"}}},"RegExp":{"__symbolic":"error","message":"Reference to a local symbol","line":55,"character":3,"context":{"name":"_global"}},"looseIdentical":{"__symbolic":"function","parameters":["a","b"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"a"},"right":{"__symbolic":"reference","name":"b"}},"right":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":322,"character":19},"right":"number"},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":322,"character":44},"right":"number"}},"right":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isNaN"},"arguments":[{"__symbolic":"reference","name":"a"}]}},"right":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isNaN"},"arguments":[{"__symbolic":"reference","name":"b"}]}}}},"getMapKey":{"__symbolic":"function","parameters":["value"],"value":{"__symbolic":"reference","name":"value"}},"normalizeBlank":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"if","condition":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isBlank"},"arguments":[{"__symbolic":"reference","name":"obj"}]},"thenExpression":null,"elseExpression":{"__symbolic":"reference","name":"obj"}}},"normalizeBool":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"if","condition":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isBlank"},"arguments":[{"__symbolic":"reference","name":"obj"}]},"thenExpression":false,"elseExpression":{"__symbolic":"reference","name":"obj"}}},"isJsObject":{"__symbolic":"function","parameters":["o"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"reference","name":"o"},"right":null},"right":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":340,"character":24},"right":"function"},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":340,"character":50},"right":"object"}}}},"isPrimitive":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isJsObject"},"arguments":[{"__symbolic":"reference","name":"obj"}]}}},"hasConstructor":{"__symbolic":"function","parameters":["value","type"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"value"},"member":"constructor"},"right":{"__symbolic":"reference","name":"type"}}},"escape":{"__symbolic":"function","parameters":["s"],"value":{"__symbolic":"error","message":"Reference to a local symbol","line":55,"character":3,"context":{"name":"_global"}}},"escapeRegExp":{"__symbolic":"function","parameters":["s"],"value":{"__symbolic":"error","message":"Expression form not supported","line":437,"character":19}}}}
import { CompileIdentifierMetadata, CompileTokenMetadata } from './compile_metadata';
export declare class Identifiers {
static ANALYZE_FOR_ENTRY_COMPONENTS: CompileIdentifierMetadata;
static ViewUtils: CompileIdentifierMetadata;

@@ -16,2 +17,5 @@ static AppView: CompileIdentifierMetadata;

static ComponentFactoryResolver: CompileIdentifierMetadata;
static ComponentFactory: CompileIdentifierMetadata;
static NgModuleFactory: CompileIdentifierMetadata;
static NgModuleInjector: CompileIdentifierMetadata;
static ValueUnwrapper: CompileIdentifierMetadata;

@@ -26,3 +30,3 @@ static Injector: CompileIdentifierMetadata;

static SimpleChange: CompileIdentifierMetadata;
static uninitialized: CompileIdentifierMetadata;
static UNINITIALIZED: CompileIdentifierMetadata;
static ChangeDetectorStatus: CompileIdentifierMetadata;

@@ -29,0 +33,0 @@ static checkBinding: CompileIdentifierMetadata;

@@ -8,4 +8,4 @@ /**

*/
import { ChangeDetectionStrategy, ChangeDetectorRef, ComponentFactoryResolver, ElementRef, Injector, QueryList, RenderComponentType, Renderer, SimpleChange, TemplateRef, ViewContainerRef, ViewEncapsulation } from '@angular/core';
import { AnimationGroupPlayer as AnimationGroupPlayer_, AnimationKeyframe as AnimationKeyframe_, AnimationSequencePlayer as AnimationSequencePlayer_, AnimationStyles as AnimationStyles_, AppElement, AppView, ChangeDetectorStatus, CodegenComponentFactoryResolver, DebugAppView, DebugContext, EMPTY_ARRAY, EMPTY_MAP, NoOpAnimationPlayer as NoOpAnimationPlayer_, SecurityContext, StaticNodeDebugInfo, TemplateRef_, ValueUnwrapper, ViewType, ViewUtils, balanceAnimationKeyframes as impBalanceAnimationKeyframes, castByValue, checkBinding, clearStyles as impClearStyles, collectAndResolveStyles as impCollectAndResolveStyles, devModeEqual, flattenNestedViewRenderNodes, interpolate, prepareFinalAnimationStyles as impBalanceAnimationStyles, pureProxy1, pureProxy10, pureProxy2, pureProxy3, pureProxy4, pureProxy5, pureProxy6, pureProxy7, pureProxy8, pureProxy9, renderStyles as impRenderStyles, uninitialized } from '../core_private';
import { ANALYZE_FOR_ENTRY_COMPONENTS, ChangeDetectionStrategy, ChangeDetectorRef, ComponentFactory, ComponentFactoryResolver, ElementRef, Injector, NgModuleFactory, QueryList, RenderComponentType, Renderer, SecurityContext, SimpleChange, TemplateRef, ViewContainerRef, ViewEncapsulation } from '@angular/core';
import { AnimationGroupPlayer as AnimationGroupPlayer_, AnimationKeyframe as AnimationKeyframe_, AnimationSequencePlayer as AnimationSequencePlayer_, AnimationStyles as AnimationStyles_, AppElement, AppView, ChangeDetectorStatus, CodegenComponentFactoryResolver, DebugAppView, DebugContext, EMPTY_ARRAY, EMPTY_MAP, NgModuleInjector, NoOpAnimationPlayer as NoOpAnimationPlayer_, StaticNodeDebugInfo, TemplateRef_, UNINITIALIZED, ValueUnwrapper, ViewType, ViewUtils, balanceAnimationKeyframes as impBalanceAnimationKeyframes, castByValue, checkBinding, clearStyles as impClearStyles, collectAndResolveStyles as impCollectAndResolveStyles, devModeEqual, flattenNestedViewRenderNodes, interpolate, prepareFinalAnimationStyles as impBalanceAnimationStyles, pureProxy1, pureProxy10, pureProxy2, pureProxy3, pureProxy4, pureProxy5, pureProxy6, pureProxy7, pureProxy8, pureProxy9, renderStyles as impRenderStyles } from '../core_private';
import { CompileIdentifierMetadata, CompileTokenMetadata } from './compile_metadata';

@@ -39,3 +39,3 @@ import { assetUrl } from './util';

var impSimpleChange = SimpleChange;
var impUninitialized = uninitialized;
var impUNINITIALIZED = UNINITIALIZED;
var impChangeDetectorStatus = ChangeDetectorStatus;

@@ -57,2 +57,7 @@ var impFlattenNestedViewRenderNodes = flattenNestedViewRenderNodes;

}
Identifiers.ANALYZE_FOR_ENTRY_COMPONENTS = new CompileIdentifierMetadata({
name: 'ANALYZE_FOR_ENTRY_COMPONENTS',
moduleUrl: assetUrl('core', 'metadata/di'),
runtime: ANALYZE_FOR_ENTRY_COMPONENTS
});
Identifiers.ViewUtils = new CompileIdentifierMetadata({ name: 'ViewUtils', moduleUrl: assetUrl('core', 'linker/view_utils'), runtime: impViewUtils });

@@ -103,2 +108,17 @@ Identifiers.AppView = new CompileIdentifierMetadata({ name: 'AppView', moduleUrl: APP_VIEW_MODULE_URL, runtime: impAppView });

});
Identifiers.ComponentFactory = new CompileIdentifierMetadata({
name: 'ComponentFactory',
runtime: ComponentFactory,
moduleUrl: assetUrl('core', 'linker/component_factory')
});
Identifiers.NgModuleFactory = new CompileIdentifierMetadata({
name: 'NgModuleFactory',
runtime: NgModuleFactory,
moduleUrl: assetUrl('core', 'linker/ng_module_factory')
});
Identifiers.NgModuleInjector = new CompileIdentifierMetadata({
name: 'NgModuleInjector',
runtime: NgModuleInjector,
moduleUrl: assetUrl('core', 'linker/ng_module_factory')
});
Identifiers.ValueUnwrapper = new CompileIdentifierMetadata({ name: 'ValueUnwrapper', moduleUrl: CD_MODULE_URL, runtime: impValueUnwrapper });

@@ -129,3 +149,3 @@ Identifiers.Injector = new CompileIdentifierMetadata({ name: 'Injector', moduleUrl: assetUrl('core', 'di/injector'), runtime: impInjector });

Identifiers.SimpleChange = new CompileIdentifierMetadata({ name: 'SimpleChange', moduleUrl: CD_MODULE_URL, runtime: impSimpleChange });
Identifiers.uninitialized = new CompileIdentifierMetadata({ name: 'uninitialized', moduleUrl: CD_MODULE_URL, runtime: impUninitialized });
Identifiers.UNINITIALIZED = new CompileIdentifierMetadata({ name: 'UNINITIALIZED', moduleUrl: CD_MODULE_URL, runtime: impUNINITIALIZED });
Identifiers.ChangeDetectorStatus = new CompileIdentifierMetadata({ name: 'ChangeDetectorStatus', moduleUrl: CD_MODULE_URL, runtime: impChangeDetectorStatus });

@@ -132,0 +152,0 @@ Identifiers.checkBinding = new CompileIdentifierMetadata({ name: 'checkBinding', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: impCheckBinding });

@@ -9,22 +9,27 @@ /**

import { AnimationEntryMetadata, AnimationMetadata, AnimationStateMetadata, AnimationStyleMetadata, Provider, QueryMetadata } from '@angular/core';
import { ReflectorReader } from '../core_private';
import { Type } from '../src/facade/lang';
import { Console, ReflectorReader } from '../core_private';
import * as cpl from './compile_metadata';
import { CompilerConfig } from './config';
import { DirectiveResolver } from './directive_resolver';
import { Type } from './facade/lang';
import { NgModuleResolver } from './ng_module_resolver';
import { PipeResolver } from './pipe_resolver';
import { ViewResolver } from './view_resolver';
import { ElementSchemaRegistry } from './schema/element_schema_registry';
export declare class CompileMetadataResolver {
private _ngModuleResolver;
private _directiveResolver;
private _pipeResolver;
private _viewResolver;
private _config;
private _console;
private _schemaRegistry;
private _reflector;
private _directiveCache;
private _pipeCache;
private _ngModuleCache;
private _ngModuleOfTypes;
private _anonymousTypes;
private _anonymousTypeIndex;
constructor(_directiveResolver: DirectiveResolver, _pipeResolver: PipeResolver, _viewResolver: ViewResolver, _config: CompilerConfig, _reflector?: ReflectorReader);
constructor(_ngModuleResolver: NgModuleResolver, _directiveResolver: DirectiveResolver, _pipeResolver: PipeResolver, _config: CompilerConfig, _console: Console, _schemaRegistry: ElementSchemaRegistry, _reflector?: ReflectorReader);
private sanitizeTokenName(token);
clearCacheFor(compType: Type): void;
clearCacheFor(type: Type): void;
clearCache(): void;

@@ -35,16 +40,18 @@ getAnimationEntryMetadata(entry: AnimationEntryMetadata): cpl.CompileAnimationEntryMetadata;

getAnimationMetadata(value: AnimationMetadata): cpl.CompileAnimationMetadata;
getDirectiveMetadata(directiveType: Type): cpl.CompileDirectiveMetadata;
/**
* @param someType a symbol which may or may not be a directive type
* @returns {cpl.CompileDirectiveMetadata} if possible, otherwise null.
*/
maybeGetDirectiveMetadata(someType: Type): cpl.CompileDirectiveMetadata;
getDirectiveMetadata(directiveType: Type, throwIfNotFound?: boolean): cpl.CompileDirectiveMetadata;
getNgModuleMetadata(moduleType: any, throwIfNotFound?: boolean): cpl.CompileNgModuleMetadata;
addComponentToModule(moduleType: Type, compType: Type): void;
private _verifyModule(moduleMeta);
private _addTypeToModule(type, moduleType);
private _getTransitiveViewDirectivesAndPipes(compMeta, moduleMeta);
private _getTransitiveNgModuleMetadata(importedModules, exportedModules);
private _addDirectiveToModule(dirMeta, moduleType, transitiveModule, declaredDirectives, force?);
private _addPipeToModule(pipeMeta, moduleType, transitiveModule, declaredPipes, force?);
getTypeMetadata(type: Type, moduleUrl: string, dependencies?: any[]): cpl.CompileTypeMetadata;
getFactoryMetadata(factory: Function, moduleUrl: string, dependencies?: any[]): cpl.CompileFactoryMetadata;
getPipeMetadata(pipeType: Type): cpl.CompilePipeMetadata;
getViewDirectivesMetadata(component: Type): cpl.CompileDirectiveMetadata[];
getViewPipesMetadata(component: Type): cpl.CompilePipeMetadata[];
getPipeMetadata(pipeType: Type, throwIfNotFound?: boolean): cpl.CompilePipeMetadata;
getDependenciesMetadata(typeOrFunc: Type | Function, dependencies: any[]): cpl.CompileDiDependencyMetadata[];
getTokenMetadata(token: any): cpl.CompileTokenMetadata;
getProvidersMetadata(providers: any[]): Array<cpl.CompileProviderMetadata | cpl.CompileTypeMetadata | any[]>;
getProvidersMetadata(providers: any[], targetEntryComponents: cpl.CompileTypeMetadata[]): Array<cpl.CompileProviderMetadata | cpl.CompileTypeMetadata | any[]>;
private _getEntryComponentsFromProvider(provider);
getProviderMetadata(provider: Provider): cpl.CompileProviderMetadata;

@@ -51,0 +58,0 @@ getQueriesMetadata(queries: {

@@ -9,24 +9,30 @@ /**

import { AnimationAnimateMetadata, AnimationGroupMetadata, AnimationKeyframesSequenceMetadata, AnimationStateDeclarationMetadata, AnimationStateTransitionMetadata, AnimationStyleMetadata, AnimationWithStepsMetadata, AttributeMetadata, ComponentMetadata, HostMetadata, InjectMetadata, Injectable, OptionalMetadata, Provider, QueryMetadata, SelfMetadata, SkipSelfMetadata, resolveForwardRef } from '@angular/core';
import { LIFECYCLE_HOOKS_VALUES, ReflectorReader, createProvider, isProviderLiteral, reflector } from '../core_private';
import { Console, LIFECYCLE_HOOKS_VALUES, ReflectorReader, createProvider, isProviderLiteral, reflector } from '../core_private';
import { StringMapWrapper } from '../src/facade/collection';
import { BaseException } from '../src/facade/exceptions';
import { Type, isArray, isBlank, isPresent, isString, isStringMap, stringify } from '../src/facade/lang';
import { assertArrayOfStrings, assertInterpolationSymbols } from './assertions';
import * as cpl from './compile_metadata';
import { CompilerConfig } from './config';
import { hasLifecycleHook } from './directive_lifecycle_reflector';
import { DirectiveResolver } from './directive_resolver';
import { BaseException } from './facade/exceptions';
import { Type, isArray, isBlank, isPresent, isString, stringify } from './facade/lang';
import { Identifiers, identifierToken } from './identifiers';
import { hasLifecycleHook } from './lifecycle_reflector';
import { NgModuleResolver } from './ng_module_resolver';
import { PipeResolver } from './pipe_resolver';
import { ElementSchemaRegistry } from './schema/element_schema_registry';
import { getUrlScheme } from './url_resolver';
import { MODULE_SUFFIX, ValueTransformer, sanitizeIdentifier, visitValue } from './util';
import { ViewResolver } from './view_resolver';
export class CompileMetadataResolver {
constructor(_directiveResolver, _pipeResolver, _viewResolver, _config, _reflector = reflector) {
constructor(_ngModuleResolver, _directiveResolver, _pipeResolver, _config, _console, _schemaRegistry, _reflector = reflector) {
this._ngModuleResolver = _ngModuleResolver;
this._directiveResolver = _directiveResolver;
this._pipeResolver = _pipeResolver;
this._viewResolver = _viewResolver;
this._config = _config;
this._console = _console;
this._schemaRegistry = _schemaRegistry;
this._reflector = _reflector;
this._directiveCache = new Map();
this._pipeCache = new Map();
this._ngModuleCache = new Map();
this._ngModuleOfTypes = new Map();
this._anonymousTypes = new Map();

@@ -48,5 +54,8 @@ this._anonymousTypeIndex = 0;

}
clearCacheFor(compType) {
this._directiveCache.delete(compType);
this._pipeCache.delete(compType);
clearCacheFor(type) {
this._directiveCache.delete(type);
this._pipeCache.delete(type);
this._ngModuleOfTypes.delete(type);
// Clear all of the NgModuleMetadata as they contain transitive information!
this._ngModuleCache.clear();
}

@@ -56,2 +65,4 @@ clearCache() {

this._pipeCache.clear();
this._ngModuleCache.clear();
this._ngModuleOfTypes.clear();
}

@@ -98,6 +109,10 @@ getAnimationEntryMetadata(entry) {

}
getDirectiveMetadata(directiveType) {
getDirectiveMetadata(directiveType, throwIfNotFound = true) {
directiveType = resolveForwardRef(directiveType);
var meta = this._directiveCache.get(directiveType);
if (isBlank(meta)) {
var dirMeta = this._directiveResolver.resolve(directiveType);
var dirMeta = this._directiveResolver.resolve(directiveType, throwIfNotFound);
if (!dirMeta) {
return null;
}
var templateMeta = null;

@@ -107,35 +122,62 @@ var changeDetectionStrategy = null;

var moduleUrl = staticTypeModuleUrl(directiveType);
var precompileTypes = [];
var viewDirectiveTypes = [];
var viewPipeTypes = [];
var entryComponentTypes = [];
let selector = dirMeta.selector;
if (dirMeta instanceof ComponentMetadata) {
var cmpMeta = dirMeta;
var viewMeta = this._viewResolver.resolve(directiveType);
assertArrayOfStrings('styles', viewMeta.styles);
assertInterpolationSymbols('interpolation', viewMeta.interpolation);
var animations = isPresent(viewMeta.animations) ?
viewMeta.animations.map(e => this.getAnimationEntryMetadata(e)) :
assertArrayOfStrings('styles', cmpMeta.styles);
assertInterpolationSymbols('interpolation', cmpMeta.interpolation);
var animations = isPresent(cmpMeta.animations) ?
cmpMeta.animations.map(e => this.getAnimationEntryMetadata(e)) :
null;
assertArrayOfStrings('styles', viewMeta.styles);
assertArrayOfStrings('styleUrls', viewMeta.styleUrls);
assertArrayOfStrings('styles', cmpMeta.styles);
assertArrayOfStrings('styleUrls', cmpMeta.styleUrls);
templateMeta = new cpl.CompileTemplateMetadata({
encapsulation: viewMeta.encapsulation,
template: viewMeta.template,
templateUrl: viewMeta.templateUrl,
styles: viewMeta.styles,
styleUrls: viewMeta.styleUrls,
encapsulation: cmpMeta.encapsulation,
template: cmpMeta.template,
templateUrl: cmpMeta.templateUrl,
styles: cmpMeta.styles,
styleUrls: cmpMeta.styleUrls,
animations: animations,
interpolation: viewMeta.interpolation
interpolation: cmpMeta.interpolation
});
changeDetectionStrategy = cmpMeta.changeDetection;
if (isPresent(dirMeta.viewProviders)) {
viewProviders = this.getProvidersMetadata(verifyNonBlankProviders(directiveType, dirMeta.viewProviders, 'viewProviders'));
viewProviders = this.getProvidersMetadata(verifyNonBlankProviders(directiveType, dirMeta.viewProviders, 'viewProviders'), []);
}
moduleUrl = componentModuleUrl(this._reflector, directiveType, cmpMeta);
if (cmpMeta.precompile) {
precompileTypes = flattenArray(cmpMeta.precompile)
.map((cmp) => this.getTypeMetadata(cmp, staticTypeModuleUrl(cmp)));
if (cmpMeta.entryComponents) {
entryComponentTypes =
flattenArray(cmpMeta.entryComponents)
.map((type) => this.getTypeMetadata(type, staticTypeModuleUrl(type)));
}
if (cmpMeta.directives) {
viewDirectiveTypes = flattenArray(cmpMeta.directives).map((type) => {
if (!type) {
throw new BaseException(`Unexpected directive value '${type}' on the View of component '${stringify(directiveType)}'`);
}
return this.getTypeMetadata(type, staticTypeModuleUrl(type));
});
}
if (cmpMeta.pipes) {
viewPipeTypes = flattenArray(cmpMeta.pipes).map((type) => {
if (!type) {
throw new BaseException(`Unexpected pipe value '${type}' on the View of component '${stringify(directiveType)}'`);
}
return this.getTypeMetadata(type, staticTypeModuleUrl(type));
});
}
if (!selector) {
selector = this._schemaRegistry.getDefaultComponentElementName();
}
}
else {
if (!selector) {
throw new BaseException(`Directive ${stringify(directiveType)} has no selector, please add it!`);
}
}
var providers = [];
if (isPresent(dirMeta.providers)) {
providers = this.getProvidersMetadata(verifyNonBlankProviders(directiveType, dirMeta.providers, 'providers'));
providers = this.getProvidersMetadata(verifyNonBlankProviders(directiveType, dirMeta.providers, 'providers'), entryComponentTypes);
}

@@ -149,3 +191,3 @@ var queries = [];

meta = cpl.CompileDirectiveMetadata.create({
selector: dirMeta.selector,
selector: selector,
exportAs: dirMeta.exportAs,

@@ -159,3 +201,2 @@ isComponent: isPresent(templateMeta),

host: dirMeta.host,
lifecycleHooks: LIFECYCLE_HOOKS_VALUES.filter(hook => hasLifecycleHook(hook, directiveType)),
providers: providers,

@@ -165,3 +206,5 @@ viewProviders: viewProviders,

viewQueries: viewQueries,
precompile: precompileTypes
viewDirectives: viewDirectiveTypes,
viewPipes: viewPipeTypes,
entryComponents: entryComponentTypes
});

@@ -172,18 +215,220 @@ this._directiveCache.set(directiveType, meta);

}
/**
* @param someType a symbol which may or may not be a directive type
* @returns {cpl.CompileDirectiveMetadata} if possible, otherwise null.
*/
maybeGetDirectiveMetadata(someType) {
try {
return this.getDirectiveMetadata(someType);
}
catch (e) {
if (e.message.indexOf('No Directive annotation') !== -1) {
getNgModuleMetadata(moduleType, throwIfNotFound = true) {
moduleType = resolveForwardRef(moduleType);
var compileMeta = this._ngModuleCache.get(moduleType);
if (!compileMeta) {
const meta = this._ngModuleResolver.resolve(moduleType, throwIfNotFound);
if (!meta) {
return null;
}
throw e;
const declaredDirectives = [];
const exportedDirectives = [];
const declaredPipes = [];
const exportedPipes = [];
const importedModules = [];
const exportedModules = [];
const providers = [];
const entryComponents = [];
const bootstrapComponents = [];
const schemas = [];
if (meta.imports) {
flattenArray(meta.imports).forEach((importedType) => {
let importedModuleType;
if (isValidType(importedType)) {
importedModuleType = importedType;
}
else if (importedType && importedType.ngModule) {
const moduleWithProviders = importedType;
importedModuleType = moduleWithProviders.ngModule;
if (moduleWithProviders.providers) {
providers.push(...this.getProvidersMetadata(moduleWithProviders.providers, entryComponents));
}
}
if (importedModuleType) {
importedModules.push(this.getNgModuleMetadata(importedModuleType, false));
}
else {
throw new BaseException(`Unexpected value '${stringify(importedType)}' imported by the module '${stringify(moduleType)}'`);
}
});
}
if (meta.exports) {
flattenArray(meta.exports).forEach((exportedType) => {
if (!isValidType(exportedType)) {
throw new BaseException(`Unexpected value '${stringify(exportedType)}' exported by the module '${stringify(moduleType)}'`);
}
let exportedDirMeta;
let exportedPipeMeta;
let exportedModuleMeta;
if (exportedDirMeta = this.getDirectiveMetadata(exportedType, false)) {
exportedDirectives.push(exportedDirMeta);
}
else if (exportedPipeMeta = this.getPipeMetadata(exportedType, false)) {
exportedPipes.push(exportedPipeMeta);
}
else if (exportedModuleMeta = this.getNgModuleMetadata(exportedType, false)) {
exportedModules.push(exportedModuleMeta);
}
else {
throw new BaseException(`Unexpected value '${stringify(exportedType)}' exported by the module '${stringify(moduleType)}'`);
}
});
}
// Note: This will be modified later, so we rely on
// getting a new instance every time!
const transitiveModule = this._getTransitiveNgModuleMetadata(importedModules, exportedModules);
if (meta.declarations) {
flattenArray(meta.declarations).forEach((declaredType) => {
if (!isValidType(declaredType)) {
throw new BaseException(`Unexpected value '${stringify(declaredType)}' declared by the module '${stringify(moduleType)}'`);
}
let declaredDirMeta;
let declaredPipeMeta;
if (declaredDirMeta = this.getDirectiveMetadata(declaredType, false)) {
this._addDirectiveToModule(declaredDirMeta, moduleType, transitiveModule, declaredDirectives, true);
}
else if (declaredPipeMeta = this.getPipeMetadata(declaredType, false)) {
this._addPipeToModule(declaredPipeMeta, moduleType, transitiveModule, declaredPipes, true);
}
else {
throw new BaseException(`Unexpected value '${stringify(declaredType)}' declared by the module '${stringify(moduleType)}'`);
}
});
}
// The providers of the module have to go last
// so that they overwrite any other provider we already added.
if (meta.providers) {
providers.push(...this.getProvidersMetadata(meta.providers, entryComponents));
}
if (meta.entryComponents) {
entryComponents.push(...flattenArray(meta.entryComponents)
.map(type => this.getTypeMetadata(type, staticTypeModuleUrl(type))));
}
if (meta.bootstrap) {
bootstrapComponents.push(...flattenArray(meta.bootstrap)
.map(type => this.getTypeMetadata(type, staticTypeModuleUrl(type))));
}
entryComponents.push(...bootstrapComponents);
if (meta.schemas) {
schemas.push(...flattenArray(meta.schemas));
}
transitiveModule.entryComponents.push(...entryComponents);
transitiveModule.providers.push(...providers);
compileMeta = new cpl.CompileNgModuleMetadata({
type: this.getTypeMetadata(moduleType, staticTypeModuleUrl(moduleType)),
providers: providers,
entryComponents: entryComponents,
bootstrapComponents: bootstrapComponents,
schemas: schemas,
declaredDirectives: declaredDirectives,
exportedDirectives: exportedDirectives,
declaredPipes: declaredPipes,
exportedPipes: exportedPipes,
importedModules: importedModules,
exportedModules: exportedModules,
transitiveModule: transitiveModule
});
transitiveModule.modules.push(compileMeta);
this._verifyModule(compileMeta);
this._ngModuleCache.set(moduleType, compileMeta);
}
return compileMeta;
}
addComponentToModule(moduleType, compType) {
const moduleMeta = this.getNgModuleMetadata(moduleType);
// Collect @Component.directives/pipes/entryComponents into our declared directives/pipes.
const compMeta = this.getDirectiveMetadata(compType, false);
this._addDirectiveToModule(compMeta, moduleMeta.type.runtime, moduleMeta.transitiveModule, moduleMeta.declaredDirectives);
moduleMeta.transitiveModule.entryComponents.push(compMeta.type);
moduleMeta.entryComponents.push(compMeta.type);
this._verifyModule(moduleMeta);
}
_verifyModule(moduleMeta) {
moduleMeta.exportedDirectives.forEach((dirMeta) => {
if (!moduleMeta.transitiveModule.directivesSet.has(dirMeta.type.runtime)) {
throw new BaseException(`Can't export directive ${stringify(dirMeta.type.runtime)} from ${stringify(moduleMeta.type.runtime)} as it was neither declared nor imported!`);
}
});
moduleMeta.exportedPipes.forEach((pipeMeta) => {
if (!moduleMeta.transitiveModule.pipesSet.has(pipeMeta.type.runtime)) {
throw new BaseException(`Can't export pipe ${stringify(pipeMeta.type.runtime)} from ${stringify(moduleMeta.type.runtime)} as it was neither declared nor imported!`);
}
});
moduleMeta.entryComponents.forEach((entryComponentType) => {
if (!moduleMeta.transitiveModule.directivesSet.has(entryComponentType.runtime)) {
this._addDirectiveToModule(this.getDirectiveMetadata(entryComponentType.runtime), moduleMeta.type.runtime, moduleMeta.transitiveModule, moduleMeta.declaredDirectives);
this._console.warn(`NgModule ${stringify(moduleMeta.type.runtime)} uses ${stringify(entryComponentType.runtime)} via "entryComponents" but it was neither declared nor imported! This warning will become an error after final.`);
}
});
// Collect @Component.directives/pipes/entryComponents into our declared
// directives/pipes. Do this last so that directives added by previous steps
// are considered as well!
moduleMeta.declaredDirectives.forEach((dirMeta) => { this._getTransitiveViewDirectivesAndPipes(dirMeta, moduleMeta); });
}
_addTypeToModule(type, moduleType) {
const oldModule = this._ngModuleOfTypes.get(type);
if (oldModule && oldModule !== moduleType) {
throw new BaseException(`Type ${stringify(type)} is part of the declarations of 2 modules: ${stringify(oldModule)} and ${stringify(moduleType)}!`);
}
this._ngModuleOfTypes.set(type, moduleType);
}
_getTransitiveViewDirectivesAndPipes(compMeta, moduleMeta) {
if (!compMeta.isComponent) {
return;
}
const addPipe = (pipeType) => {
const pipeMeta = this.getPipeMetadata(pipeType);
this._addPipeToModule(pipeMeta, moduleMeta.type.runtime, moduleMeta.transitiveModule, moduleMeta.declaredPipes);
};
const addDirective = (dirType) => {
const dirMeta = this.getDirectiveMetadata(dirType);
if (this._addDirectiveToModule(dirMeta, moduleMeta.type.runtime, moduleMeta.transitiveModule, moduleMeta.declaredDirectives)) {
this._getTransitiveViewDirectivesAndPipes(dirMeta, moduleMeta);
}
};
if (compMeta.viewPipes) {
compMeta.viewPipes.forEach((cplType) => addPipe(cplType.runtime));
}
if (compMeta.viewDirectives) {
compMeta.viewDirectives.forEach((cplType) => addDirective(cplType.runtime));
}
compMeta.entryComponents.forEach((entryComponentType) => {
if (!moduleMeta.transitiveModule.directivesSet.has(entryComponentType.runtime)) {
this._console.warn(`Component ${stringify(compMeta.type.runtime)} in NgModule ${stringify(moduleMeta.type.runtime)} uses ${stringify(entryComponentType.runtime)} via "entryComponents" but it was neither declared nor imported into the module! This warning will become an error after final.`);
addDirective(entryComponentType.runtime);
}
});
}
_getTransitiveNgModuleMetadata(importedModules, exportedModules) {
// collect `providers` / `entryComponents` from all imported and all exported modules
const transitiveModules = getTransitiveModules(importedModules.concat(exportedModules), true);
const providers = flattenArray(transitiveModules.map((ngModule) => ngModule.providers));
const entryComponents = flattenArray(transitiveModules.map((ngModule) => ngModule.entryComponents));
const transitiveExportedModules = getTransitiveModules(importedModules, false);
const directives = flattenArray(transitiveExportedModules.map((ngModule) => ngModule.exportedDirectives));
const pipes = flattenArray(transitiveExportedModules.map((ngModule) => ngModule.exportedPipes));
return new cpl.TransitiveCompileNgModuleMetadata(transitiveModules, providers, entryComponents, directives, pipes);
}
_addDirectiveToModule(dirMeta, moduleType, transitiveModule, declaredDirectives, force = false) {
if (force || !transitiveModule.directivesSet.has(dirMeta.type.runtime)) {
transitiveModule.directivesSet.add(dirMeta.type.runtime);
transitiveModule.directives.push(dirMeta);
declaredDirectives.push(dirMeta);
this._addTypeToModule(dirMeta.type.runtime, moduleType);
return true;
}
return false;
}
_addPipeToModule(pipeMeta, moduleType, transitiveModule, declaredPipes, force = false) {
if (force || !transitiveModule.pipesSet.has(pipeMeta.type.runtime)) {
transitiveModule.pipesSet.add(pipeMeta.type.runtime);
transitiveModule.pipes.push(pipeMeta);
declaredPipes.push(pipeMeta);
this._addTypeToModule(pipeMeta.type.runtime, moduleType);
return true;
}
return false;
}
getTypeMetadata(type, moduleUrl, dependencies = null) {
type = resolveForwardRef(type);
return new cpl.CompileTypeMetadata({

@@ -193,6 +438,8 @@ name: this.sanitizeTokenName(type),

runtime: type,
diDeps: this.getDependenciesMetadata(type, dependencies)
diDeps: this.getDependenciesMetadata(type, dependencies),
lifecycleHooks: LIFECYCLE_HOOKS_VALUES.filter(hook => hasLifecycleHook(hook, type)),
});
}
getFactoryMetadata(factory, moduleUrl, dependencies = null) {
factory = resolveForwardRef(factory);
return new cpl.CompileFactoryMetadata({

@@ -205,11 +452,14 @@ name: this.sanitizeTokenName(factory),

}
getPipeMetadata(pipeType) {
getPipeMetadata(pipeType, throwIfNotFound = true) {
pipeType = resolveForwardRef(pipeType);
var meta = this._pipeCache.get(pipeType);
if (isBlank(meta)) {
var pipeMeta = this._pipeResolver.resolve(pipeType);
var pipeMeta = this._pipeResolver.resolve(pipeType, throwIfNotFound);
if (!pipeMeta) {
return null;
}
meta = new cpl.CompilePipeMetadata({
type: this.getTypeMetadata(pipeType, staticTypeModuleUrl(pipeType)),
name: pipeMeta.name,
pure: pipeMeta.pure,
lifecycleHooks: LIFECYCLE_HOOKS_VALUES.filter(hook => hasLifecycleHook(hook, pipeType)),
pure: pipeMeta.pure
});

@@ -220,22 +470,2 @@ this._pipeCache.set(pipeType, meta);

}
getViewDirectivesMetadata(component) {
var view = this._viewResolver.resolve(component);
var directives = flattenDirectives(view, this._config.platformDirectives);
for (var i = 0; i < directives.length; i++) {
if (!isValidType(directives[i])) {
throw new BaseException(`Unexpected directive value '${stringify(directives[i])}' on the View of component '${stringify(component)}'`);
}
}
return directives.map(type => this.getDirectiveMetadata(type));
}
getViewPipesMetadata(component) {
var view = this._viewResolver.resolve(component);
var pipes = flattenPipes(view, this._config.platformPipes);
for (var i = 0; i < pipes.length; i++) {
if (!isValidType(pipes[i])) {
throw new BaseException(`Unexpected piped value '${stringify(pipes[i])}' on the View of component '${stringify(component)}'`);
}
}
return pipes.map(type => this.getPipeMetadata(type));
}
getDependenciesMetadata(typeOrFunc, dependencies) {

@@ -332,19 +562,52 @@ let hasUnknownDeps = false;

}
getProvidersMetadata(providers) {
return providers.map((provider) => {
getProvidersMetadata(providers, targetEntryComponents) {
const compileProviders = [];
providers.forEach((provider) => {
provider = resolveForwardRef(provider);
if (isProviderLiteral(provider)) {
provider = createProvider(provider);
}
let compileProvider;
if (isArray(provider)) {
return this.getProvidersMetadata(provider);
compileProvider = this.getProvidersMetadata(provider, targetEntryComponents);
}
else if (provider instanceof Provider) {
return this.getProviderMetadata(provider);
let tokenMeta = this.getTokenMetadata(provider.token);
if (tokenMeta.equalsTo(identifierToken(Identifiers.ANALYZE_FOR_ENTRY_COMPONENTS))) {
targetEntryComponents.push(...this._getEntryComponentsFromProvider(provider));
}
else {
compileProvider = this.getProviderMetadata(provider);
}
}
else if (isProviderLiteral(provider)) {
return this.getProviderMetadata(createProvider(provider));
else if (isValidType(provider)) {
compileProvider = this.getTypeMetadata(provider, staticTypeModuleUrl(provider));
}
else {
return this.getTypeMetadata(provider, staticTypeModuleUrl(provider));
throw new BaseException(`Invalid provider - only instances of Provider and Type are allowed, got: ${stringify(provider)}`);
}
if (compileProvider) {
compileProviders.push(compileProvider);
}
});
return compileProviders;
}
_getEntryComponentsFromProvider(provider) {
let components = [];
let collectedIdentifiers = [];
if (provider.useFactory || provider.useExisting || provider.useClass) {
throw new BaseException(`The ANALYZE_FOR_ENTRY_COMPONENTS token only supports useValue!`);
}
if (!provider.multi) {
throw new BaseException(`The ANALYZE_FOR_ENTRY_COMPONENTS token only supports 'multi = true'!`);
}
convertToCompileValue(provider.useValue, collectedIdentifiers);
collectedIdentifiers.forEach((identifier) => {
let dirMeta = this.getDirectiveMetadata(identifier.runtime, false);
if (dirMeta) {
components.push(dirMeta.type);
}
});
return components;
}
getProviderMetadata(provider) {

@@ -365,3 +628,3 @@ var compileDeps;

useClass: compileTypeMetadata,
useValue: convertToCompileValue(provider.useValue),
useValue: convertToCompileValue(provider.useValue, []),
useFactory: compileFactoryMetadata,

@@ -375,9 +638,9 @@ useExisting: isPresent(provider.useExisting) ? this.getTokenMetadata(provider.useExisting) :

getQueriesMetadata(queries, isViewQuery, directiveType) {
var compileQueries = [];
StringMapWrapper.forEach(queries, (query /** TODO #9100 */, propertyName /** TODO #9100 */) => {
var res = [];
StringMapWrapper.forEach(queries, (query, propertyName) => {
if (query.isViewQuery === isViewQuery) {
compileQueries.push(this.getQueryMetadata(query, propertyName, directiveType));
res.push(this.getQueryMetadata(query, propertyName, directiveType));
}
});
return compileQueries;
return res;
}

@@ -410,37 +673,36 @@ getQueryMetadata(q, propertyName, typeOrFunc) {

CompileMetadataResolver.ctorParameters = [
{ type: NgModuleResolver, },
{ type: DirectiveResolver, },
{ type: PipeResolver, },
{ type: ViewResolver, },
{ type: CompilerConfig, },
{ type: Console, },
{ type: ElementSchemaRegistry, },
{ type: ReflectorReader, },
];
function flattenDirectives(view, platformDirectives) {
let directives = [];
if (isPresent(platformDirectives)) {
flattenArray(platformDirectives, directives);
}
if (isPresent(view.directives)) {
flattenArray(view.directives, directives);
}
return directives;
function getTransitiveModules(modules, includeImports, targetModules = [], visitedModules = new Set()) {
modules.forEach((ngModule) => {
if (!visitedModules.has(ngModule.type.runtime)) {
visitedModules.add(ngModule.type.runtime);
const nestedModules = includeImports ?
ngModule.importedModules.concat(ngModule.exportedModules) :
ngModule.exportedModules;
getTransitiveModules(nestedModules, includeImports, targetModules, visitedModules);
// Add after recursing so imported/exported modules are before the module itself.
// This is important for overwriting providers of imported modules!
targetModules.push(ngModule);
}
});
return targetModules;
}
function flattenPipes(view, platformPipes) {
let pipes = [];
if (isPresent(platformPipes)) {
flattenArray(platformPipes, pipes);
}
if (isPresent(view.pipes)) {
flattenArray(view.pipes, pipes);
}
return pipes;
}
function flattenArray(tree, out = []) {
for (var i = 0; i < tree.length; i++) {
var item = resolveForwardRef(tree[i]);
if (isArray(item)) {
flattenArray(item, out);
if (tree) {
for (var i = 0; i < tree.length; i++) {
var item = resolveForwardRef(tree[i]);
if (isArray(item)) {
flattenArray(item, out);
}
else {
out.push(item);
}
}
else {
out.push(item);
}
}

@@ -461,13 +723,10 @@ return out;

}
function isStaticType(value) {
return isStringMap(value) && isPresent(value['name']) && isPresent(value['filePath']);
}
function isValidType(value) {
return isStaticType(value) || (value instanceof Type);
return cpl.isStaticSymbol(value) || (value instanceof Type);
}
function staticTypeModuleUrl(value) {
return isStaticType(value) ? value['filePath'] : null;
return cpl.isStaticSymbol(value) ? value.filePath : null;
}
function componentModuleUrl(reflector, type, cmpMetadata) {
if (isStaticType(type)) {
if (cpl.isStaticSymbol(type)) {
return staticTypeModuleUrl(type);

@@ -483,16 +742,18 @@ }

}
// Only fill CompileIdentifierMetadata.runtime if needed...
function convertToCompileValue(value) {
return visitValue(value, new _CompileValueConverter(), null);
function convertToCompileValue(value, targetIdentifiers) {
return visitValue(value, new _CompileValueConverter(), targetIdentifiers);
}
class _CompileValueConverter extends ValueTransformer {
visitOther(value, context) {
if (isStaticType(value)) {
return new cpl.CompileIdentifierMetadata({ name: value['name'], moduleUrl: staticTypeModuleUrl(value) });
visitOther(value, targetIdentifiers) {
let identifier;
if (cpl.isStaticSymbol(value)) {
identifier = new cpl.CompileIdentifierMetadata({ name: value.name, moduleUrl: value.filePath, runtime: value });
}
else {
return new cpl.CompileIdentifierMetadata({ runtime: value });
identifier = new cpl.CompileIdentifierMetadata({ runtime: value });
}
targetIdentifiers.push(identifier);
return identifier;
}
}
//# sourceMappingURL=metadata_resolver.js.map

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"CompileMetadataResolver":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"./directive_resolver","name":"DirectiveResolver"},{"__symbolic":"reference","module":"./pipe_resolver","name":"PipeResolver"},{"__symbolic":"reference","module":"./view_resolver","name":"ViewResolver"},{"__symbolic":"reference","module":"./config","name":"CompilerConfig"},{"__symbolic":"reference","module":"../core_private","name":"ReflectorReader"}]}],"sanitizeTokenName":[{"__symbolic":"method"}],"clearCacheFor":[{"__symbolic":"method"}],"clearCache":[{"__symbolic":"method"}],"getAnimationEntryMetadata":[{"__symbolic":"method"}],"getAnimationStateMetadata":[{"__symbolic":"method"}],"getAnimationStyleMetadata":[{"__symbolic":"method"}],"getAnimationMetadata":[{"__symbolic":"method"}],"getDirectiveMetadata":[{"__symbolic":"method"}],"maybeGetDirectiveMetadata":[{"__symbolic":"method"}],"getTypeMetadata":[{"__symbolic":"method"}],"getFactoryMetadata":[{"__symbolic":"method"}],"getPipeMetadata":[{"__symbolic":"method"}],"getViewDirectivesMetadata":[{"__symbolic":"method"}],"getViewPipesMetadata":[{"__symbolic":"method"}],"getDependenciesMetadata":[{"__symbolic":"method"}],"getTokenMetadata":[{"__symbolic":"method"}],"getProvidersMetadata":[{"__symbolic":"method"}],"getProviderMetadata":[{"__symbolic":"method"}],"getQueriesMetadata":[{"__symbolic":"method"}],"getQueryMetadata":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"CompileMetadataResolver":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"./ng_module_resolver","name":"NgModuleResolver"},{"__symbolic":"reference","module":"./directive_resolver","name":"DirectiveResolver"},{"__symbolic":"reference","module":"./pipe_resolver","name":"PipeResolver"},{"__symbolic":"reference","module":"./config","name":"CompilerConfig"},{"__symbolic":"reference","module":"../core_private","name":"Console"},{"__symbolic":"reference","module":"./schema/element_schema_registry","name":"ElementSchemaRegistry"},{"__symbolic":"reference","module":"../core_private","name":"ReflectorReader"}]}],"sanitizeTokenName":[{"__symbolic":"method"}],"clearCacheFor":[{"__symbolic":"method"}],"clearCache":[{"__symbolic":"method"}],"getAnimationEntryMetadata":[{"__symbolic":"method"}],"getAnimationStateMetadata":[{"__symbolic":"method"}],"getAnimationStyleMetadata":[{"__symbolic":"method"}],"getAnimationMetadata":[{"__symbolic":"method"}],"getDirectiveMetadata":[{"__symbolic":"method"}],"getNgModuleMetadata":[{"__symbolic":"method"}],"addComponentToModule":[{"__symbolic":"method"}],"_verifyModule":[{"__symbolic":"method"}],"_addTypeToModule":[{"__symbolic":"method"}],"_getTransitiveViewDirectivesAndPipes":[{"__symbolic":"method"}],"_getTransitiveNgModuleMetadata":[{"__symbolic":"method"}],"_addDirectiveToModule":[{"__symbolic":"method"}],"_addPipeToModule":[{"__symbolic":"method"}],"getTypeMetadata":[{"__symbolic":"method"}],"getFactoryMetadata":[{"__symbolic":"method"}],"getPipeMetadata":[{"__symbolic":"method"}],"getDependenciesMetadata":[{"__symbolic":"method"}],"getTokenMetadata":[{"__symbolic":"method"}],"getProvidersMetadata":[{"__symbolic":"method"}],"_getEntryComponentsFromProvider":[{"__symbolic":"method"}],"getProviderMetadata":[{"__symbolic":"method"}],"getQueriesMetadata":[{"__symbolic":"method"}],"getQueryMetadata":[{"__symbolic":"method"}]}}}}

@@ -1,6 +0,8 @@

import { CompileDirectiveMetadata, CompilePipeMetadata } from './compile_metadata';
import { CompileNgModuleMetadata, StaticSymbol } from './compile_metadata';
import { DirectiveNormalizer } from './directive_normalizer';
import { CompileMetadataResolver } from './metadata_resolver';
import { NgModuleCompiler } from './ng_module_compiler';
import { OutputEmitter } from './output/abstract_emitter';
import { StyleCompiler } from './style_compiler';
import { TemplateParser } from './template_parser';
import { TemplateParser } from './template_parser/template_parser';
import { ViewCompiler } from './view_compiler/view_compiler';

@@ -12,14 +14,8 @@ export declare class SourceModule {

}
export declare class StyleSheetSourceWithImports {
source: SourceModule;
importedUrls: string[];
constructor(source: SourceModule, importedUrls: string[]);
export declare class NgModulesSummary {
ngModuleByComponent: Map<StaticSymbol, CompileNgModuleMetadata>;
constructor(ngModuleByComponent: Map<StaticSymbol, CompileNgModuleMetadata>);
}
export declare class NormalizedComponentWithViewDirectives {
component: CompileDirectiveMetadata;
directives: CompileDirectiveMetadata[];
pipes: CompilePipeMetadata[];
constructor(component: CompileDirectiveMetadata, directives: CompileDirectiveMetadata[], pipes: CompilePipeMetadata[]);
}
export declare class OfflineCompiler {
private _metadataResolver;
private _directiveNormalizer;

@@ -29,9 +25,13 @@ private _templateParser;

private _viewCompiler;
private _ngModuleCompiler;
private _outputEmitter;
constructor(_directiveNormalizer: DirectiveNormalizer, _templateParser: TemplateParser, _styleCompiler: StyleCompiler, _viewCompiler: ViewCompiler, _outputEmitter: OutputEmitter);
normalizeDirectiveMetadata(directive: CompileDirectiveMetadata): Promise<CompileDirectiveMetadata>;
compileTemplates(components: NormalizedComponentWithViewDirectives[]): SourceModule[];
private _compileComponent(compMeta, directives, pipes, componentStyles, fileSuffix, targetStatements);
constructor(_metadataResolver: CompileMetadataResolver, _directiveNormalizer: DirectiveNormalizer, _templateParser: TemplateParser, _styleCompiler: StyleCompiler, _viewCompiler: ViewCompiler, _ngModuleCompiler: NgModuleCompiler, _outputEmitter: OutputEmitter);
analyzeModules(ngModules: StaticSymbol[]): NgModulesSummary;
clearCache(): void;
compile(moduleUrl: string, ngModulesSummary: NgModulesSummary, components: StaticSymbol[], ngModules: StaticSymbol[]): Promise<SourceModule[]>;
private _compileModule(ngModuleType, targetStatements);
private _compileComponentFactory(compMeta, fileSuffix, targetStatements);
private _compileComponent(compMeta, directives, pipes, schemas, componentStyles, fileSuffix, targetStatements);
private _codgenStyles(stylesCompileResult, fileSuffix);
private _codegenSourceModule(moduleUrl, statements, exportedVars);
}

@@ -8,14 +8,8 @@ /**

*/
import { ComponentFactory } from '@angular/core';
import { CompileIdentifierMetadata, createHostComponentMeta } from './compile_metadata';
import { createHostComponentMeta } from './compile_metadata';
import { ListWrapper } from './facade/collection';
import { BaseException } from './facade/exceptions';
import { Identifiers } from './identifiers';
import * as o from './output/output_ast';
import { assetUrl } from './util';
import { ComponentFactoryDependency, ViewFactoryDependency } from './view_compiler/view_compiler';
var _COMPONENT_FACTORY_IDENTIFIER = new CompileIdentifierMetadata({
name: 'ComponentFactory',
runtime: ComponentFactory,
moduleUrl: assetUrl('core', 'linker/component_factory')
});
export class SourceModule {

@@ -27,17 +21,10 @@ constructor(moduleUrl, source) {

}
export class StyleSheetSourceWithImports {
constructor(source, importedUrls) {
this.source = source;
this.importedUrls = importedUrls;
export class NgModulesSummary {
constructor(ngModuleByComponent) {
this.ngModuleByComponent = ngModuleByComponent;
}
}
export class NormalizedComponentWithViewDirectives {
constructor(component, directives, pipes) {
this.component = component;
this.directives = directives;
this.pipes = pipes;
}
}
export class OfflineCompiler {
constructor(_directiveNormalizer, _templateParser, _styleCompiler, _viewCompiler, _outputEmitter) {
constructor(_metadataResolver, _directiveNormalizer, _templateParser, _styleCompiler, _viewCompiler, _ngModuleCompiler, _outputEmitter) {
this._metadataResolver = _metadataResolver;
this._directiveNormalizer = _directiveNormalizer;

@@ -47,42 +34,84 @@ this._templateParser = _templateParser;

this._viewCompiler = _viewCompiler;
this._ngModuleCompiler = _ngModuleCompiler;
this._outputEmitter = _outputEmitter;
}
normalizeDirectiveMetadata(directive) {
return this._directiveNormalizer.normalizeDirective(directive).asyncResult;
analyzeModules(ngModules) {
const ngModuleByComponent = new Map();
ngModules.forEach((ngModule) => {
const ngModuleMeta = this._metadataResolver.getNgModuleMetadata(ngModule);
ngModuleMeta.declaredDirectives.forEach((dirMeta) => {
if (dirMeta.isComponent) {
ngModuleByComponent.set(dirMeta.type.runtime, ngModuleMeta);
}
});
});
return new NgModulesSummary(ngModuleByComponent);
}
compileTemplates(components) {
if (components.length === 0) {
throw new BaseException('No components given');
}
var statements = [];
var exportedVars = [];
var moduleUrl = _ngfactoryModuleUrl(components[0].component.type);
var outputSourceModules = [];
components.forEach(componentWithDirs => {
var compMeta = componentWithDirs.component;
_assertComponent(compMeta);
var fileSuffix = _splitLastSuffix(compMeta.type.moduleUrl)[1];
var stylesCompileResults = this._styleCompiler.compileComponent(compMeta);
stylesCompileResults.externalStylesheets.forEach((compiledStyleSheet) => {
outputSourceModules.push(this._codgenStyles(compiledStyleSheet, fileSuffix));
clearCache() {
this._directiveNormalizer.clearCache();
this._metadataResolver.clearCache();
}
compile(moduleUrl, ngModulesSummary, components, ngModules) {
let fileSuffix = _splitLastSuffix(moduleUrl)[1];
let statements = [];
let exportedVars = [];
let outputSourceModules = [];
// compile all ng modules
exportedVars.push(...ngModules.map((ngModuleType) => this._compileModule(ngModuleType, statements)));
// compile components
return Promise
.all(components.map((compType) => {
const compMeta = this._metadataResolver.getDirectiveMetadata(compType);
const ngModule = ngModulesSummary.ngModuleByComponent.get(compType);
if (!ngModule) {
throw new BaseException(`Cannot determine the module for component ${compMeta.type.name}!`);
}
return Promise
.all([compMeta, ...ngModule.transitiveModule.directives].map(dirMeta => this._directiveNormalizer.normalizeDirective(dirMeta).asyncResult))
.then((normalizedCompWithDirectives) => {
const compMeta = normalizedCompWithDirectives[0];
const dirMetas = normalizedCompWithDirectives.slice(1);
_assertComponent(compMeta);
// compile styles
const stylesCompileResults = this._styleCompiler.compileComponent(compMeta);
stylesCompileResults.externalStylesheets.forEach((compiledStyleSheet) => {
outputSourceModules.push(this._codgenStyles(compiledStyleSheet, fileSuffix));
});
// compile components
exportedVars.push(this._compileComponentFactory(compMeta, fileSuffix, statements));
exportedVars.push(this._compileComponent(compMeta, dirMetas, ngModule.transitiveModule.pipes, ngModule.schemas, stylesCompileResults.componentStylesheet, fileSuffix, statements));
});
var compViewFactoryVar = this._compileComponent(compMeta, componentWithDirs.directives, componentWithDirs.pipes, stylesCompileResults.componentStylesheet, fileSuffix, statements);
exportedVars.push(compViewFactoryVar);
var hostMeta = createHostComponentMeta(compMeta.type, compMeta.selector);
var hostViewFactoryVar = this._compileComponent(hostMeta, [compMeta], [], null, fileSuffix, statements);
var compFactoryVar = _componentFactoryName(compMeta.type);
statements.push(o.variable(compFactoryVar)
.set(o.importExpr(_COMPONENT_FACTORY_IDENTIFIER, [o.importType(compMeta.type)])
.instantiate([
o.literal(compMeta.selector), o.variable(hostViewFactoryVar),
o.importExpr(compMeta.type)
], o.importType(_COMPONENT_FACTORY_IDENTIFIER, [o.importType(compMeta.type)], [o.TypeModifier.Const])))
.toDeclStmt(null, [o.StmtModifier.Final]));
exportedVars.push(compFactoryVar);
}))
.then(() => {
if (statements.length > 0) {
outputSourceModules.unshift(this._codegenSourceModule(_ngfactoryModuleUrl(moduleUrl), statements, exportedVars));
}
return outputSourceModules;
});
outputSourceModules.unshift(this._codegenSourceModule(moduleUrl, statements, exportedVars));
return outputSourceModules;
}
_compileComponent(compMeta, directives, pipes, componentStyles, fileSuffix, targetStatements) {
var parsedTemplate = this._templateParser.parse(compMeta, compMeta.template.template, directives, pipes, compMeta.type.name);
_compileModule(ngModuleType, targetStatements) {
const ngModule = this._metadataResolver.getNgModuleMetadata(ngModuleType);
let appCompileResult = this._ngModuleCompiler.compile(ngModule, []);
appCompileResult.dependencies.forEach((dep) => {
dep.placeholder.name = _componentFactoryName(dep.comp);
dep.placeholder.moduleUrl = _ngfactoryModuleUrl(dep.comp.moduleUrl);
});
targetStatements.push(...appCompileResult.statements);
return appCompileResult.ngModuleFactoryVar;
}
_compileComponentFactory(compMeta, fileSuffix, targetStatements) {
var hostMeta = createHostComponentMeta(compMeta);
var hostViewFactoryVar = this._compileComponent(hostMeta, [compMeta], [], [], null, fileSuffix, targetStatements);
var compFactoryVar = _componentFactoryName(compMeta.type);
targetStatements.push(o.variable(compFactoryVar)
.set(o.importExpr(Identifiers.ComponentFactory, [o.importType(compMeta.type)])
.instantiate([
o.literal(compMeta.selector), o.variable(hostViewFactoryVar),
o.importExpr(compMeta.type)
], o.importType(Identifiers.ComponentFactory, [o.importType(compMeta.type)], [o.TypeModifier.Const])))
.toDeclStmt(null, [o.StmtModifier.Final]));
return compFactoryVar;
}
_compileComponent(compMeta, directives, pipes, schemas, componentStyles, fileSuffix, targetStatements) {
var parsedTemplate = this._templateParser.parse(compMeta, compMeta.template.template, directives, pipes, schemas, compMeta.type.name);
var stylesExpr = componentStyles ? o.variable(componentStyles.stylesVar) : o.literalArr([]);

@@ -108,3 +137,3 @@ var viewResult = this._viewCompiler.compileComponent(compMeta, parsedTemplate, stylesExpr, pipes);

let vfd = dep;
vfd.placeholder.moduleUrl = _ngfactoryModuleUrl(vfd.comp);
vfd.placeholder.moduleUrl = _ngfactoryModuleUrl(vfd.comp.moduleUrl);
}

@@ -114,3 +143,3 @@ else if (dep instanceof ComponentFactoryDependency) {

cfd.placeholder.name = _componentFactoryName(cfd.comp);
cfd.placeholder.moduleUrl = _ngfactoryModuleUrl(cfd.comp);
cfd.placeholder.moduleUrl = _ngfactoryModuleUrl(cfd.comp.moduleUrl);
}

@@ -126,4 +155,4 @@ });

}
function _ngfactoryModuleUrl(comp) {
var urlWithSuffix = _splitLastSuffix(comp.moduleUrl);
function _ngfactoryModuleUrl(compUrl) {
var urlWithSuffix = _splitLastSuffix(compUrl);
return `${urlWithSuffix[0]}.ngfactory${urlWithSuffix[1]}`;

@@ -130,0 +159,0 @@ }

@@ -178,3 +178,2 @@ /**

// some builtins just mean to skip the call.
// e.g. `bind` in Dart.
return null;

@@ -181,0 +180,0 @@ }

@@ -112,3 +112,3 @@ /**

export declare class ReadVarExpr extends Expression {
name: any;
name: string;
builtin: BuiltinVar;

@@ -429,3 +429,2 @@ constructor(name: string | BuiltinVar, type?: Type);

export declare function importType(id: CompileIdentifierMetadata, typeParams?: Type[], typeModifiers?: TypeModifier[]): ExternalType;
export declare function literal(value: any, type?: Type): LiteralExpr;
export declare function literalArr(values: Expression[], type?: Type): LiteralArrayExpr;

@@ -435,1 +434,2 @@ export declare function literalMap(values: Array<Array<string | Expression>>, type?: MapType): LiteralMapExpr;

export declare function fn(params: FnParam[], body: Statement[], type?: Type): FunctionExpr;
export declare function literal(value: any, type?: Type): LiteralExpr;

@@ -773,5 +773,2 @@ /**

}
export function literal(value, type = null) {
return new LiteralExpr(value, type);
}
export function literalArr(values, type = null) {

@@ -789,2 +786,5 @@ return new LiteralArrayExpr(values, type);

}
export function literal(value, type = null) {
return new LiteralExpr(value, type);
}
//# sourceMappingURL=output_ast.js.map

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"DYNAMIC_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Dynamic"}]},"BOOL_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Bool"}]},"INT_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Int"}]},"NUMBER_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Number"}]},"STRING_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"String"}]},"FUNCTION_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Function"}]},"THIS_EXPR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinVar"},"member":"This"}]},"SUPER_EXPR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinVar"},"member":"Super"}]},"CATCH_ERROR_VAR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinVar"},"member":"CatchError"}]},"CATCH_STACK_VAR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinVar"},"member":"CatchStack"}]},"NULL_EXPR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"LiteralExpr"},"arguments":[null,null]},"variable":{"__symbolic":"function","parameters":["name","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"reference","name":"name"},{"__symbolic":"reference","name":"type"}]}},"importExpr":{"__symbolic":"function","parameters":["id","typeParams"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ExternalExpr"},"arguments":[{"__symbolic":"reference","name":"id"},null,{"__symbolic":"reference","name":"typeParams"}]}},"importType":{"__symbolic":"function","parameters":["id","typeParams","typeModifiers"],"value":{"__symbolic":"error","message":"Expression form not supported","line":874,"character":8}},"literal":{"__symbolic":"function","parameters":["value","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"LiteralExpr"},"arguments":[{"__symbolic":"reference","name":"value"},{"__symbolic":"reference","name":"type"}]}},"literalArr":{"__symbolic":"function","parameters":["values","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"LiteralArrayExpr"},"arguments":[{"__symbolic":"reference","name":"values"},{"__symbolic":"reference","name":"type"}]}},"literalMap":{"__symbolic":"function","parameters":["values","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"LiteralMapExpr"},"arguments":[{"__symbolic":"reference","name":"values"},{"__symbolic":"reference","name":"type"}]}},"not":{"__symbolic":"function","parameters":["expr"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"NotExpr"},"arguments":[{"__symbolic":"reference","name":"expr"}]}},"fn":{"__symbolic":"function","parameters":["params","body","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"FunctionExpr"},"arguments":[{"__symbolic":"reference","name":"params"},{"__symbolic":"reference","name":"body"},{"__symbolic":"reference","name":"type"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"TypeModifier":{"Const":0},"BuiltinTypeName":{"Dynamic":0,"Bool":1,"String":2,"Int":3,"Number":4,"Function":5},"DYNAMIC_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Dynamic"}]},"BOOL_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Bool"}]},"INT_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Int"}]},"NUMBER_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Number"}]},"STRING_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"String"}]},"FUNCTION_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Function"}]},"BinaryOperator":{"Equals":0,"NotEquals":1,"Identical":2,"NotIdentical":3,"Minus":4,"Plus":5,"Divide":6,"Multiply":7,"Modulo":8,"And":9,"Or":10,"Lower":11,"LowerEquals":12,"Bigger":13,"BiggerEquals":14},"BuiltinVar":{"This":0,"Super":1,"CatchError":2,"CatchStack":3},"BuiltinMethod":{"ConcatArray":0,"SubscribeObservable":1,"bind":2},"THIS_EXPR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinVar"},"member":"This"}]},"SUPER_EXPR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinVar"},"member":"Super"}]},"CATCH_ERROR_VAR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinVar"},"member":"CatchError"}]},"CATCH_STACK_VAR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinVar"},"member":"CatchStack"}]},"NULL_EXPR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"LiteralExpr"},"arguments":[null,null]},"StmtModifier":{"Final":0,"Private":1},"variable":{"__symbolic":"function","parameters":["name","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"reference","name":"name"},{"__symbolic":"reference","name":"type"}]},"defaults":[null,null]},"importExpr":{"__symbolic":"function","parameters":["id","typeParams"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ExternalExpr"},"arguments":[{"__symbolic":"reference","name":"id"},null,{"__symbolic":"reference","name":"typeParams"}]},"defaults":[null,null]},"importType":{"__symbolic":"function","parameters":["id","typeParams","typeModifiers"],"value":{"__symbolic":"if","condition":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"../facade/lang","name":"isPresent"},"arguments":[{"__symbolic":"reference","name":"id"}]},"thenExpression":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ExternalType"},"arguments":[{"__symbolic":"reference","name":"id"},{"__symbolic":"reference","name":"typeParams"},{"__symbolic":"reference","name":"typeModifiers"}]},"elseExpression":null},"defaults":[null,null,null]},"literalArr":{"__symbolic":"function","parameters":["values","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"LiteralArrayExpr"},"arguments":[{"__symbolic":"reference","name":"values"},{"__symbolic":"reference","name":"type"}]},"defaults":[null,null]},"literalMap":{"__symbolic":"function","parameters":["values","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"LiteralMapExpr"},"arguments":[{"__symbolic":"reference","name":"values"},{"__symbolic":"reference","name":"type"}]},"defaults":[null,null]},"not":{"__symbolic":"function","parameters":["expr"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"NotExpr"},"arguments":[{"__symbolic":"reference","name":"expr"}]}},"fn":{"__symbolic":"function","parameters":["params","body","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"FunctionExpr"},"arguments":[{"__symbolic":"reference","name":"params"},{"__symbolic":"reference","name":"body"},{"__symbolic":"reference","name":"type"}]},"defaults":[null,null,null]},"literal":{"__symbolic":"function","parameters":["value","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"LiteralExpr"},"arguments":[{"__symbolic":"reference","name":"value"},{"__symbolic":"reference","name":"type"}]},"defaults":[null,null]}}}
import * as o from './output_ast';
export declare function interpretStatements(statements: o.Statement[], resultVar: string, instanceFactory: InstanceFactory): any;
export interface InstanceFactory {
createInstance(superClass: any, clazz: any, constructorArgs: any[], props: Map<string, any>, getters: Map<string, Function>, methods: Map<string, Function>): DynamicInstance;
}
export declare abstract class DynamicInstance {
readonly props: Map<string, any>;
readonly getters: Map<string, Function>;
readonly methods: Map<string, any>;
readonly clazz: any;
}
export declare function interpretStatements(statements: o.Statement[], resultVar: string): any;

@@ -8,13 +8,10 @@ /**

*/
import { reflector } from '../../core_private';
import { ObservableWrapper } from '../facade/async';
import { ListWrapper } from '../facade/collection';
import { BaseException, unimplemented } from '../facade/exceptions';
import { FunctionWrapper, IS_DART, isPresent } from '../facade/lang';
import { debugOutputAstAsDart } from './dart_emitter';
import { BaseException } from '../facade/exceptions';
import { isPresent } from '../facade/lang';
import * as o from './output_ast';
import { debugOutputAstAsTypeScript } from './ts_emitter';
export function interpretStatements(statements, resultVar, instanceFactory) {
export function interpretStatements(statements, resultVar) {
var stmtsWithReturn = statements.concat([new o.ReturnStatement(o.variable(resultVar))]);
var ctx = new _ExecutionContext(null, null, null, null, new Map(), new Map(), new Map(), new Map(), instanceFactory);
var ctx = new _ExecutionContext(null, null, null, new Map());
var visitor = new StatementInterpreter();

@@ -24,17 +21,2 @@ var result = visitor.visitAllStatements(stmtsWithReturn, ctx);

}
export class DynamicInstance {
get props() { return unimplemented(); }
get getters() { return unimplemented(); }
get methods() { return unimplemented(); }
get clazz() { return unimplemented(); }
}
function isDynamicInstance(instance) {
if (IS_DART) {
return instance instanceof DynamicInstance;
}
else {
return isPresent(instance) && isPresent(instance.props) && isPresent(instance.getters) &&
isPresent(instance.methods);
}
}
function _executeFunctionStatements(varNames, varValues, statements, ctx, visitor) {

@@ -49,15 +31,10 @@ var childCtx = ctx.createChildWihtLocalVars();

class _ExecutionContext {
constructor(parent, superClass, superInstance, className, vars, props, getters, methods, instanceFactory) {
constructor(parent, instance, className, vars) {
this.parent = parent;
this.superClass = superClass;
this.superInstance = superInstance;
this.instance = instance;
this.className = className;
this.vars = vars;
this.props = props;
this.getters = getters;
this.methods = methods;
this.instanceFactory = instanceFactory;
}
createChildWihtLocalVars() {
return new _ExecutionContext(this, this.superClass, this.superInstance, this.className, new Map(), this.props, this.getters, this.methods, this.instanceFactory);
return new _ExecutionContext(this, this.instance, this.className, new Map());
}

@@ -70,32 +47,39 @@ }

}
class _DynamicClass {
constructor(_classStmt, _ctx, _visitor) {
this._classStmt = _classStmt;
this._ctx = _ctx;
this._visitor = _visitor;
}
instantiate(args) {
var props = new Map();
var getters = new Map();
var methods = new Map();
var superClass = this._classStmt.parent.visitExpression(this._visitor, this._ctx);
var instanceCtx = new _ExecutionContext(this._ctx, superClass, null, this._classStmt.name, this._ctx.vars, props, getters, methods, this._ctx.instanceFactory);
this._classStmt.fields.forEach((field) => { props.set(field.name, null); });
this._classStmt.getters.forEach((getter) => {
getters.set(getter.name, () => _executeFunctionStatements([], [], getter.body, instanceCtx, this._visitor));
});
this._classStmt.methods.forEach((method) => {
var paramNames = method.params.map(param => param.name);
methods.set(method.name, _declareFn(paramNames, method.body, instanceCtx, this._visitor));
});
var ctorParamNames = this._classStmt.constructorMethod.params.map(param => param.name);
_executeFunctionStatements(ctorParamNames, args, this._classStmt.constructorMethod.body, instanceCtx, this._visitor);
return instanceCtx.superInstance;
}
debugAst() { return this._visitor.debugAst(this._classStmt); }
function createDynamicClass(_classStmt, _ctx, _visitor) {
let propertyDescriptors = {};
_classStmt.getters.forEach((getter) => {
// Note: use `function` instead of arrow function to capture `this`
propertyDescriptors[getter.name] = {
configurable: false,
get: function () {
let instanceCtx = new _ExecutionContext(_ctx, this, _classStmt.name, _ctx.vars);
return _executeFunctionStatements([], [], getter.body, instanceCtx, _visitor);
}
};
});
_classStmt.methods.forEach(function (method) {
const paramNames = method.params.map(param => param.name);
// Note: use `function` instead of arrow function to capture `this`
propertyDescriptors[method.name] = {
writable: false,
configurable: false,
value: function (...args) {
let instanceCtx = new _ExecutionContext(_ctx, this, _classStmt.name, _ctx.vars);
return _executeFunctionStatements(paramNames, args, method.body, instanceCtx, _visitor);
}
};
});
var ctorParamNames = _classStmt.constructorMethod.params.map(param => param.name);
// Note: use `function` instead of arrow function to capture `this`
var ctor = function (...args) {
let instanceCtx = new _ExecutionContext(_ctx, this, _classStmt.name, _ctx.vars);
_classStmt.fields.forEach((field) => { this[field.name] = undefined; });
_executeFunctionStatements(ctorParamNames, args, _classStmt.constructorMethod.body, instanceCtx, _visitor);
};
var superClass = _classStmt.parent.visitExpression(_visitor, _ctx);
ctor.prototype = Object.create(superClass.prototype, propertyDescriptors);
return ctor;
}
class StatementInterpreter {
debugAst(ast) {
return IS_DART ? debugOutputAstAsDart(ast) : debugOutputAstAsTypeScript(ast);
}
debugAst(ast) { return debugOutputAstAsTypeScript(ast); }
visitDeclareVarStmt(stmt, ctx) {

@@ -122,4 +106,5 @@ ctx.vars.set(stmt.name, stmt.value.visitExpression(this, ctx));

case o.BuiltinVar.Super:
return ctx.instance.__proto__;
case o.BuiltinVar.This:
return ctx.superInstance;
return ctx.instance;
case o.BuiltinVar.CatchError:

@@ -154,14 +139,3 @@ varName = CATCH_ERROR_VAR;

var value = expr.value.visitExpression(this, ctx);
if (isDynamicInstance(receiver)) {
var di = receiver;
if (di.props.has(expr.name)) {
di.props.set(expr.name, value);
}
else {
reflector.setter(expr.name)(receiver, value);
}
}
else {
reflector.setter(expr.name)(receiver, value);
}
receiver[expr.name] = value;
return value;

@@ -179,11 +153,6 @@ }

case o.BuiltinMethod.SubscribeObservable:
result = ObservableWrapper.subscribe(receiver, args[0]);
result = receiver.subscribe({ next: args[0] });
break;
case o.BuiltinMethod.bind:
if (IS_DART) {
result = receiver;
}
else {
result = receiver.bind(args[0]);
}
result = receiver.bind(args[0]);
break;

@@ -194,13 +163,4 @@ default:

}
else if (isDynamicInstance(receiver)) {
var di = receiver;
if (di.methods.has(expr.name)) {
result = FunctionWrapper.apply(di.methods.get(expr.name), args);
}
else {
result = reflector.method(expr.name)(receiver, args);
}
}
else {
result = reflector.method(expr.name)(receiver, args);
result = receiver[expr.name].apply(receiver, args);
}

@@ -213,4 +173,3 @@ return result;

if (fnExpr instanceof o.ReadVarExpr && fnExpr.builtin === o.BuiltinVar.Super) {
ctx.superInstance = ctx.instanceFactory.createInstance(ctx.superClass, ctx.className, args, ctx.props, ctx.getters, ctx.methods);
ctx.parent.superInstance = ctx.superInstance;
ctx.instance.constructor.prototype.constructor.apply(ctx.instance, args);
return null;

@@ -220,3 +179,3 @@ }

var fn = stmt.fn.visitExpression(this, ctx);
return FunctionWrapper.apply(fn, args);
return fn.apply(null, args);
}

@@ -228,3 +187,3 @@ }

visitDeclareClassStmt(stmt, ctx) {
var clazz = new _DynamicClass(stmt, ctx, this);
var clazz = createDynamicClass(stmt, ctx, this);
ctx.vars.set(stmt.name, clazz);

@@ -264,8 +223,3 @@ return null;

var clazz = ast.classExpr.visitExpression(this, ctx);
if (clazz instanceof _DynamicClass) {
return clazz.instantiate(args);
}
else {
return FunctionWrapper.apply(reflector.factory(clazz), args);
}
return new clazz(...args);
}

@@ -339,20 +293,3 @@ visitLiteralExpr(ast, ctx) { return ast.value; }

var receiver = ast.receiver.visitExpression(this, ctx);
if (isDynamicInstance(receiver)) {
var di = receiver;
if (di.props.has(ast.name)) {
result = di.props.get(ast.name);
}
else if (di.getters.has(ast.name)) {
result = di.getters.get(ast.name)();
}
else if (di.methods.has(ast.name)) {
result = di.methods.get(ast.name);
}
else {
result = reflector.getter(ast.name)(receiver);
}
}
else {
result = reflector.getter(ast.name)(receiver);
}
result = receiver[ast.name];
return result;

@@ -389,28 +326,3 @@ }

function _declareFn(varNames, statements, ctx, visitor) {
switch (varNames.length) {
case 0:
return () => _executeFunctionStatements(varNames, [], statements, ctx, visitor);
case 1:
return (d0 /** TODO #9100 */) => _executeFunctionStatements(varNames, [d0], statements, ctx, visitor);
case 2:
return (d0 /** TODO #9100 */, d1 /** TODO #9100 */) => _executeFunctionStatements(varNames, [d0, d1], statements, ctx, visitor);
case 3:
return (d0 /** TODO #9100 */, d1 /** TODO #9100 */, d2 /** TODO #9100 */) => _executeFunctionStatements(varNames, [d0, d1, d2], statements, ctx, visitor);
case 4:
return (d0 /** TODO #9100 */, d1 /** TODO #9100 */, d2 /** TODO #9100 */, d3 /** TODO #9100 */) => _executeFunctionStatements(varNames, [d0, d1, d2, d3], statements, ctx, visitor);
case 5:
return (d0 /** TODO #9100 */, d1 /** TODO #9100 */, d2 /** TODO #9100 */, d3 /** TODO #9100 */, d4 /** TODO #9100 */) => _executeFunctionStatements(varNames, [d0, d1, d2, d3, d4], statements, ctx, visitor);
case 6:
return (d0 /** TODO #9100 */, d1 /** TODO #9100 */, d2 /** TODO #9100 */, d3 /** TODO #9100 */, d4 /** TODO #9100 */, d5 /** TODO #9100 */) => _executeFunctionStatements(varNames, [d0, d1, d2, d3, d4, d5], statements, ctx, visitor);
case 7:
return (d0 /** TODO #9100 */, d1 /** TODO #9100 */, d2 /** TODO #9100 */, d3 /** TODO #9100 */, d4 /** TODO #9100 */, d5 /** TODO #9100 */, d6 /** TODO #9100 */) => _executeFunctionStatements(varNames, [d0, d1, d2, d3, d4, d5, d6], statements, ctx, visitor);
case 8:
return (d0 /** TODO #9100 */, d1 /** TODO #9100 */, d2 /** TODO #9100 */, d3 /** TODO #9100 */, d4 /** TODO #9100 */, d5 /** TODO #9100 */, d6 /** TODO #9100 */, d7 /** TODO #9100 */) => _executeFunctionStatements(varNames, [d0, d1, d2, d3, d4, d5, d6, d7], statements, ctx, visitor);
case 9:
return (d0 /** TODO #9100 */, d1 /** TODO #9100 */, d2 /** TODO #9100 */, d3 /** TODO #9100 */, d4 /** TODO #9100 */, d5 /** TODO #9100 */, d6 /** TODO #9100 */, d7 /** TODO #9100 */, d8 /** TODO #9100 */) => _executeFunctionStatements(varNames, [d0, d1, d2, d3, d4, d5, d6, d7, d8], statements, ctx, visitor);
case 10:
return (d0 /** TODO #9100 */, d1 /** TODO #9100 */, d2 /** TODO #9100 */, d3 /** TODO #9100 */, d4 /** TODO #9100 */, d5 /** TODO #9100 */, d6 /** TODO #9100 */, d7 /** TODO #9100 */, d8 /** TODO #9100 */, d9 /** TODO #9100 */) => _executeFunctionStatements(varNames, [d0, d1, d2, d3, d4, d5, d6, d7, d8, d9], statements, ctx, visitor);
default:
throw new BaseException('Declaring functions with more than 10 arguments is not supported right now');
}
return (...args) => _executeFunctionStatements(varNames, args, statements, ctx, visitor);
}

@@ -417,0 +329,0 @@ var CATCH_ERROR_VAR = 'error';

@@ -8,6 +8,6 @@ /**

*/
import { isPresent, evalExpression } from '../facade/lang';
import { evalExpression, isPresent } from '../facade/lang';
import { sanitizeIdentifier } from '../util';
import { EmitterVisitorContext } from './abstract_emitter';
import { AbstractJsEmitterVisitor } from './abstract_js_emitter';
import { sanitizeIdentifier } from '../util';
export function jitStatements(sourceUrl, statements, resultVar) {

@@ -14,0 +14,0 @@ var converter = new JitEmitterVisitor();

@@ -9,5 +9,4 @@ /**

import { BaseException } from '../facade/exceptions';
import { RegExpWrapper, isPresent } from '../facade/lang';
// asset:<package-name>/<realm>/<path-to-module>
var _ASSET_URL_RE = /asset:([^\/]+)\/([^\/]+)\/(.+)/g;
var _ASSET_URL_RE = /asset:([^\/]+)\/([^\/]+)\/(.+)/;
/**

@@ -26,4 +25,4 @@ * Interface that defines how import statements should be generated.

static parse(url, allowNonMatching = true) {
var match = RegExpWrapper.firstMatch(_ASSET_URL_RE, url);
if (isPresent(match)) {
const match = url.match(_ASSET_URL_RE);
if (match !== null) {
return new AssetUrl(match[1], match[2], match[3]);

@@ -30,0 +29,0 @@ }

@@ -1,8 +0,1 @@

/**
* @license
* Copyright Google Inc. 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
*/
export declare class ParseLocation {

@@ -24,3 +17,4 @@ file: ParseSourceFile;

end: ParseLocation;
constructor(start: ParseLocation, end: ParseLocation);
details: string;
constructor(start: ParseLocation, end: ParseLocation, details?: string);
toString(): string;

@@ -27,0 +21,0 @@ }

@@ -1,8 +0,2 @@

/**
* @license
* Copyright Google Inc. 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 { isPresent } from './facade/lang';
export class ParseLocation {

@@ -15,3 +9,5 @@ constructor(file, offset, line, col) {

}
toString() { return `${this.file.url}@${this.line}:${this.col}`; }
toString() {
return isPresent(this.offset) ? `${this.file.url}@${this.line}:${this.col}` : this.file.url;
}
}

@@ -25,5 +21,6 @@ export class ParseSourceFile {

export class ParseSourceSpan {
constructor(start, end) {
constructor(start, end, details = null) {
this.start = start;
this.end = end;
this.details = details;
}

@@ -48,33 +45,41 @@ toString() {

var ctxStart = this.span.start.offset;
if (ctxStart > source.length - 1) {
ctxStart = source.length - 1;
}
var ctxEnd = ctxStart;
var ctxLen = 0;
var ctxLines = 0;
while (ctxLen < 100 && ctxStart > 0) {
ctxStart--;
ctxLen++;
if (source[ctxStart] == '\n') {
if (++ctxLines == 3) {
break;
var contextStr = '';
var details = '';
if (isPresent(ctxStart)) {
if (ctxStart > source.length - 1) {
ctxStart = source.length - 1;
}
var ctxEnd = ctxStart;
var ctxLen = 0;
var ctxLines = 0;
while (ctxLen < 100 && ctxStart > 0) {
ctxStart--;
ctxLen++;
if (source[ctxStart] == '\n') {
if (++ctxLines == 3) {
break;
}
}
}
}
ctxLen = 0;
ctxLines = 0;
while (ctxLen < 100 && ctxEnd < source.length - 1) {
ctxEnd++;
ctxLen++;
if (source[ctxEnd] == '\n') {
if (++ctxLines == 3) {
break;
ctxLen = 0;
ctxLines = 0;
while (ctxLen < 100 && ctxEnd < source.length - 1) {
ctxEnd++;
ctxLen++;
if (source[ctxEnd] == '\n') {
if (++ctxLines == 3) {
break;
}
}
}
let context = source.substring(ctxStart, this.span.start.offset) + '[ERROR ->]' +
source.substring(this.span.start.offset, ctxEnd + 1);
contextStr = ` ("${context}")`;
}
let context = source.substring(ctxStart, this.span.start.offset) + '[ERROR ->]' +
source.substring(this.span.start.offset, ctxEnd + 1);
return `${this.msg} ("${context}"): ${this.span.start}`;
if (this.span.details) {
details = `, ${this.span.details}`;
}
return `${this.msg}${contextStr}: ${this.span.start}${details}`;
}
}
//# sourceMappingURL=parse_util.js.map

@@ -10,3 +10,3 @@ /**

import { ReflectorReader } from '../core_private';
import { Type } from '../src/facade/lang';
import { Type } from './facade/lang';
/**

@@ -25,3 +25,3 @@ * Resolve a `Type` for {@link PipeMetadata}.

*/
resolve(type: Type): PipeMetadata;
resolve(type: Type, throwIfNotFound?: boolean): PipeMetadata;
}

@@ -10,4 +10,4 @@ /**

import { ReflectorReader, reflector } from '../core_private';
import { BaseException } from '../src/facade/exceptions';
import { isPresent, stringify } from '../src/facade/lang';
import { BaseException } from './facade/exceptions';
import { isPresent, stringify } from './facade/lang';
function _isPipeMetadata(type) {

@@ -23,3 +23,3 @@ return type instanceof PipeMetadata;

*/
resolve(type) {
resolve(type, throwIfNotFound = true) {
var metas = this._reflector.annotations(resolveForwardRef(type));

@@ -32,3 +32,6 @@ if (isPresent(metas)) {

}
throw new BaseException(`No Pipe decorator found on ${stringify(type)}`);
if (throwIfNotFound) {
throw new BaseException(`No Pipe decorator found on ${stringify(type)}`);
}
return null;
}

@@ -35,0 +38,0 @@ }

@@ -8,10 +8,12 @@ /**

*/
import { Compiler, ComponentFactory, ComponentResolver } from '@angular/core';
import { ConcreteType, Type } from '../src/facade/lang';
import { Compiler, ComponentFactory, Injector, ModuleWithComponentFactories, NgModuleFactory } from '@angular/core';
import { Console } from '../core_private';
import { CompilerConfig } from './config';
import { DirectiveNormalizer } from './directive_normalizer';
import { ConcreteType, Type } from './facade/lang';
import { CompileMetadataResolver } from './metadata_resolver';
import { NgModuleCompiler } from './ng_module_compiler';
import { StyleCompiler } from './style_compiler';
import { TemplateParser } from './template_parser/template_parser';
import { ViewCompiler } from './view_compiler/view_compiler';
import { TemplateParser } from './template_parser';
import { DirectiveNormalizer } from './directive_normalizer';
import { CompileMetadataResolver } from './metadata_resolver';
import { CompilerConfig } from './config';
/**

@@ -26,3 +28,4 @@ * An internal module of the Angular compiler that begins with component types,

*/
export declare class RuntimeCompiler implements ComponentResolver, Compiler {
export declare class RuntimeCompiler implements Compiler {
private _injector;
private _metadataResolver;

@@ -33,14 +36,26 @@ private _templateNormalizer;

private _viewCompiler;
private _genConfig;
private _ngModuleCompiler;
private _compilerConfig;
private _console;
private _compiledTemplateCache;
private _compiledHostTemplateCache;
constructor(_metadataResolver: CompileMetadataResolver, _templateNormalizer: DirectiveNormalizer, _templateParser: TemplateParser, _styleCompiler: StyleCompiler, _viewCompiler: ViewCompiler, _genConfig: CompilerConfig);
resolveComponent(component: Type | string): Promise<ComponentFactory<any>>;
compileComponentAsync<T>(compType: ConcreteType<T>): Promise<ComponentFactory<T>>;
compileComponentSync<T>(compType: ConcreteType<T>): ComponentFactory<T>;
clearCacheFor(compType: Type): void;
private _compiledNgModuleCache;
constructor(_injector: Injector, _metadataResolver: CompileMetadataResolver, _templateNormalizer: DirectiveNormalizer, _templateParser: TemplateParser, _styleCompiler: StyleCompiler, _viewCompiler: ViewCompiler, _ngModuleCompiler: NgModuleCompiler, _compilerConfig: CompilerConfig, _console: Console);
readonly injector: Injector;
compileModuleSync<T>(moduleType: ConcreteType<T>): NgModuleFactory<T>;
compileModuleAsync<T>(moduleType: ConcreteType<T>): Promise<NgModuleFactory<T>>;
compileModuleAndAllComponentsSync<T>(moduleType: ConcreteType<T>): ModuleWithComponentFactories<T>;
compileModuleAndAllComponentsAsync<T>(moduleType: ConcreteType<T>): Promise<ModuleWithComponentFactories<T>>;
compileComponentAsync<T>(compType: ConcreteType<T>, ngModule?: ConcreteType<any>): Promise<ComponentFactory<T>>;
compileComponentSync<T>(compType: ConcreteType<T>, ngModule?: ConcreteType<any>): ComponentFactory<T>;
private _compileModuleAndComponents<T>(moduleType, isSync);
private _compileModuleAndAllComponents<T>(moduleType, isSync);
private _compileModule<T>(moduleType);
private _compileComponentInModule<T>(compType, isSync, moduleType);
clearCacheFor(type: Type): void;
clearCache(): void;
private _getCompiledHostTemplate(type);
private _getCompiledTemplate(type);
private _getTransitiveCompiledTemplates(compType, isHost, target?);
private _createCompiledHostTemplate(compType);
private _createCompiledTemplate(compMeta, ngModule);
private _assertComponentKnown(compType, isHost);
private _assertComponentLoaded(compType, isHost);
private _compileTemplate(template);

@@ -47,0 +62,0 @@ private _resolveStylesCompileResult(result, externalStylesheetsByModuleUrl);

@@ -8,19 +8,21 @@ /**

*/
import { ComponentFactory, Injectable } from '@angular/core';
import { BaseException } from '../src/facade/exceptions';
import { IS_DART, isBlank, isString } from '../src/facade/lang';
import { PromiseWrapper } from '../src/facade/async';
import { Compiler, ComponentFactory, ComponentResolver, ComponentStillLoadingError, Injectable, Injector, ModuleWithComponentFactories, OptionalMetadata, Provider, SkipSelfMetadata } from '@angular/core';
import { Console } from '../core_private';
import { createHostComponentMeta } from './compile_metadata';
import { StyleCompiler } from './style_compiler';
import { ViewCompiler, ViewFactoryDependency, ComponentFactoryDependency } from './view_compiler/view_compiler';
import { TemplateParser } from './template_parser';
import { CompilerConfig } from './config';
import { DirectiveNormalizer } from './directive_normalizer';
import { BaseException } from './facade/exceptions';
import { isBlank, isString, stringify } from './facade/lang';
import { CompileMetadataResolver } from './metadata_resolver';
import { CompilerConfig } from './config';
import { NgModuleCompiler } from './ng_module_compiler';
import * as ir from './output/output_ast';
import { interpretStatements } from './output/output_interpreter';
import { jitStatements } from './output/output_jit';
import { interpretStatements } from './output/output_interpreter';
import { InterpretiveAppViewInstanceFactory } from './output/interpretive_view';
import { StyleCompiler } from './style_compiler';
import { TemplateParser } from './template_parser/template_parser';
import { SyncAsyncResult } from './util';
import { ComponentFactoryDependency, ViewCompiler, ViewFactoryDependency } from './view_compiler/view_compiler';
export class RuntimeCompiler {
constructor(_metadataResolver, _templateNormalizer, _templateParser, _styleCompiler, _viewCompiler, _genConfig) {
constructor(_injector, _metadataResolver, _templateNormalizer, _templateParser, _styleCompiler, _viewCompiler, _ngModuleCompiler, _compilerConfig, _console) {
this._injector = _injector;
this._metadataResolver = _metadataResolver;

@@ -31,42 +33,149 @@ this._templateNormalizer = _templateNormalizer;

this._viewCompiler = _viewCompiler;
this._genConfig = _genConfig;
this._ngModuleCompiler = _ngModuleCompiler;
this._compilerConfig = _compilerConfig;
this._console = _console;
this._compiledTemplateCache = new Map();
this._compiledHostTemplateCache = new Map();
this._compiledNgModuleCache = new Map();
}
resolveComponent(component) {
if (isString(component)) {
return PromiseWrapper.reject(new BaseException(`Cannot resolve component using '${component}'.`), null);
get injector() { return this._injector; }
compileModuleSync(moduleType) {
return this._compileModuleAndComponents(moduleType, true).syncResult;
}
compileModuleAsync(moduleType) {
return this._compileModuleAndComponents(moduleType, false).asyncResult;
}
compileModuleAndAllComponentsSync(moduleType) {
return this._compileModuleAndAllComponents(moduleType, true).syncResult;
}
compileModuleAndAllComponentsAsync(moduleType) {
return this._compileModuleAndAllComponents(moduleType, false).asyncResult;
}
compileComponentAsync(compType, ngModule = null) {
if (!ngModule) {
throw new BaseException(`Calling compileComponentAsync on the root compiler without a module is not allowed! (Compiling component ${stringify(compType)})`);
}
return this.compileComponentAsync(component);
return this._compileComponentInModule(compType, false, ngModule).asyncResult;
}
compileComponentAsync(compType) {
var templates = this._getTransitiveCompiledTemplates(compType, true);
var loadingPromises = [];
templates.forEach((template) => {
if (template.loading) {
loadingPromises.push(template.loading);
}
compileComponentSync(compType, ngModule = null) {
if (!ngModule) {
throw new BaseException(`Calling compileComponentSync on the root compiler without a module is not allowed! (Compiling component ${stringify(compType)})`);
}
return this._compileComponentInModule(compType, true, ngModule).syncResult;
}
_compileModuleAndComponents(moduleType, isSync) {
const componentPromise = this._compileComponents(moduleType, isSync);
const ngModuleFactory = this._compileModule(moduleType);
return new SyncAsyncResult(ngModuleFactory, componentPromise.then(() => ngModuleFactory));
}
_compileModuleAndAllComponents(moduleType, isSync) {
const componentPromise = this._compileComponents(moduleType, isSync);
const ngModuleFactory = this._compileModule(moduleType);
const moduleMeta = this._metadataResolver.getNgModuleMetadata(moduleType);
const componentFactories = [];
const templates = new Set();
moduleMeta.transitiveModule.modules.forEach((moduleMeta) => {
moduleMeta.declaredDirectives.forEach((dirMeta) => {
if (dirMeta.isComponent) {
const template = this._createCompiledHostTemplate(dirMeta.type.runtime);
templates.add(template);
componentFactories.push(template.proxyComponentFactory);
}
});
});
return Promise.all(loadingPromises).then(() => {
const syncResult = new ModuleWithComponentFactories(ngModuleFactory, componentFactories);
// Note: host components themselves can always be compiled synchronously as they have an
// inline template. However, we still need to wait for the components that they
// reference to be loaded / compiled.
const compile = () => {
templates.forEach((template) => { this._compileTemplate(template); });
return this._getCompiledHostTemplate(compType).proxyComponentFactory;
return syncResult;
};
const asyncResult = isSync ? Promise.resolve(compile()) : componentPromise.then(compile);
return new SyncAsyncResult(syncResult, asyncResult);
}
_compileModule(moduleType) {
let ngModuleFactory = this._compiledNgModuleCache.get(moduleType);
if (!ngModuleFactory) {
const moduleMeta = this._metadataResolver.getNgModuleMetadata(moduleType);
const transitiveModuleMeta = moduleMeta.transitiveModule;
let boundCompilerFactory = (parentResolver) => new ModuleBoundCompiler(this, moduleMeta.type.runtime, parentResolver, this._console);
// Always provide a bound Compiler and ComponentResolver
const extraProviders = [
this._metadataResolver.getProviderMetadata(new Provider(Compiler, {
useFactory: boundCompilerFactory,
deps: [[new OptionalMetadata(), new SkipSelfMetadata(), ComponentResolver]]
})),
this._metadataResolver.getProviderMetadata(new Provider(ComponentResolver, { useExisting: Compiler }))
];
var compileResult = this._ngModuleCompiler.compile(moduleMeta, extraProviders);
compileResult.dependencies.forEach((dep) => {
dep.placeholder.runtime =
this._assertComponentKnown(dep.comp.runtime, true).proxyComponentFactory;
dep.placeholder.name = `compFactory_${dep.comp.name}`;
});
if (!this._compilerConfig.useJit) {
ngModuleFactory =
interpretStatements(compileResult.statements, compileResult.ngModuleFactoryVar);
}
else {
ngModuleFactory = jitStatements(`${moduleMeta.type.name}.ngfactory.js`, compileResult.statements, compileResult.ngModuleFactoryVar);
}
this._compiledNgModuleCache.set(moduleMeta.type.runtime, ngModuleFactory);
}
return ngModuleFactory;
}
_compileComponentInModule(compType, isSync, moduleType) {
this._metadataResolver.addComponentToModule(moduleType, compType);
const componentPromise = this._compileComponents(moduleType, isSync);
const componentFactory = this._assertComponentKnown(compType, true).proxyComponentFactory;
return new SyncAsyncResult(componentFactory, componentPromise.then(() => componentFactory));
}
/**
* @internal
*/
_compileComponents(mainModule, isSync) {
const templates = new Set();
var loadingPromises = [];
const ngModule = this._metadataResolver.getNgModuleMetadata(mainModule);
ngModule.transitiveModule.modules.forEach((localModuleMeta) => {
localModuleMeta.declaredDirectives.forEach((dirMeta) => {
if (dirMeta.isComponent) {
templates.add(this._createCompiledTemplate(dirMeta, localModuleMeta));
dirMeta.entryComponents.forEach((entryComponentType) => {
templates.add(this._createCompiledHostTemplate(entryComponentType.runtime));
});
}
});
localModuleMeta.entryComponents.forEach((entryComponentType) => {
templates.add(this._createCompiledHostTemplate(entryComponentType.runtime));
});
});
}
compileComponentSync(compType) {
var templates = this._getTransitiveCompiledTemplates(compType, true);
templates.forEach((template) => {
if (template.loading) {
throw new BaseException(`Can't compile synchronously as ${template.compType.name} is still being loaded!`);
if (isSync) {
throw new ComponentStillLoadingError(template.compType.runtime);
}
else {
loadingPromises.push(template.loading);
}
}
});
templates.forEach((template) => { this._compileTemplate(template); });
return this._getCompiledHostTemplate(compType).proxyComponentFactory;
const compile = () => { templates.forEach((template) => { this._compileTemplate(template); }); };
if (isSync) {
compile();
return Promise.resolve(null);
}
else {
return Promise.all(loadingPromises).then(compile);
}
}
clearCacheFor(compType) {
this._metadataResolver.clearCacheFor(compType);
this._compiledHostTemplateCache.delete(compType);
var compiledTemplate = this._compiledTemplateCache.get(compType);
clearCacheFor(type) {
this._compiledNgModuleCache.delete(type);
this._metadataResolver.clearCacheFor(type);
this._compiledHostTemplateCache.delete(type);
var compiledTemplate = this._compiledTemplateCache.get(type);
if (compiledTemplate) {
this._templateNormalizer.clearCacheFor(compiledTemplate.normalizedCompMeta);
this._compiledTemplateCache.delete(compType);
this._compiledTemplateCache.delete(type);
}

@@ -79,45 +188,39 @@ }

this._templateNormalizer.clearCache();
this._compiledNgModuleCache.clear();
}
_getCompiledHostTemplate(type) {
var compiledTemplate = this._compiledHostTemplateCache.get(type);
_createCompiledHostTemplate(compType) {
var compiledTemplate = this._compiledHostTemplateCache.get(compType);
if (isBlank(compiledTemplate)) {
var compMeta = this._metadataResolver.getDirectiveMetadata(type);
var compMeta = this._metadataResolver.getDirectiveMetadata(compType);
assertComponent(compMeta);
var hostMeta = createHostComponentMeta(compMeta.type, compMeta.selector);
compiledTemplate = new CompiledTemplate(true, compMeta.selector, compMeta.type, [], [type], [], [], this._templateNormalizer.normalizeDirective(hostMeta));
this._compiledHostTemplateCache.set(type, compiledTemplate);
var hostMeta = createHostComponentMeta(compMeta);
compiledTemplate = new CompiledTemplate(true, compMeta.selector, compMeta.type, [compMeta], [], [], this._templateNormalizer.normalizeDirective(hostMeta));
this._compiledHostTemplateCache.set(compType, compiledTemplate);
}
return compiledTemplate;
}
_getCompiledTemplate(type) {
var compiledTemplate = this._compiledTemplateCache.get(type);
_createCompiledTemplate(compMeta, ngModule) {
var compiledTemplate = this._compiledTemplateCache.get(compMeta.type.runtime);
if (isBlank(compiledTemplate)) {
var compMeta = this._metadataResolver.getDirectiveMetadata(type);
assertComponent(compMeta);
var viewDirectives = [];
var viewComponentTypes = [];
this._metadataResolver.getViewDirectivesMetadata(type).forEach(dirOrComp => {
if (dirOrComp.isComponent) {
viewComponentTypes.push(dirOrComp.type.runtime);
}
else {
viewDirectives.push(dirOrComp);
}
});
var precompileComponentTypes = compMeta.precompile.map((typeMeta) => typeMeta.runtime);
var pipes = this._metadataResolver.getViewPipesMetadata(type);
compiledTemplate = new CompiledTemplate(false, compMeta.selector, compMeta.type, viewDirectives, viewComponentTypes, precompileComponentTypes, pipes, this._templateNormalizer.normalizeDirective(compMeta));
this._compiledTemplateCache.set(type, compiledTemplate);
compiledTemplate = new CompiledTemplate(false, compMeta.selector, compMeta.type, ngModule.transitiveModule.directives, ngModule.transitiveModule.pipes, ngModule.schemas, this._templateNormalizer.normalizeDirective(compMeta));
this._compiledTemplateCache.set(compMeta.type.runtime, compiledTemplate);
}
return compiledTemplate;
}
_getTransitiveCompiledTemplates(compType, isHost, target = new Set()) {
var template = isHost ? this._getCompiledHostTemplate(compType) : this._getCompiledTemplate(compType);
if (!target.has(template)) {
target.add(template);
template.viewComponentTypes.forEach((compType) => { this._getTransitiveCompiledTemplates(compType, false, target); });
template.precompileHostComponentTypes.forEach((compType) => { this._getTransitiveCompiledTemplates(compType, true, target); });
_assertComponentKnown(compType, isHost) {
const compiledTemplate = isHost ? this._compiledHostTemplateCache.get(compType) :
this._compiledTemplateCache.get(compType);
if (!compiledTemplate) {
throw new BaseException(`Illegal state: CompiledTemplate for ${stringify(compType)} (isHost: ${isHost}) does not exist!`);
}
return target;
return compiledTemplate;
}
_assertComponentLoaded(compType, isHost) {
const compiledTemplate = this._assertComponentKnown(compType, isHost);
if (compiledTemplate.loading) {
throw new BaseException(`Illegal state: CompiledTemplate for ${stringify(compType)} (isHost: ${isHost}) is still loading!`);
}
return compiledTemplate;
}
_compileTemplate(template) {

@@ -127,15 +230,15 @@ if (template.isCompiled) {

}
var compMeta = template.normalizedCompMeta;
var externalStylesheetsByModuleUrl = new Map();
var stylesCompileResult = this._styleCompiler.compileComponent(compMeta);
const compMeta = template.normalizedCompMeta;
const externalStylesheetsByModuleUrl = new Map();
const stylesCompileResult = this._styleCompiler.compileComponent(compMeta);
stylesCompileResult.externalStylesheets.forEach((r) => { externalStylesheetsByModuleUrl.set(r.meta.moduleUrl, r); });
this._resolveStylesCompileResult(stylesCompileResult.componentStylesheet, externalStylesheetsByModuleUrl);
var viewCompMetas = template.viewComponentTypes.map((compType) => this._getCompiledTemplate(compType).normalizedCompMeta);
var parsedTemplate = this._templateParser.parse(compMeta, compMeta.template.template, template.viewDirectives.concat(viewCompMetas), template.viewPipes, compMeta.type.name);
var compileResult = this._viewCompiler.compileComponent(compMeta, parsedTemplate, ir.variable(stylesCompileResult.componentStylesheet.stylesVar), template.viewPipes);
var depTemplates = compileResult.dependencies.map((dep) => {
const viewCompMetas = template.viewComponentTypes.map((compType) => this._assertComponentLoaded(compType, false).normalizedCompMeta);
const parsedTemplate = this._templateParser.parse(compMeta, compMeta.template.template, template.viewDirectives.concat(viewCompMetas), template.viewPipes, template.schemas, compMeta.type.name);
const compileResult = this._viewCompiler.compileComponent(compMeta, parsedTemplate, ir.variable(stylesCompileResult.componentStylesheet.stylesVar), template.viewPipes);
compileResult.dependencies.forEach((dep) => {
let depTemplate;
if (dep instanceof ViewFactoryDependency) {
let vfd = dep;
depTemplate = this._getCompiledTemplate(vfd.comp.runtime);
depTemplate = this._assertComponentLoaded(vfd.comp.runtime, false);
vfd.placeholder.runtime = depTemplate.proxyViewFactory;

@@ -146,15 +249,14 @@ vfd.placeholder.name = `viewFactory_${vfd.comp.name}`;

let cfd = dep;
depTemplate = this._getCompiledHostTemplate(cfd.comp.runtime);
depTemplate = this._assertComponentLoaded(cfd.comp.runtime, true);
cfd.placeholder.runtime = depTemplate.proxyComponentFactory;
cfd.placeholder.name = `compFactory_${cfd.comp.name}`;
}
return depTemplate;
});
var statements = stylesCompileResult.componentStylesheet.statements.concat(compileResult.statements);
var factory;
if (IS_DART || !this._genConfig.useJit) {
factory = interpretStatements(statements, compileResult.viewFactoryVar, new InterpretiveAppViewInstanceFactory());
const statements = stylesCompileResult.componentStylesheet.statements.concat(compileResult.statements);
let factory;
if (!this._compilerConfig.useJit) {
factory = interpretStatements(statements, compileResult.viewFactoryVar);
}
else {
factory = jitStatements(`${template.compType.name}.template.js`, statements, compileResult.viewFactoryVar);
factory = jitStatements(`${template.compType.name}.ngfactory.js`, statements, compileResult.viewFactoryVar);
}

@@ -173,4 +275,4 @@ template.compiled(factory);

this._resolveStylesCompileResult(result, externalStylesheetsByModuleUrl);
if (IS_DART || !this._genConfig.useJit) {
return interpretStatements(result.statements, result.stylesVar, new InterpretiveAppViewInstanceFactory());
if (!this._compilerConfig.useJit) {
return interpretStatements(result.statements, result.stylesVar);
}

@@ -188,2 +290,3 @@ else {

RuntimeCompiler.ctorParameters = [
{ type: Injector, },
{ type: CompileMetadataResolver, },

@@ -194,13 +297,12 @@ { type: DirectiveNormalizer, },

{ type: ViewCompiler, },
{ type: NgModuleCompiler, },
{ type: CompilerConfig, },
{ type: Console, },
];
class CompiledTemplate {
constructor(isHost, selector, compType, viewDirectives, viewComponentTypes, precompileHostComponentTypes, viewPipes, _normalizeResult) {
constructor(isHost, selector, compType, viewDirectivesAndComponents, viewPipes, schemas, _normalizeResult) {
this.isHost = isHost;
this.compType = compType;
this.viewDirectives = viewDirectives;
this.viewComponentTypes = viewComponentTypes;
this.precompileHostComponentTypes = precompileHostComponentTypes;
this.viewPipes = viewPipes;
this._normalizeResult = _normalizeResult;
this.schemas = schemas;
this._viewFactory = null;

@@ -211,3 +313,18 @@ this.loading = null;

this.isCompiledWithDeps = false;
this.proxyViewFactory = (...args) => this._viewFactory.apply(null, args);
this.viewComponentTypes = [];
this.viewDirectives = [];
viewDirectivesAndComponents.forEach((dirMeta) => {
if (dirMeta.isComponent) {
this.viewComponentTypes.push(dirMeta.type.runtime);
}
else {
this.viewDirectives.push(dirMeta);
}
});
this.proxyViewFactory = (...args) => {
if (!this._viewFactory) {
throw new BaseException(`Illegal state: CompiledTemplate for ${stringify(this.compType)} is not compiled yet!`);
}
return this._viewFactory.apply(null, args);
};
this.proxyComponentFactory = isHost ?

@@ -243,2 +360,62 @@ new ComponentFactory(selector, this.proxyViewFactory, compType.runtime) :

}
/**
* Implements `Compiler` and `ComponentResolver` by delegating
* to the RuntimeCompiler using a known module.
*/
class ModuleBoundCompiler {
constructor(_delegate, _ngModule, _parentComponentResolver, _console) {
this._delegate = _delegate;
this._ngModule = _ngModule;
this._parentComponentResolver = _parentComponentResolver;
this._console = _console;
this._warnOnComponentResolver = true;
}
get _injector() { return this._delegate.injector; }
resolveComponent(component) {
if (isString(component)) {
if (this._parentComponentResolver) {
return this._parentComponentResolver.resolveComponent(component);
}
else {
return Promise.reject(new BaseException(`Cannot resolve component using '${component}'.`));
}
}
if (this._warnOnComponentResolver) {
this._console.warn(ComponentResolver.DynamicCompilationDeprecationMsg);
this._warnOnComponentResolver = false;
}
return this.compileComponentAsync(component);
}
compileComponentAsync(compType, ngModule = null) {
return this._delegate.compileComponentAsync(compType, ngModule ? ngModule : this._ngModule);
}
compileComponentSync(compType, ngModule = null) {
return this._delegate.compileComponentSync(compType, ngModule ? ngModule : this._ngModule);
}
compileModuleSync(moduleType) {
return this._delegate.compileModuleSync(moduleType);
}
compileModuleAsync(moduleType) {
return this._delegate.compileModuleAsync(moduleType);
}
compileModuleAndAllComponentsSync(moduleType) {
return this._delegate.compileModuleAndAllComponentsSync(moduleType);
}
compileModuleAndAllComponentsAsync(moduleType) {
return this._delegate.compileModuleAndAllComponentsAsync(moduleType);
}
/**
* Clears all caches
*/
clearCache() {
this._delegate.clearCache();
if (this._parentComponentResolver) {
this._parentComponentResolver.clearCache();
}
}
/**
* Clears the cache for the given component/ngModule.
*/
clearCacheFor(type) { this._delegate.clearCacheFor(type); }
}
//# sourceMappingURL=runtime_compiler.js.map

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"RuntimeCompiler":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"./metadata_resolver","name":"CompileMetadataResolver"},{"__symbolic":"reference","module":"./directive_normalizer","name":"DirectiveNormalizer"},{"__symbolic":"reference","module":"./template_parser","name":"TemplateParser"},{"__symbolic":"reference","module":"./style_compiler","name":"StyleCompiler"},{"__symbolic":"reference","module":"./view_compiler/view_compiler","name":"ViewCompiler"},{"__symbolic":"reference","module":"./config","name":"CompilerConfig"}]}],"resolveComponent":[{"__symbolic":"method"}],"compileComponentAsync":[{"__symbolic":"method"}],"compileComponentSync":[{"__symbolic":"method"}],"clearCacheFor":[{"__symbolic":"method"}],"clearCache":[{"__symbolic":"method"}],"_getCompiledHostTemplate":[{"__symbolic":"method"}],"_getCompiledTemplate":[{"__symbolic":"method"}],"_getTransitiveCompiledTemplates":[{"__symbolic":"method"}],"_compileTemplate":[{"__symbolic":"method"}],"_resolveStylesCompileResult":[{"__symbolic":"method"}],"_resolveAndEvalStylesCompileResult":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"RuntimeCompiler":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector"},{"__symbolic":"reference","module":"./metadata_resolver","name":"CompileMetadataResolver"},{"__symbolic":"reference","module":"./directive_normalizer","name":"DirectiveNormalizer"},{"__symbolic":"reference","module":"./template_parser/template_parser","name":"TemplateParser"},{"__symbolic":"reference","module":"./style_compiler","name":"StyleCompiler"},{"__symbolic":"reference","module":"./view_compiler/view_compiler","name":"ViewCompiler"},{"__symbolic":"reference","module":"./ng_module_compiler","name":"NgModuleCompiler"},{"__symbolic":"reference","module":"./config","name":"CompilerConfig"},{"__symbolic":"reference","module":"../core_private","name":"Console"}]}],"compileModuleSync":[{"__symbolic":"method"}],"compileModuleAsync":[{"__symbolic":"method"}],"compileModuleAndAllComponentsSync":[{"__symbolic":"method"}],"compileModuleAndAllComponentsAsync":[{"__symbolic":"method"}],"compileComponentAsync":[{"__symbolic":"method"}],"compileComponentSync":[{"__symbolic":"method"}],"_compileModuleAndComponents":[{"__symbolic":"method"}],"_compileModuleAndAllComponents":[{"__symbolic":"method"}],"_compileModule":[{"__symbolic":"method"}],"_compileComponentInModule":[{"__symbolic":"method"}],"_compileComponents":[{"__symbolic":"method"}],"clearCacheFor":[{"__symbolic":"method"}],"clearCache":[{"__symbolic":"method"}],"_createCompiledHostTemplate":[{"__symbolic":"method"}],"_createCompiledTemplate":[{"__symbolic":"method"}],"_assertComponentKnown":[{"__symbolic":"method"}],"_assertComponentLoaded":[{"__symbolic":"method"}],"_compileTemplate":[{"__symbolic":"method"}],"_resolveStylesCompileResult":[{"__symbolic":"method"}],"_resolveAndEvalStylesCompileResult":[{"__symbolic":"method"}]}}}}

@@ -1,2 +0,9 @@

import { SecurityContext } from '../../core_private';
/**
* @license
* Copyright Google Inc. 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 { SchemaMetadata, SecurityContext } from '@angular/core';
import { ElementSchemaRegistry } from './element_schema_registry';

@@ -10,3 +17,3 @@ export declare class DomElementSchemaRegistry extends ElementSchemaRegistry {

constructor();
hasProperty(tagName: string, propName: string): boolean;
hasProperty(tagName: string, propName: string, schemaMetas: SchemaMetadata[]): boolean;
/**

@@ -24,2 +31,3 @@ * securityContext returns the security context for the given property on the given DOM tag.

getMappedPropName(propName: string): string;
getDefaultComponentElementName(): string;
}

@@ -8,4 +8,3 @@ /**

*/
import { Injectable } from '@angular/core';
import { SecurityContext } from '../../core_private';
import { CUSTOM_ELEMENTS_SCHEMA, Injectable, SecurityContext } from '@angular/core';
import { StringMapWrapper } from '../facade/collection';

@@ -73,4 +72,3 @@ import { isPresent } from '../facade/lang';

// =================================================================================================
const SCHEMA =
/*@ts2dart_const*/ ([
const SCHEMA = ([
'*|textContent,%classList,className,id,innerHTML,*beforecopy,*beforecut,*beforepaste,*copy,*cut,*paste,*search,*selectstart,*webkitfullscreenchange,*webkitfullscreenerror,*wheel,outerHTML,#scrollLeft,#scrollTop',

@@ -264,3 +262,3 @@ '^*|accessKey,contentEditable,dir,!draggable,!hidden,innerText,lang,*abort,*autocomplete,*autocompleteerror,*beforecopy,*beforecut,*beforepaste,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*copy,*cuechange,*cut,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*message,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*mozfullscreenchange,*mozfullscreenerror,*mozpointerlockchange,*mozpointerlockerror,*paste,*pause,*play,*playing,*progress,*ratechange,*reset,*resize,*scroll,*search,*seeked,*seeking,*select,*selectstart,*show,*stalled,*submit,*suspend,*timeupdate,*toggle,*volumechange,*waiting,*webglcontextcreationerror,*webglcontextlost,*webglcontextrestored,*webkitfullscreenchange,*webkitfullscreenerror,*wheel,outerText,!spellcheck,%style,#tabIndex,title,!translate',

}
hasProperty(tagName, propName) {
hasProperty(tagName, propName, schemaMetas) {
if (tagName.indexOf('-') !== -1) {

@@ -270,13 +268,13 @@ if (tagName === 'ng-container' || tagName === 'ng-content') {

}
// Can't tell now as we don't know which properties a custom element will get
// once it is instantiated
return true;
}
else {
var elementProperties = this.schema[tagName.toLowerCase()];
if (!isPresent(elementProperties)) {
elementProperties = this.schema['unknown'];
if (schemaMetas.some((schema) => schema.name === CUSTOM_ELEMENTS_SCHEMA.name)) {
// Can't tell now as we don't know which properties a custom element will get
// once it is instantiated
return true;
}
return isPresent(elementProperties[propName]);
}
var elementProperties = this.schema[tagName.toLowerCase()];
if (!isPresent(elementProperties)) {
elementProperties = this.schema['unknown'];
}
return isPresent(elementProperties[propName]);
}

@@ -308,2 +306,3 @@ /**

}
getDefaultComponentElementName() { return 'ng-component'; }
}

@@ -310,0 +309,0 @@ /** @nocollapse */

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"DomElementSchemaRegistry":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"hasProperty":[{"__symbolic":"method"}],"securityContext":[{"__symbolic":"method"}],"getMappedPropName":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"DomElementSchemaRegistry":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"hasProperty":[{"__symbolic":"method"}],"securityContext":[{"__symbolic":"method"}],"getMappedPropName":[{"__symbolic":"method"}],"getDefaultComponentElementName":[{"__symbolic":"method"}]}}}}

@@ -8,3 +8,3 @@ /**

*/
import { SecurityContext } from '../../core_private';
import { SecurityContext } from '@angular/core';
/** Map from tagName|propertyName SecurityContext. Properties applying to all tags use '*'. */

@@ -11,0 +11,0 @@ export declare const SECURITY_SCHEMA: {

@@ -8,3 +8,3 @@ /**

*/
import { SecurityContext } from '../../core_private';
import { SecurityContext } from '@angular/core';
// =================================================================================================

@@ -38,3 +38,3 @@ // =================================================================================================

'img|src', 'img|srcset', 'input|src', 'ins|cite', 'q|cite',
'source|src', 'source|srcset', 'video|poster', 'video|src',
'source|src', 'source|srcset', 'track|src', 'video|poster', 'video|src',
]);

@@ -55,4 +55,3 @@ registerContext(SecurityContext.RESOURCE_URL, [

'script|src',
'track|src',
]);
//# sourceMappingURL=dom_security_schema.js.map

@@ -8,6 +8,8 @@ /**

*/
import { SchemaMetadata } from '@angular/core';
export declare abstract class ElementSchemaRegistry {
abstract hasProperty(tagName: string, propName: string): boolean;
abstract hasProperty(tagName: string, propName: string, schemaMetas: SchemaMetadata[]): boolean;
abstract securityContext(tagName: string, propName: string): any;
abstract getMappedPropName(propName: string): string;
abstract getDefaultComponentElementName(): string;
}

@@ -8,9 +8,7 @@ /**

*/
import { ListWrapper, Map } from '../src/facade/collection';
import { BaseException } from '../src/facade/exceptions';
import { RegExpMatcherWrapper, RegExpWrapper, StringWrapper, isBlank, isPresent } from '../src/facade/lang';
import { ListWrapper } from './facade/collection';
import { BaseException } from './facade/exceptions';
import { StringWrapper, isBlank, isPresent } from './facade/lang';
const _EMPTY_ATTR_VALUE = '';
// TODO: Can't use `const` here as
// in Dart this is not transpiled into `final` yet...
var _SELECTOR_REGEXP = RegExpWrapper.create('(\\:not\\()|' +
const _SELECTOR_REGEXP = new RegExp('(\\:not\\()|' +
'([-\\w]+)|' +

@@ -20,3 +18,4 @@ '(?:\\.([-\\w]+))|' +

'(\\))|' +
'(\\s*,\\s*)'); // ","
'(\\s*,\\s*)', // ","
'g');
/**

@@ -44,7 +43,7 @@ * A css selector contains an element name,

var cssSelector = new CssSelector();
var matcher = RegExpWrapper.matcher(_SELECTOR_REGEXP, selector);
var match;
var current = cssSelector;
var inNot = false;
while (isPresent(match = RegExpMatcherWrapper.next(matcher))) {
_SELECTOR_REGEXP.lastIndex = 0;
while (isPresent(match = _SELECTOR_REGEXP.exec(selector))) {
if (isPresent(match[1])) {

@@ -51,0 +50,0 @@ if (inNot) {

@@ -8,4 +8,4 @@ /**

*/
import { ListWrapper } from '../src/facade/collection';
import { RegExpMatcherWrapper, RegExpWrapper, StringWrapper, isBlank, isPresent } from '../src/facade/lang';
import { ListWrapper } from './facade/collection';
import { StringWrapper, isBlank, isPresent } from './facade/lang';
/**

@@ -236,4 +236,4 @@ * This file is a port of shadowCSS from webcomponents.js to TypeScript.

var r = '', m;
var matcher = RegExpWrapper.matcher(_cssContentUnscopedRuleRe, cssText);
while (isPresent(m = RegExpMatcherWrapper.next(matcher))) {
_cssContentUnscopedRuleRe.lastIndex = 0;
while ((m = _cssContentUnscopedRuleRe.exec(cssText)) !== null) {
var rule = m[0];

@@ -347,3 +347,3 @@ rule = StringWrapper.replace(rule, m[2], '');

var re = this._makeScopeMatcher(scopeSelector);
return !isPresent(RegExpWrapper.firstMatch(re, selector));
return !re.test(selector);
}

@@ -355,3 +355,3 @@ _makeScopeMatcher(scopeSelector) {

scopeSelector = StringWrapper.replaceAll(scopeSelector, rre, '\\]');
return RegExpWrapper.create('^(' + scopeSelector + ')' + _selectorReSuffix, 'm');
return new RegExp('^(' + scopeSelector + ')' + _selectorReSuffix, 'm');
}

@@ -364,3 +364,3 @@ _applySelectorScope(selector, scopeSelector, hostSelector) {

_applySimpleSelectorScope(selector, scopeSelector, hostSelector) {
if (isPresent(RegExpWrapper.firstMatch(_polyfillHostRe, selector))) {
if (_polyfillHostRe.test(selector)) {
var replaceBy = this.strictStyling ? `[${hostSelector}]` : scopeSelector;

@@ -390,5 +390,4 @@ selector = StringWrapper.replace(selector, _polyfillHostNoCombinator, replaceBy);

!StringWrapper.contains(t, attrName)) {
var re = /([^:]*)(:*)(.*)/g;
var m = RegExpWrapper.firstMatch(re, t);
if (isPresent(m)) {
const m = t.match(/([^:]*)(:*)(.*)/);
if (m !== null) {
p = m[1] + attrName + m[2] + m[3];

@@ -418,4 +417,4 @@ }

')\\))?([^,{]*)';
var _cssColonHostRe = RegExpWrapper.create('(' + _polyfillHost + _parenSuffix, 'im');
var _cssColonHostContextRe = RegExpWrapper.create('(' + _polyfillHostContext + _parenSuffix, 'im');
var _cssColonHostRe = new RegExp('(' + _polyfillHost + _parenSuffix, 'gim');
var _cssColonHostContextRe = new RegExp('(' + _polyfillHostContext + _parenSuffix, 'gim');
var _polyfillHostNoCombinator = _polyfillHost + '-no-combinator';

@@ -432,3 +431,3 @@ var _shadowDOMSelectorsRe = [

var _selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$';
var _polyfillHostRe = RegExpWrapper.create(_polyfillHost, 'im');
var _polyfillHostRe = new RegExp(_polyfillHost, 'im');
var _colonHostRe = /:host/gim;

@@ -435,0 +434,0 @@ var _colonHostContextRe = /:host-context/gim;

@@ -44,5 +44,4 @@ /**

compileComponent(comp) {
var shim = comp.template.encapsulation === ViewEncapsulation.Emulated;
var externalStylesheets = [];
var componentStylesheet = this._compileStyles(comp, new CompileStylesheetMetadata({
const externalStylesheets = [];
const componentStylesheet = this._compileStyles(comp, new CompileStylesheetMetadata({
styles: comp.template.styles,

@@ -53,3 +52,3 @@ styleUrls: comp.template.styleUrls,

comp.template.externalStylesheets.forEach((stylesheetMeta) => {
var compiledStylesheet = this._compileStyles(comp, stylesheetMeta, false);
const compiledStylesheet = this._compileStyles(comp, stylesheetMeta, false);
externalStylesheets.push(compiledStylesheet);

@@ -60,7 +59,7 @@ });

_compileStyles(comp, stylesheet, isComponentStylesheet) {
var shim = comp.template.encapsulation === ViewEncapsulation.Emulated;
var styleExpressions = stylesheet.styles.map(plainStyle => o.literal(this._shimIfNeeded(plainStyle, shim)));
var dependencies = [];
for (var i = 0; i < stylesheet.styleUrls.length; i++) {
var identifier = new CompileIdentifierMetadata({ name: getStylesVarName(null) });
const shim = comp.template.encapsulation === ViewEncapsulation.Emulated;
const styleExpressions = stylesheet.styles.map(plainStyle => o.literal(this._shimIfNeeded(plainStyle, shim)));
const dependencies = [];
for (let i = 0; i < stylesheet.styleUrls.length; i++) {
const identifier = new CompileIdentifierMetadata({ name: getStylesVarName(null) });
dependencies.push(new StylesCompileDependency(stylesheet.styleUrls[i], shim, identifier));

@@ -71,4 +70,4 @@ styleExpressions.push(new o.ExternalExpr(identifier));

// so we set its type to dynamic.
var stylesVar = getStylesVarName(isComponentStylesheet ? comp : null);
var stmt = o.variable(stylesVar)
const stylesVar = getStylesVarName(isComponentStylesheet ? comp : null);
const stmt = o.variable(stylesVar)
.set(o.literalArr(styleExpressions, new o.ArrayType(o.DYNAMIC_TYPE, [o.TypeModifier.Const])))

@@ -91,3 +90,3 @@ .toDeclStmt(null, [o.StmtModifier.Final]);

function getStylesVarName(component) {
var result = `styles`;
let result = `styles`;
if (component) {

@@ -94,0 +93,0 @@ result += `_${component.type.name}`;

@@ -8,3 +8,3 @@ /**

*/
import { RegExpWrapper, StringWrapper, isBlank, isPresent } from '../src/facade/lang';
import { StringWrapper, isBlank, isPresent } from './facade/lang';
export class StyleWithImports {

@@ -19,4 +19,4 @@ constructor(style, styleUrls) {

return false;
var schemeMatch = RegExpWrapper.firstMatch(_urlWithSchemaRe, url);
return isBlank(schemeMatch) || schemeMatch[1] == 'package' || schemeMatch[1] == 'asset';
const schemeMatch = url.match(_urlWithSchemaRe);
return schemeMatch === null || schemeMatch[1] == 'package' || schemeMatch[1] == 'asset';
}

@@ -41,5 +41,3 @@ /**

var _cssImportRe = /@import\s+(?:url\()?\s*(?:(?:['"]([^'"]*))|([^;\)\s]*))[^;]*;?/g;
// TODO: can't use /^[^:/?#.]+:/g due to clang-format bug:
// https://github.com/angular/angular/issues/4596
var _urlWithSchemaRe = /^([a-zA-Z\-\+\.]+):/g;
var _urlWithSchemaRe = /^([^:/?#]+):/;
//# sourceMappingURL=style_url_resolver.js.map

@@ -9,3 +9,3 @@ /**

import { Inject, Injectable, PACKAGE_ROOT_URL } from '@angular/core';
import { StringWrapper, isPresent, isBlank, RegExpWrapper } from '../src/facade/lang';
import { StringWrapper, isBlank, isPresent } from './facade/lang';
const _ASSET_SCHEME = 'asset:';

@@ -185,3 +185,3 @@ /**

*/
var _splitRe = RegExpWrapper.create('^' +
var _splitRe = new RegExp('^' +
'(?:' +

@@ -233,3 +233,3 @@ '([^:/?#.]+)' +

function _split(uri) {
return RegExpWrapper.firstMatch(_splitRe, uri);
return uri.match(_splitRe);
}

@@ -236,0 +236,0 @@ /**

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"createUrlResolverWithoutPackagePrefix":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"UrlResolver"}}},"createOfflineCompileUrlResolver":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"UrlResolver"},"arguments":["asset:"]}},"DEFAULT_PACKAGE_URL_PROVIDER":{"provide":{"__symbolic":"reference","module":"@angular/core","name":"PACKAGE_ROOT_URL"},"useValue":"/"},"UrlResolver":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject"},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"PACKAGE_ROOT_URL"}]}]],"parameters":[{"__symbolic":"reference","name":"string"}]}],"resolve":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"createUrlResolverWithoutPackagePrefix":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"UrlResolver"}}},"createOfflineCompileUrlResolver":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"UrlResolver"},"arguments":["asset:"]}},"DEFAULT_PACKAGE_URL_PROVIDER":{"provide":{"__symbolic":"reference","module":"@angular/core","name":"PACKAGE_ROOT_URL"},"useValue":"/"},"UrlResolver":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject"},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"PACKAGE_ROOT_URL"}]}]],"parameters":[{"__symbolic":"reference","name":"string"}]}],"resolve":[{"__symbolic":"method"}]}},"_ComponentIndex":{"Scheme":1,"UserInfo":2,"Domain":3,"Port":4,"Path":5,"QueryData":6,"Fragment":7}}}

@@ -1,2 +0,11 @@

export declare var MODULE_SUFFIX: string;
/**
* @license
* Copyright Google Inc. 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 { CompileTokenMetadata } from './compile_metadata';
import * as o from './output/output_ast';
export declare const MODULE_SUFFIX: string;
export declare function camelCaseToDashCase(input: string): string;

@@ -23,1 +32,7 @@ export declare function splitAtColon(input: string, defaultValues: string[]): string[];

export declare function assetUrl(pkg: string, path?: string, type?: string): string;
export declare function createDiTokenExpression(token: CompileTokenMetadata): o.Expression;
export declare class SyncAsyncResult<T> {
syncResult: T;
asyncResult: Promise<T>;
constructor(syncResult: T, asyncResult?: Promise<T>);
}

@@ -9,4 +9,5 @@ /**

import { StringMapWrapper } from './facade/collection';
import { IS_DART, StringWrapper, isArray, isBlank, isPrimitive, isStrictStringMap } from './facade/lang';
export var MODULE_SUFFIX = IS_DART ? '.dart' : '';
import { StringWrapper, isArray, isBlank, isPresent, isPrimitive, isStrictStringMap } from './facade/lang';
import * as o from './output/output_ast';
export const MODULE_SUFFIX = '';
var CAMEL_CASE_REGEXP = /([A-Z])/g;

@@ -17,9 +18,6 @@ export function camelCaseToDashCase(input) {

export function splitAtColon(input, defaultValues) {
var parts = StringWrapper.split(input.trim(), /\s*:\s*/g);
if (parts.length > 1) {
return parts;
}
else {
const colonIndex = input.indexOf(':');
if (colonIndex == -1)
return defaultValues;
}
return [input.slice(0, colonIndex).trim(), input.slice(colonIndex + 1).trim()];
}

@@ -58,19 +56,30 @@ export function sanitizeIdentifier(name) {

export function assetUrl(pkg, path = null, type = 'src') {
if (IS_DART) {
if (path == null) {
return `asset:angular2/${pkg}/${pkg}.dart`;
}
else {
return `asset:angular2/lib/${pkg}/src/${path}.dart`;
}
if (path == null) {
return `asset:@angular/lib/${pkg}/index`;
}
else {
if (path == null) {
return `asset:@angular/lib/${pkg}/index`;
return `asset:@angular/lib/${pkg}/src/${path}`;
}
}
export function createDiTokenExpression(token) {
if (isPresent(token.value)) {
return o.literal(token.value);
}
else if (token.identifierIsInstance) {
return o.importExpr(token.identifier)
.instantiate([], o.importType(token.identifier, [], [o.TypeModifier.Const]));
}
else {
return o.importExpr(token.identifier);
}
}
export class SyncAsyncResult {
constructor(syncResult, asyncResult = null) {
this.syncResult = syncResult;
this.asyncResult = asyncResult;
if (!asyncResult) {
this.asyncResult = Promise.resolve(syncResult);
}
else {
return `asset:@angular/lib/${pkg}/src/${path}`;
}
}
}
//# sourceMappingURL=util.js.map

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"MODULE_SUFFIX":{"__symbolic":"error","message":"Expression form not supported","line":11,"character":26},"camelCaseToDashCase":{"__symbolic":"function","parameters":["input"],"value":{"__symbolic":"error","message":"Function call not supported","line":17,"character":31}},"sanitizeIdentifier":{"__symbolic":"function","parameters":["name"],"value":{"__symbolic":"error","message":"Expression form not supported","line":30,"character":39}}}}
{"__symbolic":"module","version":1,"metadata":{"MODULE_SUFFIX":"","camelCaseToDashCase":{"__symbolic":"function","parameters":["input"],"value":{"__symbolic":"error","message":"Reference to a local symbol","line":15,"character":3,"context":{"name":"CAMEL_CASE_REGEXP"}}},"sanitizeIdentifier":{"__symbolic":"function","parameters":["name"],"value":{"__symbolic":"error","message":"Expression form not supported","line":29,"character":39}}}}

@@ -8,3 +8,3 @@ /**

*/
import { TemplateAst } from '../template_ast';
import { TemplateAst } from '../template_parser/template_ast';
import { CompileNode } from './compile_element';

@@ -11,0 +11,0 @@ export declare class CompileBinding {

@@ -0,5 +1,5 @@

import { CompileDirectiveMetadata, CompileIdentifierMap, CompileIdentifierMetadata, CompileTokenMetadata } from '../compile_metadata';
import * as o from '../output/output_ast';
import { ProviderAst, ReferenceAst, TemplateAst } from '../template_ast';
import { ProviderAst, ReferenceAst, TemplateAst } from '../template_parser/template_ast';
import { CompileView } from './compile_view';
import { CompileDirectiveMetadata, CompileTokenMetadata, CompileIdentifierMetadata } from '../compile_metadata';
export declare class CompileNode {

@@ -26,3 +26,3 @@ parent: CompileElement;

injector: o.Expression;
private _instances;
instances: CompileIdentifierMap<CompileTokenMetadata, o.Expression>;
private _resolvedProviders;

@@ -34,3 +34,2 @@ private _queryCount;

embeddedView: CompileView;
directiveInstances: o.Expression[];
referenceTokens: {

@@ -41,3 +40,3 @@ [key: string]: CompileTokenMetadata;

private _createAppElement();
createComponentFactoryResolver(precompileComponent: CompileIdentifierMetadata[]): void;
createComponentFactoryResolver(entryComponents: CompileIdentifierMetadata[]): void;
setComponentView(compViewExpr: o.Expression): void;

@@ -44,0 +43,0 @@ setEmbeddedView(embeddedView: CompileView): void;

@@ -8,3 +8,3 @@ /**

*/
import { BaseException } from '@angular/core';
import { CompileDiDependencyMetadata, CompileIdentifierMap, CompileProviderMetadata, CompileTokenMetadata } from '../compile_metadata';
import { ListWrapper, StringMapWrapper } from '../facade/collection';

@@ -14,9 +14,9 @@ import { isBlank, isPresent } from '../facade/lang';

import * as o from '../output/output_ast';
import { ProviderAst, ProviderAstType } from '../template_ast';
import { convertValueToOutputAst } from '../output/value_util';
import { ProviderAst, ProviderAstType } from '../template_parser/template_ast';
import { createDiTokenExpression } from '../util';
import { CompileMethod } from './compile_method';
import { CompileQuery, addQueryToTokenMap, createQueryList } from './compile_query';
import { InjectMethodVars } from './constants';
import { CompileTokenMap, CompileTokenMetadata, CompileProviderMetadata, CompileDiDependencyMetadata, CompileIdentifierMetadata } from '../compile_metadata';
import { getPropertyInView, createDiTokenExpression, injectFromViewParentInjector } from './util';
import { CompileQuery, createQueryList, addQueryToTokenMap } from './compile_query';
import { CompileMethod } from './compile_method';
import { ValueTransformer, visitValue } from '../util';
import { getPropertyInView, injectFromViewParentInjector } from './util';
export class CompileNode {

@@ -42,5 +42,5 @@ constructor(parent, view, nodeIndex, renderNode, sourceAst) {

this._compViewExpr = null;
this._instances = new CompileTokenMap();
this.instances = new CompileIdentifierMap();
this._queryCount = 0;
this._queries = new CompileTokenMap();
this._queries = new CompileIdentifierMap();
this._componentConstructorViewQueryLists = [];

@@ -51,6 +51,6 @@ this.contentNodesByNgContentIndex = null;

this.elementRef = o.importExpr(Identifiers.ElementRef).instantiate([this.renderNode]);
this._instances.add(identifierToken(Identifiers.ElementRef), this.elementRef);
this.instances.add(identifierToken(Identifiers.ElementRef), this.elementRef);
this.injector = o.THIS_EXPR.callMethod('injector', [o.literal(this.nodeIndex)]);
this._instances.add(identifierToken(Identifiers.Injector), this.injector);
this._instances.add(identifierToken(Identifiers.Renderer), o.THIS_EXPR.prop('renderer'));
this.instances.add(identifierToken(Identifiers.Injector), this.injector);
this.instances.add(identifierToken(Identifiers.Renderer), o.THIS_EXPR.prop('renderer'));
if (this.hasViewContainer || this.hasEmbeddedView || isPresent(this.component)) {

@@ -75,10 +75,10 @@ this._createAppElement();

this.appElement = o.THIS_EXPR.prop(fieldName);
this._instances.add(identifierToken(Identifiers.AppElement), this.appElement);
this.instances.add(identifierToken(Identifiers.AppElement), this.appElement);
}
createComponentFactoryResolver(precompileComponent) {
if (!precompileComponent || precompileComponent.length === 0) {
createComponentFactoryResolver(entryComponents) {
if (!entryComponents || entryComponents.length === 0) {
return;
}
var createComponentFactoryResolverExpr = o.importExpr(Identifiers.CodegenComponentFactoryResolver).instantiate([
o.literalArr(precompileComponent.map((precompiledComponent) => o.importExpr(precompiledComponent))),
o.literalArr(entryComponents.map((entryComponent) => o.importExpr(entryComponent))),
injectFromViewParentInjector(identifierToken(Identifiers.ComponentFactoryResolver), false)

@@ -93,3 +93,3 @@ ]);

// but nobody else
this._resolvedProvidersArray.unshift(new ProviderAst(provider.token, false, true, [provider], ProviderAstType.PrivateService, this.sourceAst.sourceSpan));
this._resolvedProvidersArray.unshift(new ProviderAst(provider.token, false, true, [provider], ProviderAstType.PrivateService, [], this.sourceAst.sourceSpan));
}

@@ -112,3 +112,3 @@ setComponentView(compViewExpr) {

// Add TemplateRef as first provider as it does not have deps on other providers
this._resolvedProvidersArray.unshift(new ProviderAst(provider.token, false, true, [provider], ProviderAstType.Builtin, this.sourceAst.sourceSpan));
this._resolvedProvidersArray.unshift(new ProviderAst(provider.token, false, true, [provider], ProviderAstType.Builtin, [], this.sourceAst.sourceSpan));
}

@@ -118,5 +118,5 @@ }

if (this.hasViewContainer) {
this._instances.add(identifierToken(Identifiers.ViewContainerRef), this.appElement.prop('vcRef'));
this.instances.add(identifierToken(Identifiers.ViewContainerRef), this.appElement.prop('vcRef'));
}
this._resolvedProviders = new CompileTokenMap();
this._resolvedProviders = new CompileIdentifierMap();
this._resolvedProvidersArray.forEach(provider => this._resolvedProviders.add(provider.token, provider));

@@ -142,14 +142,12 @@ // create all the provider instances, some in the view constructor,

else {
return _convertValueToOutputAst(provider.useValue);
return convertValueToOutputAst(provider.useValue);
}
});
var propName = `_${resolvedProvider.token.name}_${this.nodeIndex}_${this._instances.size}`;
var propName = `_${resolvedProvider.token.name}_${this.nodeIndex}_${this.instances.size}`;
var instance = createProviderProperty(propName, resolvedProvider, providerValueExpressions, resolvedProvider.multiProvider, resolvedProvider.eager, this);
this._instances.add(resolvedProvider.token, instance);
this.instances.add(resolvedProvider.token, instance);
});
this.directiveInstances =
this._directives.map((directive) => this._instances.get(identifierToken(directive.type)));
for (var i = 0; i < this.directiveInstances.length; i++) {
var directiveInstance = this.directiveInstances[i];
for (var i = 0; i < this._directives.length; i++) {
var directive = this._directives[i];
var directiveInstance = this.instances.get(identifierToken(directive.type));
directive.queries.forEach((queryMeta) => { this._addQuery(queryMeta, directiveInstance); });

@@ -166,3 +164,3 @@ }

if (isPresent(token)) {
varValue = this._instances.get(token);
varValue = this.instances.get(token);
}

@@ -180,3 +178,3 @@ else {

// query for an identifier
value = this._instances.get(queryWithRead.read);
value = this.instances.get(queryWithRead.read);
}

@@ -187,3 +185,3 @@ else {

if (isPresent(token)) {
value = this._instances.get(token);
value = this.instances.get(token);
}

@@ -213,3 +211,3 @@ else {

// matches first.
var providerExpr = this._instances.get(resolvedProvider.token);
var providerExpr = this.instances.get(resolvedProvider.token);
// Note: view providers are only visible on the injector of that element.

@@ -228,3 +226,3 @@ // This is not fully correct as the rules during codegen don't allow a directive

getComponent() {
return isPresent(this.component) ? this._instances.get(identifierToken(this.component.type)) :
return isPresent(this.component) ? this.instances.get(identifierToken(this.component.type)) :
null;

@@ -296,3 +294,3 @@ }

}
result = this._instances.get(dep.token);
result = this.instances.get(dep.token);
}

@@ -374,29 +372,2 @@ }

}
function _convertValueToOutputAst(value) {
return visitValue(value, new _ValueOutputAstTransformer(), null);
}
class _ValueOutputAstTransformer extends ValueTransformer {
visitArray(arr, context) {
return o.literalArr(arr.map(value => visitValue(value, this, context)));
}
visitStringMap(map, context) {
var entries = [];
StringMapWrapper.forEach(map, (value, key) => {
entries.push([key, visitValue(value, this, context)]);
});
return o.literalMap(entries);
}
visitPrimitive(value, context) { return o.literal(value); }
visitOther(value, context) {
if (value instanceof CompileIdentifierMetadata) {
return o.importExpr(value);
}
else if (value instanceof o.Expression) {
return value;
}
else {
throw new BaseException(`Illegal state: Don't now how to compile value ${value}`);
}
}
}
//# sourceMappingURL=compile_element.js.map
import * as o from '../output/output_ast';
import { TemplateAst } from '../template_ast';
import { TemplateAst } from '../template_parser/template_ast';
import { CompileView } from './compile_view';

@@ -4,0 +4,0 @@ export declare class CompileMethod {

@@ -16,7 +16,6 @@ /**

instance: o.ReadPropExpr;
private _purePipeProxies;
private _purePipeProxyCount;
constructor(view: CompileView, meta: CompilePipeMetadata);
readonly pure: boolean;
create(): void;
private _call(callingView, args);
}

@@ -13,9 +13,2 @@ /**

import { createPureProxy, getPropertyInView, injectFromViewParentInjector } from './util';
class _PurePipeProxy {
constructor(view, instance, argCount) {
this.view = view;
this.instance = instance;
this.argCount = argCount;
}
}
export class CompilePipe {

@@ -25,4 +18,15 @@ constructor(view, meta) {

this.meta = meta;
this._purePipeProxies = [];
this._purePipeProxyCount = 0;
this.instance = o.THIS_EXPR.prop(`_pipe_${meta.name}_${view.pipeCount++}`);
var deps = this.meta.type.diDeps.map((diDep) => {
if (diDep.token.equalsTo(identifierToken(Identifiers.ChangeDetectorRef))) {
return getPropertyInView(o.THIS_EXPR.prop('ref'), this.view, this.view.componentView);
}
return injectFromViewParentInjector(diDep.token, false);
});
this.view.fields.push(new o.ClassField(this.instance.name, o.importType(this.meta.type)));
this.view.createMethod.resetDebugInfo(null, null);
this.view.createMethod.addStmt(o.THIS_EXPR.prop(this.instance.name)
.set(o.importExpr(this.meta.type).instantiate(deps))
.toStmt());
}

@@ -50,30 +54,11 @@ static call(view, name, args) {

get pure() { return this.meta.pure; }
create() {
var deps = this.meta.type.diDeps.map((diDep) => {
if (diDep.token.equalsTo(identifierToken(Identifiers.ChangeDetectorRef))) {
return getPropertyInView(o.THIS_EXPR.prop('ref'), this.view, this.view.componentView);
}
return injectFromViewParentInjector(diDep.token, false);
});
this.view.fields.push(new o.ClassField(this.instance.name, o.importType(this.meta.type)));
this.view.createMethod.resetDebugInfo(null, null);
this.view.createMethod.addStmt(o.THIS_EXPR.prop(this.instance.name)
.set(o.importExpr(this.meta.type).instantiate(deps))
.toStmt());
this._purePipeProxies.forEach((purePipeProxy) => {
var pipeInstanceSeenFromPureProxy = getPropertyInView(this.instance, purePipeProxy.view, this.view);
createPureProxy(pipeInstanceSeenFromPureProxy.prop('transform')
.callMethod(o.BuiltinMethod.bind, [pipeInstanceSeenFromPureProxy]), purePipeProxy.argCount, purePipeProxy.instance, purePipeProxy.view);
});
}
_call(callingView, args) {
if (this.meta.pure) {
// PurePipeProxies live on the view that called them.
var purePipeProxy = new _PurePipeProxy(callingView, o.THIS_EXPR.prop(`${this.instance.name}_${this._purePipeProxies.length}`), args.length);
this._purePipeProxies.push(purePipeProxy);
var purePipeProxyInstance = o.THIS_EXPR.prop(`${this.instance.name}_${this._purePipeProxyCount++}`);
var pipeInstanceSeenFromPureProxy = getPropertyInView(this.instance, callingView, this.view);
createPureProxy(pipeInstanceSeenFromPureProxy.prop('transform')
.callMethod(o.BuiltinMethod.bind, [pipeInstanceSeenFromPureProxy]), args.length, purePipeProxyInstance, callingView);
return o.importExpr(Identifiers.castByValue)
.callFn([
purePipeProxy.instance,
getPropertyInView(this.instance.prop('transform'), callingView, this.view)
])
.callFn([purePipeProxyInstance, pipeInstanceSeenFromPureProxy.prop('transform')])
.callFn(args);

@@ -80,0 +65,0 @@ }

@@ -8,3 +8,3 @@ /**

*/
import { CompileQueryMetadata, CompileTokenMap } from '../compile_metadata';
import { CompileIdentifierMap, CompileQueryMetadata, CompileTokenMetadata } from '../compile_metadata';
import * as o from '../output/output_ast';

@@ -25,2 +25,2 @@ import { CompileMethod } from './compile_method';

export declare function createQueryList(query: CompileQueryMetadata, directiveInstance: o.Expression, propertyName: string, compileView: CompileView): o.Expression;
export declare function addQueryToTokenMap(map: CompileTokenMap<CompileQuery[]>, query: CompileQuery): void;
export declare function addQueryToTokenMap(map: CompileIdentifierMap<CompileTokenMetadata, CompileQuery[]>, query: CompileQuery): void;

@@ -93,3 +93,4 @@ /**

return declarationAppElement.callMethod('mapNestedViews', [
o.variable(view.className), o.fn([new o.FnParam('nestedView', view.classType)], [new o.ReturnStatement(o.literalArr(adjustedExpressions))])
o.variable(view.className),
o.fn([new o.FnParam('nestedView', view.classType)], [new o.ReturnStatement(o.literalArr(adjustedExpressions))], o.DYNAMIC_TYPE)
]);

@@ -96,0 +97,0 @@ }

@@ -10,3 +10,3 @@ /**

import { CompiledAnimation } from '../animation/animation_compiler';
import { CompileDirectiveMetadata, CompilePipeMetadata, CompileTokenMap } from '../compile_metadata';
import { CompileDirectiveMetadata, CompileIdentifierMap, CompilePipeMetadata, CompileTokenMetadata } from '../compile_metadata';
import { CompilerConfig } from '../config';

@@ -25,2 +25,3 @@ import * as o from '../output/output_ast';

styles: o.Expression;
animations: CompiledAnimation[];
viewIndex: number;

@@ -30,3 +31,3 @@ declarationElement: CompileElement;

viewType: ViewType;
viewQueries: CompileTokenMap<CompileQuery[]>;
viewQueries: CompileIdentifierMap<CompileTokenMetadata, CompileQuery[]>;
nodes: CompileNode[];

@@ -62,3 +63,2 @@ rootNodesOrAppElements: o.Expression[];

pipeCount: number;
animations: Map<string, CompiledAnimation>;
componentContext: o.Expression;

@@ -65,0 +65,0 @@ constructor(component: CompileDirectiveMetadata, genConfig: CompilerConfig, pipeMetas: CompilePipeMetadata[], styles: o.Expression, animations: CompiledAnimation[], viewIndex: number, declarationElement: CompileElement, templateVariableBindings: string[][]);

@@ -9,3 +9,3 @@ /**

import { ViewType } from '../../core_private';
import { CompileIdentifierMetadata, CompileTokenMap } from '../compile_metadata';
import { CompileIdentifierMap, CompileIdentifierMetadata } from '../compile_metadata';
import { ListWrapper } from '../facade/collection';

@@ -26,2 +26,3 @@ import { isBlank, isPresent } from '../facade/lang';

this.styles = styles;
this.animations = animations;
this.viewIndex = viewIndex;

@@ -46,4 +47,2 @@ this.declarationElement = declarationElement;

this.pipeCount = 0;
this.animations = new Map();
animations.forEach(entry => this.animations.set(entry.name, entry));
this.createMethod = new CompileMethod(this);

@@ -72,3 +71,3 @@ this.injectorGetMethod = new CompileMethod(this);

getPropertyInView(o.THIS_EXPR.prop('context'), this, this.componentView);
var viewQueries = new CompileTokenMap();
var viewQueries = new CompileIdentifierMap();
if (this.viewType === ViewType.COMPONENT) {

@@ -152,3 +151,2 @@ var directiveInstance = o.THIS_EXPR.prop('context');

afterNodes() {
this.pipes.forEach((pipe) => pipe.create());
this.viewQueries.values().forEach((queries) => queries.forEach((query) => query.afterChildren(this.createMethod, this.updateViewQueriesMethod)));

@@ -155,0 +153,0 @@ }

@@ -10,3 +10,3 @@ /**

import * as o from '../output/output_ast';
import { BoundEventAst, DirectiveAst } from '../template_ast';
import { BoundEventAst, DirectiveAst } from '../template_parser/template_ast';
import { CompileElement } from './compile_element';

@@ -13,0 +13,0 @@ export declare class CompileEventListener {

@@ -8,4 +8,5 @@ /**

*/
import { ListWrapper, StringMapWrapper } from '../facade/collection';
import { StringMapWrapper } from '../facade/collection';
import { StringWrapper, isBlank, isPresent } from '../facade/lang';
import { identifierToken } from '../identifiers';
import * as o from '../output/output_ast';

@@ -103,4 +104,4 @@ import { CompileBinding } from './compile_binding';

});
ListWrapper.forEachWithIndex(dirs, (directiveAst, i) => {
var directiveInstance = compileElement.directiveInstances[i];
dirs.forEach((directiveAst) => {
var directiveInstance = compileElement.instances.get(identifierToken(directiveAst.directive.type));
directiveAst.hostEvents.forEach((hostEvent) => {

@@ -107,0 +108,0 @@ compileElement.view.bindings.push(new CompileBinding(compileElement, hostEvent));

@@ -8,2 +8,3 @@ /**

*/
import * as cdAst from '../expression_parser/ast';
import { BaseException } from '../facade/exceptions';

@@ -13,3 +14,2 @@ import { isArray, isBlank, isPresent } from '../facade/lang';

import * as o from '../output/output_ast';
var IMPLICIT_RECEIVER = o.variable('#implicit');
export class ExpressionWithWrappedValueInfo {

@@ -22,9 +22,9 @@ constructor(expression, needsValueUnwrapper) {

export function convertCdExpressionToIr(nameResolver, implicitReceiver, expression, valueUnwrapper) {
var visitor = new _AstToIrVisitor(nameResolver, implicitReceiver, valueUnwrapper);
var irAst = expression.visit(visitor, _Mode.Expression);
const visitor = new _AstToIrVisitor(nameResolver, implicitReceiver, valueUnwrapper);
const irAst = expression.visit(visitor, _Mode.Expression);
return new ExpressionWithWrappedValueInfo(irAst, visitor.needsValueUnwrapper);
}
export function convertCdStatementToIr(nameResolver, implicitReceiver, stmt) {
var visitor = new _AstToIrVisitor(nameResolver, implicitReceiver, null);
var statements = [];
const visitor = new _AstToIrVisitor(nameResolver, implicitReceiver, null);
let statements = [];
flattenStatements(stmt.visit(visitor, _Mode.Statement), statements);

@@ -61,2 +61,3 @@ return statements;

this._valueUnwrapper = _valueUnwrapper;
this._map = new Map();
this.needsValueUnwrapper = false;

@@ -115,3 +116,3 @@ }

}
return convertToStatementIfNeeded(mode, new o.BinaryOperatorExpr(op, ast.left.visit(this, _Mode.Expression), ast.right.visit(this, _Mode.Expression)));
return convertToStatementIfNeeded(mode, new o.BinaryOperatorExpr(op, this.visit(ast.left, _Mode.Expression), this.visit(ast.right, _Mode.Expression)));
}

@@ -123,9 +124,9 @@ visitChain(ast, mode) {

visitConditional(ast, mode) {
var value = ast.condition.visit(this, _Mode.Expression);
return convertToStatementIfNeeded(mode, value.conditional(ast.trueExp.visit(this, _Mode.Expression), ast.falseExp.visit(this, _Mode.Expression)));
const value = this.visit(ast.condition, _Mode.Expression);
return convertToStatementIfNeeded(mode, value.conditional(this.visit(ast.trueExp, _Mode.Expression), this.visit(ast.falseExp, _Mode.Expression)));
}
visitPipe(ast, mode) {
var input = ast.exp.visit(this, _Mode.Expression);
var args = this.visitAll(ast.args, _Mode.Expression);
var value = this._nameResolver.callPipe(ast.name, input, args);
const input = this.visit(ast.exp, _Mode.Expression);
const args = this.visitAll(ast.args, _Mode.Expression);
const value = this._nameResolver.callPipe(ast.name, input, args);
this.needsValueUnwrapper = true;

@@ -135,14 +136,14 @@ return convertToStatementIfNeeded(mode, this._valueUnwrapper.callMethod('unwrap', [value]));

visitFunctionCall(ast, mode) {
return convertToStatementIfNeeded(mode, ast.target.visit(this, _Mode.Expression).callFn(this.visitAll(ast.args, _Mode.Expression)));
return convertToStatementIfNeeded(mode, this.visit(ast.target, _Mode.Expression).callFn(this.visitAll(ast.args, _Mode.Expression)));
}
visitImplicitReceiver(ast, mode) {
ensureExpressionMode(mode, ast);
return IMPLICIT_RECEIVER;
return this._implicitReceiver;
}
visitInterpolation(ast, mode) {
ensureExpressionMode(mode, ast);
var args = [o.literal(ast.expressions.length)];
for (var i = 0; i < ast.strings.length - 1; i++) {
const args = [o.literal(ast.expressions.length)];
for (let i = 0; i < ast.strings.length - 1; i++) {
args.push(o.literal(ast.strings[i]));
args.push(ast.expressions[i].visit(this, _Mode.Expression));
args.push(this.visit(ast.expressions[i], _Mode.Expression));
}

@@ -153,8 +154,8 @@ args.push(o.literal(ast.strings[ast.strings.length - 1]));

visitKeyedRead(ast, mode) {
return convertToStatementIfNeeded(mode, ast.obj.visit(this, _Mode.Expression).key(ast.key.visit(this, _Mode.Expression)));
return convertToStatementIfNeeded(mode, this.visit(ast.obj, _Mode.Expression).key(this.visit(ast.key, _Mode.Expression)));
}
visitKeyedWrite(ast, mode) {
var obj = ast.obj.visit(this, _Mode.Expression);
var key = ast.key.visit(this, _Mode.Expression);
var value = ast.value.visit(this, _Mode.Expression);
const obj = this.visit(ast.obj, _Mode.Expression);
const key = this.visit(ast.key, _Mode.Expression);
const value = this.visit(ast.value, _Mode.Expression);
return convertToStatementIfNeeded(mode, obj.key(key).set(value));

@@ -166,5 +167,5 @@ }

visitLiteralMap(ast, mode) {
var parts = [];
for (var i = 0; i < ast.keys.length; i++) {
parts.push([ast.keys[i], ast.values[i].visit(this, _Mode.Expression)]);
let parts = [];
for (let i = 0; i < ast.keys.length; i++) {
parts.push([ast.keys[i], this.visit(ast.values[i], _Mode.Expression)]);
}

@@ -177,39 +178,45 @@ return convertToStatementIfNeeded(mode, this._nameResolver.createLiteralMap(parts));

visitMethodCall(ast, mode) {
var args = this.visitAll(ast.args, _Mode.Expression);
var result = null;
var receiver = ast.receiver.visit(this, _Mode.Expression);
if (receiver === IMPLICIT_RECEIVER) {
var varExpr = this._nameResolver.getLocal(ast.name);
if (isPresent(varExpr)) {
result = varExpr.callFn(args);
const leftMostSafe = this.leftMostSafeNode(ast);
if (leftMostSafe) {
return this.convertSafeAccess(ast, leftMostSafe, mode);
}
else {
const args = this.visitAll(ast.args, _Mode.Expression);
let result = null;
let receiver = this.visit(ast.receiver, _Mode.Expression);
if (receiver === this._implicitReceiver) {
var varExpr = this._nameResolver.getLocal(ast.name);
if (isPresent(varExpr)) {
result = varExpr.callFn(args);
}
}
else {
receiver = this._implicitReceiver;
if (isBlank(result)) {
result = receiver.callMethod(ast.name, args);
}
return convertToStatementIfNeeded(mode, result);
}
if (isBlank(result)) {
result = receiver.callMethod(ast.name, args);
}
return convertToStatementIfNeeded(mode, result);
}
visitPrefixNot(ast, mode) {
return convertToStatementIfNeeded(mode, o.not(ast.expression.visit(this, _Mode.Expression)));
return convertToStatementIfNeeded(mode, o.not(this.visit(ast.expression, _Mode.Expression)));
}
visitPropertyRead(ast, mode) {
var result = null;
var receiver = ast.receiver.visit(this, _Mode.Expression);
if (receiver === IMPLICIT_RECEIVER) {
result = this._nameResolver.getLocal(ast.name);
const leftMostSafe = this.leftMostSafeNode(ast);
if (leftMostSafe) {
return this.convertSafeAccess(ast, leftMostSafe, mode);
}
else {
let result = null;
var receiver = this.visit(ast.receiver, _Mode.Expression);
if (receiver === this._implicitReceiver) {
result = this._nameResolver.getLocal(ast.name);
}
if (isBlank(result)) {
receiver = this._implicitReceiver;
result = receiver.prop(ast.name);
}
return convertToStatementIfNeeded(mode, result);
}
if (isBlank(result)) {
result = receiver.prop(ast.name);
}
return convertToStatementIfNeeded(mode, result);
}
visitPropertyWrite(ast, mode) {
var receiver = ast.receiver.visit(this, _Mode.Expression);
if (receiver === IMPLICIT_RECEIVER) {
let receiver = this.visit(ast.receiver, _Mode.Expression);
if (receiver === this._implicitReceiver) {
var varExpr = this._nameResolver.getLocal(ast.name);

@@ -219,19 +226,106 @@ if (isPresent(varExpr)) {

}
receiver = this._implicitReceiver;
}
return convertToStatementIfNeeded(mode, receiver.prop(ast.name).set(ast.value.visit(this, _Mode.Expression)));
return convertToStatementIfNeeded(mode, receiver.prop(ast.name).set(this.visit(ast.value, _Mode.Expression)));
}
visitSafePropertyRead(ast, mode) {
var receiver = ast.receiver.visit(this, _Mode.Expression);
return convertToStatementIfNeeded(mode, receiver.isBlank().conditional(o.NULL_EXPR, receiver.prop(ast.name)));
return this.convertSafeAccess(ast, this.leftMostSafeNode(ast), mode);
}
visitSafeMethodCall(ast, mode) {
var receiver = ast.receiver.visit(this, _Mode.Expression);
var args = this.visitAll(ast.args, _Mode.Expression);
return convertToStatementIfNeeded(mode, receiver.isBlank().conditional(o.NULL_EXPR, receiver.callMethod(ast.name, args)));
return this.convertSafeAccess(ast, this.leftMostSafeNode(ast), mode);
}
visitAll(asts, mode) { return asts.map(ast => ast.visit(this, mode)); }
visitAll(asts, mode) { return asts.map(ast => this.visit(ast, mode)); }
visitQuote(ast, mode) {
throw new BaseException('Quotes are not supported for evaluation!');
}
visit(ast, mode) {
return (this._map.get(ast) || ast).visit(this, mode);
}
convertSafeAccess(ast, leftMostSafe, mode) {
// If the expression contains a safe access node on the left it needs to be converted to
// an expression that guards the access to the member by checking the receiver for blank. As
// execution proceeds from left to right, the left most part of the expression must be guarded
// first but, because member access is left associative, the right side of the expression is at
// the top of the AST. The desired result requires lifting a copy of the the left part of the
// expression up to test it for blank before generating the unguarded version.
// Consider, for example the following expression: a?.b.c?.d.e
// This results in the ast:
// .
// / \
// ?. e
// / \
// . d
// / \
// ?. c
// / \
// a b
// The following tree should be generated:
//
// /---- ? ----\
// / | \
// a /--- ? ---\ null
// / | \
// . . null
// / \ / \
// . c . e
// / \ / \
// a b , d
// / \
// . c
// / \
// a b
//
// Notice that the first guard condition is the left hand of the left most safe access node
// which comes in as leftMostSafe to this routine.
const condition = this.visit(leftMostSafe.receiver, mode).isBlank();
// Convert the ast to an unguarded access to the receiver's member. The map will substitute
// leftMostNode with its unguarded version in the call to `this.visit()`.
if (leftMostSafe instanceof cdAst.SafeMethodCall) {
this._map.set(leftMostSafe, new cdAst.MethodCall(leftMostSafe.span, leftMostSafe.receiver, leftMostSafe.name, leftMostSafe.args));
}
else {
this._map.set(leftMostSafe, new cdAst.PropertyRead(leftMostSafe.span, leftMostSafe.receiver, leftMostSafe.name));
}
// Recursively convert the node now without the guarded member access.
const access = this.visit(ast, mode);
// Remove the mapping. This is not strictly required as the converter only traverses each node
// once but is safer if the conversion is changed to traverse the nodes more than once.
this._map.delete(leftMostSafe);
// Produce the conditional
return condition.conditional(o.literal(null), access);
}
// Given a expression of the form a?.b.c?.d.e the the left most safe node is
// the (a?.b). The . and ?. are left associative thus can be rewritten as:
// ((((a?.c).b).c)?.d).e. This returns the most deeply nested safe read or
// safe method call as this needs be transform initially to:
// a == null ? null : a.c.b.c?.d.e
// then to:
// a == null ? null : a.b.c == null ? null : a.b.c.d.e
leftMostSafeNode(ast) {
let visit = (visitor, ast) => {
return (this._map.get(ast) || ast).visit(visitor);
};
return ast.visit({
visitBinary(ast) { return null; },
visitChain(ast) { return null; },
visitConditional(ast) { return null; },
visitFunctionCall(ast) { return null; },
visitImplicitReceiver(ast) { return null; },
visitInterpolation(ast) { return null; },
visitKeyedRead(ast) { return visit(this, ast.obj); },
visitKeyedWrite(ast) { return null; },
visitLiteralArray(ast) { return null; },
visitLiteralMap(ast) { return null; },
visitLiteralPrimitive(ast) { return null; },
visitMethodCall(ast) { return visit(this, ast.receiver); },
visitPipe(ast) { return null; },
visitPrefixNot(ast) { return null; },
visitPropertyRead(ast) { return visit(this, ast.receiver); },
visitPropertyWrite(ast) { return null; },
visitQuote(ast) { return null; },
visitSafeMethodCall(ast) { return visit(this, ast.receiver) || ast; },
visitSafePropertyRead(ast) {
return visit(this, ast.receiver) || ast;
}
});
}
}

@@ -238,0 +332,0 @@ function flattenStatements(arg, output) {

import { CompileDirectiveMetadata, CompilePipeMetadata } from '../compile_metadata';
import * as o from '../output/output_ast';
import { DirectiveAst } from '../template_ast';
import { DirectiveAst, ProviderAst } from '../template_parser/template_ast';
import { CompileElement } from './compile_element';

@@ -9,3 +9,3 @@ import { CompileView } from './compile_view';

export declare function bindDirectiveAfterViewLifecycleCallbacks(directiveMeta: CompileDirectiveMetadata, directiveInstance: o.Expression, compileElement: CompileElement): void;
export declare function bindDirectiveDestroyLifecycleCallbacks(directiveMeta: CompileDirectiveMetadata, directiveInstance: o.Expression, compileElement: CompileElement): void;
export declare function bindInjectableDestroyLifecycleCallbacks(provider: ProviderAst, providerInstance: o.Expression, compileElement: CompileElement): void;
export declare function bindPipeDestroyLifecycleCallbacks(pipeMeta: CompilePipeMetadata, pipeInstance: o.Expression, view: CompileView): void;

@@ -16,3 +16,3 @@ /**

var detectChangesInInputsMethod = view.detectChangesInInputsMethod;
var lifecycleHooks = directiveAst.directive.lifecycleHooks;
var lifecycleHooks = directiveAst.directive.type.lifecycleHooks;
if (lifecycleHooks.indexOf(LifecycleHooks.OnChanges) !== -1 && directiveAst.inputs.length > 0) {

@@ -30,3 +30,3 @@ detectChangesInInputsMethod.addStmt(new o.IfStmt(DetectChangesVars.changes.notIdentical(o.NULL_EXPR), [directiveInstance.callMethod('ngOnChanges', [DetectChangesVars.changes]).toStmt()]));

var view = compileElement.view;
var lifecycleHooks = directiveMeta.lifecycleHooks;
var lifecycleHooks = directiveMeta.type.lifecycleHooks;
var afterContentLifecycleCallbacksMethod = view.afterContentLifecycleCallbacksMethod;

@@ -43,3 +43,3 @@ afterContentLifecycleCallbacksMethod.resetDebugInfo(compileElement.nodeIndex, compileElement.sourceAst);

var view = compileElement.view;
var lifecycleHooks = directiveMeta.lifecycleHooks;
var lifecycleHooks = directiveMeta.type.lifecycleHooks;
var afterViewLifecycleCallbacksMethod = view.afterViewLifecycleCallbacksMethod;

@@ -54,7 +54,7 @@ afterViewLifecycleCallbacksMethod.resetDebugInfo(compileElement.nodeIndex, compileElement.sourceAst);

}
export function bindDirectiveDestroyLifecycleCallbacks(directiveMeta, directiveInstance, compileElement) {
export function bindInjectableDestroyLifecycleCallbacks(provider, providerInstance, compileElement) {
var onDestroyMethod = compileElement.view.destroyMethod;
onDestroyMethod.resetDebugInfo(compileElement.nodeIndex, compileElement.sourceAst);
if (directiveMeta.lifecycleHooks.indexOf(LifecycleHooks.OnDestroy) !== -1) {
onDestroyMethod.addStmt(directiveInstance.callMethod('ngOnDestroy', []).toStmt());
if (provider.lifecycleHooks.indexOf(LifecycleHooks.OnDestroy) !== -1) {
onDestroyMethod.addStmt(providerInstance.callMethod('ngOnDestroy', []).toStmt());
}

@@ -64,3 +64,3 @@ }

var onDestroyMethod = view.destroyMethod;
if (pipeMeta.lifecycleHooks.indexOf(LifecycleHooks.OnDestroy) !== -1) {
if (pipeMeta.type.lifecycleHooks.indexOf(LifecycleHooks.OnDestroy) !== -1) {
onDestroyMethod.addStmt(pipeInstance.callMethod('ngOnDestroy', []).toStmt());

@@ -67,0 +67,0 @@ }

import * as o from '../output/output_ast';
import { BoundTextAst, BoundElementPropertyAst, DirectiveAst } from '../template_ast';
import { BoundElementPropertyAst, BoundTextAst, DirectiveAst } from '../template_parser/template_ast';
import { CompileElement, CompileNode } from './compile_element';
import { CompileView } from './compile_view';
import { CompileElement, CompileNode } from './compile_element';
export declare function bindRenderText(boundText: BoundTextAst, compileNode: CompileNode, view: CompileView): void;

@@ -6,0 +6,0 @@ export declare function bindRenderInputs(boundProps: BoundElementPropertyAst[], compileElement: CompileElement): void;

@@ -8,12 +8,12 @@ /**

*/
import { EMPTY_STATE as EMPTY_ANIMATION_STATE, LifecycleHooks, SecurityContext, isDefaultChangeDetectionStrategy } from '../../core_private';
import { SecurityContext } from '@angular/core';
import { EMPTY_STATE as EMPTY_ANIMATION_STATE, LifecycleHooks, isDefaultChangeDetectionStrategy } from '../../core_private';
import { isBlank, isPresent } from '../facade/lang';
import { Identifiers } from '../identifiers';
import * as o from '../output/output_ast';
import { PropertyBindingType } from '../template_parser/template_ast';
import { camelCaseToDashCase } from '../util';
import { CompileBinding } from './compile_binding';
import { DetectChangesVars, ViewProperties } from './constants';
import { PropertyBindingType } from '../template_ast';
import { camelCaseToDashCase } from '../util';
import { convertCdExpressionToIr } from './expression_converter';
import { CompileBinding } from './compile_binding';
import { BaseException } from '@angular/core';
function createBindFieldExpr(exprIndex) {

@@ -25,2 +25,3 @@ return o.THIS_EXPR.prop(`_expr_${exprIndex}`);

}
const _animationViewCheckedFlagMap = new Map();
function bind(view, currValExpr, fieldExpr, parsedExpression, context, actions, method) {

@@ -34,3 +35,3 @@ var checkExpression = convertCdExpressionToIr(view, context, parsedExpression, DetectChangesVars.valUnwrapper);

view.fields.push(new o.ClassField(fieldExpr.name, null, [o.StmtModifier.Private]));
view.createMethod.addStmt(o.THIS_EXPR.prop(fieldExpr.name).set(o.importExpr(Identifiers.uninitialized)).toStmt());
view.createMethod.addStmt(o.THIS_EXPR.prop(fieldExpr.name).set(o.importExpr(Identifiers.UNINITIALIZED)).toStmt());
if (checkExpression.needsValueUnwrapper) {

@@ -59,3 +60,3 @@ var initValueUnwrapperStmt = DetectChangesVars.valUnwrapper.callMethod('reset', []).toStmt();

}
function bindAndWriteToRenderer(boundProps, context, compileElement) {
function bindAndWriteToRenderer(boundProps, context, compileElement, isHostProp) {
var view = compileElement.view;

@@ -106,6 +107,7 @@ var renderNode = compileElement.renderNode;

var animationName = boundProp.name;
var animation = view.componentView.animations.get(animationName);
if (!isPresent(animation)) {
throw new BaseException(`Internal Error: couldn't find an animation entry for ${boundProp.name}`);
var targetViewExpr = o.THIS_EXPR;
if (isHostProp) {
targetViewExpr = compileElement.appElement.prop('componentView');
}
var animationFnExpr = targetViewExpr.prop('componentType').prop('animations').key(o.literal(animationName));
// it's important to normalize the void value as `void` explicitly

@@ -117,11 +119,16 @@ // so that the styles data can be obtained from the stringmap

updateStmts.push(oldRenderVar.set(oldRenderValue).toDeclStmt());
updateStmts.push(new o.IfStmt(oldRenderVar.equals(o.importExpr(Identifiers.uninitialized)), [oldRenderVar.set(emptyStateValue).toStmt()]));
updateStmts.push(new o.IfStmt(oldRenderVar.equals(o.importExpr(Identifiers.UNINITIALIZED)), [oldRenderVar.set(emptyStateValue).toStmt()]));
// ... => void
var newRenderVar = o.variable('newRenderVar');
updateStmts.push(newRenderVar.set(renderValue).toDeclStmt());
updateStmts.push(new o.IfStmt(newRenderVar.equals(o.importExpr(Identifiers.uninitialized)), [newRenderVar.set(emptyStateValue).toStmt()]));
updateStmts.push(animation.fnVariable.callFn([o.THIS_EXPR, renderNode, oldRenderVar, newRenderVar])
updateStmts.push(new o.IfStmt(newRenderVar.equals(o.importExpr(Identifiers.UNINITIALIZED)), [newRenderVar.set(emptyStateValue).toStmt()]));
updateStmts.push(animationFnExpr.callFn([o.THIS_EXPR, renderNode, oldRenderVar, newRenderVar]).toStmt());
view.detachMethod.addStmt(animationFnExpr.callFn([o.THIS_EXPR, renderNode, oldRenderValue, emptyStateValue])
.toStmt());
view.detachMethod.addStmt(animation.fnVariable.callFn([o.THIS_EXPR, renderNode, oldRenderValue, emptyStateValue])
.toStmt());
if (!_animationViewCheckedFlagMap.get(view)) {
_animationViewCheckedFlagMap.set(view, true);
var triggerStmt = o.THIS_EXPR.callMethod('triggerQueuedAnimations', []).toStmt();
view.afterViewLifecycleCallbacksMethod.addStmt(triggerStmt);
view.detachMethod.addStmt(triggerStmt);
}
break;

@@ -160,6 +167,6 @@ }

export function bindRenderInputs(boundProps, compileElement) {
bindAndWriteToRenderer(boundProps, compileElement.view.componentContext, compileElement);
bindAndWriteToRenderer(boundProps, compileElement.view.componentContext, compileElement, false);
}
export function bindDirectiveHostProps(directiveAst, directiveInstance, compileElement) {
bindAndWriteToRenderer(directiveAst.hostProperties, directiveInstance, compileElement);
bindAndWriteToRenderer(directiveAst.hostProperties, directiveInstance, compileElement, true);
}

@@ -173,3 +180,3 @@ export function bindDirectiveInputs(directiveAst, directiveInstance, compileElement) {

detectChangesInInputsMethod.resetDebugInfo(compileElement.nodeIndex, compileElement.sourceAst);
var lifecycleHooks = directiveAst.directive.lifecycleHooks;
var lifecycleHooks = directiveAst.directive.type.lifecycleHooks;
var calcChangesMap = lifecycleHooks.indexOf(LifecycleHooks.OnChanges) !== -1;

@@ -214,3 +221,3 @@ var isOnPushComp = directiveAst.directive.isComponent &&

function logBindingUpdateStmt(renderNode, propName, value) {
return o.THIS_EXPR.prop('renderer')
const tryStmt = o.THIS_EXPR.prop('renderer')
.callMethod('setBindingDebugInfo', [

@@ -221,3 +228,10 @@ renderNode, o.literal(`ng-reflect-${camelCaseToDashCase(propName)}`),

.toStmt();
const catchStmt = o.THIS_EXPR.prop('renderer')
.callMethod('setBindingDebugInfo', [
renderNode, o.literal(`ng-reflect-${camelCaseToDashCase(propName)}`),
o.literal('[ERROR] Exception while trying to serialize the value')
])
.toStmt();
return new o.TryCatchStmt([tryStmt], [catchStmt]);
}
//# sourceMappingURL=property_binder.js.map

@@ -0,3 +1,10 @@

/**
* @license
* Copyright Google Inc. 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 { CompileDirectiveMetadata, CompileTokenMetadata } from '../compile_metadata';
import * as o from '../output/output_ast';
import { CompileTokenMetadata, CompileDirectiveMetadata } from '../compile_metadata';
import { CompileView } from './compile_view';

@@ -7,4 +14,3 @@ export declare function getPropertyInView(property: o.Expression, callingView: CompileView, definedView: CompileView): o.Expression;

export declare function getViewFactoryName(component: CompileDirectiveMetadata, embeddedTemplateIndex: number): string;
export declare function createDiTokenExpression(token: CompileTokenMetadata): o.Expression;
export declare function createFlatArray(expressions: o.Expression[]): o.Expression;
export declare function createPureProxy(fn: o.Expression, argCount: number, pureProxyProp: o.ReadPropExpr, view: CompileView): void;

@@ -10,4 +10,5 @@ /**

import { isBlank, isPresent } from '../facade/lang';
import { Identifiers } from '../identifiers';
import * as o from '../output/output_ast';
import { Identifiers } from '../identifiers';
import { createDiTokenExpression } from '../util';
export function getPropertyInView(property, callingView, definedView) {

@@ -48,14 +49,2 @@ if (callingView === definedView) {

}
export function createDiTokenExpression(token) {
if (isPresent(token.value)) {
return o.literal(token.value);
}
else if (token.identifierIsInstance) {
return o.importExpr(token.identifier)
.instantiate([], o.importType(token.identifier, [], [o.TypeModifier.Const]));
}
else {
return o.importExpr(token.identifier);
}
}
export function createFlatArray(expressions) {

@@ -62,0 +51,0 @@ var lastNonArrayExpressions = [];

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"getViewFactoryName":{"__symbolic":"function","parameters":["component","embeddedTemplateIndex"],"value":{"__symbolic":"error","message":"Expression form not supported","line":54,"character":8}}}}
{"__symbolic":"module","version":1,"metadata":{"getViewFactoryName":{"__symbolic":"function","parameters":["component","embeddedTemplateIndex"],"value":{"__symbolic":"error","message":"Expression form not supported","line":55,"character":8}}}}

@@ -1,3 +0,3 @@

import { TemplateAst } from '../template_ast';
import { TemplateAst } from '../template_parser/template_ast';
import { CompileView } from './compile_view';
export declare function bindView(view: CompileView, parsedTemplate: TemplateAst[]): void;

@@ -8,7 +8,7 @@ /**

*/
import { ListWrapper } from '../facade/collection';
import { templateVisitAll } from '../template_ast';
import { bindRenderText, bindRenderInputs, bindDirectiveInputs, bindDirectiveHostProps } from './property_binder';
import { bindRenderOutputs, collectEventListeners, bindDirectiveOutputs } from './event_binder';
import { bindDirectiveAfterContentLifecycleCallbacks, bindDirectiveAfterViewLifecycleCallbacks, bindDirectiveDestroyLifecycleCallbacks, bindPipeDestroyLifecycleCallbacks, bindDirectiveDetectChangesLifecycleCallbacks } from './lifecycle_binder';
import { identifierToken } from '../identifiers';
import { templateVisitAll } from '../template_parser/template_ast';
import { bindDirectiveOutputs, bindRenderOutputs, collectEventListeners } from './event_binder';
import { bindDirectiveAfterContentLifecycleCallbacks, bindDirectiveAfterViewLifecycleCallbacks, bindDirectiveDetectChangesLifecycleCallbacks, bindInjectableDestroyLifecycleCallbacks, bindPipeDestroyLifecycleCallbacks } from './lifecycle_binder';
import { bindDirectiveHostProps, bindDirectiveInputs, bindRenderInputs, bindRenderText } from './property_binder';
export function bindView(view, parsedTemplate) {

@@ -39,4 +39,4 @@ var visitor = new ViewBinderVisitor(view);

bindRenderOutputs(eventListeners);
ListWrapper.forEachWithIndex(ast.directives, (directiveAst, index) => {
var directiveInstance = compileElement.directiveInstances[index];
ast.directives.forEach((directiveAst) => {
var directiveInstance = compileElement.instances.get(identifierToken(directiveAst.directive.type));
bindDirectiveInputs(directiveAst, directiveInstance, compileElement);

@@ -50,8 +50,11 @@ bindDirectiveDetectChangesLifecycleCallbacks(directiveAst, directiveInstance, compileElement);

// so that children are notified before parents
ListWrapper.forEachWithIndex(ast.directives, (directiveAst, index) => {
var directiveInstance = compileElement.directiveInstances[index];
ast.directives.forEach((directiveAst) => {
var directiveInstance = compileElement.instances.get(identifierToken(directiveAst.directive.type));
bindDirectiveAfterContentLifecycleCallbacks(directiveAst.directive, directiveInstance, compileElement);
bindDirectiveAfterViewLifecycleCallbacks(directiveAst.directive, directiveInstance, compileElement);
bindDirectiveDestroyLifecycleCallbacks(directiveAst.directive, directiveInstance, compileElement);
});
ast.providers.forEach((providerAst) => {
var providerInstance = compileElement.instances.get(providerAst.token);
bindInjectableDestroyLifecycleCallbacks(providerAst, providerInstance, compileElement);
});
return null;

@@ -62,4 +65,4 @@ }

var eventListeners = collectEventListeners(ast.outputs, ast.directives, compileElement);
ListWrapper.forEachWithIndex(ast.directives, (directiveAst, index) => {
var directiveInstance = compileElement.directiveInstances[index];
ast.directives.forEach((directiveAst) => {
var directiveInstance = compileElement.instances.get(identifierToken(directiveAst.directive.type));
bindDirectiveInputs(directiveAst, directiveInstance, compileElement);

@@ -70,4 +73,7 @@ bindDirectiveDetectChangesLifecycleCallbacks(directiveAst, directiveInstance, compileElement);

bindDirectiveAfterViewLifecycleCallbacks(directiveAst.directive, directiveInstance, compileElement);
bindDirectiveDestroyLifecycleCallbacks(directiveAst.directive, directiveInstance, compileElement);
});
ast.providers.forEach((providerAst) => {
var providerInstance = compileElement.instances.get(providerAst.token);
bindInjectableDestroyLifecycleCallbacks(providerAst, providerInstance, compileElement);
});
bindView(compileElement.embeddedView, ast.children);

@@ -74,0 +80,0 @@ return null;

import { CompileIdentifierMetadata } from '../compile_metadata';
import * as o from '../output/output_ast';
import { TemplateAst } from '../template_ast';
import { TemplateAst } from '../template_parser/template_ast';
import { CompileView } from './compile_view';

@@ -5,0 +5,0 @@ export declare class ViewFactoryDependency {

@@ -16,7 +16,8 @@ /**

import * as o from '../output/output_ast';
import { templateVisitAll } from '../template_ast';
import { templateVisitAll } from '../template_parser/template_ast';
import { createDiTokenExpression } from '../util';
import { CompileElement, CompileNode } from './compile_element';
import { CompileView } from './compile_view';
import { ChangeDetectorStatusEnum, DetectChangesVars, InjectMethodVars, ViewConstructorVars, ViewEncapsulationEnum, ViewProperties, ViewTypeEnum } from './constants';
import { createDiTokenExpression, createFlatArray, getViewFactoryName } from './util';
import { createFlatArray, getViewFactoryName } from './util';
const IMPLICIT_TEMPLATE_VAR = '\$implicit';

@@ -180,8 +181,8 @@ const CLASS_ATTR = 'class';

this.targetDependencies.push(new ViewFactoryDependency(component.type, nestedComponentIdentifier));
let precompileComponentIdentifiers = component.precompile.map((precompileComp) => {
var id = new CompileIdentifierMetadata({ name: precompileComp.name });
this.targetDependencies.push(new ComponentFactoryDependency(precompileComp, id));
let entryComponentIdentifiers = component.entryComponents.map((entryComponent) => {
var id = new CompileIdentifierMetadata({ name: entryComponent.name });
this.targetDependencies.push(new ComponentFactoryDependency(entryComponent, id));
return id;
});
compileElement.createComponentFactoryResolver(precompileComponentIdentifiers);
compileElement.createComponentFactoryResolver(entryComponentIdentifiers);
compViewExpr = o.variable(`compView_${nodeIndex}`); // fix highlighting: `

@@ -228,3 +229,3 @@ compileElement.setComponentView(compViewExpr);

this.view.nodes.push(compileElement);
var compiledAnimations = this._animationCompiler.compileComponent(this.view.component);
var compiledAnimations = this._animationCompiler.compileComponent(this.view.component, [ast]);
this.nestedViewCount++;

@@ -401,2 +402,3 @@ var embeddedView = new CompileView(this.view.component, this.view.genConfig, this.view.pipeMetas, o.NULL_EXPR, compiledAnimations, this.view.viewIndex + this.nestedViewCount, compileElement, templateVariableBindings);

if (view.viewIndex === 0) {
var animationsExpr = o.literalMap(view.animations.map(entry => [entry.name, entry.fnVariable]));
initRenderCompTypeStmts = [new o.IfStmt(renderCompTypeVar.identical(o.NULL_EXPR), [

@@ -407,3 +409,4 @@ renderCompTypeVar

o.literal(view.component.template.ngContentSelectors.length),
ViewEncapsulationEnum.fromValue(view.component.template.encapsulation), view.styles
ViewEncapsulationEnum.fromValue(view.component.template.encapsulation), view.styles,
animationsExpr
]))

@@ -410,0 +413,0 @@ .toStmt()

import { CompileDirectiveMetadata, CompilePipeMetadata } from '../compile_metadata';
import { CompilerConfig } from '../config';
import * as o from '../output/output_ast';
import { TemplateAst } from '../template_ast';
import { TemplateAst } from '../template_parser/template_ast';
import { ComponentFactoryDependency, ViewFactoryDependency } from './view_builder';

@@ -6,0 +6,0 @@ export { ComponentFactoryDependency, ViewFactoryDependency } from './view_builder';

@@ -30,3 +30,3 @@ /**

var dependencies = [];
var compiledAnimations = this._animationCompiler.compileComponent(component);
var compiledAnimations = this._animationCompiler.compileComponent(component, template);
var statements = [];

@@ -33,0 +33,0 @@ compiledAnimations.map(entry => {

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"ViewCompiler":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../config","name":"CompilerConfig"}]}],"compileComponent":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"ViewCompiler":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../config","name":"CompilerConfig"}]}],"compileComponent":[{"__symbolic":"method"}]}}},"exports":[{"from":"./view_builder","export":["ComponentFactoryDependency","ViewFactoryDependency"]}]}

@@ -9,4 +9,45 @@ /**

export * from './testing/schema_registry_mock';
export * from './testing/view_resolver_mock';
export * from './testing/test_component_builder';
export * from './testing/directive_resolver_mock';
export * from './testing/ng_module_resolver_mock';
export * from './testing/pipe_resolver_mock';
import { ConcreteType, Type } from './src/facade/lang';
import { ModuleWithComponentFactories, CompilerOptions, PlatformRef, CompilerFactory, ComponentFactory, NgModuleFactory, Injector, NgModuleMetadataType, ComponentMetadataType, DirectiveMetadataType, PipeMetadataType } from '@angular/core';
import { MetadataOverride } from '@angular/core/testing';
import { TestingCompilerFactory, TestingCompiler } from './core_private_testing';
import { RuntimeCompiler } from './index';
import { MockDirectiveResolver } from './testing/directive_resolver_mock';
import { MockNgModuleResolver } from './testing/ng_module_resolver_mock';
import { MockPipeResolver } from './testing/pipe_resolver_mock';
export declare class TestingCompilerFactoryImpl implements TestingCompilerFactory {
private _compilerFactory;
constructor(_compilerFactory: CompilerFactory);
createTestingCompiler(options: CompilerOptions[]): TestingCompiler;
}
export declare class TestingCompilerImpl implements TestingCompiler {
private _compiler;
private _directiveResolver;
private _pipeResolver;
private _moduleResolver;
private _overrider;
constructor(_compiler: RuntimeCompiler, _directiveResolver: MockDirectiveResolver, _pipeResolver: MockPipeResolver, _moduleResolver: MockNgModuleResolver);
readonly injector: Injector;
compileComponentAsync<T>(component: ConcreteType<T>, ngModule?: Type): Promise<ComponentFactory<T>>;
compileComponentSync<T>(component: ConcreteType<T>, ngModule?: Type): ComponentFactory<T>;
compileModuleSync<T>(moduleType: ConcreteType<T>): NgModuleFactory<T>;
compileModuleAsync<T>(moduleType: ConcreteType<T>): Promise<NgModuleFactory<T>>;
compileModuleAndAllComponentsSync<T>(moduleType: ConcreteType<T>): ModuleWithComponentFactories<T>;
compileModuleAndAllComponentsAsync<T>(moduleType: ConcreteType<T>): Promise<ModuleWithComponentFactories<T>>;
overrideModule(ngModule: ConcreteType<any>, override: MetadataOverride<NgModuleMetadataType>): void;
overrideDirective(directive: ConcreteType<any>, override: MetadataOverride<DirectiveMetadataType>): void;
overrideComponent(component: ConcreteType<any>, override: MetadataOverride<ComponentMetadataType>): void;
overridePipe(pipe: ConcreteType<any>, override: MetadataOverride<PipeMetadataType>): void;
clearCache(): void;
clearCacheFor(type: Type): void;
}
/**
* Platform for dynamic tests
*
* @experimental
*/
export declare const platformCoreDynamicTesting: (extraProviders?: any[]) => PlatformRef;

@@ -9,5 +9,95 @@ /**

export * from './testing/schema_registry_mock';
export * from './testing/view_resolver_mock';
export * from './testing/test_component_builder';
export * from './testing/directive_resolver_mock';
export * from './testing/ng_module_resolver_mock';
export * from './testing/pipe_resolver_mock';
import { createPlatformFactory, Injectable, COMPILER_OPTIONS, CompilerFactory, NgModuleMetadata, ComponentMetadata, DirectiveMetadata, PipeMetadata } from '@angular/core';
import { TestingCompilerFactory } from './core_private_testing';
import { platformCoreDynamic, DirectiveResolver, NgModuleResolver, PipeResolver } from './index';
import { MockDirectiveResolver } from './testing/directive_resolver_mock';
import { MockNgModuleResolver } from './testing/ng_module_resolver_mock';
import { MockPipeResolver } from './testing/pipe_resolver_mock';
import { MetadataOverrider } from './testing/metadata_overrider';
export class TestingCompilerFactoryImpl {
constructor(_compilerFactory) {
this._compilerFactory = _compilerFactory;
}
createTestingCompiler(options) {
const compiler = this._compilerFactory.createCompiler(options);
return new TestingCompilerImpl(compiler, compiler.injector.get(MockDirectiveResolver), compiler.injector.get(MockPipeResolver), compiler.injector.get(MockNgModuleResolver));
}
}
/** @nocollapse */
TestingCompilerFactoryImpl.decorators = [
{ type: Injectable },
];
/** @nocollapse */
TestingCompilerFactoryImpl.ctorParameters = [
{ type: CompilerFactory, },
];
export class TestingCompilerImpl {
constructor(_compiler, _directiveResolver, _pipeResolver, _moduleResolver) {
this._compiler = _compiler;
this._directiveResolver = _directiveResolver;
this._pipeResolver = _pipeResolver;
this._moduleResolver = _moduleResolver;
this._overrider = new MetadataOverrider();
}
get injector() { return this._compiler.injector; }
compileComponentAsync(component, ngModule = null) {
return this._compiler.compileComponentAsync(component, ngModule);
}
compileComponentSync(component, ngModule = null) {
return this._compiler.compileComponentSync(component, ngModule);
}
compileModuleSync(moduleType) {
return this._compiler.compileModuleSync(moduleType);
}
compileModuleAsync(moduleType) {
return this._compiler.compileModuleAsync(moduleType);
}
compileModuleAndAllComponentsSync(moduleType) {
return this._compiler.compileModuleAndAllComponentsSync(moduleType);
}
compileModuleAndAllComponentsAsync(moduleType) {
return this._compiler.compileModuleAndAllComponentsAsync(moduleType);
}
overrideModule(ngModule, override) {
const oldMetadata = this._moduleResolver.resolve(ngModule, false);
this._moduleResolver.setNgModule(ngModule, this._overrider.overrideMetadata(NgModuleMetadata, oldMetadata, override));
}
overrideDirective(directive, override) {
const oldMetadata = this._directiveResolver.resolve(directive, false);
this._directiveResolver.setDirective(directive, this._overrider.overrideMetadata(DirectiveMetadata, oldMetadata, override));
}
overrideComponent(component, override) {
const oldMetadata = this._directiveResolver.resolve(component, false);
this._directiveResolver.setDirective(component, this._overrider.overrideMetadata(ComponentMetadata, oldMetadata, override));
}
overridePipe(pipe, override) {
const oldMetadata = this._pipeResolver.resolve(pipe, false);
this._pipeResolver.setPipe(pipe, this._overrider.overrideMetadata(PipeMetadata, oldMetadata, override));
}
clearCache() { this._compiler.clearCache(); }
clearCacheFor(type) { this._compiler.clearCacheFor(type); }
}
/**
* Platform for dynamic tests
*
* @experimental
*/
export const platformCoreDynamicTesting = createPlatformFactory(platformCoreDynamic, 'coreDynamicTesting', [
{
provide: COMPILER_OPTIONS,
useValue: {
providers: [
MockPipeResolver, { provide: PipeResolver, useExisting: MockPipeResolver },
MockDirectiveResolver, { provide: DirectiveResolver, useExisting: MockDirectiveResolver },
MockNgModuleResolver, { provide: NgModuleResolver, useExisting: MockNgModuleResolver }
]
},
multi: true
},
{ provide: TestingCompilerFactory, useClass: TestingCompilerFactoryImpl }
]);
//# sourceMappingURL=testing.js.map

@@ -8,3 +8,3 @@ /**

*/
import { DirectiveMetadata, Injector } from '@angular/core';
import { AnimationEntryMetadata, DirectiveMetadata, Injector, ViewMetadata } from '@angular/core';
import { DirectiveResolver } from '../src/directive_resolver';

@@ -18,9 +18,32 @@ import { Type } from '../src/facade/lang';

private _injector;
private _directives;
private _providerOverrides;
private viewProviderOverrides;
private _viewProviderOverrides;
private _views;
private _inlineTemplates;
private _animations;
private _directiveOverrides;
constructor(_injector: Injector);
private readonly _compiler;
resolve(type: Type): DirectiveMetadata;
private _clearCacheFor(component);
resolve(type: Type, throwIfNotFound?: boolean): DirectiveMetadata;
/**
* Overrides the {@link DirectiveMetadata} for a directive.
*/
setDirective(type: Type, metadata: DirectiveMetadata): void;
setProvidersOverride(type: Type, providers: any[]): void;
setViewProvidersOverride(type: Type, viewProviders: any[]): void;
/**
* Overrides the {@link ViewMetadata} for a component.
*/
setView(component: Type, view: ViewMetadata): void;
/**
* Overrides the inline template for a component - other configuration remains unchanged.
*/
setInlineTemplate(component: Type, template: string): void;
setAnimations(component: Type, animations: AnimationEntryMetadata[]): void;
/**
* Overrides a directive from the component {@link ViewMetadata}.
*/
overrideViewDirective(component: Type, from: Type, to: Type): void;
}

@@ -8,6 +8,7 @@ /**

*/
import { Compiler, ComponentMetadata, DirectiveMetadata, Injectable, Injector } from '@angular/core';
import { Compiler, ComponentMetadata, DirectiveMetadata, Injectable, Injector, resolveForwardRef } from '@angular/core';
import { DirectiveResolver } from '../src/directive_resolver';
import { Map } from '../src/facade/collection';
import { isPresent } from '../src/facade/lang';
import { BaseException } from '../src/facade/exceptions';
import { isArray, isPresent, stringify } from '../src/facade/lang';
export class MockDirectiveResolver extends DirectiveResolver {

@@ -17,53 +18,142 @@ constructor(_injector) {

this._injector = _injector;
this._directives = new Map();
this._providerOverrides = new Map();
this.viewProviderOverrides = new Map();
this._viewProviderOverrides = new Map();
this._views = new Map();
this._inlineTemplates = new Map();
this._animations = new Map();
this._directiveOverrides = new Map();
}
get _compiler() { return this._injector.get(Compiler); }
resolve(type) {
var dm = super.resolve(type);
var providerOverrides = this._providerOverrides.get(type);
var viewProviderOverrides = this.viewProviderOverrides.get(type);
var providers = dm.providers;
_clearCacheFor(component) { this._compiler.clearCacheFor(component); }
resolve(type, throwIfNotFound = true) {
let metadata = this._directives.get(type);
if (!metadata) {
metadata = super.resolve(type, throwIfNotFound);
}
if (!metadata) {
return null;
}
const providerOverrides = this._providerOverrides.get(type);
const viewProviderOverrides = this._viewProviderOverrides.get(type);
let providers = metadata.providers;
if (isPresent(providerOverrides)) {
var originalViewProviders = isPresent(dm.providers) ? dm.providers : [];
const originalViewProviders = isPresent(metadata.providers) ? metadata.providers : [];
providers = originalViewProviders.concat(providerOverrides);
}
if (dm instanceof ComponentMetadata) {
var viewProviders = dm.viewProviders;
if (metadata instanceof ComponentMetadata) {
let viewProviders = metadata.viewProviders;
if (isPresent(viewProviderOverrides)) {
var originalViewProviders = isPresent(dm.viewProviders) ? dm.viewProviders : [];
const originalViewProviders = isPresent(metadata.viewProviders) ? metadata.viewProviders : [];
viewProviders = originalViewProviders.concat(viewProviderOverrides);
}
let view = this._views.get(type);
if (!view) {
view = metadata;
}
const directives = [];
if (isPresent(view.directives)) {
flattenArray(view.directives, directives);
}
let animations = view.animations;
let templateUrl = view.templateUrl;
const directiveOverrides = this._directiveOverrides.get(type);
const inlineAnimations = this._animations.get(type);
if (isPresent(inlineAnimations)) {
animations = inlineAnimations;
}
let inlineTemplate = this._inlineTemplates.get(type);
if (isPresent(inlineTemplate)) {
templateUrl = null;
}
else {
inlineTemplate = view.template;
}
if (isPresent(directiveOverrides) && isPresent(view.directives)) {
directiveOverrides.forEach((to, from) => {
var srcIndex = directives.indexOf(from);
if (srcIndex == -1) {
throw new BaseException(`Overriden directive ${stringify(from)} not found in the template of ${stringify(type)}`);
}
directives[srcIndex] = to;
});
}
return new ComponentMetadata({
selector: dm.selector,
inputs: dm.inputs,
outputs: dm.outputs,
host: dm.host,
exportAs: dm.exportAs,
moduleId: dm.moduleId,
queries: dm.queries,
changeDetection: dm.changeDetection,
selector: metadata.selector,
inputs: metadata.inputs,
outputs: metadata.outputs,
host: metadata.host,
exportAs: metadata.exportAs,
moduleId: metadata.moduleId,
queries: metadata.queries,
changeDetection: metadata.changeDetection,
providers: providers,
viewProviders: viewProviders,
precompile: dm.precompile
entryComponents: metadata.entryComponents,
template: inlineTemplate,
templateUrl: templateUrl,
directives: directives.length > 0 ? directives : null,
animations: animations,
styles: view.styles,
styleUrls: view.styleUrls,
pipes: view.pipes,
encapsulation: view.encapsulation,
interpolation: view.interpolation
});
}
return new DirectiveMetadata({
selector: dm.selector,
inputs: dm.inputs,
outputs: dm.outputs,
host: dm.host,
selector: metadata.selector,
inputs: metadata.inputs,
outputs: metadata.outputs,
host: metadata.host,
providers: providers,
exportAs: dm.exportAs,
queries: dm.queries
exportAs: metadata.exportAs,
queries: metadata.queries
});
}
/**
* Overrides the {@link DirectiveMetadata} for a directive.
*/
setDirective(type, metadata) {
this._directives.set(type, metadata);
this._clearCacheFor(type);
}
setProvidersOverride(type, providers) {
this._providerOverrides.set(type, providers);
this._compiler.clearCacheFor(type);
this._clearCacheFor(type);
}
setViewProvidersOverride(type, viewProviders) {
this.viewProviderOverrides.set(type, viewProviders);
this._compiler.clearCacheFor(type);
this._viewProviderOverrides.set(type, viewProviders);
this._clearCacheFor(type);
}
/**
* Overrides the {@link ViewMetadata} for a component.
*/
setView(component, view) {
this._views.set(component, view);
this._clearCacheFor(component);
}
/**
* Overrides the inline template for a component - other configuration remains unchanged.
*/
setInlineTemplate(component, template) {
this._inlineTemplates.set(component, template);
this._clearCacheFor(component);
}
setAnimations(component, animations) {
this._animations.set(component, animations);
this._clearCacheFor(component);
}
/**
* Overrides a directive from the component {@link ViewMetadata}.
*/
overrideViewDirective(component, from, to) {
var overrides = this._directiveOverrides.get(component);
if (!overrides) {
overrides = new Map();
this._directiveOverrides.set(component, overrides);
}
overrides.set(from, to);
this._clearCacheFor(component);
}
}

@@ -78,2 +168,15 @@ /** @nocollapse */

];
function flattenArray(tree, out) {
if (!isPresent(tree))
return;
for (var i = 0; i < tree.length; i++) {
var item = resolveForwardRef(tree[i]);
if (isArray(item)) {
flattenArray(item, out);
}
else {
out.push(item);
}
}
}
//# sourceMappingURL=directive_resolver_mock.js.map

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"MockDirectiveResolver":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector"}]}],"resolve":[{"__symbolic":"method"}],"setProvidersOverride":[{"__symbolic":"method"}],"setViewProvidersOverride":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"MockDirectiveResolver":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector"}]}],"_clearCacheFor":[{"__symbolic":"method"}],"resolve":[{"__symbolic":"method"}],"setDirective":[{"__symbolic":"method"}],"setProvidersOverride":[{"__symbolic":"method"}],"setViewProvidersOverride":[{"__symbolic":"method"}],"setView":[{"__symbolic":"method"}],"setInlineTemplate":[{"__symbolic":"method"}],"setAnimations":[{"__symbolic":"method"}],"overrideViewDirective":[{"__symbolic":"method"}]}}}}

@@ -8,3 +8,3 @@ /**

*/
import { SecurityContext } from '../core_private';
import { SchemaMetadata, SecurityContext } from '@angular/core';
import { ElementSchemaRegistry } from '../index';

@@ -23,5 +23,6 @@ export declare class MockSchemaRegistry implements ElementSchemaRegistry {

});
hasProperty(tagName: string, property: string): boolean;
hasProperty(tagName: string, property: string, schemas: SchemaMetadata[]): boolean;
securityContext(tagName: string, property: string): SecurityContext;
getMappedPropName(attrName: string): string;
getDefaultComponentElementName(): string;
}

@@ -8,3 +8,3 @@ /**

*/
import { SecurityContext } from '../core_private';
import { SecurityContext } from '@angular/core';
import { isPresent } from '../src/facade/lang';

@@ -16,3 +16,3 @@ export class MockSchemaRegistry {

}
hasProperty(tagName, property) {
hasProperty(tagName, property, schemas) {
var result = this.existingProperties[property];

@@ -28,3 +28,4 @@ return isPresent(result) ? result : true;

}
getDefaultComponentElementName() { return 'ng-component'; }
}
//# sourceMappingURL=schema_registry_mock.js.map

@@ -12,24 +12,7 @@ /**

/**
* @deprecated Import TestComponentRenderer from @angular/core/testing
*/
export { TestComponentRenderer } from '@angular/core/testing';
/**
* @deprecated Import TestComponentBuilder from @angular/core/testing
*/
export { TestComponentBuilder } from '@angular/core/testing';
/**
* @deprecated Import ComponentFixture from @angular/core/testing
*/
export { ComponentFixture } from '@angular/core/testing';
/**
* @deprecated Import ComponentFixtureNoNgZone from @angular/core/testing
*/
export { ComponentFixtureNoNgZone } from '@angular/core/testing';
/**
* @deprecated Import ComponentFixtureAutoDetect from @angular/core/testing
*/
export { ComponentFixtureAutoDetect } from '@angular/core/testing';
/**
* A TestComponentBuilder that allows overriding based on the compiler.
*/
*
* @deprecated Use `TestBed.configureTestModule` / `TestBed.override...` / `TestBed.createComponent`
* instead.
*/
export declare class OverridingTestComponentBuilder extends TestComponentBuilder {

@@ -36,0 +19,0 @@ constructor(injector: Injector);

@@ -8,27 +8,7 @@ /**

*/
import { Injectable, Injector } from '@angular/core';
import { TestComponentBuilder } from '@angular/core/testing';
import { DirectiveResolver, ViewResolver } from '../index';
import { Inject, Injectable, Injector } from '@angular/core';
import { TestBed, TestComponentBuilder } from '@angular/core/testing';
import { DirectiveResolver } from '../index';
import { MapWrapper } from '../src/facade/collection';
import { isPresent } from '../src/facade/lang';
/**
* @deprecated Import TestComponentRenderer from @angular/core/testing
*/
export { TestComponentRenderer } from '@angular/core/testing';
/**
* @deprecated Import TestComponentBuilder from @angular/core/testing
*/
export { TestComponentBuilder } from '@angular/core/testing';
/**
* @deprecated Import ComponentFixture from @angular/core/testing
*/
export { ComponentFixture } from '@angular/core/testing';
/**
* @deprecated Import ComponentFixtureNoNgZone from @angular/core/testing
*/
export { ComponentFixtureNoNgZone } from '@angular/core/testing';
/**
* @deprecated Import ComponentFixtureAutoDetect from @angular/core/testing
*/
export { ComponentFixtureAutoDetect } from '@angular/core/testing';
export class OverridingTestComponentBuilder extends TestComponentBuilder {

@@ -105,8 +85,7 @@ constructor(injector) {

let mockDirectiveResolver = this._injector.get(DirectiveResolver);
let mockViewResolver = this._injector.get(ViewResolver);
this._viewOverrides.forEach((view, type) => { mockViewResolver.setView(type, view); });
this._templateOverrides.forEach((template, type) => mockViewResolver.setInlineTemplate(type, template));
this._animationOverrides.forEach((animationsEntry, type) => mockViewResolver.setAnimations(type, animationsEntry));
this._viewOverrides.forEach((view, type) => { mockDirectiveResolver.setView(type, view); });
this._templateOverrides.forEach((template, type) => mockDirectiveResolver.setInlineTemplate(type, template));
this._animationOverrides.forEach((animationsEntry, type) => mockDirectiveResolver.setAnimations(type, animationsEntry));
this._directiveOverrides.forEach((overrides, component) => {
overrides.forEach((to, from) => { mockViewResolver.overrideViewDirective(component, from, to); });
overrides.forEach((to, from) => { mockDirectiveResolver.overrideViewDirective(component, from, to); });
});

@@ -123,4 +102,4 @@ this._bindingsOverrides.forEach((bindings, type) => mockDirectiveResolver.setProvidersOverride(type, bindings));

OverridingTestComponentBuilder.ctorParameters = [
{ type: Injector, },
{ type: Injector, decorators: [{ type: Inject, args: [TestBed,] },] },
];
//# sourceMappingURL=test_component_builder.js.map

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"OverridingTestComponentBuilder":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector"}]}],"_clone":[{"__symbolic":"method"}],"overrideTemplate":[{"__symbolic":"method"}],"overrideAnimations":[{"__symbolic":"method"}],"overrideView":[{"__symbolic":"method"}],"overrideDirective":[{"__symbolic":"method"}],"overrideProviders":[{"__symbolic":"method"}],"overrideViewProviders":[{"__symbolic":"method"}],"createAsync":[{"__symbolic":"method"}],"createSync":[{"__symbolic":"method"}],"_applyMetadataOverrides":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"OverridingTestComponentBuilder":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject"},"arguments":[{"__symbolic":"reference","module":"@angular/core/testing","name":"TestBed"}]}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector"}]}],"_clone":[{"__symbolic":"method"}],"overrideTemplate":[{"__symbolic":"method"}],"overrideAnimations":[{"__symbolic":"method"}],"overrideView":[{"__symbolic":"method"}],"overrideDirective":[{"__symbolic":"method"}],"overrideProviders":[{"__symbolic":"method"}],"overrideViewProviders":[{"__symbolic":"method"}],"createAsync":[{"__symbolic":"method"}],"createSync":[{"__symbolic":"method"}],"_applyMetadataOverrides":[{"__symbolic":"method"}]}}}}

@@ -8,2 +8,13 @@ /**

*/
export * from './compiler';
/**
* @module
* @description
* Starting point to import all compiler APIs.
*/
import * as i18n from './src/i18n/index';
export { COMPILER_PROVIDERS, CompileDiDependencyMetadata, CompileDirectiveMetadata, CompileFactoryMetadata, CompileIdentifierMetadata, CompileMetadataWithIdentifier, CompilePipeMetadata, CompileProviderMetadata, CompileQueryMetadata, CompileTemplateMetadata, CompileTokenMetadata, CompileTypeMetadata, CompilerConfig, DEFAULT_PACKAGE_URL_PROVIDER, DirectiveResolver, NgModuleResolver, OfflineCompiler, PipeResolver, RenderTypes, RuntimeCompiler, SourceModule, TEMPLATE_TRANSFORMS, UrlResolver, XHR, analyzeAppProvidersForDeprecatedConfiguration, createOfflineCompileUrlResolver, platformCoreDynamic } from './src/compiler';
export { InterpolationConfig } from './src/ml_parser/interpolation_config';
export { ElementSchemaRegistry } from './src/schema/element_schema_registry';
export { i18n };
export * from './src/template_parser/template_ast';
export * from './private_export';

@@ -12,3 +12,43 @@ /**

}
__export(require('./compiler'));
/**
* @module
* @description
* Starting point to import all compiler APIs.
*/
var i18n = require('./src/i18n/index');
exports.i18n = i18n;
var compiler_1 = require('./src/compiler');
exports.COMPILER_PROVIDERS = compiler_1.COMPILER_PROVIDERS;
exports.CompileDiDependencyMetadata = compiler_1.CompileDiDependencyMetadata;
exports.CompileDirectiveMetadata = compiler_1.CompileDirectiveMetadata;
exports.CompileFactoryMetadata = compiler_1.CompileFactoryMetadata;
exports.CompileIdentifierMetadata = compiler_1.CompileIdentifierMetadata;
exports.CompileMetadataWithIdentifier = compiler_1.CompileMetadataWithIdentifier;
exports.CompilePipeMetadata = compiler_1.CompilePipeMetadata;
exports.CompileProviderMetadata = compiler_1.CompileProviderMetadata;
exports.CompileQueryMetadata = compiler_1.CompileQueryMetadata;
exports.CompileTemplateMetadata = compiler_1.CompileTemplateMetadata;
exports.CompileTokenMetadata = compiler_1.CompileTokenMetadata;
exports.CompileTypeMetadata = compiler_1.CompileTypeMetadata;
exports.CompilerConfig = compiler_1.CompilerConfig;
exports.DEFAULT_PACKAGE_URL_PROVIDER = compiler_1.DEFAULT_PACKAGE_URL_PROVIDER;
exports.DirectiveResolver = compiler_1.DirectiveResolver;
exports.NgModuleResolver = compiler_1.NgModuleResolver;
exports.OfflineCompiler = compiler_1.OfflineCompiler;
exports.PipeResolver = compiler_1.PipeResolver;
exports.RenderTypes = compiler_1.RenderTypes;
exports.RuntimeCompiler = compiler_1.RuntimeCompiler;
exports.SourceModule = compiler_1.SourceModule;
exports.TEMPLATE_TRANSFORMS = compiler_1.TEMPLATE_TRANSFORMS;
exports.UrlResolver = compiler_1.UrlResolver;
exports.XHR = compiler_1.XHR;
exports.analyzeAppProvidersForDeprecatedConfiguration = compiler_1.analyzeAppProvidersForDeprecatedConfiguration;
exports.createOfflineCompileUrlResolver = compiler_1.createOfflineCompileUrlResolver;
exports.platformCoreDynamic = compiler_1.platformCoreDynamic;
var interpolation_config_1 = require('./src/ml_parser/interpolation_config');
exports.InterpolationConfig = interpolation_config_1.InterpolationConfig;
var element_schema_registry_1 = require('./src/schema/element_schema_registry');
exports.ElementSchemaRegistry = element_schema_registry_1.ElementSchemaRegistry;
__export(require('./src/template_parser/template_ast'));
__export(require('./private_export'));
//# sourceMappingURL=index.js.map
{
"name": "@angular/compiler",
"version": "2.0.0-rc.4",
"version": "2.0.0-rc.5",
"description": "",

@@ -11,3 +11,3 @@ "main": "index.js",

"peerDependencies": {
"@angular/core": "^2.0.0-rc.4"
"@angular/core": "^2.0.0-rc.5"
},

@@ -14,0 +14,0 @@ "repository": {

@@ -11,8 +11,6 @@ /**

import * as parser from './src/expression_parser/parser';
import * as html_parser from './src/html_parser';
import * as i18n_html_parser from './src/i18n/i18n_html_parser';
import * as i18n_message from './src/i18n/message';
import * as i18n_extractor from './src/i18n/message_extractor';
import * as xmb_serializer from './src/i18n/xmb_serializer';
import * as metadata_resolver from './src/metadata_resolver';
import * as html_parser from './src/ml_parser/html_parser';
import * as interpolation_config from './src/ml_parser/interpolation_config';
import * as ng_module_compiler from './src/ng_module_compiler';
import * as path_util from './src/output/path_util';

@@ -24,3 +22,3 @@ import * as ts_emitter from './src/output/ts_emitter';

import * as style_compiler from './src/style_compiler';
import * as template_parser from './src/template_parser';
import * as template_parser from './src/template_parser/template_parser';
import * as view_compiler from './src/view_compiler/view_compiler';

@@ -40,13 +38,4 @@ export declare namespace __compiler_private__ {

var HtmlParser: typeof html_parser.HtmlParser;
type I18nHtmlParser = i18n_html_parser.I18nHtmlParser;
var I18nHtmlParser: typeof i18n_html_parser.I18nHtmlParser;
type ExtractionResult = i18n_extractor.ExtractionResult;
var ExtractionResult: typeof i18n_extractor.ExtractionResult;
type Message = i18n_message.Message;
var Message: typeof i18n_message.Message;
type MessageExtractor = i18n_extractor.MessageExtractor;
var MessageExtractor: typeof i18n_extractor.MessageExtractor;
var removeDuplicates: typeof i18n_extractor.removeDuplicates;
var serializeXmb: typeof xmb_serializer.serializeXmb;
var deserializeXmb: typeof xmb_serializer.deserializeXmb;
type InterpolationConfig = interpolation_config.InterpolationConfig;
var InterpolationConfig: typeof interpolation_config.InterpolationConfig;
type DirectiveNormalizer = directive_normalizer.DirectiveNormalizer;

@@ -77,4 +66,6 @@ var DirectiveNormalizer: typeof directive_normalizer.DirectiveNormalizer;

var ViewCompiler: typeof view_compiler.ViewCompiler;
type NgModuleCompiler = ng_module_compiler.NgModuleCompiler;
var NgModuleCompiler: typeof ng_module_compiler.NgModuleCompiler;
type TypeScriptEmitter = ts_emitter.TypeScriptEmitter;
var TypeScriptEmitter: typeof ts_emitter.TypeScriptEmitter;
}

@@ -12,8 +12,6 @@ /**

var parser = require('./src/expression_parser/parser');
var html_parser = require('./src/html_parser');
var i18n_html_parser = require('./src/i18n/i18n_html_parser');
var i18n_message = require('./src/i18n/message');
var i18n_extractor = require('./src/i18n/message_extractor');
var xmb_serializer = require('./src/i18n/xmb_serializer');
var metadata_resolver = require('./src/metadata_resolver');
var html_parser = require('./src/ml_parser/html_parser');
var interpolation_config = require('./src/ml_parser/interpolation_config');
var ng_module_compiler = require('./src/ng_module_compiler');
var path_util = require('./src/output/path_util');

@@ -25,3 +23,3 @@ var ts_emitter = require('./src/output/ts_emitter');

var style_compiler = require('./src/style_compiler');
var template_parser = require('./src/template_parser');
var template_parser = require('./src/template_parser/template_parser');
var view_compiler = require('./src/view_compiler/view_compiler');

@@ -36,9 +34,3 @@ var __compiler_private__;

__compiler_private__.HtmlParser = html_parser.HtmlParser;
__compiler_private__.I18nHtmlParser = i18n_html_parser.I18nHtmlParser;
__compiler_private__.ExtractionResult = i18n_extractor.ExtractionResult;
__compiler_private__.Message = i18n_message.Message;
__compiler_private__.MessageExtractor = i18n_extractor.MessageExtractor;
__compiler_private__.removeDuplicates = i18n_extractor.removeDuplicates;
__compiler_private__.serializeXmb = xmb_serializer.serializeXmb;
__compiler_private__.deserializeXmb = xmb_serializer.deserializeXmb;
__compiler_private__.InterpolationConfig = interpolation_config.InterpolationConfig;
__compiler_private__.DirectiveNormalizer = directive_normalizer.DirectiveNormalizer;

@@ -56,4 +48,5 @@ __compiler_private__.Lexer = lexer.Lexer;

__compiler_private__.ViewCompiler = view_compiler.ViewCompiler;
__compiler_private__.NgModuleCompiler = ng_module_compiler.NgModuleCompiler;
__compiler_private__.TypeScriptEmitter = ts_emitter.TypeScriptEmitter;
})(__compiler_private__ = exports.__compiler_private__ || (exports.__compiler_private__ = {}));
//# sourceMappingURL=private_export.js.map
import { CompileDirectiveMetadata } from '../compile_metadata';
import * as o from '../output/output_ast';
import * as t from '../template_parser/template_ast';
export declare class CompiledAnimation {

@@ -12,3 +13,3 @@ name: string;

export declare class AnimationCompiler {
compileComponent(component: CompileDirectiveMetadata): CompiledAnimation[];
compileComponent(component: CompileDirectiveMetadata, template: t.TemplateAst[]): CompiledAnimation[];
}

@@ -15,2 +15,3 @@ /**

var o = require('../output/output_ast');
var t = require('../template_parser/template_ast');
var animation_ast_1 = require('./animation_ast');

@@ -32,19 +33,34 @@ var animation_parser_1 = require('./animation_parser');

}
AnimationCompiler.prototype.compileComponent = function (component) {
AnimationCompiler.prototype.compileComponent = function (component, template) {
var compiledAnimations = [];
var index = 0;
var groupedErrors = [];
var triggerLookup = {};
var componentName = component.type.name;
component.template.animations.forEach(function (entry) {
var result = animation_parser_1.parseAnimationEntry(entry);
var triggerName = entry.name;
if (result.errors.length > 0) {
var errorMessage = '';
result.errors.forEach(function (error) { errorMessage += '\n- ' + error.msg; });
// todo (matsko): include the component name when throwing
throw new exceptions_1.BaseException(("Unable to parse the animation sequence for \"" + entry.name + "\" due to the following errors: ") +
errorMessage);
var errorMessage = "Unable to parse the animation sequence for \"" + triggerName + "\" due to the following errors:";
result.errors.forEach(function (error) { errorMessage += '\n-- ' + error.msg; });
groupedErrors.push(errorMessage);
}
var factoryName = component.type.name + "_" + entry.name + "_" + index;
index++;
var visitor = new _AnimationBuilder(entry.name, factoryName);
compiledAnimations.push(visitor.build(result.ast));
if (triggerLookup[triggerName]) {
groupedErrors.push("The animation trigger \"" + triggerName + "\" has already been registered on \"" + componentName + "\"");
}
else {
var factoryName = componentName + "_" + entry.name;
var visitor = new _AnimationBuilder(triggerName, factoryName);
var compileResult = visitor.build(result.ast);
compiledAnimations.push(compileResult);
triggerLookup[entry.name] = compileResult;
}
});
_validateAnimationProperties(compiledAnimations, template).forEach(function (entry) {
groupedErrors.push(entry.msg);
});
if (groupedErrors.length > 0) {
var errorMessageStr = "Animation parsing for " + component.type.name + " has failed due to the following errors:";
groupedErrors.forEach(function (error) { return errorMessageStr += "\n- " + error; });
throw new exceptions_1.BaseException(errorMessageStr);
}
return compiledAnimations;

@@ -212,3 +228,3 @@ };

statements.push(_ANIMATION_FACTORY_VIEW_VAR
.callMethod('registerAndStartAnimation', [
.callMethod('queueAnimation', [
_ANIMATION_FACTORY_ELEMENT_VAR, o.literal(this.animationName),

@@ -296,2 +312,39 @@ _ANIMATION_PLAYER_VAR

}
function _validateAnimationProperties(compiledAnimations, template) {
var visitor = new _AnimationTemplatePropertyVisitor(compiledAnimations);
t.templateVisitAll(visitor, template);
return visitor.errors;
}
var _AnimationTemplatePropertyVisitor = (function () {
function _AnimationTemplatePropertyVisitor(animations) {
var _this = this;
this._animationRegistry = {};
this.errors = [];
animations.forEach(function (entry) { _this._animationRegistry[entry.name] = true; });
}
_AnimationTemplatePropertyVisitor.prototype.visitElement = function (ast, ctx) {
var _this = this;
ast.inputs.forEach(function (input) {
if (input.type == t.PropertyBindingType.Animation) {
var animationName = input.name;
if (!lang_1.isPresent(_this._animationRegistry[animationName])) {
_this.errors.push(new animation_parser_1.AnimationParseError("couldn't find an animation entry for " + animationName));
}
}
});
t.templateVisitAll(this, ast.children);
};
_AnimationTemplatePropertyVisitor.prototype.visitBoundText = function (ast, ctx) { };
_AnimationTemplatePropertyVisitor.prototype.visitText = function (ast, ctx) { };
_AnimationTemplatePropertyVisitor.prototype.visitEmbeddedTemplate = function (ast, ctx) { };
_AnimationTemplatePropertyVisitor.prototype.visitNgContent = function (ast, ctx) { };
_AnimationTemplatePropertyVisitor.prototype.visitAttr = function (ast, ctx) { };
_AnimationTemplatePropertyVisitor.prototype.visitDirective = function (ast, ctx) { };
_AnimationTemplatePropertyVisitor.prototype.visitEvent = function (ast, ctx) { };
_AnimationTemplatePropertyVisitor.prototype.visitReference = function (ast, ctx) { };
_AnimationTemplatePropertyVisitor.prototype.visitVariable = function (ast, ctx) { };
_AnimationTemplatePropertyVisitor.prototype.visitDirectiveProperty = function (ast, ctx) { };
_AnimationTemplatePropertyVisitor.prototype.visitElementProperty = function (ast, ctx) { };
return _AnimationTemplatePropertyVisitor;
}());
//# sourceMappingURL=animation_compiler.js.map

@@ -284,3 +284,3 @@ /**

var firstKeyframeStyles = firstKeyframe[1];
var limit = rawKeyframes.length - 1;
limit = rawKeyframes.length - 1;
var lastKeyframe = rawKeyframes[limit];

@@ -413,3 +413,3 @@ if (lastKeyframe[0] != _TERMINAL_KEYFRAME) {

function _parseTimeExpression(exp, errors) {
var regex = /^([\.\d]+)(m?s)(?:\s+([\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?/gi;
var regex = /^([\.\d]+)(m?s)(?:\s+([\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?/i;
var duration;

@@ -419,4 +419,4 @@ var delay = 0;

if (lang_1.isString(exp)) {
var matches = lang_1.RegExpWrapper.firstMatch(regex, exp);
if (!lang_1.isPresent(matches)) {
var matches = exp.match(regex);
if (matches === null) {
errors.push(new AnimationParseError("The provided timing value \"" + exp + "\" is invalid."));

@@ -423,0 +423,0 @@ return new _AnimationTimings(0, 0, null);

@@ -10,3 +10,2 @@ /**

var core_1 = require('@angular/core');
var exceptions_1 = require('../src/facade/exceptions');
var lang_1 = require('../src/facade/lang');

@@ -18,7 +17,7 @@ function assertArrayOfStrings(identifier, value) {

if (!lang_1.isArray(value)) {
throw new exceptions_1.BaseException("Expected '" + identifier + "' to be an array of strings.");
throw new Error("Expected '" + identifier + "' to be an array of strings.");
}
for (var i = 0; i < value.length; i += 1) {
if (!lang_1.isString(value[i])) {
throw new exceptions_1.BaseException("Expected '" + identifier + "' to be an array of strings.");
throw new Error("Expected '" + identifier + "' to be an array of strings.");
}

@@ -33,6 +32,7 @@ }

/&(#|[a-z])/i,
/^\/\//,
];
function assertInterpolationSymbols(identifier, value) {
if (core_1.isDevMode() && !lang_1.isBlank(value) && (!lang_1.isArray(value) || value.length != 2)) {
throw new exceptions_1.BaseException("Expected '" + identifier + "' to be an array, [start, end].");
if (lang_1.isPresent(value) && !(lang_1.isArray(value) && value.length == 2)) {
throw new Error("Expected '" + identifier + "' to be an array, [start, end].");
}

@@ -45,3 +45,3 @@ else if (core_1.isDevMode() && !lang_1.isBlank(value)) {

if (regexp.test(start_1) || regexp.test(end_1)) {
throw new exceptions_1.BaseException("['" + start_1 + "', '" + end_1 + "'] contains unusable interpolation symbol.");
throw new Error("['" + start_1 + "', '" + end_1 + "'] contains unusable interpolation symbol.");
}

@@ -48,0 +48,0 @@ });

@@ -8,31 +8,15 @@ /**

*/
import { ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';
import { ChangeDetectionStrategy, SchemaMetadata, ViewEncapsulation } from '@angular/core';
import { LifecycleHooks } from '../core_private';
import { Type } from '../src/facade/lang';
import { Type } from './facade/lang';
export declare abstract class CompileMetadataWithIdentifier {
abstract toJson(): {
[key: string]: any;
};
identifier: CompileIdentifierMetadata;
runtimeCacheKey: any;
assetCacheKey: any;
equalsTo(id2: CompileMetadataWithIdentifier): boolean;
}
export declare abstract class CompileMetadataWithType extends CompileMetadataWithIdentifier {
abstract toJson(): {
[key: string]: any;
};
type: CompileTypeMetadata;
identifier: CompileIdentifierMetadata;
}
export declare function metadataFromJson(data: {
[key: string]: any;
}): any;
export declare class CompileAnimationEntryMetadata {
name: string;
definitions: CompileAnimationStateMetadata[];
static fromJson(data: {
[key: string]: any;
}): CompileAnimationEntryMetadata;
constructor(name?: string, definitions?: CompileAnimationStateMetadata[]);
toJson(): {
[key: string]: any;
};
}

@@ -44,9 +28,3 @@ export declare abstract class CompileAnimationStateMetadata {

styles: CompileAnimationStyleMetadata;
static fromJson(data: {
[key: string]: any;
}): CompileAnimationStateDeclarationMetadata;
constructor(stateNameExpr: string, styles: CompileAnimationStyleMetadata);
toJson(): {
[key: string]: any;
};
}

@@ -56,24 +34,9 @@ export declare class CompileAnimationStateTransitionMetadata extends CompileAnimationStateMetadata {

steps: CompileAnimationMetadata;
static fromJson(data: {
[key: string]: any;
}): CompileAnimationStateTransitionMetadata;
constructor(stateChangeExpr: string, steps: CompileAnimationMetadata);
toJson(): {
[key: string]: any;
};
}
export declare abstract class CompileAnimationMetadata {
abstract toJson(): {
[key: string]: any;
};
}
export declare class CompileAnimationKeyframesSequenceMetadata extends CompileAnimationMetadata {
steps: CompileAnimationStyleMetadata[];
static fromJson(data: {
[key: string]: any;
}): CompileAnimationKeyframesSequenceMetadata;
constructor(steps?: CompileAnimationStyleMetadata[]);
toJson(): {
[key: string]: any;
};
}

@@ -85,11 +48,5 @@ export declare class CompileAnimationStyleMetadata extends CompileAnimationMetadata {

}>;
static fromJson(data: {
[key: string]: any;
}): CompileAnimationStyleMetadata;
constructor(offset: number, styles?: Array<string | {
[key: string]: string | number;
}>);
toJson(): {
[key: string]: any;
};
}

@@ -99,9 +56,3 @@ export declare class CompileAnimationAnimateMetadata extends CompileAnimationMetadata {

styles: CompileAnimationStyleMetadata | CompileAnimationKeyframesSequenceMetadata;
static fromJson(data: {
[key: string]: any;
}): CompileAnimationAnimateMetadata;
constructor(timings?: string | number, styles?: CompileAnimationStyleMetadata | CompileAnimationKeyframesSequenceMetadata);
toJson(): {
[key: string]: any;
};
}

@@ -113,18 +64,6 @@ export declare abstract class CompileAnimationWithStepsMetadata extends CompileAnimationMetadata {

export declare class CompileAnimationSequenceMetadata extends CompileAnimationWithStepsMetadata {
static fromJson(data: {
[key: string]: any;
}): CompileAnimationSequenceMetadata;
constructor(steps?: CompileAnimationMetadata[]);
toJson(): {
[key: string]: any;
};
}
export declare class CompileAnimationGroupMetadata extends CompileAnimationWithStepsMetadata {
static fromJson(data: {
[key: string]: any;
}): CompileAnimationGroupMetadata;
constructor(steps?: CompileAnimationMetadata[]);
toJson(): {
[key: string]: any;
};
}

@@ -137,2 +76,3 @@ export declare class CompileIdentifierMetadata implements CompileMetadataWithIdentifier {

value: any;
private _assetCacheKey;
constructor({runtime, name, moduleUrl, prefix, value}?: {

@@ -145,9 +85,6 @@ runtime?: any;

});
static fromJson(data: {
[key: string]: any;
}): CompileIdentifierMetadata;
toJson(): {
[key: string]: any;
};
identifier: CompileIdentifierMetadata;
runtimeCacheKey: any;
assetCacheKey: any;
equalsTo(id2: CompileIdentifierMetadata): boolean;
}

@@ -177,8 +114,2 @@ export declare class CompileDiDependencyMetadata {

});
static fromJson(data: {
[key: string]: any;
}): CompileDiDependencyMetadata;
toJson(): {
[key: string]: any;
};
}

@@ -202,15 +133,4 @@ export declare class CompileProviderMetadata {

});
static fromJson(data: {
[key: string]: any;
}): CompileProviderMetadata;
toJson(): {
[key: string]: any;
};
}
export declare class CompileFactoryMetadata implements CompileIdentifierMetadata, CompileMetadataWithIdentifier {
runtime: Function;
name: string;
prefix: string;
moduleUrl: string;
value: any;
export declare class CompileFactoryMetadata extends CompileIdentifierMetadata {
diDeps: CompileDiDependencyMetadata[];

@@ -225,9 +145,2 @@ constructor({runtime, name, moduleUrl, prefix, diDeps, value}: {

});
identifier: CompileIdentifierMetadata;
static fromJson(data: {
[key: string]: any;
}): CompileFactoryMetadata;
toJson(): {
[key: string]: any;
};
}

@@ -238,3 +151,2 @@ export declare class CompileTokenMetadata implements CompileMetadataWithIdentifier {

identifierIsInstance: boolean;
private _assetCacheKey;
constructor({value, identifier, identifierIsInstance}: {

@@ -245,8 +157,2 @@ value?: any;

});
static fromJson(data: {
[key: string]: any;
}): CompileTokenMetadata;
toJson(): {
[key: string]: any;
};
runtimeCacheKey: any;

@@ -257,7 +163,17 @@ assetCacheKey: any;

}
export declare class CompileTokenMap<VALUE> {
/**
* Note: We only need this in places where we need to support identifiers that
* don't have a `runtime` value given by the `StaticReflector`. E.g. see the `identifiers`
* file where we have some identifiers hard coded by name/module path.
*
* TODO(tbosch): Eventually, all of these places should go through the static reflector
* as well, providing them with a valid `StaticSymbol` that is again a singleton.
*/
export declare class CompileIdentifierMap<KEY extends CompileMetadataWithIdentifier, VALUE> {
private _valueMap;
private _values;
add(token: CompileTokenMetadata, value: VALUE): void;
get(token: CompileTokenMetadata): VALUE;
private _tokens;
add(token: KEY, value: VALUE): void;
get(token: KEY): VALUE;
keys(): KEY[];
values(): VALUE[];

@@ -269,11 +185,7 @@ size: number;

*/
export declare class CompileTypeMetadata implements CompileIdentifierMetadata, CompileMetadataWithType {
runtime: Type;
name: string;
prefix: string;
moduleUrl: string;
export declare class CompileTypeMetadata extends CompileIdentifierMetadata {
isHost: boolean;
value: any;
diDeps: CompileDiDependencyMetadata[];
constructor({runtime, name, moduleUrl, prefix, isHost, value, diDeps}?: {
lifecycleHooks: LifecycleHooks[];
constructor({runtime, name, moduleUrl, prefix, isHost, value, diDeps, lifecycleHooks}?: {
runtime?: Type;

@@ -286,11 +198,4 @@ name?: string;

diDeps?: CompileDiDependencyMetadata[];
lifecycleHooks?: LifecycleHooks[];
});
static fromJson(data: {
[key: string]: any;
}): CompileTypeMetadata;
identifier: CompileIdentifierMetadata;
type: CompileTypeMetadata;
toJson(): {
[key: string]: any;
};
}

@@ -310,8 +215,2 @@ export declare class CompileQueryMetadata {

});
static fromJson(data: {
[key: string]: any;
}): CompileQueryMetadata;
toJson(): {
[key: string]: any;
};
}

@@ -330,8 +229,2 @@ /**

});
static fromJson(data: {
[key: string]: any;
}): CompileStylesheetMetadata;
toJson(): {
[key: string]: any;
};
}

@@ -362,8 +255,2 @@ /**

});
static fromJson(data: {
[key: string]: any;
}): CompileTemplateMetadata;
toJson(): {
[key: string]: any;
};
}

@@ -373,4 +260,4 @@ /**

*/
export declare class CompileDirectiveMetadata implements CompileMetadataWithType {
static create({type, isComponent, selector, exportAs, changeDetection, inputs, outputs, host, lifecycleHooks, providers, viewProviders, queries, viewQueries, precompile, template}?: {
export declare class CompileDirectiveMetadata implements CompileMetadataWithIdentifier {
static create({type, isComponent, selector, exportAs, changeDetection, inputs, outputs, host, providers, viewProviders, queries, viewQueries, entryComponents, viewDirectives, viewPipes, template}?: {
type?: CompileTypeMetadata;

@@ -386,3 +273,2 @@ isComponent?: boolean;

};
lifecycleHooks?: LifecycleHooks[];
providers?: Array<CompileProviderMetadata | CompileTypeMetadata | CompileIdentifierMetadata | any[]>;

@@ -392,3 +278,5 @@ viewProviders?: Array<CompileProviderMetadata | CompileTypeMetadata | CompileIdentifierMetadata | any[]>;

viewQueries?: CompileQueryMetadata[];
precompile?: CompileTypeMetadata[];
entryComponents?: CompileTypeMetadata[];
viewDirectives?: CompileTypeMetadata[];
viewPipes?: CompileTypeMetadata[];
template?: CompileTemplateMetadata;

@@ -416,3 +304,2 @@ }): CompileDirectiveMetadata;

};
lifecycleHooks: LifecycleHooks[];
providers: CompileProviderMetadata[];

@@ -422,5 +309,7 @@ viewProviders: CompileProviderMetadata[];

viewQueries: CompileQueryMetadata[];
precompile: CompileTypeMetadata[];
entryComponents: CompileTypeMetadata[];
viewDirectives: CompileTypeMetadata[];
viewPipes: CompileTypeMetadata[];
template: CompileTemplateMetadata;
constructor({type, isComponent, selector, exportAs, changeDetection, inputs, outputs, hostListeners, hostProperties, hostAttributes, lifecycleHooks, providers, viewProviders, queries, viewQueries, precompile, template}?: {
constructor({type, isComponent, selector, exportAs, changeDetection, inputs, outputs, hostListeners, hostProperties, hostAttributes, providers, viewProviders, queries, viewQueries, entryComponents, viewDirectives, viewPipes, template}?: {
type?: CompileTypeMetadata;

@@ -446,3 +335,2 @@ isComponent?: boolean;

};
lifecycleHooks?: LifecycleHooks[];
providers?: Array<CompileProviderMetadata | CompileTypeMetadata | CompileIdentifierMetadata | any[]>;

@@ -452,12 +340,11 @@ viewProviders?: Array<CompileProviderMetadata | CompileTypeMetadata | CompileIdentifierMetadata | any[]>;

viewQueries?: CompileQueryMetadata[];
precompile?: CompileTypeMetadata[];
entryComponents?: CompileTypeMetadata[];
viewDirectives?: CompileTypeMetadata[];
viewPipes?: CompileTypeMetadata[];
template?: CompileTemplateMetadata;
});
identifier: CompileIdentifierMetadata;
static fromJson(data: {
[key: string]: any;
}): CompileDirectiveMetadata;
toJson(): {
[key: string]: any;
};
runtimeCacheKey: any;
assetCacheKey: any;
equalsTo(other: CompileMetadataWithIdentifier): boolean;
}

@@ -467,21 +354,67 @@ /**

*/
export declare function createHostComponentMeta(componentType: CompileTypeMetadata, componentSelector: string): CompileDirectiveMetadata;
export declare class CompilePipeMetadata implements CompileMetadataWithType {
export declare function createHostComponentMeta(compMeta: CompileDirectiveMetadata): CompileDirectiveMetadata;
export declare class CompilePipeMetadata implements CompileMetadataWithIdentifier {
type: CompileTypeMetadata;
name: string;
pure: boolean;
lifecycleHooks: LifecycleHooks[];
constructor({type, name, pure, lifecycleHooks}?: {
constructor({type, name, pure}?: {
type?: CompileTypeMetadata;
name?: string;
pure?: boolean;
lifecycleHooks?: LifecycleHooks[];
});
identifier: CompileIdentifierMetadata;
static fromJson(data: {
[key: string]: any;
}): CompilePipeMetadata;
toJson(): {
[key: string]: any;
};
runtimeCacheKey: any;
assetCacheKey: any;
equalsTo(other: CompileMetadataWithIdentifier): boolean;
}
/**
* Metadata regarding compilation of a directive.
*/
export declare class CompileNgModuleMetadata implements CompileMetadataWithIdentifier {
type: CompileTypeMetadata;
declaredDirectives: CompileDirectiveMetadata[];
exportedDirectives: CompileDirectiveMetadata[];
declaredPipes: CompilePipeMetadata[];
exportedPipes: CompilePipeMetadata[];
entryComponents: CompileTypeMetadata[];
bootstrapComponents: CompileTypeMetadata[];
providers: CompileProviderMetadata[];
importedModules: CompileNgModuleMetadata[];
exportedModules: CompileNgModuleMetadata[];
schemas: SchemaMetadata[];
transitiveModule: TransitiveCompileNgModuleMetadata;
constructor({type, providers, declaredDirectives, exportedDirectives, declaredPipes, exportedPipes, entryComponents, bootstrapComponents, importedModules, exportedModules, schemas, transitiveModule}?: {
type?: CompileTypeMetadata;
providers?: Array<CompileProviderMetadata | CompileTypeMetadata | CompileIdentifierMetadata | any[]>;
declaredDirectives?: CompileDirectiveMetadata[];
exportedDirectives?: CompileDirectiveMetadata[];
declaredPipes?: CompilePipeMetadata[];
exportedPipes?: CompilePipeMetadata[];
entryComponents?: CompileTypeMetadata[];
bootstrapComponents?: CompileTypeMetadata[];
importedModules?: CompileNgModuleMetadata[];
exportedModules?: CompileNgModuleMetadata[];
transitiveModule?: TransitiveCompileNgModuleMetadata;
schemas?: SchemaMetadata[];
});
identifier: CompileIdentifierMetadata;
runtimeCacheKey: any;
assetCacheKey: any;
equalsTo(other: CompileMetadataWithIdentifier): boolean;
}
export declare class TransitiveCompileNgModuleMetadata {
modules: CompileNgModuleMetadata[];
providers: CompileProviderMetadata[];
entryComponents: CompileTypeMetadata[];
directives: CompileDirectiveMetadata[];
pipes: CompilePipeMetadata[];
directivesSet: Set<Type>;
pipesSet: Set<Type>;
constructor(modules: CompileNgModuleMetadata[], providers: CompileProviderMetadata[], entryComponents: CompileTypeMetadata[], directives: CompileDirectiveMetadata[], pipes: CompilePipeMetadata[]);
}
export declare function removeIdentifierDuplicates<T extends CompileMetadataWithIdentifier>(items: T[]): T[];
export declare function isStaticSymbol(value: any): value is StaticSymbol;
export interface StaticSymbol {
name: string;
filePath: string;
}

@@ -16,10 +16,14 @@ /**

var core_private_1 = require('../core_private');
var collection_1 = require('../src/facade/collection');
var exceptions_1 = require('../src/facade/exceptions');
var lang_1 = require('../src/facade/lang');
var collection_1 = require('./facade/collection');
var exceptions_1 = require('./facade/exceptions');
var lang_1 = require('./facade/lang');
var selector_1 = require('./selector');
var url_resolver_1 = require('./url_resolver');
var util_1 = require('./util');
// group 0: "[prop] or (event) or @trigger"
// group 1: "prop" from "[prop]"
// group 2: "event" from "(event)"
var HOST_REG_EXP = /^(?:(?:\[([^\]]+)\])|(?:\(([^\)]+)\)))$/g;
// group 3: "@trigger" from "@trigger"
var HOST_REG_EXP = /^(?:(?:\[([^\]]+)\])|(?:\(([^\)]+)\)))|(\@[-\w]+)$/;
var UNDEFINED = new Object();
var CompileMetadataWithIdentifier = (function () {

@@ -33,11 +37,3 @@ function CompileMetadataWithIdentifier() {

});
return CompileMetadataWithIdentifier;
}());
exports.CompileMetadataWithIdentifier = CompileMetadataWithIdentifier;
var CompileMetadataWithType = (function (_super) {
__extends(CompileMetadataWithType, _super);
function CompileMetadataWithType() {
_super.apply(this, arguments);
}
Object.defineProperty(CompileMetadataWithType.prototype, "type", {
Object.defineProperty(CompileMetadataWithIdentifier.prototype, "runtimeCacheKey", {
get: function () { return exceptions_1.unimplemented(); },

@@ -47,3 +43,3 @@ enumerable: true,

});
Object.defineProperty(CompileMetadataWithType.prototype, "identifier", {
Object.defineProperty(CompileMetadataWithIdentifier.prototype, "assetCacheKey", {
get: function () { return exceptions_1.unimplemented(); },

@@ -53,9 +49,6 @@ enumerable: true,

});
return CompileMetadataWithType;
}(CompileMetadataWithIdentifier));
exports.CompileMetadataWithType = CompileMetadataWithType;
function metadataFromJson(data) {
return _COMPILE_METADATA_FROM_JSON[data['class']](data);
}
exports.metadataFromJson = metadataFromJson;
CompileMetadataWithIdentifier.prototype.equalsTo = function (id2) { return exceptions_1.unimplemented(); };
return CompileMetadataWithIdentifier;
}());
exports.CompileMetadataWithIdentifier = CompileMetadataWithIdentifier;
var CompileAnimationEntryMetadata = (function () {

@@ -68,13 +61,2 @@ function CompileAnimationEntryMetadata(name, definitions) {

}
CompileAnimationEntryMetadata.fromJson = function (data) {
var value = data['value'];
var defs = _arrayFromJson(value['definitions'], metadataFromJson);
return new CompileAnimationEntryMetadata(value['name'], defs);
};
CompileAnimationEntryMetadata.prototype.toJson = function () {
return {
'class': 'AnimationEntryMetadata',
'value': { 'name': this.name, 'definitions': _arrayToJson(this.definitions) }
};
};
return CompileAnimationEntryMetadata;

@@ -96,13 +78,2 @@ }());

}
CompileAnimationStateDeclarationMetadata.fromJson = function (data) {
var value = data['value'];
var styles = _objFromJson(value['styles'], metadataFromJson);
return new CompileAnimationStateDeclarationMetadata(value['stateNameExpr'], styles);
};
CompileAnimationStateDeclarationMetadata.prototype.toJson = function () {
return {
'class': 'AnimationStateDeclarationMetadata',
'value': { 'stateNameExpr': this.stateNameExpr, 'styles': this.styles.toJson() }
};
};
return CompileAnimationStateDeclarationMetadata;

@@ -118,13 +89,2 @@ }(CompileAnimationStateMetadata));

}
CompileAnimationStateTransitionMetadata.fromJson = function (data) {
var value = data['value'];
var steps = _objFromJson(value['steps'], metadataFromJson);
return new CompileAnimationStateTransitionMetadata(value['stateChangeExpr'], steps);
};
CompileAnimationStateTransitionMetadata.prototype.toJson = function () {
return {
'class': 'AnimationStateTransitionMetadata',
'value': { 'stateChangeExpr': this.stateChangeExpr, 'steps': this.steps.toJson() }
};
};
return CompileAnimationStateTransitionMetadata;

@@ -146,9 +106,2 @@ }(CompileAnimationStateMetadata));

}
CompileAnimationKeyframesSequenceMetadata.fromJson = function (data) {
var steps = _arrayFromJson(data['value'], metadataFromJson);
return new CompileAnimationKeyframesSequenceMetadata(steps);
};
CompileAnimationKeyframesSequenceMetadata.prototype.toJson = function () {
return { 'class': 'AnimationKeyframesSequenceMetadata', 'value': _arrayToJson(this.steps) };
};
return CompileAnimationKeyframesSequenceMetadata;

@@ -165,15 +118,2 @@ }(CompileAnimationMetadata));

}
CompileAnimationStyleMetadata.fromJson = function (data) {
var value = data['value'];
var offsetVal = value['offset'];
var offset = lang_1.isPresent(offsetVal) ? lang_1.NumberWrapper.parseFloat(offsetVal) : null;
var styles = value['styles'];
return new CompileAnimationStyleMetadata(offset, styles);
};
CompileAnimationStyleMetadata.prototype.toJson = function () {
return {
'class': 'AnimationStyleMetadata',
'value': { 'offset': this.offset, 'styles': this.styles }
};
};
return CompileAnimationStyleMetadata;

@@ -191,14 +131,2 @@ }(CompileAnimationMetadata));

}
CompileAnimationAnimateMetadata.fromJson = function (data) {
var value = data['value'];
var timings = value['timings'];
var styles = _objFromJson(value['styles'], metadataFromJson);
return new CompileAnimationAnimateMetadata(timings, styles);
};
CompileAnimationAnimateMetadata.prototype.toJson = function () {
return {
'class': 'AnimationAnimateMetadata',
'value': { 'timings': this.timings, 'styles': _objToJson(this.styles) }
};
};
return CompileAnimationAnimateMetadata;

@@ -223,9 +151,2 @@ }(CompileAnimationMetadata));

}
CompileAnimationSequenceMetadata.fromJson = function (data) {
var steps = _arrayFromJson(data['value'], metadataFromJson);
return new CompileAnimationSequenceMetadata(steps);
};
CompileAnimationSequenceMetadata.prototype.toJson = function () {
return { 'class': 'AnimationSequenceMetadata', 'value': _arrayToJson(this.steps) };
};
return CompileAnimationSequenceMetadata;

@@ -240,9 +161,2 @@ }(CompileAnimationWithStepsMetadata));

}
CompileAnimationGroupMetadata.fromJson = function (data) {
var steps = _arrayFromJson(data['value'], metadataFromJson);
return new CompileAnimationGroupMetadata(steps);
};
CompileAnimationGroupMetadata.prototype.toJson = function () {
return { 'class': 'AnimationGroupMetadata', 'value': _arrayToJson(this.steps) };
};
return CompileAnimationGroupMetadata;

@@ -254,2 +168,3 @@ }(CompileAnimationWithStepsMetadata));

var _b = _a === void 0 ? {} : _a, runtime = _b.runtime, name = _b.name, moduleUrl = _b.moduleUrl, prefix = _b.prefix, value = _b.value;
this._assetCacheKey = UNDEFINED;
this.runtime = runtime;

@@ -261,18 +176,2 @@ this.name = name;

}
CompileIdentifierMetadata.fromJson = function (data) {
var value = lang_1.isArray(data['value']) ? _arrayFromJson(data['value'], metadataFromJson) :
_objFromJson(data['value'], metadataFromJson);
return new CompileIdentifierMetadata({ name: data['name'], prefix: data['prefix'], moduleUrl: data['moduleUrl'], value: value });
};
CompileIdentifierMetadata.prototype.toJson = function () {
var value = lang_1.isArray(this.value) ? _arrayToJson(this.value) : _objToJson(this.value);
return {
// Note: Runtime type can't be serialized...
'class': 'Identifier',
'name': this.name,
'moduleUrl': this.moduleUrl,
'prefix': this.prefix,
'value': value
};
};
Object.defineProperty(CompileIdentifierMetadata.prototype, "identifier", {

@@ -283,2 +182,29 @@ get: function () { return this; },

});
Object.defineProperty(CompileIdentifierMetadata.prototype, "runtimeCacheKey", {
get: function () { return this.identifier.runtime; },
enumerable: true,
configurable: true
});
Object.defineProperty(CompileIdentifierMetadata.prototype, "assetCacheKey", {
get: function () {
if (this._assetCacheKey === UNDEFINED) {
if (lang_1.isPresent(this.moduleUrl) && lang_1.isPresent(url_resolver_1.getUrlScheme(this.moduleUrl))) {
var uri = core_private_1.reflector.importUri({ 'filePath': this.moduleUrl, 'name': this.name });
this._assetCacheKey = this.name + "|" + uri;
}
else {
this._assetCacheKey = null;
}
}
return this._assetCacheKey;
},
enumerable: true,
configurable: true
});
CompileIdentifierMetadata.prototype.equalsTo = function (id2) {
var rk = this.runtimeCacheKey;
var ak = this.assetCacheKey;
return (lang_1.isPresent(rk) && rk == id2.runtimeCacheKey) ||
(lang_1.isPresent(ak) && ak == id2.assetCacheKey);
};
return CompileIdentifierMetadata;

@@ -301,30 +227,2 @@ }());

}
CompileDiDependencyMetadata.fromJson = function (data) {
return new CompileDiDependencyMetadata({
token: _objFromJson(data['token'], CompileTokenMetadata.fromJson),
query: _objFromJson(data['query'], CompileQueryMetadata.fromJson),
viewQuery: _objFromJson(data['viewQuery'], CompileQueryMetadata.fromJson),
value: data['value'],
isAttribute: data['isAttribute'],
isSelf: data['isSelf'],
isHost: data['isHost'],
isSkipSelf: data['isSkipSelf'],
isOptional: data['isOptional'],
isValue: data['isValue']
});
};
CompileDiDependencyMetadata.prototype.toJson = function () {
return {
'token': _objToJson(this.token),
'query': _objToJson(this.query),
'viewQuery': _objToJson(this.viewQuery),
'value': this.value,
'isAttribute': this.isAttribute,
'isSelf': this.isSelf,
'isHost': this.isHost,
'isSkipSelf': this.isSkipSelf,
'isOptional': this.isOptional,
'isValue': this.isValue
};
};
return CompileDiDependencyMetadata;

@@ -344,71 +242,18 @@ }());

}
CompileProviderMetadata.fromJson = function (data) {
return new CompileProviderMetadata({
token: _objFromJson(data['token'], CompileTokenMetadata.fromJson),
useClass: _objFromJson(data['useClass'], CompileTypeMetadata.fromJson),
useExisting: _objFromJson(data['useExisting'], CompileTokenMetadata.fromJson),
useValue: _objFromJson(data['useValue'], CompileIdentifierMetadata.fromJson),
useFactory: _objFromJson(data['useFactory'], CompileFactoryMetadata.fromJson),
multi: data['multi'],
deps: _arrayFromJson(data['deps'], CompileDiDependencyMetadata.fromJson)
});
};
CompileProviderMetadata.prototype.toJson = function () {
return {
// Note: Runtime type can't be serialized...
'class': 'Provider',
'token': _objToJson(this.token),
'useClass': _objToJson(this.useClass),
'useExisting': _objToJson(this.useExisting),
'useValue': _objToJson(this.useValue),
'useFactory': _objToJson(this.useFactory),
'multi': this.multi,
'deps': _arrayToJson(this.deps)
};
};
return CompileProviderMetadata;
}());
exports.CompileProviderMetadata = CompileProviderMetadata;
var CompileFactoryMetadata = (function () {
var CompileFactoryMetadata = (function (_super) {
__extends(CompileFactoryMetadata, _super);
function CompileFactoryMetadata(_a) {
var runtime = _a.runtime, name = _a.name, moduleUrl = _a.moduleUrl, prefix = _a.prefix, diDeps = _a.diDeps, value = _a.value;
this.runtime = runtime;
this.name = name;
this.prefix = prefix;
this.moduleUrl = moduleUrl;
_super.call(this, { runtime: runtime, name: name, prefix: prefix, moduleUrl: moduleUrl, value: value });
this.diDeps = _normalizeArray(diDeps);
this.value = value;
}
Object.defineProperty(CompileFactoryMetadata.prototype, "identifier", {
get: function () { return this; },
enumerable: true,
configurable: true
});
CompileFactoryMetadata.fromJson = function (data) {
return new CompileFactoryMetadata({
name: data['name'],
prefix: data['prefix'],
moduleUrl: data['moduleUrl'],
value: data['value'],
diDeps: _arrayFromJson(data['diDeps'], CompileDiDependencyMetadata.fromJson)
});
};
CompileFactoryMetadata.prototype.toJson = function () {
return {
'class': 'Factory',
'name': this.name,
'prefix': this.prefix,
'moduleUrl': this.moduleUrl,
'value': this.value,
'diDeps': _arrayToJson(this.diDeps)
};
};
return CompileFactoryMetadata;
}());
}(CompileIdentifierMetadata));
exports.CompileFactoryMetadata = CompileFactoryMetadata;
var UNDEFINED = new Object();
var CompileTokenMetadata = (function () {
function CompileTokenMetadata(_a) {
var value = _a.value, identifier = _a.identifier, identifierIsInstance = _a.identifierIsInstance;
this._assetCacheKey = UNDEFINED;
this.value = value;

@@ -418,20 +263,6 @@ this.identifier = identifier;

}
CompileTokenMetadata.fromJson = function (data) {
return new CompileTokenMetadata({
value: data['value'],
identifier: _objFromJson(data['identifier'], CompileIdentifierMetadata.fromJson),
identifierIsInstance: data['identifierIsInstance']
});
};
CompileTokenMetadata.prototype.toJson = function () {
return {
'value': this.value,
'identifier': _objToJson(this.identifier),
'identifierIsInstance': this.identifierIsInstance
};
};
Object.defineProperty(CompileTokenMetadata.prototype, "runtimeCacheKey", {
get: function () {
if (lang_1.isPresent(this.identifier)) {
return this.identifier.runtime;
return this.identifier.runtimeCacheKey;
}

@@ -447,18 +278,8 @@ else {

get: function () {
if (this._assetCacheKey === UNDEFINED) {
if (lang_1.isPresent(this.identifier)) {
if (lang_1.isPresent(this.identifier.moduleUrl) &&
lang_1.isPresent(url_resolver_1.getUrlScheme(this.identifier.moduleUrl))) {
var uri = core_private_1.reflector.importUri({ 'filePath': this.identifier.moduleUrl, 'name': this.identifier.name });
this._assetCacheKey = this.identifier.name + "|" + uri + "|" + this.identifierIsInstance;
}
else {
this._assetCacheKey = null;
}
}
else {
this._assetCacheKey = this.value;
}
if (lang_1.isPresent(this.identifier)) {
return this.identifier.assetCacheKey;
}
return this._assetCacheKey;
else {
return this.value;
}
},

@@ -484,12 +305,22 @@ enumerable: true,

exports.CompileTokenMetadata = CompileTokenMetadata;
var CompileTokenMap = (function () {
function CompileTokenMap() {
/**
* Note: We only need this in places where we need to support identifiers that
* don't have a `runtime` value given by the `StaticReflector`. E.g. see the `identifiers`
* file where we have some identifiers hard coded by name/module path.
*
* TODO(tbosch): Eventually, all of these places should go through the static reflector
* as well, providing them with a valid `StaticSymbol` that is again a singleton.
*/
var CompileIdentifierMap = (function () {
function CompileIdentifierMap() {
this._valueMap = new Map();
this._values = [];
this._tokens = [];
}
CompileTokenMap.prototype.add = function (token, value) {
CompileIdentifierMap.prototype.add = function (token, value) {
var existing = this.get(token);
if (lang_1.isPresent(existing)) {
throw new exceptions_1.BaseException("Can only add to a TokenMap! Token: " + token.name);
throw new exceptions_1.BaseException("Cannot overwrite in a CompileIdentifierMap! Token: " + token.identifier.name);
}
this._tokens.push(token);
this._values.push(value);

@@ -505,3 +336,3 @@ var rk = token.runtimeCacheKey;

};
CompileTokenMap.prototype.get = function (token) {
CompileIdentifierMap.prototype.get = function (token) {
var rk = token.runtimeCacheKey;

@@ -518,4 +349,5 @@ var ak = token.assetCacheKey;

};
CompileTokenMap.prototype.values = function () { return this._values; };
Object.defineProperty(CompileTokenMap.prototype, "size", {
CompileIdentifierMap.prototype.keys = function () { return this._tokens; };
CompileIdentifierMap.prototype.values = function () { return this._values; };
Object.defineProperty(CompileIdentifierMap.prototype, "size", {
get: function () { return this._values.length; },

@@ -525,53 +357,19 @@ enumerable: true,

});
return CompileTokenMap;
return CompileIdentifierMap;
}());
exports.CompileTokenMap = CompileTokenMap;
exports.CompileIdentifierMap = CompileIdentifierMap;
/**
* Metadata regarding compilation of a type.
*/
var CompileTypeMetadata = (function () {
var CompileTypeMetadata = (function (_super) {
__extends(CompileTypeMetadata, _super);
function CompileTypeMetadata(_a) {
var _b = _a === void 0 ? {} : _a, runtime = _b.runtime, name = _b.name, moduleUrl = _b.moduleUrl, prefix = _b.prefix, isHost = _b.isHost, value = _b.value, diDeps = _b.diDeps;
this.runtime = runtime;
this.name = name;
this.moduleUrl = moduleUrl;
this.prefix = prefix;
var _b = _a === void 0 ? {} : _a, runtime = _b.runtime, name = _b.name, moduleUrl = _b.moduleUrl, prefix = _b.prefix, isHost = _b.isHost, value = _b.value, diDeps = _b.diDeps, lifecycleHooks = _b.lifecycleHooks;
_super.call(this, { runtime: runtime, name: name, moduleUrl: moduleUrl, prefix: prefix, value: value });
this.isHost = lang_1.normalizeBool(isHost);
this.value = value;
this.diDeps = _normalizeArray(diDeps);
this.lifecycleHooks = _normalizeArray(lifecycleHooks);
}
CompileTypeMetadata.fromJson = function (data) {
return new CompileTypeMetadata({
name: data['name'],
moduleUrl: data['moduleUrl'],
prefix: data['prefix'],
isHost: data['isHost'],
value: data['value'],
diDeps: _arrayFromJson(data['diDeps'], CompileDiDependencyMetadata.fromJson)
});
};
Object.defineProperty(CompileTypeMetadata.prototype, "identifier", {
get: function () { return this; },
enumerable: true,
configurable: true
});
Object.defineProperty(CompileTypeMetadata.prototype, "type", {
get: function () { return this; },
enumerable: true,
configurable: true
});
CompileTypeMetadata.prototype.toJson = function () {
return {
// Note: Runtime type can't be serialized...
'class': 'Type',
'name': this.name,
'moduleUrl': this.moduleUrl,
'prefix': this.prefix,
'isHost': this.isHost,
'value': this.value,
'diDeps': _arrayToJson(this.diDeps)
};
};
return CompileTypeMetadata;
}());
}(CompileIdentifierMetadata));
exports.CompileTypeMetadata = CompileTypeMetadata;

@@ -587,20 +385,2 @@ var CompileQueryMetadata = (function () {

}
CompileQueryMetadata.fromJson = function (data) {
return new CompileQueryMetadata({
selectors: _arrayFromJson(data['selectors'], CompileTokenMetadata.fromJson),
descendants: data['descendants'],
first: data['first'],
propertyName: data['propertyName'],
read: _objFromJson(data['read'], CompileTokenMetadata.fromJson)
});
};
CompileQueryMetadata.prototype.toJson = function () {
return {
'selectors': _arrayToJson(this.selectors),
'descendants': this.descendants,
'first': this.first,
'propertyName': this.propertyName,
'read': _objToJson(this.read)
};
};
return CompileQueryMetadata;

@@ -619,8 +399,2 @@ }());

}
CompileStylesheetMetadata.fromJson = function (data) {
return new CompileStylesheetMetadata({ moduleUrl: data['moduleUrl'], styles: data['styles'], styleUrls: data['styleUrls'] });
};
CompileStylesheetMetadata.prototype.toJson = function () {
return { 'moduleUrl': this.moduleUrl, 'styles': this.styles, 'styleUrls': this.styleUrls };
};
return CompileStylesheetMetadata;

@@ -648,32 +422,2 @@ }());

}
CompileTemplateMetadata.fromJson = function (data) {
var animations = _arrayFromJson(data['animations'], metadataFromJson);
return new CompileTemplateMetadata({
encapsulation: lang_1.isPresent(data['encapsulation']) ?
core_private_1.VIEW_ENCAPSULATION_VALUES[data['encapsulation']] :
data['encapsulation'],
template: data['template'],
templateUrl: data['templateUrl'],
styles: data['styles'],
styleUrls: data['styleUrls'],
externalStylesheets: _arrayFromJson(data['externalStylesheets'], CompileStylesheetMetadata.fromJson),
animations: animations,
ngContentSelectors: data['ngContentSelectors'],
interpolation: data['interpolation']
});
};
CompileTemplateMetadata.prototype.toJson = function () {
return {
'encapsulation': lang_1.isPresent(this.encapsulation) ? lang_1.serializeEnum(this.encapsulation) :
this.encapsulation,
'template': this.template,
'templateUrl': this.templateUrl,
'styles': this.styles,
'styleUrls': this.styleUrls,
'externalStylesheets': _objToJson(this.externalStylesheets),
'animations': _objToJson(this.animations),
'ngContentSelectors': this.ngContentSelectors,
'interpolation': this.interpolation
};
};
return CompileTemplateMetadata;

@@ -687,3 +431,3 @@ }());

function CompileDirectiveMetadata(_a) {
var _b = _a === void 0 ? {} : _a, type = _b.type, isComponent = _b.isComponent, selector = _b.selector, exportAs = _b.exportAs, changeDetection = _b.changeDetection, inputs = _b.inputs, outputs = _b.outputs, hostListeners = _b.hostListeners, hostProperties = _b.hostProperties, hostAttributes = _b.hostAttributes, lifecycleHooks = _b.lifecycleHooks, providers = _b.providers, viewProviders = _b.viewProviders, queries = _b.queries, viewQueries = _b.viewQueries, precompile = _b.precompile, template = _b.template;
var _b = _a === void 0 ? {} : _a, type = _b.type, isComponent = _b.isComponent, selector = _b.selector, exportAs = _b.exportAs, changeDetection = _b.changeDetection, inputs = _b.inputs, outputs = _b.outputs, hostListeners = _b.hostListeners, hostProperties = _b.hostProperties, hostAttributes = _b.hostAttributes, providers = _b.providers, viewProviders = _b.viewProviders, queries = _b.queries, viewQueries = _b.viewQueries, entryComponents = _b.entryComponents, viewDirectives = _b.viewDirectives, viewPipes = _b.viewPipes, template = _b.template;
this.type = type;

@@ -699,3 +443,2 @@ this.isComponent = isComponent;

this.hostAttributes = hostAttributes;
this.lifecycleHooks = _normalizeArray(lifecycleHooks);
this.providers = _normalizeArray(providers);

@@ -705,7 +448,9 @@ this.viewProviders = _normalizeArray(viewProviders);

this.viewQueries = _normalizeArray(viewQueries);
this.precompile = _normalizeArray(precompile);
this.entryComponents = _normalizeArray(entryComponents);
this.viewDirectives = _normalizeArray(viewDirectives);
this.viewPipes = _normalizeArray(viewPipes);
this.template = template;
}
CompileDirectiveMetadata.create = function (_a) {
var _b = _a === void 0 ? {} : _a, type = _b.type, isComponent = _b.isComponent, selector = _b.selector, exportAs = _b.exportAs, changeDetection = _b.changeDetection, inputs = _b.inputs, outputs = _b.outputs, host = _b.host, lifecycleHooks = _b.lifecycleHooks, providers = _b.providers, viewProviders = _b.viewProviders, queries = _b.queries, viewQueries = _b.viewQueries, precompile = _b.precompile, template = _b.template;
var _b = _a === void 0 ? {} : _a, type = _b.type, isComponent = _b.isComponent, selector = _b.selector, exportAs = _b.exportAs, changeDetection = _b.changeDetection, inputs = _b.inputs, outputs = _b.outputs, host = _b.host, providers = _b.providers, viewProviders = _b.viewProviders, queries = _b.queries, viewQueries = _b.viewQueries, entryComponents = _b.entryComponents, viewDirectives = _b.viewDirectives, viewPipes = _b.viewPipes, template = _b.template;
var hostListeners = {};

@@ -716,4 +461,4 @@ var hostProperties = {};

collection_1.StringMapWrapper.forEach(host, function (value, key) {
var matches = lang_1.RegExpWrapper.firstMatch(HOST_REG_EXP, key);
if (lang_1.isBlank(matches)) {
var matches = key.match(HOST_REG_EXP);
if (matches === null) {
hostAttributes[key] = value;

@@ -727,2 +472,5 @@ }

}
else if (lang_1.isPresent(matches[3])) {
hostProperties['@' + matches[3]] = value;
}
});

@@ -750,6 +498,3 @@ }

type: type,
isComponent: lang_1.normalizeBool(isComponent),
selector: selector,
exportAs: exportAs,
changeDetection: changeDetection,
isComponent: lang_1.normalizeBool(isComponent), selector: selector, exportAs: exportAs, changeDetection: changeDetection,
inputs: inputsMap,

@@ -760,3 +505,2 @@ outputs: outputsMap,

hostAttributes: hostAttributes,
lifecycleHooks: lang_1.isPresent(lifecycleHooks) ? lifecycleHooks : [],
providers: providers,

@@ -766,4 +510,6 @@ viewProviders: viewProviders,

viewQueries: viewQueries,
precompile: precompile,
template: template
entryComponents: entryComponents,
viewDirectives: viewDirectives,
viewPipes: viewPipes,
template: template,
});

@@ -776,49 +522,15 @@ };

});
CompileDirectiveMetadata.fromJson = function (data) {
return new CompileDirectiveMetadata({
isComponent: data['isComponent'],
selector: data['selector'],
exportAs: data['exportAs'],
type: lang_1.isPresent(data['type']) ? CompileTypeMetadata.fromJson(data['type']) : data['type'],
changeDetection: lang_1.isPresent(data['changeDetection']) ?
core_private_1.CHANGE_DETECTION_STRATEGY_VALUES[data['changeDetection']] :
data['changeDetection'],
inputs: data['inputs'],
outputs: data['outputs'],
hostListeners: data['hostListeners'],
hostProperties: data['hostProperties'],
hostAttributes: data['hostAttributes'],
lifecycleHooks: data['lifecycleHooks'].map(function (hookValue) { return core_private_1.LIFECYCLE_HOOKS_VALUES[hookValue]; }),
template: lang_1.isPresent(data['template']) ? CompileTemplateMetadata.fromJson(data['template']) :
data['template'],
providers: _arrayFromJson(data['providers'], metadataFromJson),
viewProviders: _arrayFromJson(data['viewProviders'], metadataFromJson),
queries: _arrayFromJson(data['queries'], CompileQueryMetadata.fromJson),
viewQueries: _arrayFromJson(data['viewQueries'], CompileQueryMetadata.fromJson),
precompile: _arrayFromJson(data['precompile'], CompileTypeMetadata.fromJson)
});
Object.defineProperty(CompileDirectiveMetadata.prototype, "runtimeCacheKey", {
get: function () { return this.type.runtimeCacheKey; },
enumerable: true,
configurable: true
});
Object.defineProperty(CompileDirectiveMetadata.prototype, "assetCacheKey", {
get: function () { return this.type.assetCacheKey; },
enumerable: true,
configurable: true
});
CompileDirectiveMetadata.prototype.equalsTo = function (other) {
return this.type.equalsTo(other.identifier);
};
CompileDirectiveMetadata.prototype.toJson = function () {
return {
'class': 'Directive',
'isComponent': this.isComponent,
'selector': this.selector,
'exportAs': this.exportAs,
'type': lang_1.isPresent(this.type) ? this.type.toJson() : this.type,
'changeDetection': lang_1.isPresent(this.changeDetection) ? lang_1.serializeEnum(this.changeDetection) :
this.changeDetection,
'inputs': this.inputs,
'outputs': this.outputs,
'hostListeners': this.hostListeners,
'hostProperties': this.hostProperties,
'hostAttributes': this.hostAttributes,
'lifecycleHooks': this.lifecycleHooks.map(function (hook) { return lang_1.serializeEnum(hook); }),
'template': lang_1.isPresent(this.template) ? this.template.toJson() : this.template,
'providers': _arrayToJson(this.providers),
'viewProviders': _arrayToJson(this.viewProviders),
'queries': _arrayToJson(this.queries),
'viewQueries': _arrayToJson(this.viewQueries),
'precompile': _arrayToJson(this.precompile)
};
};
return CompileDirectiveMetadata;

@@ -830,9 +542,9 @@ }());

*/
function createHostComponentMeta(componentType, componentSelector) {
var template = selector_1.CssSelector.parse(componentSelector)[0].getMatchingElementTemplate();
function createHostComponentMeta(compMeta) {
var template = selector_1.CssSelector.parse(compMeta.selector)[0].getMatchingElementTemplate();
return CompileDirectiveMetadata.create({
type: new CompileTypeMetadata({
runtime: Object,
name: componentType.name + "_Host",
moduleUrl: componentType.moduleUrl,
name: compMeta.type.name + "_Host",
moduleUrl: compMeta.type.moduleUrl,
isHost: true

@@ -852,3 +564,2 @@ }),

host: {},
lifecycleHooks: [],
isComponent: true,

@@ -865,7 +576,6 @@ selector: '*',

function CompilePipeMetadata(_a) {
var _b = _a === void 0 ? {} : _a, type = _b.type, name = _b.name, pure = _b.pure, lifecycleHooks = _b.lifecycleHooks;
var _b = _a === void 0 ? {} : _a, type = _b.type, name = _b.name, pure = _b.pure;
this.type = type;
this.name = name;
this.pure = lang_1.normalizeBool(pure);
this.lifecycleHooks = _normalizeArray(lifecycleHooks);
}

@@ -877,59 +587,91 @@ Object.defineProperty(CompilePipeMetadata.prototype, "identifier", {

});
CompilePipeMetadata.fromJson = function (data) {
return new CompilePipeMetadata({
type: lang_1.isPresent(data['type']) ? CompileTypeMetadata.fromJson(data['type']) : data['type'],
name: data['name'],
pure: data['pure']
});
Object.defineProperty(CompilePipeMetadata.prototype, "runtimeCacheKey", {
get: function () { return this.type.runtimeCacheKey; },
enumerable: true,
configurable: true
});
Object.defineProperty(CompilePipeMetadata.prototype, "assetCacheKey", {
get: function () { return this.type.assetCacheKey; },
enumerable: true,
configurable: true
});
CompilePipeMetadata.prototype.equalsTo = function (other) {
return this.type.equalsTo(other.identifier);
};
CompilePipeMetadata.prototype.toJson = function () {
return {
'class': 'Pipe',
'type': lang_1.isPresent(this.type) ? this.type.toJson() : null,
'name': this.name,
'pure': this.pure
};
};
return CompilePipeMetadata;
}());
exports.CompilePipeMetadata = CompilePipeMetadata;
var _COMPILE_METADATA_FROM_JSON = {
'Directive': CompileDirectiveMetadata.fromJson,
'Pipe': CompilePipeMetadata.fromJson,
'Type': CompileTypeMetadata.fromJson,
'Provider': CompileProviderMetadata.fromJson,
'Identifier': CompileIdentifierMetadata.fromJson,
'Factory': CompileFactoryMetadata.fromJson,
'AnimationEntryMetadata': CompileAnimationEntryMetadata.fromJson,
'AnimationStateDeclarationMetadata': CompileAnimationStateDeclarationMetadata.fromJson,
'AnimationStateTransitionMetadata': CompileAnimationStateTransitionMetadata.fromJson,
'AnimationSequenceMetadata': CompileAnimationSequenceMetadata.fromJson,
'AnimationGroupMetadata': CompileAnimationGroupMetadata.fromJson,
'AnimationAnimateMetadata': CompileAnimationAnimateMetadata.fromJson,
'AnimationStyleMetadata': CompileAnimationStyleMetadata.fromJson,
'AnimationKeyframesSequenceMetadata': CompileAnimationKeyframesSequenceMetadata.fromJson
};
function _arrayFromJson(obj, fn) {
return lang_1.isBlank(obj) ? null : obj.map(function (o) { return _objFromJson(o, fn); });
/**
* Metadata regarding compilation of a directive.
*/
var CompileNgModuleMetadata = (function () {
function CompileNgModuleMetadata(_a) {
var _b = _a === void 0 ? {} : _a, type = _b.type, providers = _b.providers, declaredDirectives = _b.declaredDirectives, exportedDirectives = _b.exportedDirectives, declaredPipes = _b.declaredPipes, exportedPipes = _b.exportedPipes, entryComponents = _b.entryComponents, bootstrapComponents = _b.bootstrapComponents, importedModules = _b.importedModules, exportedModules = _b.exportedModules, schemas = _b.schemas, transitiveModule = _b.transitiveModule;
this.type = type;
this.declaredDirectives = _normalizeArray(declaredDirectives);
this.exportedDirectives = _normalizeArray(exportedDirectives);
this.declaredPipes = _normalizeArray(declaredPipes);
this.exportedPipes = _normalizeArray(exportedPipes);
this.providers = _normalizeArray(providers);
this.entryComponents = _normalizeArray(entryComponents);
this.bootstrapComponents = _normalizeArray(bootstrapComponents);
this.importedModules = _normalizeArray(importedModules);
this.exportedModules = _normalizeArray(exportedModules);
this.schemas = _normalizeArray(schemas);
this.transitiveModule = transitiveModule;
}
Object.defineProperty(CompileNgModuleMetadata.prototype, "identifier", {
get: function () { return this.type; },
enumerable: true,
configurable: true
});
Object.defineProperty(CompileNgModuleMetadata.prototype, "runtimeCacheKey", {
get: function () { return this.type.runtimeCacheKey; },
enumerable: true,
configurable: true
});
Object.defineProperty(CompileNgModuleMetadata.prototype, "assetCacheKey", {
get: function () { return this.type.assetCacheKey; },
enumerable: true,
configurable: true
});
CompileNgModuleMetadata.prototype.equalsTo = function (other) {
return this.type.equalsTo(other.identifier);
};
return CompileNgModuleMetadata;
}());
exports.CompileNgModuleMetadata = CompileNgModuleMetadata;
var TransitiveCompileNgModuleMetadata = (function () {
function TransitiveCompileNgModuleMetadata(modules, providers, entryComponents, directives, pipes) {
var _this = this;
this.modules = modules;
this.providers = providers;
this.entryComponents = entryComponents;
this.directives = directives;
this.pipes = pipes;
this.directivesSet = new Set();
this.pipesSet = new Set();
directives.forEach(function (dir) { return _this.directivesSet.add(dir.type.runtime); });
pipes.forEach(function (pipe) { return _this.pipesSet.add(pipe.type.runtime); });
}
return TransitiveCompileNgModuleMetadata;
}());
exports.TransitiveCompileNgModuleMetadata = TransitiveCompileNgModuleMetadata;
function removeIdentifierDuplicates(items) {
var map = new CompileIdentifierMap();
items.forEach(function (item) {
if (!map.get(item)) {
map.add(item, item);
}
});
return map.keys();
}
function _arrayToJson(obj) {
return lang_1.isBlank(obj) ? null : obj.map(_objToJson);
}
function _objFromJson(obj, fn) {
if (lang_1.isArray(obj))
return _arrayFromJson(obj, fn);
if (lang_1.isString(obj) || lang_1.isBlank(obj) || lang_1.isBoolean(obj) || lang_1.isNumber(obj))
return obj;
return fn(obj);
}
function _objToJson(obj) {
if (lang_1.isArray(obj))
return _arrayToJson(obj);
if (lang_1.isString(obj) || lang_1.isBlank(obj) || lang_1.isBoolean(obj) || lang_1.isNumber(obj))
return obj;
return obj.toJson();
}
exports.removeIdentifierDuplicates = removeIdentifierDuplicates;
function _normalizeArray(obj) {
return lang_1.isPresent(obj) ? obj : [];
}
function isStaticSymbol(value) {
return lang_1.isStringMap(value) && lang_1.isPresent(value['name']) && lang_1.isPresent(value['filePath']);
}
exports.isStaticSymbol = isStaticSymbol;
//# sourceMappingURL=compile_metadata.js.map

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"metadataFromJson":{"__symbolic":"function","parameters":["data"],"value":{"__symbolic":"error","message":"Expression form not supported","line":38,"character":10}}}}
{"__symbolic":"module","version":1,"metadata":{"isStaticSymbol":{"__symbolic":"function","parameters":["value"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"./facade/lang","name":"isStringMap"},"arguments":[{"__symbolic":"reference","name":"value"}]},"right":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"./facade/lang","name":"isPresent"},"arguments":[{"__symbolic":"index","expression":{"__symbolic":"reference","name":"value"},"index":"name"}]}},"right":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"./facade/lang","name":"isPresent"},"arguments":[{"__symbolic":"index","expression":{"__symbolic":"reference","name":"value"},"index":"filePath"}]}}}}}

@@ -8,5 +8,5 @@ /**

*/
import { Type } from '@angular/core';
export * from './template_ast';
export { TEMPLATE_TRANSFORMS } from './template_parser';
import { Compiler, CompilerFactory, CompilerOptions, PlatformRef, Type } from '@angular/core';
export * from './template_parser/template_ast';
export { TEMPLATE_TRANSFORMS } from './template_parser/template_parser';
export { CompilerConfig, RenderTypes } from './config';

@@ -18,5 +18,5 @@ export * from './compile_metadata';

export * from './xhr';
export { ViewResolver } from './view_resolver';
export { DirectiveResolver } from './directive_resolver';
export { PipeResolver } from './pipe_resolver';
export { NgModuleResolver } from './ng_module_resolver';
/**

@@ -29,1 +29,17 @@ * A set of providers that provide `RuntimeCompiler` and its dependencies to use for

} | any[]>;
export declare function analyzeAppProvidersForDeprecatedConfiguration(appProviders?: any[]): {
compilerOptions: CompilerOptions;
moduleDeclarations: Type[];
deprecationMessages: string[];
};
export declare class RuntimeCompilerFactory implements CompilerFactory {
private _defaultOptions;
constructor(defaultOptions: CompilerOptions[]);
createCompiler(options?: CompilerOptions[]): Compiler;
}
/**
* A platform that included corePlatform and the compiler.
*
* @experimental
*/
export declare const platformCoreDynamic: (extraProviders?: any[]) => PlatformRef;

@@ -13,4 +13,4 @@ /**

var core_1 = require('@angular/core');
__export(require('./template_ast'));
var template_parser_1 = require('./template_parser');
__export(require('./template_parser/template_ast'));
var template_parser_1 = require('./template_parser/template_parser');
exports.TEMPLATE_TRANSFORMS = template_parser_1.TEMPLATE_TRANSFORMS;

@@ -26,4 +26,2 @@ var config_1 = require('./config');

__export(require('./xhr'));
var view_resolver_1 = require('./view_resolver');
exports.ViewResolver = view_resolver_1.ViewResolver;
var directive_resolver_1 = require('./directive_resolver');

@@ -33,4 +31,8 @@ exports.DirectiveResolver = directive_resolver_1.DirectiveResolver;

exports.PipeResolver = pipe_resolver_1.PipeResolver;
var template_parser_2 = require('./template_parser');
var html_parser_1 = require('./html_parser');
var ng_module_resolver_1 = require('./ng_module_resolver');
exports.NgModuleResolver = ng_module_resolver_1.NgModuleResolver;
var lang_1 = require('./facade/lang');
var collection_1 = require('./facade/collection');
var template_parser_2 = require('./template_parser/template_parser');
var html_parser_1 = require('./ml_parser/html_parser');
var directive_normalizer_1 = require('./directive_normalizer');

@@ -40,2 +42,3 @@ var metadata_resolver_1 = require('./metadata_resolver');

var view_compiler_1 = require('./view_compiler/view_compiler');
var ng_module_compiler_1 = require('./ng_module_compiler');
var config_2 = require('./config');

@@ -48,5 +51,12 @@ var runtime_compiler_2 = require('./runtime_compiler');

var lexer_1 = require('./expression_parser/lexer');
var view_resolver_2 = require('./view_resolver');
var directive_resolver_2 = require('./directive_resolver');
var pipe_resolver_2 = require('./pipe_resolver');
var ng_module_resolver_2 = require('./ng_module_resolver');
var core_private_1 = require('../core_private');
var xhr_2 = require('./xhr');
var _NO_XHR = {
get: function (url) {
throw new Error("No XHR implementation has been provided. Can't read the url \"" + url + "\"");
}
};
/**

@@ -56,14 +66,171 @@ * A set of providers that provide `RuntimeCompiler` and its dependencies to use for

*/
exports.COMPILER_PROVIDERS =
/*@ts2dart_const*/ [
lexer_1.Lexer, parser_1.Parser, html_parser_1.HtmlParser, template_parser_2.TemplateParser, directive_normalizer_1.DirectiveNormalizer, metadata_resolver_1.CompileMetadataResolver,
url_resolver_2.DEFAULT_PACKAGE_URL_PROVIDER, style_compiler_1.StyleCompiler, view_compiler_1.ViewCompiler,
/*@ts2dart_Provider*/ { provide: config_2.CompilerConfig, useValue: new config_2.CompilerConfig() },
exports.COMPILER_PROVIDERS = [
{ provide: core_private_1.Reflector, useValue: core_private_1.reflector },
{ provide: core_private_1.ReflectorReader, useExisting: core_private_1.Reflector },
{ provide: xhr_2.XHR, useValue: _NO_XHR },
core_private_1.Console,
lexer_1.Lexer,
parser_1.Parser,
html_parser_1.HtmlParser,
template_parser_2.TemplateParser,
directive_normalizer_1.DirectiveNormalizer,
metadata_resolver_1.CompileMetadataResolver,
url_resolver_2.DEFAULT_PACKAGE_URL_PROVIDER,
style_compiler_1.StyleCompiler,
view_compiler_1.ViewCompiler,
ng_module_compiler_1.NgModuleCompiler,
{ provide: config_2.CompilerConfig, useValue: new config_2.CompilerConfig() },
runtime_compiler_2.RuntimeCompiler,
/*@ts2dart_Provider*/ { provide: core_1.ComponentResolver, useExisting: runtime_compiler_2.RuntimeCompiler },
/*@ts2dart_Provider*/ { provide: core_1.Compiler, useExisting: runtime_compiler_2.RuntimeCompiler },
{ provide: core_1.Compiler, useExisting: runtime_compiler_2.RuntimeCompiler },
dom_element_schema_registry_1.DomElementSchemaRegistry,
/*@ts2dart_Provider*/ { provide: element_schema_registry_1.ElementSchemaRegistry, useExisting: dom_element_schema_registry_1.DomElementSchemaRegistry },
url_resolver_2.UrlResolver, view_resolver_2.ViewResolver, directive_resolver_2.DirectiveResolver, pipe_resolver_2.PipeResolver
{ provide: element_schema_registry_1.ElementSchemaRegistry, useExisting: dom_element_schema_registry_1.DomElementSchemaRegistry },
url_resolver_2.UrlResolver,
directive_resolver_2.DirectiveResolver,
pipe_resolver_2.PipeResolver,
ng_module_resolver_2.NgModuleResolver
];
function analyzeAppProvidersForDeprecatedConfiguration(appProviders) {
if (appProviders === void 0) { appProviders = []; }
var platformDirectives = [];
var platformPipes = [];
var compilerProviders = [];
var useDebug;
var useJit;
var defaultEncapsulation;
var deprecationMessages = [];
// Note: This is a hack to still support the old way
// of configuring platform directives / pipes and the compiler xhr.
// This will soon be deprecated!
var tempInj = core_1.ReflectiveInjector.resolveAndCreate(appProviders);
var compilerConfig = tempInj.get(config_2.CompilerConfig, null);
if (compilerConfig) {
platformDirectives = compilerConfig.platformDirectives;
platformPipes = compilerConfig.platformPipes;
useJit = compilerConfig.useJit;
useDebug = compilerConfig.genDebugInfo;
defaultEncapsulation = compilerConfig.defaultEncapsulation;
deprecationMessages.push("Passing CompilerConfig as a regular provider is deprecated. Use the \"compilerOptions\" parameter of \"bootstrap()\" or use a custom \"CompilerFactory\" platform provider instead.");
}
else {
// If nobody provided a CompilerConfig, use the
// PLATFORM_DIRECTIVES / PLATFORM_PIPES values directly if existing
platformDirectives = tempInj.get(core_1.PLATFORM_DIRECTIVES, []);
platformPipes = tempInj.get(core_1.PLATFORM_PIPES, []);
}
platformDirectives = collection_1.ListWrapper.flatten(platformDirectives);
platformPipes = collection_1.ListWrapper.flatten(platformPipes);
var xhr = tempInj.get(xhr_2.XHR, null);
if (xhr) {
compilerProviders.push([{ provide: xhr_2.XHR, useValue: xhr }]);
deprecationMessages.push("Passing XHR as regular provider is deprecated. Pass the provider via \"compilerOptions\" instead.");
}
if (platformDirectives.length > 0) {
deprecationMessages.push("The PLATFORM_DIRECTIVES provider and CompilerConfig.platformDirectives is deprecated. Add the directives to an NgModule instead! " +
("(Directives: " + platformDirectives.map(function (type) { return lang_1.stringify(type); }) + ")"));
}
if (platformPipes.length > 0) {
deprecationMessages.push("The PLATFORM_PIPES provider and CompilerConfig.platformPipes is deprecated. Add the pipes to an NgModule instead! " +
("(Pipes: " + platformPipes.map(function (type) { return lang_1.stringify(type); }) + ")"));
}
var compilerOptions = {
useJit: useJit,
useDebug: useDebug,
defaultEncapsulation: defaultEncapsulation,
providers: compilerProviders
};
var DynamicComponent = (function () {
function DynamicComponent() {
}
/** @nocollapse */
DynamicComponent.decorators = [
{ type: core_1.Component, args: [{ directives: platformDirectives, pipes: platformPipes, template: '' },] },
];
return DynamicComponent;
}());
return {
compilerOptions: compilerOptions,
moduleDeclarations: [DynamicComponent],
deprecationMessages: deprecationMessages
};
}
exports.analyzeAppProvidersForDeprecatedConfiguration = analyzeAppProvidersForDeprecatedConfiguration;
var RuntimeCompilerFactory = (function () {
function RuntimeCompilerFactory(defaultOptions) {
this._defaultOptions = [{
useDebug: core_1.isDevMode(),
useJit: true,
defaultEncapsulation: core_1.ViewEncapsulation.Emulated
}].concat(defaultOptions);
}
RuntimeCompilerFactory.prototype.createCompiler = function (options) {
if (options === void 0) { options = []; }
var mergedOptions = _mergeOptions(this._defaultOptions.concat(options));
var injector = core_1.ReflectiveInjector.resolveAndCreate([
exports.COMPILER_PROVIDERS, {
provide: config_2.CompilerConfig,
useFactory: function () {
return new config_2.CompilerConfig({
// let explicit values from the compiler options overwrite options
// from the app providers. E.g. important for the testing platform.
genDebugInfo: mergedOptions.useDebug,
// let explicit values from the compiler options overwrite options
// from the app providers
useJit: mergedOptions.useJit,
// let explicit values from the compiler options overwrite options
// from the app providers
defaultEncapsulation: mergedOptions.defaultEncapsulation,
logBindingUpdate: mergedOptions.useDebug
});
},
deps: []
},
mergedOptions.providers
]);
return injector.get(core_1.Compiler);
};
/** @nocollapse */
RuntimeCompilerFactory.decorators = [
{ type: core_1.Injectable },
];
/** @nocollapse */
RuntimeCompilerFactory.ctorParameters = [
{ type: Array, decorators: [{ type: core_1.Inject, args: [core_1.COMPILER_OPTIONS,] },] },
];
return RuntimeCompilerFactory;
}());
exports.RuntimeCompilerFactory = RuntimeCompilerFactory;
function _initReflector() {
core_private_1.reflector.reflectionCapabilities = new core_private_1.ReflectionCapabilities();
}
/**
* A platform that included corePlatform and the compiler.
*
* @experimental
*/
exports.platformCoreDynamic = core_1.createPlatformFactory(core_1.platformCore, 'coreDynamic', [
{ provide: core_1.COMPILER_OPTIONS, useValue: {}, multi: true },
{ provide: core_1.CompilerFactory, useClass: RuntimeCompilerFactory },
{ provide: core_1.PLATFORM_INITIALIZER, useValue: _initReflector, multi: true },
]);
function _mergeOptions(optionsArr) {
return {
useDebug: _lastDefined(optionsArr.map(function (options) { return options.useDebug; })),
useJit: _lastDefined(optionsArr.map(function (options) { return options.useJit; })),
defaultEncapsulation: _lastDefined(optionsArr.map(function (options) { return options.defaultEncapsulation; })),
providers: _mergeArrays(optionsArr.map(function (options) { return options.providers; }))
};
}
function _lastDefined(args) {
for (var i = args.length - 1; i >= 0; i--) {
if (args[i] !== undefined) {
return args[i];
}
}
return undefined;
}
function _mergeArrays(parts) {
var result = [];
parts.forEach(function (part) { return part && result.push.apply(result, part); });
return result;
}
//# sourceMappingURL=compiler.js.map

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"COMPILER_PROVIDERS":[{"__symbolic":"reference","module":"./expression_parser/lexer","name":"Lexer"},{"__symbolic":"reference","module":"./expression_parser/parser","name":"Parser"},{"__symbolic":"reference","module":"./html_parser","name":"HtmlParser"},{"__symbolic":"reference","module":"./template_parser","name":"TemplateParser"},{"__symbolic":"reference","module":"./directive_normalizer","name":"DirectiveNormalizer"},{"__symbolic":"reference","module":"./metadata_resolver","name":"CompileMetadataResolver"},{"__symbolic":"reference","module":"./url_resolver","name":"DEFAULT_PACKAGE_URL_PROVIDER"},{"__symbolic":"reference","module":"./style_compiler","name":"StyleCompiler"},{"__symbolic":"reference","module":"./view_compiler/view_compiler","name":"ViewCompiler"},{"provide":{"__symbolic":"reference","module":"./config","name":"CompilerConfig"},"useValue":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"./config","name":"CompilerConfig"}}},{"__symbolic":"reference","module":"./runtime_compiler","name":"RuntimeCompiler"},{"provide":{"__symbolic":"reference","module":"@angular/core","name":"ComponentResolver"},"useExisting":{"__symbolic":"reference","module":"./runtime_compiler","name":"RuntimeCompiler"}},{"provide":{"__symbolic":"reference","module":"@angular/core","name":"Compiler"},"useExisting":{"__symbolic":"reference","module":"./runtime_compiler","name":"RuntimeCompiler"}},{"__symbolic":"reference","module":"./schema/dom_element_schema_registry","name":"DomElementSchemaRegistry"},{"provide":{"__symbolic":"reference","module":"./schema/element_schema_registry","name":"ElementSchemaRegistry"},"useExisting":{"__symbolic":"reference","module":"./schema/dom_element_schema_registry","name":"DomElementSchemaRegistry"}},{"__symbolic":"reference","module":"./url_resolver","name":"UrlResolver"},{"__symbolic":"reference","module":"./view_resolver","name":"ViewResolver"},{"__symbolic":"reference","module":"./directive_resolver","name":"DirectiveResolver"},{"__symbolic":"reference","module":"./pipe_resolver","name":"PipeResolver"}]}}
{"__symbolic":"module","version":1,"metadata":{"COMPILER_PROVIDERS":{"__symbolic":"error","message":"Reference to a local symbol","line":45,"character":5,"context":{"name":"_NO_XHR"}},"RuntimeCompilerFactory":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject"},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"COMPILER_OPTIONS"}]}]],"parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","module":"@angular/core","name":"CompilerOptions"}]}]}],"createCompiler":[{"__symbolic":"method"}]}},"platformCoreDynamic":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"createPlatformFactory"},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"platformCore"},"coreDynamic",[{"provide":{"__symbolic":"reference","module":"@angular/core","name":"COMPILER_OPTIONS"},"useValue":{},"multi":true},{"provide":{"__symbolic":"reference","module":"@angular/core","name":"CompilerFactory"},"useClass":{"__symbolic":"reference","name":"RuntimeCompilerFactory"}},{"provide":{"__symbolic":"reference","module":"@angular/core","name":"PLATFORM_INITIALIZER"},"useValue":{"__symbolic":"reference","name":"_initReflector"},"multi":true}]]}},"exports":[{"from":"./template_parser/template_ast"},{"from":"./template_parser/template_parser","export":["TEMPLATE_TRANSFORMS"]},{"from":"./config","export":["CompilerConfig","RenderTypes"]},{"from":"./compile_metadata"},{"from":"./offline_compiler"},{"from":"./runtime_compiler","export":["RuntimeCompiler"]},{"from":"./url_resolver"},{"from":"./xhr"},{"from":"./directive_resolver","export":["DirectiveResolver"]},{"from":"./pipe_resolver","export":["PipeResolver"]},{"from":"./ng_module_resolver","export":["NgModuleResolver"]}]}

@@ -16,5 +16,13 @@ /**

useJit: boolean;
/**
* @deprecated Providing platform directives via the {@link CompilerConfig} is deprecated. Provide
* platform directives via an {@link NgModule} instead.
*/
platformDirectives: any[];
/**
* @deprecated Providing platform pipes via the {@link CompilerConfig} is deprecated. Provide
* platform pipes via an {@link NgModule} instead.
*/
platformPipes: any[];
constructor({renderTypes, defaultEncapsulation, genDebugInfo, logBindingUpdate, useJit, platformDirectives, platformPipes}?: {
constructor({renderTypes, defaultEncapsulation, genDebugInfo, logBindingUpdate, useJit, deprecatedPlatformDirectives, deprecatedPlatformPipes}?: {
renderTypes?: RenderTypes;

@@ -25,4 +33,4 @@ defaultEncapsulation?: ViewEncapsulation;

useJit?: boolean;
platformDirectives?: any[];
platformPipes?: any[];
deprecatedPlatformDirectives?: any[];
deprecatedPlatformPipes?: any[];
});

@@ -29,0 +37,0 @@ genDebugInfo: boolean;

@@ -14,3 +14,3 @@ /**

function CompilerConfig(_a) {
var _b = _a === void 0 ? {} : _a, _c = _b.renderTypes, renderTypes = _c === void 0 ? new DefaultRenderTypes() : _c, _d = _b.defaultEncapsulation, defaultEncapsulation = _d === void 0 ? core_1.ViewEncapsulation.Emulated : _d, genDebugInfo = _b.genDebugInfo, logBindingUpdate = _b.logBindingUpdate, _e = _b.useJit, useJit = _e === void 0 ? true : _e, _f = _b.platformDirectives, platformDirectives = _f === void 0 ? [] : _f, _g = _b.platformPipes, platformPipes = _g === void 0 ? [] : _g;
var _b = _a === void 0 ? {} : _a, _c = _b.renderTypes, renderTypes = _c === void 0 ? new DefaultRenderTypes() : _c, _d = _b.defaultEncapsulation, defaultEncapsulation = _d === void 0 ? core_1.ViewEncapsulation.Emulated : _d, genDebugInfo = _b.genDebugInfo, logBindingUpdate = _b.logBindingUpdate, _e = _b.useJit, useJit = _e === void 0 ? true : _e, _f = _b.deprecatedPlatformDirectives, deprecatedPlatformDirectives = _f === void 0 ? [] : _f, _g = _b.deprecatedPlatformPipes, deprecatedPlatformPipes = _g === void 0 ? [] : _g;
this.renderTypes = renderTypes;

@@ -21,4 +21,4 @@ this.defaultEncapsulation = defaultEncapsulation;

this.useJit = useJit;
this.platformDirectives = platformDirectives;
this.platformPipes = platformPipes;
this.platformDirectives = deprecatedPlatformDirectives;
this.platformPipes = deprecatedPlatformPipes;
}

@@ -25,0 +25,0 @@ Object.defineProperty(CompilerConfig.prototype, "genDebugInfo", {

import { CompileDirectiveMetadata, CompileStylesheetMetadata, CompileTemplateMetadata, CompileTypeMetadata } from './compile_metadata';
import { CompilerConfig } from './config';
import { HtmlParser } from './html_parser';
import { HtmlParser } from './ml_parser/html_parser';
import { UrlResolver } from './url_resolver';
import { SyncAsyncResult } from './util';
import { XHR } from './xhr';
export declare class NormalizeDirectiveResult {
syncResult: CompileDirectiveMetadata;
asyncResult: Promise<CompileDirectiveMetadata>;
constructor(syncResult: CompileDirectiveMetadata, asyncResult: Promise<CompileDirectiveMetadata>);
}
export declare class DirectiveNormalizer {

@@ -21,3 +17,3 @@ private _xhr;

private _fetch(url);
normalizeDirective(directive: CompileDirectiveMetadata): NormalizeDirectiveResult;
normalizeDirective(directive: CompileDirectiveMetadata): SyncAsyncResult<CompileDirectiveMetadata>;
normalizeTemplateSync(directiveType: CompileTypeMetadata, template: CompileTemplateMetadata): CompileTemplateMetadata;

@@ -24,0 +20,0 @@ normalizeTemplateAsync(directiveType: CompileTypeMetadata, template: CompileTemplateMetadata): Promise<CompileTemplateMetadata>;

@@ -10,21 +10,15 @@ /**

var core_1 = require('@angular/core');
var collection_1 = require('../src/facade/collection');
var exceptions_1 = require('../src/facade/exceptions');
var lang_1 = require('../src/facade/lang');
var compile_metadata_1 = require('./compile_metadata');
var config_1 = require('./config');
var html_ast_1 = require('./html_ast');
var html_parser_1 = require('./html_parser');
var collection_1 = require('./facade/collection');
var exceptions_1 = require('./facade/exceptions');
var lang_1 = require('./facade/lang');
var html = require('./ml_parser/ast');
var html_parser_1 = require('./ml_parser/html_parser');
var interpolation_config_1 = require('./ml_parser/interpolation_config');
var style_url_resolver_1 = require('./style_url_resolver');
var template_preparser_1 = require('./template_preparser');
var template_preparser_1 = require('./template_parser/template_preparser');
var url_resolver_1 = require('./url_resolver');
var util_1 = require('./util');
var xhr_1 = require('./xhr');
var NormalizeDirectiveResult = (function () {
function NormalizeDirectiveResult(syncResult, asyncResult) {
this.syncResult = syncResult;
this.asyncResult = asyncResult;
}
return NormalizeDirectiveResult;
}());
exports.NormalizeDirectiveResult = NormalizeDirectiveResult;
var DirectiveNormalizer = (function () {

@@ -59,3 +53,3 @@ function DirectiveNormalizer(_xhr, _urlResolver, _htmlParser, _config) {

// For non components there is nothing to be normalized yet.
return new NormalizeDirectiveResult(directive, Promise.resolve(directive));
return new util_1.SyncAsyncResult(directive, Promise.resolve(directive));
}

@@ -77,7 +71,7 @@ var normalizedTemplateSync = null;

var normalizedDirective = _cloneDirectiveWithTemplate(directive, normalizedTemplateSync);
return new NormalizeDirectiveResult(normalizedDirective, Promise.resolve(normalizedDirective));
return new util_1.SyncAsyncResult(normalizedDirective, Promise.resolve(normalizedDirective));
}
else {
// async case
return new NormalizeDirectiveResult(null, normalizedTemplateAsync
return new util_1.SyncAsyncResult(null, normalizedTemplateAsync
.then(function (normalizedTemplate) { return _this.normalizeExternalStylesheets(normalizedTemplate); })

@@ -99,3 +93,4 @@ .then(function (normalizedTemplate) {

DirectiveNormalizer.prototype.normalizeLoadedTemplate = function (directiveType, templateMeta, template, templateAbsUrl) {
var rootNodesAndErrors = this._htmlParser.parse(template, directiveType.name);
var interpolationConfig = interpolation_config_1.InterpolationConfig.fromArray(templateMeta.interpolation);
var rootNodesAndErrors = this._htmlParser.parse(template, directiveType.name, false, interpolationConfig);
if (rootNodesAndErrors.errors.length > 0) {

@@ -111,3 +106,3 @@ var errorString = rootNodesAndErrors.errors.join('\n');

var visitor = new TemplatePreparseVisitor();
html_ast_1.htmlVisitAll(visitor, rootNodesAndErrors.rootNodes);
html.visitAll(visitor, rootNodesAndErrors.rootNodes);
var templateStyles = this.normalizeStylesheet(new compile_metadata_1.CompileStylesheetMetadata({ styles: visitor.styles, styleUrls: visitor.styleUrls, moduleUrl: templateAbsUrl }));

@@ -205,3 +200,3 @@ var allStyles = templateMetadataStyles.styles.concat(templateStyles.styles);

ast.children.forEach(function (child) {
if (child instanceof html_ast_1.HtmlTextAst) {
if (child instanceof html.Text) {
textContent += child.value;

@@ -216,4 +211,2 @@ }

default:
// DDC reports this as error. See:
// https://github.com/dart-lang/dev_compiler/issues/428
break;

@@ -224,3 +217,3 @@ }

}
html_ast_1.htmlVisitAll(this, ast.children);
html.visitAll(this, ast.children);
if (preparsedElement.nonBindable) {

@@ -232,3 +225,3 @@ this.ngNonBindableStackCount--;

TemplatePreparseVisitor.prototype.visitComment = function (ast, context) { return null; };
TemplatePreparseVisitor.prototype.visitAttr = function (ast, context) { return null; };
TemplatePreparseVisitor.prototype.visitAttribute = function (ast, context) { return null; };
TemplatePreparseVisitor.prototype.visitText = function (ast, context) { return null; };

@@ -251,3 +244,2 @@ TemplatePreparseVisitor.prototype.visitExpansion = function (ast, context) { return null; };

hostAttributes: directive.hostAttributes,
lifecycleHooks: directive.lifecycleHooks,
providers: directive.providers,

@@ -257,3 +249,3 @@ viewProviders: directive.viewProviders,

viewQueries: directive.viewQueries,
precompile: directive.precompile,
entryComponents: directive.entryComponents,
template: template

@@ -260,0 +252,0 @@ });

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"DirectiveNormalizer":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"./xhr","name":"XHR"},{"__symbolic":"reference","module":"./url_resolver","name":"UrlResolver"},{"__symbolic":"reference","module":"./html_parser","name":"HtmlParser"},{"__symbolic":"reference","module":"./config","name":"CompilerConfig"}]}],"clearCache":[{"__symbolic":"method"}],"clearCacheFor":[{"__symbolic":"method"}],"_fetch":[{"__symbolic":"method"}],"normalizeDirective":[{"__symbolic":"method"}],"normalizeTemplateSync":[{"__symbolic":"method"}],"normalizeTemplateAsync":[{"__symbolic":"method"}],"normalizeLoadedTemplate":[{"__symbolic":"method"}],"normalizeExternalStylesheets":[{"__symbolic":"method"}],"_loadMissingExternalStylesheets":[{"__symbolic":"method"}],"normalizeStylesheet":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"DirectiveNormalizer":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"./xhr","name":"XHR"},{"__symbolic":"reference","module":"./url_resolver","name":"UrlResolver"},{"__symbolic":"reference","module":"./ml_parser/html_parser","name":"HtmlParser"},{"__symbolic":"reference","module":"./config","name":"CompilerConfig"}]}],"clearCache":[{"__symbolic":"method"}],"clearCacheFor":[{"__symbolic":"method"}],"_fetch":[{"__symbolic":"method"}],"normalizeDirective":[{"__symbolic":"method"}],"normalizeTemplateSync":[{"__symbolic":"method"}],"normalizeTemplateAsync":[{"__symbolic":"method"}],"normalizeLoadedTemplate":[{"__symbolic":"method"}],"normalizeExternalStylesheets":[{"__symbolic":"method"}],"_loadMissingExternalStylesheets":[{"__symbolic":"method"}],"normalizeStylesheet":[{"__symbolic":"method"}]}}}}

@@ -10,3 +10,3 @@ /**

import { ReflectorReader } from '../core_private';
import { Type } from '../src/facade/lang';
import { Type } from './facade/lang';
export declare class DirectiveResolver {

@@ -18,6 +18,6 @@ private _reflector;

*/
resolve(type: Type): DirectiveMetadata;
resolve(type: Type, throwIfNotFound?: boolean): DirectiveMetadata;
private _mergeWithPropertyMetadata(dm, propertyMetadata, directiveType);
private _extractPublicName(def);
private _merge(dm, inputs, outputs, host, queries, directiveType);
}
export declare var CODEGEN_DIRECTIVE_RESOLVER: DirectiveResolver;

@@ -11,5 +11,6 @@ /**

var core_private_1 = require('../core_private');
var collection_1 = require('../src/facade/collection');
var exceptions_1 = require('../src/facade/exceptions');
var lang_1 = require('../src/facade/lang');
var collection_1 = require('./facade/collection');
var exceptions_1 = require('./facade/exceptions');
var lang_1 = require('./facade/lang');
var util_1 = require('./util');
function _isDirectiveMetadata(type) {

@@ -26,3 +27,4 @@ return type instanceof core_1.DirectiveMetadata;

*/
DirectiveResolver.prototype.resolve = function (type) {
DirectiveResolver.prototype.resolve = function (type, throwIfNotFound) {
if (throwIfNotFound === void 0) { throwIfNotFound = true; }
var typeMetadata = this._reflector.annotations(core_1.resolveForwardRef(type));

@@ -36,3 +38,6 @@ if (lang_1.isPresent(typeMetadata)) {

}
throw new exceptions_1.BaseException("No Directive annotation found on " + lang_1.stringify(type));
if (throwIfNotFound) {
throw new exceptions_1.BaseException("No Directive annotation found on " + lang_1.stringify(type));
}
return null;
};

@@ -54,3 +59,3 @@ DirectiveResolver.prototype._mergeWithPropertyMetadata = function (dm, propertyMetadata, directiveType) {

}
if (a instanceof core_1.OutputMetadata) {
else if (a instanceof core_1.OutputMetadata) {
if (lang_1.isPresent(a.bindingPropertyName)) {

@@ -63,3 +68,3 @@ outputs.push(propName + ": " + a.bindingPropertyName);

}
if (a instanceof core_1.HostBindingMetadata) {
else if (a instanceof core_1.HostBindingMetadata) {
if (lang_1.isPresent(a.hostPropertyName)) {

@@ -72,7 +77,7 @@ host[("[" + a.hostPropertyName + "]")] = propName;

}
if (a instanceof core_1.HostListenerMetadata) {
else if (a instanceof core_1.HostListenerMetadata) {
var args = lang_1.isPresent(a.args) ? a.args.join(', ') : '';
host[("(" + a.eventName + ")")] = propName + "(" + args + ")";
}
if (a instanceof core_1.QueryMetadata) {
else if (a instanceof core_1.QueryMetadata) {
queries[propName] = a;

@@ -84,12 +89,29 @@ }

};
DirectiveResolver.prototype._extractPublicName = function (def) { return util_1.splitAtColon(def, [null, def])[1].trim(); };
DirectiveResolver.prototype._merge = function (dm, inputs, outputs, host, queries, directiveType) {
var mergedInputs = lang_1.isPresent(dm.inputs) ? collection_1.ListWrapper.concat(dm.inputs, inputs) : inputs;
var _this = this;
var mergedInputs;
if (lang_1.isPresent(dm.inputs)) {
var inputNames_1 = dm.inputs.map(function (def) { return _this._extractPublicName(def); });
inputs.forEach(function (inputDef) {
var publicName = _this._extractPublicName(inputDef);
if (inputNames_1.indexOf(publicName) > -1) {
throw new exceptions_1.BaseException("Input '" + publicName + "' defined multiple times in '" + lang_1.stringify(directiveType) + "'");
}
});
mergedInputs = dm.inputs.concat(inputs);
}
else {
mergedInputs = inputs;
}
var mergedOutputs;
if (lang_1.isPresent(dm.outputs)) {
dm.outputs.forEach(function (propName) {
if (collection_1.ListWrapper.contains(outputs, propName)) {
throw new exceptions_1.BaseException("Output event '" + propName + "' defined multiple times in '" + lang_1.stringify(directiveType) + "'");
var outputNames_1 = dm.outputs.map(function (def) { return _this._extractPublicName(def); });
outputs.forEach(function (outputDef) {
var publicName = _this._extractPublicName(outputDef);
if (outputNames_1.indexOf(publicName) > -1) {
throw new exceptions_1.BaseException("Output event '" + publicName + "' defined multiple times in '" + lang_1.stringify(directiveType) + "'");
}
});
mergedOutputs = collection_1.ListWrapper.concat(dm.outputs, outputs);
mergedOutputs = dm.outputs.concat(outputs);
}

@@ -113,3 +135,12 @@ else {

viewProviders: dm.viewProviders,
precompile: dm.precompile
entryComponents: dm.entryComponents,
directives: dm.directives,
pipes: dm.pipes,
template: dm.template,
templateUrl: dm.templateUrl,
styles: dm.styles,
styleUrls: dm.styleUrls,
encapsulation: dm.encapsulation,
animations: dm.animations,
interpolation: dm.interpolation
});

@@ -140,3 +171,2 @@ }

exports.DirectiveResolver = DirectiveResolver;
exports.CODEGEN_DIRECTIVE_RESOLVER = new DirectiveResolver(core_private_1.reflector);
//# sourceMappingURL=directive_resolver.js.map

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"DirectiveResolver":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../core_private","name":"ReflectorReader"}]}],"resolve":[{"__symbolic":"method"}],"_mergeWithPropertyMetadata":[{"__symbolic":"method"}],"_merge":[{"__symbolic":"method"}]}},"CODEGEN_DIRECTIVE_RESOLVER":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"DirectiveResolver"},"arguments":[{"__symbolic":"reference","module":"../core_private","name":"reflector"}]}}}
{"__symbolic":"module","version":1,"metadata":{"DirectiveResolver":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../core_private","name":"ReflectorReader"}]}],"resolve":[{"__symbolic":"method"}],"_mergeWithPropertyMetadata":[{"__symbolic":"method"}],"_extractPublicName":[{"__symbolic":"method"}],"_merge":[{"__symbolic":"method"}]}}}}

@@ -0,2 +1,16 @@

export declare class ParserError {
input: string;
errLocation: string;
ctxLocation: any;
message: string;
constructor(message: string, input: string, errLocation: string, ctxLocation?: any);
}
export declare class ParseSpan {
start: number;
end: number;
constructor(start: number, end: number);
}
export declare class AST {
span: ParseSpan;
constructor(span: ParseSpan);
visit(visitor: AstVisitor, context?: any): any;

@@ -22,3 +36,3 @@ toString(): string;

location: any;
constructor(prefix: string, uninterpretedExpression: string, location: any);
constructor(span: ParseSpan, prefix: string, uninterpretedExpression: string, location: any);
visit(visitor: AstVisitor, context?: any): any;

@@ -38,3 +52,3 @@ toString(): string;

expressions: any[];
constructor(expressions: any[]);
constructor(span: ParseSpan, expressions: any[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -46,3 +60,3 @@ }

falseExp: AST;
constructor(condition: AST, trueExp: AST, falseExp: AST);
constructor(span: ParseSpan, condition: AST, trueExp: AST, falseExp: AST);
visit(visitor: AstVisitor, context?: any): any;

@@ -53,3 +67,3 @@ }

name: string;
constructor(receiver: AST, name: string);
constructor(span: ParseSpan, receiver: AST, name: string);
visit(visitor: AstVisitor, context?: any): any;

@@ -61,3 +75,3 @@ }

value: AST;
constructor(receiver: AST, name: string, value: AST);
constructor(span: ParseSpan, receiver: AST, name: string, value: AST);
visit(visitor: AstVisitor, context?: any): any;

@@ -68,3 +82,3 @@ }

name: string;
constructor(receiver: AST, name: string);
constructor(span: ParseSpan, receiver: AST, name: string);
visit(visitor: AstVisitor, context?: any): any;

@@ -75,3 +89,3 @@ }

key: AST;
constructor(obj: AST, key: AST);
constructor(span: ParseSpan, obj: AST, key: AST);
visit(visitor: AstVisitor, context?: any): any;

@@ -83,3 +97,3 @@ }

value: AST;
constructor(obj: AST, key: AST, value: AST);
constructor(span: ParseSpan, obj: AST, key: AST, value: AST);
visit(visitor: AstVisitor, context?: any): any;

@@ -91,3 +105,3 @@ }

args: any[];
constructor(exp: AST, name: string, args: any[]);
constructor(span: ParseSpan, exp: AST, name: string, args: any[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -97,3 +111,3 @@ }

value: any;
constructor(value: any);
constructor(span: ParseSpan, value: any);
visit(visitor: AstVisitor, context?: any): any;

@@ -103,3 +117,3 @@ }

expressions: any[];
constructor(expressions: any[]);
constructor(span: ParseSpan, expressions: any[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -110,3 +124,3 @@ }

values: any[];
constructor(keys: any[], values: any[]);
constructor(span: ParseSpan, keys: any[], values: any[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -117,3 +131,3 @@ }

expressions: any[];
constructor(strings: any[], expressions: any[]);
constructor(span: ParseSpan, strings: any[], expressions: any[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -125,3 +139,3 @@ }

right: AST;
constructor(operation: string, left: AST, right: AST);
constructor(span: ParseSpan, operation: string, left: AST, right: AST);
visit(visitor: AstVisitor, context?: any): any;

@@ -131,3 +145,3 @@ }

expression: AST;
constructor(expression: AST);
constructor(span: ParseSpan, expression: AST);
visit(visitor: AstVisitor, context?: any): any;

@@ -139,3 +153,3 @@ }

args: any[];
constructor(receiver: AST, name: string, args: any[]);
constructor(span: ParseSpan, receiver: AST, name: string, args: any[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -147,3 +161,3 @@ }

args: any[];
constructor(receiver: AST, name: string, args: any[]);
constructor(span: ParseSpan, receiver: AST, name: string, args: any[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -154,3 +168,3 @@ }

args: any[];
constructor(target: AST, args: any[]);
constructor(span: ParseSpan, target: AST, args: any[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -162,3 +176,4 @@ }

location: string;
constructor(ast: AST, source: string, location: string);
errors: ParserError[];
constructor(ast: AST, source: string, location: string, errors: ParserError[]);
visit(visitor: AstVisitor, context?: any): any;

@@ -165,0 +180,0 @@ toString(): string;

@@ -15,4 +15,24 @@ /**

var collection_1 = require('../facade/collection');
var lang_1 = require('../facade/lang');
var ParserError = (function () {
function ParserError(message, input, errLocation, ctxLocation) {
this.input = input;
this.errLocation = errLocation;
this.ctxLocation = ctxLocation;
this.message = "Parser Error: " + message + " " + errLocation + " [" + input + "] in " + ctxLocation;
}
return ParserError;
}());
exports.ParserError = ParserError;
var ParseSpan = (function () {
function ParseSpan(start, end) {
this.start = start;
this.end = end;
}
return ParseSpan;
}());
exports.ParseSpan = ParseSpan;
var AST = (function () {
function AST() {
function AST(span) {
this.span = span;
}

@@ -42,4 +62,4 @@ AST.prototype.visit = function (visitor, context) {

__extends(Quote, _super);
function Quote(prefix, uninterpretedExpression, location) {
_super.call(this);
function Quote(span, prefix, uninterpretedExpression, location) {
_super.call(this, span);
this.prefix = prefix;

@@ -86,4 +106,4 @@ this.uninterpretedExpression = uninterpretedExpression;

__extends(Chain, _super);
function Chain(expressions) {
_super.call(this);
function Chain(span, expressions) {
_super.call(this, span);
this.expressions = expressions;

@@ -100,4 +120,4 @@ }

__extends(Conditional, _super);
function Conditional(condition, trueExp, falseExp) {
_super.call(this);
function Conditional(span, condition, trueExp, falseExp) {
_super.call(this, span);
this.condition = condition;

@@ -116,4 +136,4 @@ this.trueExp = trueExp;

__extends(PropertyRead, _super);
function PropertyRead(receiver, name) {
_super.call(this);
function PropertyRead(span, receiver, name) {
_super.call(this, span);
this.receiver = receiver;

@@ -131,4 +151,4 @@ this.name = name;

__extends(PropertyWrite, _super);
function PropertyWrite(receiver, name, value) {
_super.call(this);
function PropertyWrite(span, receiver, name, value) {
_super.call(this, span);
this.receiver = receiver;

@@ -147,4 +167,4 @@ this.name = name;

__extends(SafePropertyRead, _super);
function SafePropertyRead(receiver, name) {
_super.call(this);
function SafePropertyRead(span, receiver, name) {
_super.call(this, span);
this.receiver = receiver;

@@ -162,4 +182,4 @@ this.name = name;

__extends(KeyedRead, _super);
function KeyedRead(obj, key) {
_super.call(this);
function KeyedRead(span, obj, key) {
_super.call(this, span);
this.obj = obj;

@@ -177,4 +197,4 @@ this.key = key;

__extends(KeyedWrite, _super);
function KeyedWrite(obj, key, value) {
_super.call(this);
function KeyedWrite(span, obj, key, value) {
_super.call(this, span);
this.obj = obj;

@@ -193,4 +213,4 @@ this.key = key;

__extends(BindingPipe, _super);
function BindingPipe(exp, name, args) {
_super.call(this);
function BindingPipe(span, exp, name, args) {
_super.call(this, span);
this.exp = exp;

@@ -209,4 +229,4 @@ this.name = name;

__extends(LiteralPrimitive, _super);
function LiteralPrimitive(value) {
_super.call(this);
function LiteralPrimitive(span, value) {
_super.call(this, span);
this.value = value;

@@ -223,4 +243,4 @@ }

__extends(LiteralArray, _super);
function LiteralArray(expressions) {
_super.call(this);
function LiteralArray(span, expressions) {
_super.call(this, span);
this.expressions = expressions;

@@ -237,4 +257,4 @@ }

__extends(LiteralMap, _super);
function LiteralMap(keys, values) {
_super.call(this);
function LiteralMap(span, keys, values) {
_super.call(this, span);
this.keys = keys;

@@ -252,4 +272,4 @@ this.values = values;

__extends(Interpolation, _super);
function Interpolation(strings, expressions) {
_super.call(this);
function Interpolation(span, strings, expressions) {
_super.call(this, span);
this.strings = strings;

@@ -267,4 +287,4 @@ this.expressions = expressions;

__extends(Binary, _super);
function Binary(operation, left, right) {
_super.call(this);
function Binary(span, operation, left, right) {
_super.call(this, span);
this.operation = operation;

@@ -283,4 +303,4 @@ this.left = left;

__extends(PrefixNot, _super);
function PrefixNot(expression) {
_super.call(this);
function PrefixNot(span, expression) {
_super.call(this, span);
this.expression = expression;

@@ -297,4 +317,4 @@ }

__extends(MethodCall, _super);
function MethodCall(receiver, name, args) {
_super.call(this);
function MethodCall(span, receiver, name, args) {
_super.call(this, span);
this.receiver = receiver;

@@ -313,4 +333,4 @@ this.name = name;

__extends(SafeMethodCall, _super);
function SafeMethodCall(receiver, name, args) {
_super.call(this);
function SafeMethodCall(span, receiver, name, args) {
_super.call(this, span);
this.receiver = receiver;

@@ -329,4 +349,4 @@ this.name = name;

__extends(FunctionCall, _super);
function FunctionCall(target, args) {
_super.call(this);
function FunctionCall(span, target, args) {
_super.call(this, span);
this.target = target;

@@ -344,7 +364,8 @@ this.args = args;

__extends(ASTWithSource, _super);
function ASTWithSource(ast, source, location) {
_super.call(this);
function ASTWithSource(ast, source, location, errors) {
_super.call(this, new ParseSpan(0, lang_1.isBlank(source) ? 0 : source.length));
this.ast = ast;
this.source = source;
this.location = location;
this.errors = errors;
}

@@ -453,48 +474,48 @@ ASTWithSource.prototype.visit = function (visitor, context) {

AstTransformer.prototype.visitInterpolation = function (ast, context) {
return new Interpolation(ast.strings, this.visitAll(ast.expressions));
return new Interpolation(ast.span, ast.strings, this.visitAll(ast.expressions));
};
AstTransformer.prototype.visitLiteralPrimitive = function (ast, context) {
return new LiteralPrimitive(ast.value);
return new LiteralPrimitive(ast.span, ast.value);
};
AstTransformer.prototype.visitPropertyRead = function (ast, context) {
return new PropertyRead(ast.receiver.visit(this), ast.name);
return new PropertyRead(ast.span, ast.receiver.visit(this), ast.name);
};
AstTransformer.prototype.visitPropertyWrite = function (ast, context) {
return new PropertyWrite(ast.receiver.visit(this), ast.name, ast.value);
return new PropertyWrite(ast.span, ast.receiver.visit(this), ast.name, ast.value);
};
AstTransformer.prototype.visitSafePropertyRead = function (ast, context) {
return new SafePropertyRead(ast.receiver.visit(this), ast.name);
return new SafePropertyRead(ast.span, ast.receiver.visit(this), ast.name);
};
AstTransformer.prototype.visitMethodCall = function (ast, context) {
return new MethodCall(ast.receiver.visit(this), ast.name, this.visitAll(ast.args));
return new MethodCall(ast.span, ast.receiver.visit(this), ast.name, this.visitAll(ast.args));
};
AstTransformer.prototype.visitSafeMethodCall = function (ast, context) {
return new SafeMethodCall(ast.receiver.visit(this), ast.name, this.visitAll(ast.args));
return new SafeMethodCall(ast.span, ast.receiver.visit(this), ast.name, this.visitAll(ast.args));
};
AstTransformer.prototype.visitFunctionCall = function (ast, context) {
return new FunctionCall(ast.target.visit(this), this.visitAll(ast.args));
return new FunctionCall(ast.span, ast.target.visit(this), this.visitAll(ast.args));
};
AstTransformer.prototype.visitLiteralArray = function (ast, context) {
return new LiteralArray(this.visitAll(ast.expressions));
return new LiteralArray(ast.span, this.visitAll(ast.expressions));
};
AstTransformer.prototype.visitLiteralMap = function (ast, context) {
return new LiteralMap(ast.keys, this.visitAll(ast.values));
return new LiteralMap(ast.span, ast.keys, this.visitAll(ast.values));
};
AstTransformer.prototype.visitBinary = function (ast, context) {
return new Binary(ast.operation, ast.left.visit(this), ast.right.visit(this));
return new Binary(ast.span, ast.operation, ast.left.visit(this), ast.right.visit(this));
};
AstTransformer.prototype.visitPrefixNot = function (ast, context) {
return new PrefixNot(ast.expression.visit(this));
return new PrefixNot(ast.span, ast.expression.visit(this));
};
AstTransformer.prototype.visitConditional = function (ast, context) {
return new Conditional(ast.condition.visit(this), ast.trueExp.visit(this), ast.falseExp.visit(this));
return new Conditional(ast.span, ast.condition.visit(this), ast.trueExp.visit(this), ast.falseExp.visit(this));
};
AstTransformer.prototype.visitPipe = function (ast, context) {
return new BindingPipe(ast.exp.visit(this), ast.name, this.visitAll(ast.args));
return new BindingPipe(ast.span, ast.exp.visit(this), ast.name, this.visitAll(ast.args));
};
AstTransformer.prototype.visitKeyedRead = function (ast, context) {
return new KeyedRead(ast.obj.visit(this), ast.key.visit(this));
return new KeyedRead(ast.span, ast.obj.visit(this), ast.key.visit(this));
};
AstTransformer.prototype.visitKeyedWrite = function (ast, context) {
return new KeyedWrite(ast.obj.visit(this), ast.key.visit(this), ast.value.visit(this));
return new KeyedWrite(ast.span, ast.obj.visit(this), ast.key.visit(this), ast.value.visit(this));
};

@@ -508,5 +529,7 @@ AstTransformer.prototype.visitAll = function (asts) {

};
AstTransformer.prototype.visitChain = function (ast, context) { return new Chain(this.visitAll(ast.expressions)); };
AstTransformer.prototype.visitChain = function (ast, context) {
return new Chain(ast.span, this.visitAll(ast.expressions));
};
AstTransformer.prototype.visitQuote = function (ast, context) {
return new Quote(ast.prefix, ast.uninterpretedExpression, ast.location);
return new Quote(ast.span, ast.prefix, ast.uninterpretedExpression, ast.location);
};

@@ -513,0 +536,0 @@ return AstTransformer;

@@ -1,2 +0,1 @@

import { BaseException } from '../facade/exceptions';
export declare enum TokenType {

@@ -9,5 +8,6 @@ Character = 0,

Number = 5,
Error = 6,
}
export declare class Lexer {
tokenize(text: string): any[];
tokenize(text: string): Token[];
}

@@ -32,2 +32,4 @@ export declare class Token {

isKeywordFalse(): boolean;
isKeywordThis(): boolean;
isError(): boolean;
toNumber(): number;

@@ -37,8 +39,3 @@ toString(): string;

export declare var EOF: Token;
export declare class ScannerError extends BaseException {
message: string;
constructor(message: string);
toString(): string;
}
export declare function isIdentifier(input: string): boolean;
export declare function isQuote(code: number): boolean;

@@ -9,10 +9,4 @@ /**

"use strict";
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var core_1 = require('@angular/core');
var chars = require('../chars');
var exceptions_1 = require('../facade/exceptions');
var lang_1 = require('../facade/lang');

@@ -26,5 +20,6 @@ (function (TokenType) {

TokenType[TokenType["Number"] = 5] = "Number";
TokenType[TokenType["Error"] = 6] = "Error";
})(exports.TokenType || (exports.TokenType = {}));
var TokenType = exports.TokenType;
var KEYWORDS = ['var', 'let', 'null', 'undefined', 'true', 'false', 'if', 'else'];
var KEYWORDS = ['var', 'let', 'null', 'undefined', 'true', 'false', 'if', 'else', 'this'];
var Lexer = (function () {

@@ -58,25 +53,24 @@ function Lexer() {

Token.prototype.isCharacter = function (code) {
return (this.type == TokenType.Character && this.numValue == code);
return this.type == TokenType.Character && this.numValue == code;
};
Token.prototype.isNumber = function () { return (this.type == TokenType.Number); };
Token.prototype.isString = function () { return (this.type == TokenType.String); };
Token.prototype.isNumber = function () { return this.type == TokenType.Number; };
Token.prototype.isString = function () { return this.type == TokenType.String; };
Token.prototype.isOperator = function (operater) {
return (this.type == TokenType.Operator && this.strValue == operater);
return this.type == TokenType.Operator && this.strValue == operater;
};
Token.prototype.isIdentifier = function () { return (this.type == TokenType.Identifier); };
Token.prototype.isKeyword = function () { return (this.type == TokenType.Keyword); };
Token.prototype.isIdentifier = function () { return this.type == TokenType.Identifier; };
Token.prototype.isKeyword = function () { return this.type == TokenType.Keyword; };
Token.prototype.isKeywordDeprecatedVar = function () {
return (this.type == TokenType.Keyword && this.strValue == 'var');
return this.type == TokenType.Keyword && this.strValue == 'var';
};
Token.prototype.isKeywordLet = function () { return (this.type == TokenType.Keyword && this.strValue == 'let'); };
Token.prototype.isKeywordNull = function () { return (this.type == TokenType.Keyword && this.strValue == 'null'); };
Token.prototype.isKeywordLet = function () { return this.type == TokenType.Keyword && this.strValue == 'let'; };
Token.prototype.isKeywordNull = function () { return this.type == TokenType.Keyword && this.strValue == 'null'; };
Token.prototype.isKeywordUndefined = function () {
return (this.type == TokenType.Keyword && this.strValue == 'undefined');
return this.type == TokenType.Keyword && this.strValue == 'undefined';
};
Token.prototype.isKeywordTrue = function () { return (this.type == TokenType.Keyword && this.strValue == 'true'); };
Token.prototype.isKeywordFalse = function () { return (this.type == TokenType.Keyword && this.strValue == 'false'); };
Token.prototype.toNumber = function () {
// -1 instead of NULL ok?
return (this.type == TokenType.Number) ? this.numValue : -1;
};
Token.prototype.isKeywordTrue = function () { return this.type == TokenType.Keyword && this.strValue == 'true'; };
Token.prototype.isKeywordFalse = function () { return this.type == TokenType.Keyword && this.strValue == 'false'; };
Token.prototype.isKeywordThis = function () { return this.type == TokenType.Keyword && this.strValue == 'this'; };
Token.prototype.isError = function () { return this.type == TokenType.Error; };
Token.prototype.toNumber = function () { return this.type == TokenType.Number ? this.numValue : -1; };
Token.prototype.toString = function () {

@@ -89,2 +83,3 @@ switch (this.type) {

case TokenType.String:
case TokenType.Error:
return this.strValue;

@@ -118,13 +113,6 @@ case TokenType.Number:

}
function newErrorToken(index, message) {
return new Token(index, TokenType.Error, 0, message);
}
exports.EOF = new Token(-1, TokenType.Character, 0, '');
var ScannerError = (function (_super) {
__extends(ScannerError, _super);
function ScannerError(message) {
_super.call(this);
this.message = message;
}
ScannerError.prototype.toString = function () { return this.message; };
return ScannerError;
}(exceptions_1.BaseException));
exports.ScannerError = ScannerError;
var _Scanner = (function () {

@@ -208,4 +196,4 @@ function _Scanner(input) {

}
this.error("Unexpected character [" + lang_1.StringWrapper.fromCharCode(peek) + "]", 0);
return null;
this.advance();
return this.error("Unexpected character [" + lang_1.StringWrapper.fromCharCode(peek) + "]", 0);
};

@@ -267,3 +255,3 @@ _Scanner.prototype.scanCharacter = function (start, code) {

if (!chars.isDigit(this.peek))
this.error('Invalid exponent', -1);
return this.error('Invalid exponent', -1);
simple = false;

@@ -301,3 +289,3 @@ }

catch (e) {
this.error("Invalid unicode escape [\\u" + hex + "]", 0);
return this.error("Invalid unicode escape [\\u" + hex + "]", 0);
}

@@ -316,3 +304,3 @@ for (var i = 0; i < 5; i++) {

else if (this.peek == chars.$EOF) {
this.error('Unterminated quote', 0);
return this.error('Unterminated quote', 0);
}

@@ -335,3 +323,3 @@ else {

var position = this.index + offset;
throw new ScannerError("Lexer Error: " + message + " at column " + position + " in expression [" + this.input + "]");
return newErrorToken(position, "Lexer Error: " + message + " at column " + position + " in expression [" + this.input + "]");
};

@@ -338,0 +326,0 @@ return _Scanner;

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"Lexer":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"tokenize":[{"__symbolic":"method"}]}},"EOF":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"Token"},"arguments":[-1,{"__symbolic":"select","expression":{"__symbolic":"reference","name":"TokenType"},"member":"Character"},0,""]},"isQuote":{"__symbolic":"function","parameters":["code"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"code"},"right":{"__symbolic":"reference","module":"../chars","name":"$SQ"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"code"},"right":{"__symbolic":"reference","module":"../chars","name":"$DQ"}}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"code"},"right":{"__symbolic":"reference","module":"../chars","name":"$BT"}}}}}}
{"__symbolic":"module","version":1,"metadata":{"TokenType":{"Character":0,"Identifier":1,"Keyword":2,"String":3,"Operator":4,"Number":5,"Error":6},"Lexer":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"tokenize":[{"__symbolic":"method"}]}},"EOF":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"Token"},"arguments":[-1,{"__symbolic":"select","expression":{"__symbolic":"reference","name":"TokenType"},"member":"Character"},0,""]},"isQuote":{"__symbolic":"function","parameters":["code"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"code"},"right":{"__symbolic":"reference","module":"../chars","name":"$SQ"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"code"},"right":{"__symbolic":"reference","module":"../chars","name":"$DQ"}}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"code"},"right":{"__symbolic":"reference","module":"../chars","name":"$BT"}}}}}}

@@ -1,3 +0,3 @@

import { InterpolationConfig } from '../interpolation_config';
import { AST, ASTWithSource, BindingPipe, LiteralMap, TemplateBinding } from './ast';
import { InterpolationConfig } from '../ml_parser/interpolation_config';
import { AST, ASTWithSource, BindingPipe, LiteralMap, ParseSpan, ParserError, TemplateBinding } from './ast';
import { Lexer, Token } from './lexer';

@@ -12,10 +12,13 @@ export declare class SplitInterpolation {

warnings: string[];
constructor(templateBindings: TemplateBinding[], warnings: string[]);
errors: ParserError[];
constructor(templateBindings: TemplateBinding[], warnings: string[], errors: ParserError[]);
}
export declare class Parser {
/** @internal */ _lexer: Lexer;
constructor(/** @internal */ _lexer: Lexer);
private _lexer;
private errors;
constructor(_lexer: Lexer);
parseAction(input: string, location: any, interpolationConfig?: InterpolationConfig): ASTWithSource;
parseBinding(input: string, location: any, interpolationConfig?: InterpolationConfig): ASTWithSource;
parseSimpleBinding(input: string, location: string, interpolationConfig?: InterpolationConfig): ASTWithSource;
private _reportError(message, input, errLocation, ctxLocation?);
private _parseBindingAst(input, location, interpolationConfig);

@@ -37,7 +40,12 @@ private _parseQuote(input, location);

parseAction: boolean;
private errors;
private rparensExpected;
private rbracketsExpected;
private rbracesExpected;
index: number;
constructor(input: string, location: any, tokens: any[], parseAction: boolean);
constructor(input: string, location: any, tokens: any[], parseAction: boolean, errors: ParserError[]);
peek(offset: number): Token;
next: Token;
inputIndex: number;
span(start: number): ParseSpan;
advance(): void;

@@ -76,2 +84,4 @@ optionalCharacter(code: number): boolean;

error(message: string, index?: number): void;
private locationText(index?);
private skip();
}

@@ -9,23 +9,8 @@ /**

"use strict";
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var core_1 = require('@angular/core');
var chars = require('../chars');
var collection_1 = require('../facade/collection');
var exceptions_1 = require('../facade/exceptions');
var lang_1 = require('../facade/lang');
var interpolation_config_1 = require('../interpolation_config');
var interpolation_config_1 = require('../ml_parser/interpolation_config');
var ast_1 = require('./ast');
var lexer_1 = require('./lexer');
var _implicitReceiver = new ast_1.ImplicitReceiver();
var ParseException = (function (_super) {
__extends(ParseException, _super);
function ParseException(message, input, errLocation, ctxLocation) {
_super.call(this, "Parser Error: " + message + " " + errLocation + " [" + input + "] in " + ctxLocation);
}
return ParseException;
}(exceptions_1.BaseException));
var SplitInterpolation = (function () {

@@ -40,5 +25,6 @@ function SplitInterpolation(strings, expressions) {

var TemplateBindingParseResult = (function () {
function TemplateBindingParseResult(templateBindings, warnings) {
function TemplateBindingParseResult(templateBindings, warnings, errors) {
this.templateBindings = templateBindings;
this.warnings = warnings;
this.errors = errors;
}

@@ -49,8 +35,9 @@ return TemplateBindingParseResult;

function _createInterpolateRegExp(config) {
var regexp = lang_1.escapeRegExp(config.start) + '([\\s\\S]*?)' + lang_1.escapeRegExp(config.end);
return lang_1.RegExpWrapper.create(regexp, 'g');
var pattern = lang_1.escapeRegExp(config.start) + '([\\s\\S]*?)' + lang_1.escapeRegExp(config.end);
return new RegExp(pattern, 'g');
}
var Parser = (function () {
function Parser(/** @internal */ _lexer) {
function Parser(_lexer) {
this._lexer = _lexer;
this.errors = [];
}

@@ -61,4 +48,4 @@ Parser.prototype.parseAction = function (input, location, interpolationConfig) {

var tokens = this._lexer.tokenize(this._stripComments(input));
var ast = new _ParseAST(input, location, tokens, true).parseChain();
return new ast_1.ASTWithSource(ast, input, location);
var ast = new _ParseAST(input, location, tokens, true, this.errors).parseChain();
return new ast_1.ASTWithSource(ast, input, location, this.errors);
};

@@ -68,3 +55,3 @@ Parser.prototype.parseBinding = function (input, location, interpolationConfig) {

var ast = this._parseBindingAst(input, location, interpolationConfig);
return new ast_1.ASTWithSource(ast, input, location);
return new ast_1.ASTWithSource(ast, input, location, this.errors);
};

@@ -75,6 +62,9 @@ Parser.prototype.parseSimpleBinding = function (input, location, interpolationConfig) {

if (!SimpleExpressionChecker.check(ast)) {
throw new ParseException('Host binding expression can only contain field access and constants', input, location);
this._reportError('Host binding expression can only contain field access and constants', input, location);
}
return new ast_1.ASTWithSource(ast, input, location);
return new ast_1.ASTWithSource(ast, input, location, this.errors);
};
Parser.prototype._reportError = function (message, input, errLocation, ctxLocation) {
this.errors.push(new ast_1.ParserError(message, input, errLocation, ctxLocation));
};
Parser.prototype._parseBindingAst = function (input, location, interpolationConfig) {

@@ -89,3 +79,3 @@ // Quotes expressions use 3rd-party expression language. We don't want to use

var tokens = this._lexer.tokenize(this._stripComments(input));
return new _ParseAST(input, location, tokens, false).parseChain();
return new _ParseAST(input, location, tokens, false, this.errors).parseChain();
};

@@ -102,7 +92,7 @@ Parser.prototype._parseQuote = function (input, location) {

var uninterpretedExpression = input.substring(prefixSeparatorIndex + 1);
return new ast_1.Quote(prefix, uninterpretedExpression, location);
return new ast_1.Quote(new ast_1.ParseSpan(0, input.length), prefix, uninterpretedExpression, location);
};
Parser.prototype.parseTemplateBindings = function (input, location) {
var tokens = this._lexer.tokenize(input);
return new _ParseAST(input, location, tokens, false).parseTemplateBindings();
return new _ParseAST(input, location, tokens, false, this.errors).parseTemplateBindings();
};

@@ -117,6 +107,6 @@ Parser.prototype.parseInterpolation = function (input, location, interpolationConfig) {

var tokens = this._lexer.tokenize(this._stripComments(split.expressions[i]));
var ast = new _ParseAST(input, location, tokens, false).parseChain();
var ast = new _ParseAST(input, location, tokens, false, this.errors).parseChain();
expressions.push(ast);
}
return new ast_1.ASTWithSource(new ast_1.Interpolation(split.strings, expressions), input, location);
return new ast_1.ASTWithSource(new ast_1.Interpolation(new ast_1.ParseSpan(0, lang_1.isBlank(input) ? 0 : input.length), split.strings, expressions), input, location, this.errors);
};

@@ -142,3 +132,3 @@ Parser.prototype.splitInterpolation = function (input, location, interpolationConfig) {

else {
throw new ParseException('Blank expressions are not allowed in interpolated strings', input, "at column " + this._findInterpolationErrorColumn(parts, i, interpolationConfig) + " in", location);
this._reportError('Blank expressions are not allowed in interpolated strings', input, "at column " + this._findInterpolationErrorColumn(parts, i, interpolationConfig) + " in", location);
}

@@ -149,3 +139,3 @@ }

Parser.prototype.wrapLiteralPrimitive = function (input, location) {
return new ast_1.ASTWithSource(new ast_1.LiteralPrimitive(input), input, location);
return new ast_1.ASTWithSource(new ast_1.LiteralPrimitive(new ast_1.ParseSpan(0, lang_1.isBlank(input) ? 0 : input.length), input), input, location, this.errors);
};

@@ -176,3 +166,3 @@ Parser.prototype._stripComments = function (input) {

if (parts.length > 1) {
throw new ParseException("Got interpolation (" + interpolationConfig.start + interpolationConfig.end + ") where expression was expected", input, "at column " + this._findInterpolationErrorColumn(parts, 1, interpolationConfig) + " in", location);
this._reportError("Got interpolation (" + interpolationConfig.start + interpolationConfig.end + ") where expression was expected", input, "at column " + this._findInterpolationErrorColumn(parts, 1, interpolationConfig) + " in", location);
}

@@ -201,3 +191,3 @@ };

var _ParseAST = (function () {
function _ParseAST(input, location, tokens, parseAction) {
function _ParseAST(input, location, tokens, parseAction, errors) {
this.input = input;

@@ -207,2 +197,6 @@ this.location = location;

this.parseAction = parseAction;
this.errors = errors;
this.rparensExpected = 0;
this.rbracketsExpected = 0;
this.rbracesExpected = 0;
this.index = 0;

@@ -226,2 +220,3 @@ }

});
_ParseAST.prototype.span = function (start) { return new ast_1.ParseSpan(start, this.inputIndex); };
_ParseAST.prototype.advance = function () { this.index++; };

@@ -263,2 +258,3 @@ _ParseAST.prototype.optionalCharacter = function (code) {

this.error("Unexpected token " + n + ", expected identifier or keyword");
return '';
}

@@ -272,2 +268,3 @@ this.advance();

this.error("Unexpected token " + n + ", expected identifier, keyword, or string");
return '';
}

@@ -279,2 +276,3 @@ this.advance();

var exprs = [];
var start = this.inputIndex;
while (this.index < this.tokens.length) {

@@ -295,6 +293,6 @@ var expr = this.parsePipe();

if (exprs.length == 0)
return new ast_1.EmptyExpr();
return new ast_1.EmptyExpr(this.span(start));
if (exprs.length == 1)
return exprs[0];
return new ast_1.Chain(exprs);
return new ast_1.Chain(this.span(start), exprs);
};

@@ -313,3 +311,3 @@ _ParseAST.prototype.parsePipe = function () {

}
result = new ast_1.BindingPipe(result, name, args);
result = new ast_1.BindingPipe(this.span(result.span.start), result, name, args);
} while (this.optionalOperator('|'));

@@ -325,2 +323,3 @@ }

var yes = this.parsePipe();
var no = void 0;
if (!this.optionalCharacter(chars.$COLON)) {

@@ -330,5 +329,8 @@ var end = this.inputIndex;

this.error("Conditional expression " + expression + " requires all 3 expressions");
no = new ast_1.EmptyExpr(this.span(start));
}
var no = this.parsePipe();
return new ast_1.Conditional(result, yes, no);
else {
no = this.parsePipe();
}
return new ast_1.Conditional(this.span(start), result, yes, no);
}

@@ -343,3 +345,4 @@ else {

while (this.optionalOperator('||')) {
result = new ast_1.Binary('||', result, this.parseLogicalAnd());
var right = this.parseLogicalAnd();
result = new ast_1.Binary(this.span(result.span.start), '||', result, right);
}

@@ -352,3 +355,4 @@ return result;

while (this.optionalOperator('&&')) {
result = new ast_1.Binary('&&', result, this.parseEquality());
var right = this.parseEquality();
result = new ast_1.Binary(this.span(result.span.start), '&&', result, right);
}

@@ -360,19 +364,17 @@ return result;

var result = this.parseRelational();
while (true) {
if (this.optionalOperator('==')) {
result = new ast_1.Binary('==', result, this.parseRelational());
while (this.next.type == lexer_1.TokenType.Operator) {
var operator = this.next.strValue;
switch (operator) {
case '==':
case '===':
case '!=':
case '!==':
this.advance();
var right = this.parseRelational();
result = new ast_1.Binary(this.span(result.span.start), operator, result, right);
continue;
}
else if (this.optionalOperator('===')) {
result = new ast_1.Binary('===', result, this.parseRelational());
}
else if (this.optionalOperator('!=')) {
result = new ast_1.Binary('!=', result, this.parseRelational());
}
else if (this.optionalOperator('!==')) {
result = new ast_1.Binary('!==', result, this.parseRelational());
}
else {
return result;
}
break;
}
return result;
};

@@ -382,19 +384,17 @@ _ParseAST.prototype.parseRelational = function () {

var result = this.parseAdditive();
while (true) {
if (this.optionalOperator('<')) {
result = new ast_1.Binary('<', result, this.parseAdditive());
while (this.next.type == lexer_1.TokenType.Operator) {
var operator = this.next.strValue;
switch (operator) {
case '<':
case '>':
case '<=':
case '>=':
this.advance();
var right = this.parseAdditive();
result = new ast_1.Binary(this.span(result.span.start), operator, result, right);
continue;
}
else if (this.optionalOperator('>')) {
result = new ast_1.Binary('>', result, this.parseAdditive());
}
else if (this.optionalOperator('<=')) {
result = new ast_1.Binary('<=', result, this.parseAdditive());
}
else if (this.optionalOperator('>=')) {
result = new ast_1.Binary('>=', result, this.parseAdditive());
}
else {
return result;
}
break;
}
return result;
};

@@ -404,13 +404,15 @@ _ParseAST.prototype.parseAdditive = function () {

var result = this.parseMultiplicative();
while (true) {
if (this.optionalOperator('+')) {
result = new ast_1.Binary('+', result, this.parseMultiplicative());
while (this.next.type == lexer_1.TokenType.Operator) {
var operator = this.next.strValue;
switch (operator) {
case '+':
case '-':
this.advance();
var right = this.parseMultiplicative();
result = new ast_1.Binary(this.span(result.span.start), operator, result, right);
continue;
}
else if (this.optionalOperator('-')) {
result = new ast_1.Binary('-', result, this.parseMultiplicative());
}
else {
return result;
}
break;
}
return result;
};

@@ -420,30 +422,37 @@ _ParseAST.prototype.parseMultiplicative = function () {

var result = this.parsePrefix();
while (true) {
if (this.optionalOperator('*')) {
result = new ast_1.Binary('*', result, this.parsePrefix());
while (this.next.type == lexer_1.TokenType.Operator) {
var operator = this.next.strValue;
switch (operator) {
case '*':
case '%':
case '/':
this.advance();
var right = this.parsePrefix();
result = new ast_1.Binary(this.span(result.span.start), operator, result, right);
continue;
}
else if (this.optionalOperator('%')) {
result = new ast_1.Binary('%', result, this.parsePrefix());
}
else if (this.optionalOperator('/')) {
result = new ast_1.Binary('/', result, this.parsePrefix());
}
else {
return result;
}
break;
}
return result;
};
_ParseAST.prototype.parsePrefix = function () {
if (this.optionalOperator('+')) {
return this.parsePrefix();
if (this.next.type == lexer_1.TokenType.Operator) {
var start = this.inputIndex;
var operator = this.next.strValue;
var result = void 0;
switch (operator) {
case '+':
this.advance();
return this.parsePrefix();
case '-':
this.advance();
result = this.parsePrefix();
return new ast_1.Binary(this.span(start), operator, new ast_1.LiteralPrimitive(new ast_1.ParseSpan(start, start), 0), result);
case '!':
this.advance();
result = this.parsePrefix();
return new ast_1.PrefixNot(this.span(start), result);
}
}
else if (this.optionalOperator('-')) {
return new ast_1.Binary('-', new ast_1.LiteralPrimitive(0), this.parsePrefix());
}
else if (this.optionalOperator('!')) {
return new ast_1.PrefixNot(this.parsePrefix());
}
else {
return this.parseCallChain();
}
return this.parseCallChain();
};

@@ -460,16 +469,20 @@ _ParseAST.prototype.parseCallChain = function () {

else if (this.optionalCharacter(chars.$LBRACKET)) {
this.rbracketsExpected++;
var key = this.parsePipe();
this.rbracketsExpected--;
this.expectCharacter(chars.$RBRACKET);
if (this.optionalOperator('=')) {
var value = this.parseConditional();
result = new ast_1.KeyedWrite(result, key, value);
result = new ast_1.KeyedWrite(this.span(result.span.start), result, key, value);
}
else {
result = new ast_1.KeyedRead(result, key);
result = new ast_1.KeyedRead(this.span(result.span.start), result, key);
}
}
else if (this.optionalCharacter(chars.$LPAREN)) {
this.rparensExpected++;
var args = this.parseCallArguments();
this.rparensExpected--;
this.expectCharacter(chars.$RPAREN);
result = new ast_1.FunctionCall(result, args);
result = new ast_1.FunctionCall(this.span(result.span.start), result, args);
}

@@ -482,23 +495,36 @@ else {

_ParseAST.prototype.parsePrimary = function () {
var start = this.inputIndex;
if (this.optionalCharacter(chars.$LPAREN)) {
this.rparensExpected++;
var result = this.parsePipe();
this.rparensExpected--;
this.expectCharacter(chars.$RPAREN);
return result;
}
else if (this.next.isKeywordNull() || this.next.isKeywordUndefined()) {
else if (this.next.isKeywordNull()) {
this.advance();
return new ast_1.LiteralPrimitive(null);
return new ast_1.LiteralPrimitive(this.span(start), null);
}
else if (this.next.isKeywordUndefined()) {
this.advance();
return new ast_1.LiteralPrimitive(this.span(start), void 0);
}
else if (this.next.isKeywordTrue()) {
this.advance();
return new ast_1.LiteralPrimitive(true);
return new ast_1.LiteralPrimitive(this.span(start), true);
}
else if (this.next.isKeywordFalse()) {
this.advance();
return new ast_1.LiteralPrimitive(false);
return new ast_1.LiteralPrimitive(this.span(start), false);
}
else if (this.next.isKeywordThis()) {
this.advance();
return new ast_1.ImplicitReceiver(this.span(start));
}
else if (this.optionalCharacter(chars.$LBRACKET)) {
this.rbracketsExpected++;
var elements = this.parseExpressionList(chars.$RBRACKET);
this.rbracketsExpected--;
this.expectCharacter(chars.$RBRACKET);
return new ast_1.LiteralArray(elements);
return new ast_1.LiteralArray(this.span(start), elements);
}

@@ -509,3 +535,3 @@ else if (this.next.isCharacter(chars.$LBRACE)) {

else if (this.next.isIdentifier()) {
return this.parseAccessMemberOrMethodCall(_implicitReceiver, false);
return this.parseAccessMemberOrMethodCall(new ast_1.ImplicitReceiver(this.span(start)), false);
}

@@ -515,3 +541,3 @@ else if (this.next.isNumber()) {

this.advance();
return new ast_1.LiteralPrimitive(value);
return new ast_1.LiteralPrimitive(this.span(start), value);
}

@@ -521,12 +547,12 @@ else if (this.next.isString()) {

this.advance();
return new ast_1.LiteralPrimitive(literalValue);
return new ast_1.LiteralPrimitive(this.span(start), literalValue);
}
else if (this.index >= this.tokens.length) {
this.error("Unexpected end of expression: " + this.input);
return new ast_1.EmptyExpr(this.span(start));
}
else {
this.error("Unexpected token " + this.next);
return new ast_1.EmptyExpr(this.span(start));
}
// error() throws, so we don't reach here.
throw new exceptions_1.BaseException('Fell through all cases in parsePrimary');
};

@@ -545,4 +571,6 @@ _ParseAST.prototype.parseExpressionList = function (terminator) {

var values = [];
var start = this.inputIndex;
this.expectCharacter(chars.$LBRACE);
if (!this.optionalCharacter(chars.$RBRACE)) {
this.rbracesExpected++;
do {

@@ -554,13 +582,19 @@ var key = this.expectIdentifierOrKeywordOrString();

} while (this.optionalCharacter(chars.$COMMA));
this.rbracesExpected--;
this.expectCharacter(chars.$RBRACE);
}
return new ast_1.LiteralMap(keys, values);
return new ast_1.LiteralMap(this.span(start), keys, values);
};
_ParseAST.prototype.parseAccessMemberOrMethodCall = function (receiver, isSafe) {
if (isSafe === void 0) { isSafe = false; }
var start = receiver.span.start;
var id = this.expectIdentifierOrKeyword();
if (this.optionalCharacter(chars.$LPAREN)) {
this.rparensExpected++;
var args = this.parseCallArguments();
this.expectCharacter(chars.$RPAREN);
return isSafe ? new ast_1.SafeMethodCall(receiver, id, args) : new ast_1.MethodCall(receiver, id, args);
this.rparensExpected--;
var span = this.span(start);
return isSafe ? new ast_1.SafeMethodCall(span, receiver, id, args) :
new ast_1.MethodCall(span, receiver, id, args);
}

@@ -571,5 +605,6 @@ else {

this.error('The \'?.\' operator cannot be used in the assignment');
return new ast_1.EmptyExpr(this.span(start));
}
else {
return new ast_1.SafePropertyRead(receiver, id);
return new ast_1.SafePropertyRead(this.span(start), receiver, id);
}

@@ -581,12 +616,12 @@ }

this.error('Bindings cannot contain assignments');
return new ast_1.EmptyExpr(this.span(start));
}
var value = this.parseConditional();
return new ast_1.PropertyWrite(receiver, id, value);
return new ast_1.PropertyWrite(this.span(start), receiver, id, value);
}
else {
return new ast_1.PropertyRead(receiver, id);
return new ast_1.PropertyRead(this.span(start), receiver, id);
}
}
}
return null;
};

@@ -659,3 +694,3 @@ _ParseAST.prototype.parseCallArguments = function () {

var source = this.input.substring(start, this.inputIndex);
expression = new ast_1.ASTWithSource(ast, source, this.location);
expression = new ast_1.ASTWithSource(ast, source, this.location, this.errors);
}

@@ -667,12 +702,41 @@ bindings.push(new ast_1.TemplateBinding(key, keyIsVar, name, expression));

}
return new TemplateBindingParseResult(bindings, warnings);
return new TemplateBindingParseResult(bindings, warnings, this.errors);
};
_ParseAST.prototype.error = function (message, index) {
if (index === void 0) { index = null; }
this.errors.push(new ast_1.ParserError(message, this.input, this.locationText(index), this.location));
this.skip();
};
_ParseAST.prototype.locationText = function (index) {
if (index === void 0) { index = null; }
if (lang_1.isBlank(index))
index = this.index;
var location = (index < this.tokens.length) ? "at column " + (this.tokens[index].index + 1) + " in" :
return (index < this.tokens.length) ? "at column " + (this.tokens[index].index + 1) + " in" :
"at the end of the expression";
throw new ParseException(message, this.input, location, this.location);
};
// Error recovery should skip tokens until it encounters a recovery point. skip() treats
// the end of input and a ';' as unconditionally a recovery point. It also treats ')',
// '}' and ']' as conditional recovery points if one of calling productions is expecting
// one of these symbols. This allows skip() to recover from errors such as '(a.) + 1' allowing
// more of the AST to be retained (it doesn't skip any tokens as the ')' is retained because
// of the '(' begins an '(' <expr> ')' production). The recovery points of grouping symbols
// must be conditional as they must be skipped if none of the calling productions are not
// expecting the closing token else we will never make progress in the case of an
// extrainious group closing symbol (such as a stray ')'). This is not the case for ';' because
// parseChain() is always the root production and it expects a ';'.
// If a production expects one of these token it increments the corresponding nesting count,
// and then decrements it just prior to checking if the token is in the input.
_ParseAST.prototype.skip = function () {
var n = this.next;
while (this.index < this.tokens.length && !n.isCharacter(chars.$SEMICOLON) &&
(this.rparensExpected <= 0 || !n.isCharacter(chars.$RPAREN)) &&
(this.rbracesExpected <= 0 || !n.isCharacter(chars.$RBRACE)) &&
(this.rbracketsExpected <= 0 || !n.isCharacter(chars.$RBRACKET))) {
if (this.next.isError()) {
this.errors.push(new ast_1.ParserError(this.next.toString(), this.input, this.locationText(), this.location));
}
this.advance();
n = this.next;
}
};
return _ParseAST;

@@ -708,7 +772,4 @@ }());

SimpleExpressionChecker.prototype.visitAll = function (asts) {
var res = collection_1.ListWrapper.createFixedSize(asts.length);
for (var i = 0; i < asts.length; ++i) {
res[i] = asts[i].visit(this);
}
return res;
var _this = this;
return asts.map(function (node) { return node.visit(_this); });
};

@@ -715,0 +776,0 @@ SimpleExpressionChecker.prototype.visitChain = function (ast, context) { this.simple = false; };

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"Parser":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"./lexer","name":"Lexer"}]}],"parseAction":[{"__symbolic":"method"}],"parseBinding":[{"__symbolic":"method"}],"parseSimpleBinding":[{"__symbolic":"method"}],"_parseBindingAst":[{"__symbolic":"method"}],"_parseQuote":[{"__symbolic":"method"}],"parseTemplateBindings":[{"__symbolic":"method"}],"parseInterpolation":[{"__symbolic":"method"}],"splitInterpolation":[{"__symbolic":"method"}],"wrapLiteralPrimitive":[{"__symbolic":"method"}],"_stripComments":[{"__symbolic":"method"}],"_commentStart":[{"__symbolic":"method"}],"_checkNoInterpolation":[{"__symbolic":"method"}],"_findInterpolationErrorColumn":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"Parser":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"./lexer","name":"Lexer"}]}],"parseAction":[{"__symbolic":"method"}],"parseBinding":[{"__symbolic":"method"}],"parseSimpleBinding":[{"__symbolic":"method"}],"_reportError":[{"__symbolic":"method"}],"_parseBindingAst":[{"__symbolic":"method"}],"_parseQuote":[{"__symbolic":"method"}],"parseTemplateBindings":[{"__symbolic":"method"}],"parseInterpolation":[{"__symbolic":"method"}],"splitInterpolation":[{"__symbolic":"method"}],"wrapLiteralPrimitive":[{"__symbolic":"method"}],"_stripComments":[{"__symbolic":"method"}],"_commentStart":[{"__symbolic":"method"}],"_checkNoInterpolation":[{"__symbolic":"method"}],"_findInterpolationErrorColumn":[{"__symbolic":"method"}]}}}}

@@ -47,3 +47,3 @@ export declare var Map: MapConstructor;

[key: string]: V;
}, callback: Function): void;
}, callback: (v: V, K: string) => void): void;
static merge<V>(m1: {

@@ -50,0 +50,0 @@ [key: string]: V;

@@ -127,6 +127,3 @@ /**

StringMapWrapper.values = function (map) {
return Object.keys(map).reduce(function (r, a) {
r.push(map[a]);
return r;
}, []);
return Object.keys(map).map(function (k) { return map[k]; });
};

@@ -141,6 +138,5 @@ StringMapWrapper.isEmpty = function (map) {

StringMapWrapper.forEach = function (map, callback) {
for (var prop in map) {
if (map.hasOwnProperty(prop)) {
callback(map[prop], prop);
}
for (var _i = 0, _a = Object.keys(map); _i < _a.length; _i++) {
var k = _a[_i];
callback(map[k], k);
}

@@ -150,11 +146,9 @@ };

var m = {};
for (var attr in m1) {
if (m1.hasOwnProperty(attr)) {
m[attr] = m1[attr];
}
for (var _i = 0, _a = Object.keys(m1); _i < _a.length; _i++) {
var k = _a[_i];
m[k] = m1[k];
}
for (var attr in m2) {
if (m2.hasOwnProperty(attr)) {
m[attr] = m2[attr];
}
for (var _b = 0, _c = Object.keys(m2); _b < _c.length; _b++) {
var k = _c[_b];
m[k] = m2[k];
}

@@ -161,0 +155,0 @@ return m;

@@ -18,3 +18,3 @@ /**

*
* bootstrap(MyApp, {provide: ExceptionHandler, useClass: MyExceptionHandler}])
* bootstrap(MyApp, [{provide: ExceptionHandler, useClass: MyExceptionHandler}])
*

@@ -21,0 +21,0 @@ * ```

@@ -40,3 +40,3 @@ /**

*
* bootstrap(MyApp, {provide: ExceptionHandler, useClass: MyExceptionHandler}])
* bootstrap(MyApp, [{provide: ExceptionHandler, useClass: MyExceptionHandler}])
*

@@ -43,0 +43,0 @@ * ```

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"makeTypeError":{"__symbolic":"function","parameters":["message"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"TypeError"},"arguments":[{"__symbolic":"reference","name":"message"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"makeTypeError":{"__symbolic":"function","parameters":["message"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"TypeError"},"arguments":[{"__symbolic":"reference","name":"message"}]}}},"exports":[{"from":"./exception_handler","export":["ExceptionHandler"]}]}

@@ -30,3 +30,2 @@ /**

export declare function scheduleMicroTask(fn: Function): void;
export declare const IS_DART: boolean;
declare var _global: BrowserNodeGlobal;

@@ -109,18 +108,2 @@ export { _global as global };

export declare var RegExp: RegExpConstructor;
export declare class RegExpWrapper {
static create(regExpStr: string, flags?: string): RegExp;
static firstMatch(regExp: RegExp, input: string): RegExpExecArray;
static test(regExp: RegExp, input: string): boolean;
static matcher(regExp: RegExp, input: string): {
re: RegExp;
input: string;
};
static replaceAll(regExp: RegExp, input: string, replace: Function): string;
}
export declare class RegExpMatcherWrapper {
static next(matcher: {
re: RegExp;
input: string;
}): RegExpExecArray;
}
export declare class FunctionWrapper {

@@ -127,0 +110,0 @@ static apply(fn: Function, posArgs: any): any;

@@ -31,3 +31,2 @@ /**

exports.scheduleMicroTask = scheduleMicroTask;
exports.IS_DART = false;
// Need to declare a new variable for global here since TypeScript

@@ -99,3 +98,5 @@ // exports the original value of the symbol.

function isPromise(obj) {
return obj instanceof _global.Promise;
// allow any Promise/A+ compliant thenable.
// It's up to the caller to ensure that obj.then conforms to the spec
return isPresent(obj) && isFunction(obj.then);
}

@@ -120,8 +121,8 @@ exports.isPromise = isPromise;

}
if (token.overriddenName) {
return token.overriddenName;
}
if (token.name) {
return token.name;
}
if (token.overriddenName) {
return token.overriddenName;
}
var res = token.toString();

@@ -280,53 +281,2 @@ var newLineIndex = res.indexOf('\n');

exports.RegExp = _global.RegExp;
var RegExpWrapper = (function () {
function RegExpWrapper() {
}
RegExpWrapper.create = function (regExpStr, flags) {
if (flags === void 0) { flags = ''; }
flags = flags.replace(/g/g, '');
return new _global.RegExp(regExpStr, flags + 'g');
};
RegExpWrapper.firstMatch = function (regExp, input) {
// Reset multimatch regex state
regExp.lastIndex = 0;
return regExp.exec(input);
};
RegExpWrapper.test = function (regExp, input) {
regExp.lastIndex = 0;
return regExp.test(input);
};
RegExpWrapper.matcher = function (regExp, input) {
// Reset regex state for the case
// someone did not loop over all matches
// last time.
regExp.lastIndex = 0;
return { re: regExp, input: input };
};
RegExpWrapper.replaceAll = function (regExp, input, replace) {
var c = regExp.exec(input);
var res = '';
regExp.lastIndex = 0;
var prev = 0;
while (c) {
res += input.substring(prev, c.index);
res += replace(c);
prev = c.index + c[0].length;
regExp.lastIndex = prev;
c = regExp.exec(input);
}
res += input.substring(prev);
return res;
};
return RegExpWrapper;
}());
exports.RegExpWrapper = RegExpWrapper;
var RegExpMatcherWrapper = (function () {
function RegExpMatcherWrapper() {
}
RegExpMatcherWrapper.next = function (matcher) {
return matcher.re.exec(matcher.input);
};
return RegExpMatcherWrapper;
}());
exports.RegExpMatcherWrapper = RegExpMatcherWrapper;
var FunctionWrapper = (function () {

@@ -333,0 +283,0 @@ function FunctionWrapper() {

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"IS_DART":false,"Type":{"__symbolic":"reference","name":"Function"},"Math":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"_global"},"member":"Math"},"Date":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"_global"},"member":"Date"},"isPresent":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"reference","name":"obj"},"right":{"__symbolic":"reference","name":"undefined"}},"right":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"reference","name":"obj"},"right":null}}},"isBlank":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"obj"},"right":{"__symbolic":"reference","name":"undefined"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"obj"},"right":null}}},"isBoolean":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":106,"character":8},"right":"boolean"}},"isNumber":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":110,"character":8},"right":"number"}},"isString":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":114,"character":8},"right":"string"}},"isFunction":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":118,"character":8},"right":"function"}},"isType":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isFunction"},"arguments":[{"__symbolic":"reference","name":"obj"}]}},"isStringMap":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":126,"character":8},"right":"object"},"right":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"reference","name":"obj"},"right":null}}},"isStrictStringMap":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isStringMap"},"arguments":[{"__symbolic":"reference","name":"obj"}]},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Object"},"member":"getPrototypeOf"},"arguments":[{"__symbolic":"reference","name":"obj"}]},"right":{"__symbolic":"reference","name":"STRING_MAP_PROTO"}}}},"isPromise":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"instanceof","left":{"__symbolic":"reference","name":"obj"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"_global"},"member":"Promise"}}},"isArray":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Array"},"member":"isArray"},"arguments":[{"__symbolic":"reference","name":"obj"}]}},"isDate":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"instanceof","left":{"__symbolic":"reference","name":"obj"},"right":{"__symbolic":"reference","name":"Date"}},"right":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isNaN"},"arguments":[{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"obj"},"member":"valueOf"}}]}}}},"serializeEnum":{"__symbolic":"function","parameters":["val"],"value":{"__symbolic":"reference","name":"val"}},"deserializeEnum":{"__symbolic":"function","parameters":["val","values"],"value":{"__symbolic":"reference","name":"val"}},"resolveEnumToken":{"__symbolic":"function","parameters":["enumValue","val"],"value":{"__symbolic":"index","expression":{"__symbolic":"reference","name":"enumValue"},"index":{"__symbolic":"reference","name":"val"}}},"RegExp":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"_global"},"member":"RegExp"},"looseIdentical":{"__symbolic":"function","parameters":["a","b"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"a"},"right":{"__symbolic":"reference","name":"b"}},"right":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":366,"character":19},"right":"number"},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":366,"character":44},"right":"number"}},"right":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isNaN"},"arguments":[{"__symbolic":"reference","name":"a"}]}},"right":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isNaN"},"arguments":[{"__symbolic":"reference","name":"b"}]}}}},"getMapKey":{"__symbolic":"function","parameters":["value"],"value":{"__symbolic":"reference","name":"value"}},"normalizeBlank":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"error","message":"Expression form not supported","line":376,"character":8}},"normalizeBool":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"error","message":"Expression form not supported","line":380,"character":8}},"isJsObject":{"__symbolic":"function","parameters":["o"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"reference","name":"o"},"right":null},"right":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":384,"character":24},"right":"function"},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":384,"character":50},"right":"object"}}}},"isPrimitive":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isJsObject"},"arguments":[{"__symbolic":"reference","name":"obj"}]}}},"hasConstructor":{"__symbolic":"function","parameters":["value","type"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"value"},"member":"constructor"},"right":{"__symbolic":"reference","name":"type"}}},"escape":{"__symbolic":"function","parameters":["s"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"_global"},"member":"encodeURI"},"arguments":[{"__symbolic":"reference","name":"s"}]}},"escapeRegExp":{"__symbolic":"function","parameters":["s"],"value":{"__symbolic":"error","message":"Expression form not supported","line":481,"character":19}}}}
{"__symbolic":"module","version":1,"metadata":{"Type":{"__symbolic":"reference","name":"Function"},"Math":{"__symbolic":"error","message":"Reference to a local symbol","line":55,"character":3,"context":{"name":"_global"}},"Date":{"__symbolic":"error","message":"Reference to a local symbol","line":55,"character":3,"context":{"name":"_global"}},"isPresent":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"reference","name":"obj"},"right":{"__symbolic":"reference","name":"undefined"}},"right":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"reference","name":"obj"},"right":null}}},"isBlank":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"obj"},"right":{"__symbolic":"reference","name":"undefined"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"obj"},"right":null}}},"isBoolean":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":104,"character":8},"right":"boolean"}},"isNumber":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":108,"character":8},"right":"number"}},"isString":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":112,"character":8},"right":"string"}},"isFunction":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":116,"character":8},"right":"function"}},"isType":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isFunction"},"arguments":[{"__symbolic":"reference","name":"obj"}]}},"isStringMap":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":124,"character":8},"right":"object"},"right":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"reference","name":"obj"},"right":null}}},"isStrictStringMap":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isStringMap"},"arguments":[{"__symbolic":"reference","name":"obj"}]},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Object"},"member":"getPrototypeOf"},"arguments":[{"__symbolic":"reference","name":"obj"}]},"right":{"__symbolic":"error","message":"Reference to a local symbol","line":127,"character":5,"context":{"name":"STRING_MAP_PROTO"}}}}},"isPromise":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isPresent"},"arguments":[{"__symbolic":"reference","name":"obj"}]},"right":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isFunction"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"obj"},"member":"then"}]}}},"isArray":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Array"},"member":"isArray"},"arguments":[{"__symbolic":"reference","name":"obj"}]}},"isDate":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"instanceof","left":{"__symbolic":"reference","name":"obj"},"right":{"__symbolic":"reference","name":"Date"}},"right":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isNaN"},"arguments":[{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"obj"},"member":"valueOf"}}]}}}},"serializeEnum":{"__symbolic":"function","parameters":["val"],"value":{"__symbolic":"reference","name":"val"}},"deserializeEnum":{"__symbolic":"function","parameters":["val","values"],"value":{"__symbolic":"reference","name":"val"}},"resolveEnumToken":{"__symbolic":"function","parameters":["enumValue","val"],"value":{"__symbolic":"index","expression":{"__symbolic":"reference","name":"enumValue"},"index":{"__symbolic":"reference","name":"val"}}},"RegExp":{"__symbolic":"error","message":"Reference to a local symbol","line":55,"character":3,"context":{"name":"_global"}},"looseIdentical":{"__symbolic":"function","parameters":["a","b"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"a"},"right":{"__symbolic":"reference","name":"b"}},"right":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":322,"character":19},"right":"number"},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":322,"character":44},"right":"number"}},"right":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isNaN"},"arguments":[{"__symbolic":"reference","name":"a"}]}},"right":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isNaN"},"arguments":[{"__symbolic":"reference","name":"b"}]}}}},"getMapKey":{"__symbolic":"function","parameters":["value"],"value":{"__symbolic":"reference","name":"value"}},"normalizeBlank":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"if","condition":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isBlank"},"arguments":[{"__symbolic":"reference","name":"obj"}]},"thenExpression":null,"elseExpression":{"__symbolic":"reference","name":"obj"}}},"normalizeBool":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"if","condition":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isBlank"},"arguments":[{"__symbolic":"reference","name":"obj"}]},"thenExpression":false,"elseExpression":{"__symbolic":"reference","name":"obj"}}},"isJsObject":{"__symbolic":"function","parameters":["o"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"reference","name":"o"},"right":null},"right":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":340,"character":24},"right":"function"},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"error","message":"Expression form not supported","line":340,"character":50},"right":"object"}}}},"isPrimitive":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"isJsObject"},"arguments":[{"__symbolic":"reference","name":"obj"}]}}},"hasConstructor":{"__symbolic":"function","parameters":["value","type"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"value"},"member":"constructor"},"right":{"__symbolic":"reference","name":"type"}}},"escape":{"__symbolic":"function","parameters":["s"],"value":{"__symbolic":"error","message":"Reference to a local symbol","line":55,"character":3,"context":{"name":"_global"}}},"escapeRegExp":{"__symbolic":"function","parameters":["s"],"value":{"__symbolic":"error","message":"Expression form not supported","line":437,"character":19}}}}
import { CompileIdentifierMetadata, CompileTokenMetadata } from './compile_metadata';
export declare class Identifiers {
static ANALYZE_FOR_ENTRY_COMPONENTS: CompileIdentifierMetadata;
static ViewUtils: CompileIdentifierMetadata;

@@ -16,2 +17,5 @@ static AppView: CompileIdentifierMetadata;

static ComponentFactoryResolver: CompileIdentifierMetadata;
static ComponentFactory: CompileIdentifierMetadata;
static NgModuleFactory: CompileIdentifierMetadata;
static NgModuleInjector: CompileIdentifierMetadata;
static ValueUnwrapper: CompileIdentifierMetadata;

@@ -26,3 +30,3 @@ static Injector: CompileIdentifierMetadata;

static SimpleChange: CompileIdentifierMetadata;
static uninitialized: CompileIdentifierMetadata;
static UNINITIALIZED: CompileIdentifierMetadata;
static ChangeDetectorStatus: CompileIdentifierMetadata;

@@ -29,0 +33,0 @@ static checkBinding: CompileIdentifierMetadata;

@@ -39,3 +39,3 @@ /**

var impSimpleChange = core_1.SimpleChange;
var impUninitialized = core_private_1.uninitialized;
var impUNINITIALIZED = core_private_1.UNINITIALIZED;
var impChangeDetectorStatus = core_private_1.ChangeDetectorStatus;

@@ -58,2 +58,7 @@ var impFlattenNestedViewRenderNodes = core_private_1.flattenNestedViewRenderNodes;

}
Identifiers.ANALYZE_FOR_ENTRY_COMPONENTS = new compile_metadata_1.CompileIdentifierMetadata({
name: 'ANALYZE_FOR_ENTRY_COMPONENTS',
moduleUrl: util_1.assetUrl('core', 'metadata/di'),
runtime: core_1.ANALYZE_FOR_ENTRY_COMPONENTS
});
Identifiers.ViewUtils = new compile_metadata_1.CompileIdentifierMetadata({ name: 'ViewUtils', moduleUrl: util_1.assetUrl('core', 'linker/view_utils'), runtime: impViewUtils });

@@ -104,2 +109,17 @@ Identifiers.AppView = new compile_metadata_1.CompileIdentifierMetadata({ name: 'AppView', moduleUrl: APP_VIEW_MODULE_URL, runtime: impAppView });

});
Identifiers.ComponentFactory = new compile_metadata_1.CompileIdentifierMetadata({
name: 'ComponentFactory',
runtime: core_1.ComponentFactory,
moduleUrl: util_1.assetUrl('core', 'linker/component_factory')
});
Identifiers.NgModuleFactory = new compile_metadata_1.CompileIdentifierMetadata({
name: 'NgModuleFactory',
runtime: core_1.NgModuleFactory,
moduleUrl: util_1.assetUrl('core', 'linker/ng_module_factory')
});
Identifiers.NgModuleInjector = new compile_metadata_1.CompileIdentifierMetadata({
name: 'NgModuleInjector',
runtime: core_private_1.NgModuleInjector,
moduleUrl: util_1.assetUrl('core', 'linker/ng_module_factory')
});
Identifiers.ValueUnwrapper = new compile_metadata_1.CompileIdentifierMetadata({ name: 'ValueUnwrapper', moduleUrl: CD_MODULE_URL, runtime: impValueUnwrapper });

@@ -130,3 +150,3 @@ Identifiers.Injector = new compile_metadata_1.CompileIdentifierMetadata({ name: 'Injector', moduleUrl: util_1.assetUrl('core', 'di/injector'), runtime: impInjector });

Identifiers.SimpleChange = new compile_metadata_1.CompileIdentifierMetadata({ name: 'SimpleChange', moduleUrl: CD_MODULE_URL, runtime: impSimpleChange });
Identifiers.uninitialized = new compile_metadata_1.CompileIdentifierMetadata({ name: 'uninitialized', moduleUrl: CD_MODULE_URL, runtime: impUninitialized });
Identifiers.UNINITIALIZED = new compile_metadata_1.CompileIdentifierMetadata({ name: 'UNINITIALIZED', moduleUrl: CD_MODULE_URL, runtime: impUNINITIALIZED });
Identifiers.ChangeDetectorStatus = new compile_metadata_1.CompileIdentifierMetadata({ name: 'ChangeDetectorStatus', moduleUrl: CD_MODULE_URL, runtime: impChangeDetectorStatus });

@@ -160,3 +180,3 @@ Identifiers.checkBinding = new compile_metadata_1.CompileIdentifierMetadata({ name: 'checkBinding', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: impCheckBinding });

moduleUrl: util_1.assetUrl('core', 'security'),
runtime: core_private_1.SecurityContext,
runtime: core_1.SecurityContext,
});

@@ -163,0 +183,0 @@ Identifiers.AnimationKeyframe = new compile_metadata_1.CompileIdentifierMetadata({

@@ -9,22 +9,27 @@ /**

import { AnimationEntryMetadata, AnimationMetadata, AnimationStateMetadata, AnimationStyleMetadata, Provider, QueryMetadata } from '@angular/core';
import { ReflectorReader } from '../core_private';
import { Type } from '../src/facade/lang';
import { Console, ReflectorReader } from '../core_private';
import * as cpl from './compile_metadata';
import { CompilerConfig } from './config';
import { DirectiveResolver } from './directive_resolver';
import { Type } from './facade/lang';
import { NgModuleResolver } from './ng_module_resolver';
import { PipeResolver } from './pipe_resolver';
import { ViewResolver } from './view_resolver';
import { ElementSchemaRegistry } from './schema/element_schema_registry';
export declare class CompileMetadataResolver {
private _ngModuleResolver;
private _directiveResolver;
private _pipeResolver;
private _viewResolver;
private _config;
private _console;
private _schemaRegistry;
private _reflector;
private _directiveCache;
private _pipeCache;
private _ngModuleCache;
private _ngModuleOfTypes;
private _anonymousTypes;
private _anonymousTypeIndex;
constructor(_directiveResolver: DirectiveResolver, _pipeResolver: PipeResolver, _viewResolver: ViewResolver, _config: CompilerConfig, _reflector?: ReflectorReader);
constructor(_ngModuleResolver: NgModuleResolver, _directiveResolver: DirectiveResolver, _pipeResolver: PipeResolver, _config: CompilerConfig, _console: Console, _schemaRegistry: ElementSchemaRegistry, _reflector?: ReflectorReader);
private sanitizeTokenName(token);
clearCacheFor(compType: Type): void;
clearCacheFor(type: Type): void;
clearCache(): void;

@@ -35,16 +40,18 @@ getAnimationEntryMetadata(entry: AnimationEntryMetadata): cpl.CompileAnimationEntryMetadata;

getAnimationMetadata(value: AnimationMetadata): cpl.CompileAnimationMetadata;
getDirectiveMetadata(directiveType: Type): cpl.CompileDirectiveMetadata;
/**
* @param someType a symbol which may or may not be a directive type
* @returns {cpl.CompileDirectiveMetadata} if possible, otherwise null.
*/
maybeGetDirectiveMetadata(someType: Type): cpl.CompileDirectiveMetadata;
getDirectiveMetadata(directiveType: Type, throwIfNotFound?: boolean): cpl.CompileDirectiveMetadata;
getNgModuleMetadata(moduleType: any, throwIfNotFound?: boolean): cpl.CompileNgModuleMetadata;
addComponentToModule(moduleType: Type, compType: Type): void;
private _verifyModule(moduleMeta);
private _addTypeToModule(type, moduleType);
private _getTransitiveViewDirectivesAndPipes(compMeta, moduleMeta);
private _getTransitiveNgModuleMetadata(importedModules, exportedModules);
private _addDirectiveToModule(dirMeta, moduleType, transitiveModule, declaredDirectives, force?);
private _addPipeToModule(pipeMeta, moduleType, transitiveModule, declaredPipes, force?);
getTypeMetadata(type: Type, moduleUrl: string, dependencies?: any[]): cpl.CompileTypeMetadata;
getFactoryMetadata(factory: Function, moduleUrl: string, dependencies?: any[]): cpl.CompileFactoryMetadata;
getPipeMetadata(pipeType: Type): cpl.CompilePipeMetadata;
getViewDirectivesMetadata(component: Type): cpl.CompileDirectiveMetadata[];
getViewPipesMetadata(component: Type): cpl.CompilePipeMetadata[];
getPipeMetadata(pipeType: Type, throwIfNotFound?: boolean): cpl.CompilePipeMetadata;
getDependenciesMetadata(typeOrFunc: Type | Function, dependencies: any[]): cpl.CompileDiDependencyMetadata[];
getTokenMetadata(token: any): cpl.CompileTokenMetadata;
getProvidersMetadata(providers: any[]): Array<cpl.CompileProviderMetadata | cpl.CompileTypeMetadata | any[]>;
getProvidersMetadata(providers: any[], targetEntryComponents: cpl.CompileTypeMetadata[]): Array<cpl.CompileProviderMetadata | cpl.CompileTypeMetadata | any[]>;
private _getEntryComponentsFromProvider(provider);
getProviderMetadata(provider: Provider): cpl.CompileProviderMetadata;

@@ -51,0 +58,0 @@ getQueriesMetadata(queries: {

@@ -17,23 +17,29 @@ /**

var collection_1 = require('../src/facade/collection');
var exceptions_1 = require('../src/facade/exceptions');
var lang_1 = require('../src/facade/lang');
var assertions_1 = require('./assertions');
var cpl = require('./compile_metadata');
var config_1 = require('./config');
var directive_lifecycle_reflector_1 = require('./directive_lifecycle_reflector');
var directive_resolver_1 = require('./directive_resolver');
var exceptions_1 = require('./facade/exceptions');
var lang_1 = require('./facade/lang');
var identifiers_1 = require('./identifiers');
var lifecycle_reflector_1 = require('./lifecycle_reflector');
var ng_module_resolver_1 = require('./ng_module_resolver');
var pipe_resolver_1 = require('./pipe_resolver');
var element_schema_registry_1 = require('./schema/element_schema_registry');
var url_resolver_1 = require('./url_resolver');
var util_1 = require('./util');
var view_resolver_1 = require('./view_resolver');
var CompileMetadataResolver = (function () {
function CompileMetadataResolver(_directiveResolver, _pipeResolver, _viewResolver, _config, _reflector) {
function CompileMetadataResolver(_ngModuleResolver, _directiveResolver, _pipeResolver, _config, _console, _schemaRegistry, _reflector) {
if (_reflector === void 0) { _reflector = core_private_1.reflector; }
this._ngModuleResolver = _ngModuleResolver;
this._directiveResolver = _directiveResolver;
this._pipeResolver = _pipeResolver;
this._viewResolver = _viewResolver;
this._config = _config;
this._console = _console;
this._schemaRegistry = _schemaRegistry;
this._reflector = _reflector;
this._directiveCache = new Map();
this._pipeCache = new Map();
this._ngModuleCache = new Map();
this._ngModuleOfTypes = new Map();
this._anonymousTypes = new Map();

@@ -55,5 +61,8 @@ this._anonymousTypeIndex = 0;

};
CompileMetadataResolver.prototype.clearCacheFor = function (compType) {
this._directiveCache.delete(compType);
this._pipeCache.delete(compType);
CompileMetadataResolver.prototype.clearCacheFor = function (type) {
this._directiveCache.delete(type);
this._pipeCache.delete(type);
this._ngModuleOfTypes.delete(type);
// Clear all of the NgModuleMetadata as they contain transitive information!
this._ngModuleCache.clear();
};

@@ -63,2 +72,4 @@ CompileMetadataResolver.prototype.clearCache = function () {

this._pipeCache.clear();
this._ngModuleCache.clear();
this._ngModuleOfTypes.clear();
};

@@ -107,7 +118,12 @@ CompileMetadataResolver.prototype.getAnimationEntryMetadata = function (entry) {

};
CompileMetadataResolver.prototype.getDirectiveMetadata = function (directiveType) {
CompileMetadataResolver.prototype.getDirectiveMetadata = function (directiveType, throwIfNotFound) {
var _this = this;
if (throwIfNotFound === void 0) { throwIfNotFound = true; }
directiveType = core_1.resolveForwardRef(directiveType);
var meta = this._directiveCache.get(directiveType);
if (lang_1.isBlank(meta)) {
var dirMeta = this._directiveResolver.resolve(directiveType);
var dirMeta = this._directiveResolver.resolve(directiveType, throwIfNotFound);
if (!dirMeta) {
return null;
}
var templateMeta = null;

@@ -117,35 +133,62 @@ var changeDetectionStrategy = null;

var moduleUrl = staticTypeModuleUrl(directiveType);
var precompileTypes = [];
var viewDirectiveTypes = [];
var viewPipeTypes = [];
var entryComponentTypes = [];
var selector = dirMeta.selector;
if (dirMeta instanceof core_1.ComponentMetadata) {
var cmpMeta = dirMeta;
var viewMeta = this._viewResolver.resolve(directiveType);
assertions_1.assertArrayOfStrings('styles', viewMeta.styles);
assertions_1.assertInterpolationSymbols('interpolation', viewMeta.interpolation);
var animations = lang_1.isPresent(viewMeta.animations) ?
viewMeta.animations.map(function (e) { return _this.getAnimationEntryMetadata(e); }) :
assertions_1.assertArrayOfStrings('styles', cmpMeta.styles);
assertions_1.assertInterpolationSymbols('interpolation', cmpMeta.interpolation);
var animations = lang_1.isPresent(cmpMeta.animations) ?
cmpMeta.animations.map(function (e) { return _this.getAnimationEntryMetadata(e); }) :
null;
assertions_1.assertArrayOfStrings('styles', viewMeta.styles);
assertions_1.assertArrayOfStrings('styleUrls', viewMeta.styleUrls);
assertions_1.assertArrayOfStrings('styles', cmpMeta.styles);
assertions_1.assertArrayOfStrings('styleUrls', cmpMeta.styleUrls);
templateMeta = new cpl.CompileTemplateMetadata({
encapsulation: viewMeta.encapsulation,
template: viewMeta.template,
templateUrl: viewMeta.templateUrl,
styles: viewMeta.styles,
styleUrls: viewMeta.styleUrls,
encapsulation: cmpMeta.encapsulation,
template: cmpMeta.template,
templateUrl: cmpMeta.templateUrl,
styles: cmpMeta.styles,
styleUrls: cmpMeta.styleUrls,
animations: animations,
interpolation: viewMeta.interpolation
interpolation: cmpMeta.interpolation
});
changeDetectionStrategy = cmpMeta.changeDetection;
if (lang_1.isPresent(dirMeta.viewProviders)) {
viewProviders = this.getProvidersMetadata(verifyNonBlankProviders(directiveType, dirMeta.viewProviders, 'viewProviders'));
viewProviders = this.getProvidersMetadata(verifyNonBlankProviders(directiveType, dirMeta.viewProviders, 'viewProviders'), []);
}
moduleUrl = componentModuleUrl(this._reflector, directiveType, cmpMeta);
if (cmpMeta.precompile) {
precompileTypes = flattenArray(cmpMeta.precompile)
.map(function (cmp) { return _this.getTypeMetadata(cmp, staticTypeModuleUrl(cmp)); });
if (cmpMeta.entryComponents) {
entryComponentTypes =
flattenArray(cmpMeta.entryComponents)
.map(function (type) { return _this.getTypeMetadata(type, staticTypeModuleUrl(type)); });
}
if (cmpMeta.directives) {
viewDirectiveTypes = flattenArray(cmpMeta.directives).map(function (type) {
if (!type) {
throw new exceptions_1.BaseException("Unexpected directive value '" + type + "' on the View of component '" + lang_1.stringify(directiveType) + "'");
}
return _this.getTypeMetadata(type, staticTypeModuleUrl(type));
});
}
if (cmpMeta.pipes) {
viewPipeTypes = flattenArray(cmpMeta.pipes).map(function (type) {
if (!type) {
throw new exceptions_1.BaseException("Unexpected pipe value '" + type + "' on the View of component '" + lang_1.stringify(directiveType) + "'");
}
return _this.getTypeMetadata(type, staticTypeModuleUrl(type));
});
}
if (!selector) {
selector = this._schemaRegistry.getDefaultComponentElementName();
}
}
else {
if (!selector) {
throw new exceptions_1.BaseException("Directive " + lang_1.stringify(directiveType) + " has no selector, please add it!");
}
}
var providers = [];
if (lang_1.isPresent(dirMeta.providers)) {
providers = this.getProvidersMetadata(verifyNonBlankProviders(directiveType, dirMeta.providers, 'providers'));
providers = this.getProvidersMetadata(verifyNonBlankProviders(directiveType, dirMeta.providers, 'providers'), entryComponentTypes);
}

@@ -159,3 +202,3 @@ var queries = [];

meta = cpl.CompileDirectiveMetadata.create({
selector: dirMeta.selector,
selector: selector,
exportAs: dirMeta.exportAs,

@@ -169,3 +212,2 @@ isComponent: lang_1.isPresent(templateMeta),

host: dirMeta.host,
lifecycleHooks: core_private_1.LIFECYCLE_HOOKS_VALUES.filter(function (hook) { return directive_lifecycle_reflector_1.hasLifecycleHook(hook, directiveType); }),
providers: providers,

@@ -175,3 +217,5 @@ viewProviders: viewProviders,

viewQueries: viewQueries,
precompile: precompileTypes
viewDirectives: viewDirectiveTypes,
viewPipes: viewPipeTypes,
entryComponents: entryComponentTypes
});

@@ -182,19 +226,228 @@ this._directiveCache.set(directiveType, meta);

};
/**
* @param someType a symbol which may or may not be a directive type
* @returns {cpl.CompileDirectiveMetadata} if possible, otherwise null.
*/
CompileMetadataResolver.prototype.maybeGetDirectiveMetadata = function (someType) {
try {
return this.getDirectiveMetadata(someType);
}
catch (e) {
if (e.message.indexOf('No Directive annotation') !== -1) {
CompileMetadataResolver.prototype.getNgModuleMetadata = function (moduleType, throwIfNotFound) {
var _this = this;
if (throwIfNotFound === void 0) { throwIfNotFound = true; }
moduleType = core_1.resolveForwardRef(moduleType);
var compileMeta = this._ngModuleCache.get(moduleType);
if (!compileMeta) {
var meta = this._ngModuleResolver.resolve(moduleType, throwIfNotFound);
if (!meta) {
return null;
}
throw e;
var declaredDirectives_1 = [];
var exportedDirectives_1 = [];
var declaredPipes_1 = [];
var exportedPipes_1 = [];
var importedModules_1 = [];
var exportedModules_1 = [];
var providers_1 = [];
var entryComponents_1 = [];
var bootstrapComponents = [];
var schemas = [];
if (meta.imports) {
flattenArray(meta.imports).forEach(function (importedType) {
var importedModuleType;
if (isValidType(importedType)) {
importedModuleType = importedType;
}
else if (importedType && importedType.ngModule) {
var moduleWithProviders = importedType;
importedModuleType = moduleWithProviders.ngModule;
if (moduleWithProviders.providers) {
providers_1.push.apply(providers_1, _this.getProvidersMetadata(moduleWithProviders.providers, entryComponents_1));
}
}
if (importedModuleType) {
importedModules_1.push(_this.getNgModuleMetadata(importedModuleType, false));
}
else {
throw new exceptions_1.BaseException("Unexpected value '" + lang_1.stringify(importedType) + "' imported by the module '" + lang_1.stringify(moduleType) + "'");
}
});
}
if (meta.exports) {
flattenArray(meta.exports).forEach(function (exportedType) {
if (!isValidType(exportedType)) {
throw new exceptions_1.BaseException("Unexpected value '" + lang_1.stringify(exportedType) + "' exported by the module '" + lang_1.stringify(moduleType) + "'");
}
var exportedDirMeta;
var exportedPipeMeta;
var exportedModuleMeta;
if (exportedDirMeta = _this.getDirectiveMetadata(exportedType, false)) {
exportedDirectives_1.push(exportedDirMeta);
}
else if (exportedPipeMeta = _this.getPipeMetadata(exportedType, false)) {
exportedPipes_1.push(exportedPipeMeta);
}
else if (exportedModuleMeta = _this.getNgModuleMetadata(exportedType, false)) {
exportedModules_1.push(exportedModuleMeta);
}
else {
throw new exceptions_1.BaseException("Unexpected value '" + lang_1.stringify(exportedType) + "' exported by the module '" + lang_1.stringify(moduleType) + "'");
}
});
}
// Note: This will be modified later, so we rely on
// getting a new instance every time!
var transitiveModule_1 = this._getTransitiveNgModuleMetadata(importedModules_1, exportedModules_1);
if (meta.declarations) {
flattenArray(meta.declarations).forEach(function (declaredType) {
if (!isValidType(declaredType)) {
throw new exceptions_1.BaseException("Unexpected value '" + lang_1.stringify(declaredType) + "' declared by the module '" + lang_1.stringify(moduleType) + "'");
}
var declaredDirMeta;
var declaredPipeMeta;
if (declaredDirMeta = _this.getDirectiveMetadata(declaredType, false)) {
_this._addDirectiveToModule(declaredDirMeta, moduleType, transitiveModule_1, declaredDirectives_1, true);
}
else if (declaredPipeMeta = _this.getPipeMetadata(declaredType, false)) {
_this._addPipeToModule(declaredPipeMeta, moduleType, transitiveModule_1, declaredPipes_1, true);
}
else {
throw new exceptions_1.BaseException("Unexpected value '" + lang_1.stringify(declaredType) + "' declared by the module '" + lang_1.stringify(moduleType) + "'");
}
});
}
// The providers of the module have to go last
// so that they overwrite any other provider we already added.
if (meta.providers) {
providers_1.push.apply(providers_1, this.getProvidersMetadata(meta.providers, entryComponents_1));
}
if (meta.entryComponents) {
entryComponents_1.push.apply(entryComponents_1, flattenArray(meta.entryComponents)
.map(function (type) { return _this.getTypeMetadata(type, staticTypeModuleUrl(type)); }));
}
if (meta.bootstrap) {
bootstrapComponents.push.apply(bootstrapComponents, flattenArray(meta.bootstrap)
.map(function (type) { return _this.getTypeMetadata(type, staticTypeModuleUrl(type)); }));
}
entryComponents_1.push.apply(entryComponents_1, bootstrapComponents);
if (meta.schemas) {
schemas.push.apply(schemas, flattenArray(meta.schemas));
}
(_a = transitiveModule_1.entryComponents).push.apply(_a, entryComponents_1);
(_b = transitiveModule_1.providers).push.apply(_b, providers_1);
compileMeta = new cpl.CompileNgModuleMetadata({
type: this.getTypeMetadata(moduleType, staticTypeModuleUrl(moduleType)),
providers: providers_1,
entryComponents: entryComponents_1,
bootstrapComponents: bootstrapComponents,
schemas: schemas,
declaredDirectives: declaredDirectives_1,
exportedDirectives: exportedDirectives_1,
declaredPipes: declaredPipes_1,
exportedPipes: exportedPipes_1,
importedModules: importedModules_1,
exportedModules: exportedModules_1,
transitiveModule: transitiveModule_1
});
transitiveModule_1.modules.push(compileMeta);
this._verifyModule(compileMeta);
this._ngModuleCache.set(moduleType, compileMeta);
}
return compileMeta;
var _a, _b;
};
CompileMetadataResolver.prototype.addComponentToModule = function (moduleType, compType) {
var moduleMeta = this.getNgModuleMetadata(moduleType);
// Collect @Component.directives/pipes/entryComponents into our declared directives/pipes.
var compMeta = this.getDirectiveMetadata(compType, false);
this._addDirectiveToModule(compMeta, moduleMeta.type.runtime, moduleMeta.transitiveModule, moduleMeta.declaredDirectives);
moduleMeta.transitiveModule.entryComponents.push(compMeta.type);
moduleMeta.entryComponents.push(compMeta.type);
this._verifyModule(moduleMeta);
};
CompileMetadataResolver.prototype._verifyModule = function (moduleMeta) {
var _this = this;
moduleMeta.exportedDirectives.forEach(function (dirMeta) {
if (!moduleMeta.transitiveModule.directivesSet.has(dirMeta.type.runtime)) {
throw new exceptions_1.BaseException("Can't export directive " + lang_1.stringify(dirMeta.type.runtime) + " from " + lang_1.stringify(moduleMeta.type.runtime) + " as it was neither declared nor imported!");
}
});
moduleMeta.exportedPipes.forEach(function (pipeMeta) {
if (!moduleMeta.transitiveModule.pipesSet.has(pipeMeta.type.runtime)) {
throw new exceptions_1.BaseException("Can't export pipe " + lang_1.stringify(pipeMeta.type.runtime) + " from " + lang_1.stringify(moduleMeta.type.runtime) + " as it was neither declared nor imported!");
}
});
moduleMeta.entryComponents.forEach(function (entryComponentType) {
if (!moduleMeta.transitiveModule.directivesSet.has(entryComponentType.runtime)) {
_this._addDirectiveToModule(_this.getDirectiveMetadata(entryComponentType.runtime), moduleMeta.type.runtime, moduleMeta.transitiveModule, moduleMeta.declaredDirectives);
_this._console.warn("NgModule " + lang_1.stringify(moduleMeta.type.runtime) + " uses " + lang_1.stringify(entryComponentType.runtime) + " via \"entryComponents\" but it was neither declared nor imported! This warning will become an error after final.");
}
});
// Collect @Component.directives/pipes/entryComponents into our declared
// directives/pipes. Do this last so that directives added by previous steps
// are considered as well!
moduleMeta.declaredDirectives.forEach(function (dirMeta) { _this._getTransitiveViewDirectivesAndPipes(dirMeta, moduleMeta); });
};
CompileMetadataResolver.prototype._addTypeToModule = function (type, moduleType) {
var oldModule = this._ngModuleOfTypes.get(type);
if (oldModule && oldModule !== moduleType) {
throw new exceptions_1.BaseException("Type " + lang_1.stringify(type) + " is part of the declarations of 2 modules: " + lang_1.stringify(oldModule) + " and " + lang_1.stringify(moduleType) + "!");
}
this._ngModuleOfTypes.set(type, moduleType);
};
CompileMetadataResolver.prototype._getTransitiveViewDirectivesAndPipes = function (compMeta, moduleMeta) {
var _this = this;
if (!compMeta.isComponent) {
return;
}
var addPipe = function (pipeType) {
var pipeMeta = _this.getPipeMetadata(pipeType);
_this._addPipeToModule(pipeMeta, moduleMeta.type.runtime, moduleMeta.transitiveModule, moduleMeta.declaredPipes);
};
var addDirective = function (dirType) {
var dirMeta = _this.getDirectiveMetadata(dirType);
if (_this._addDirectiveToModule(dirMeta, moduleMeta.type.runtime, moduleMeta.transitiveModule, moduleMeta.declaredDirectives)) {
_this._getTransitiveViewDirectivesAndPipes(dirMeta, moduleMeta);
}
};
if (compMeta.viewPipes) {
compMeta.viewPipes.forEach(function (cplType) { return addPipe(cplType.runtime); });
}
if (compMeta.viewDirectives) {
compMeta.viewDirectives.forEach(function (cplType) { return addDirective(cplType.runtime); });
}
compMeta.entryComponents.forEach(function (entryComponentType) {
if (!moduleMeta.transitiveModule.directivesSet.has(entryComponentType.runtime)) {
_this._console.warn("Component " + lang_1.stringify(compMeta.type.runtime) + " in NgModule " + lang_1.stringify(moduleMeta.type.runtime) + " uses " + lang_1.stringify(entryComponentType.runtime) + " via \"entryComponents\" but it was neither declared nor imported into the module! This warning will become an error after final.");
addDirective(entryComponentType.runtime);
}
});
};
CompileMetadataResolver.prototype._getTransitiveNgModuleMetadata = function (importedModules, exportedModules) {
// collect `providers` / `entryComponents` from all imported and all exported modules
var transitiveModules = getTransitiveModules(importedModules.concat(exportedModules), true);
var providers = flattenArray(transitiveModules.map(function (ngModule) { return ngModule.providers; }));
var entryComponents = flattenArray(transitiveModules.map(function (ngModule) { return ngModule.entryComponents; }));
var transitiveExportedModules = getTransitiveModules(importedModules, false);
var directives = flattenArray(transitiveExportedModules.map(function (ngModule) { return ngModule.exportedDirectives; }));
var pipes = flattenArray(transitiveExportedModules.map(function (ngModule) { return ngModule.exportedPipes; }));
return new cpl.TransitiveCompileNgModuleMetadata(transitiveModules, providers, entryComponents, directives, pipes);
};
CompileMetadataResolver.prototype._addDirectiveToModule = function (dirMeta, moduleType, transitiveModule, declaredDirectives, force) {
if (force === void 0) { force = false; }
if (force || !transitiveModule.directivesSet.has(dirMeta.type.runtime)) {
transitiveModule.directivesSet.add(dirMeta.type.runtime);
transitiveModule.directives.push(dirMeta);
declaredDirectives.push(dirMeta);
this._addTypeToModule(dirMeta.type.runtime, moduleType);
return true;
}
return false;
};
CompileMetadataResolver.prototype._addPipeToModule = function (pipeMeta, moduleType, transitiveModule, declaredPipes, force) {
if (force === void 0) { force = false; }
if (force || !transitiveModule.pipesSet.has(pipeMeta.type.runtime)) {
transitiveModule.pipesSet.add(pipeMeta.type.runtime);
transitiveModule.pipes.push(pipeMeta);
declaredPipes.push(pipeMeta);
this._addTypeToModule(pipeMeta.type.runtime, moduleType);
return true;
}
return false;
};
CompileMetadataResolver.prototype.getTypeMetadata = function (type, moduleUrl, dependencies) {
if (dependencies === void 0) { dependencies = null; }
type = core_1.resolveForwardRef(type);
return new cpl.CompileTypeMetadata({

@@ -204,3 +457,4 @@ name: this.sanitizeTokenName(type),

runtime: type,
diDeps: this.getDependenciesMetadata(type, dependencies)
diDeps: this.getDependenciesMetadata(type, dependencies),
lifecycleHooks: core_private_1.LIFECYCLE_HOOKS_VALUES.filter(function (hook) { return lifecycle_reflector_1.hasLifecycleHook(hook, type); }),
});

@@ -210,2 +464,3 @@ };

if (dependencies === void 0) { dependencies = null; }
factory = core_1.resolveForwardRef(factory);
return new cpl.CompileFactoryMetadata({

@@ -218,11 +473,15 @@ name: this.sanitizeTokenName(factory),

};
CompileMetadataResolver.prototype.getPipeMetadata = function (pipeType) {
CompileMetadataResolver.prototype.getPipeMetadata = function (pipeType, throwIfNotFound) {
if (throwIfNotFound === void 0) { throwIfNotFound = true; }
pipeType = core_1.resolveForwardRef(pipeType);
var meta = this._pipeCache.get(pipeType);
if (lang_1.isBlank(meta)) {
var pipeMeta = this._pipeResolver.resolve(pipeType);
var pipeMeta = this._pipeResolver.resolve(pipeType, throwIfNotFound);
if (!pipeMeta) {
return null;
}
meta = new cpl.CompilePipeMetadata({
type: this.getTypeMetadata(pipeType, staticTypeModuleUrl(pipeType)),
name: pipeMeta.name,
pure: pipeMeta.pure,
lifecycleHooks: core_private_1.LIFECYCLE_HOOKS_VALUES.filter(function (hook) { return directive_lifecycle_reflector_1.hasLifecycleHook(hook, pipeType); }),
pure: pipeMeta.pure
});

@@ -233,24 +492,2 @@ this._pipeCache.set(pipeType, meta);

};
CompileMetadataResolver.prototype.getViewDirectivesMetadata = function (component) {
var _this = this;
var view = this._viewResolver.resolve(component);
var directives = flattenDirectives(view, this._config.platformDirectives);
for (var i = 0; i < directives.length; i++) {
if (!isValidType(directives[i])) {
throw new exceptions_1.BaseException("Unexpected directive value '" + lang_1.stringify(directives[i]) + "' on the View of component '" + lang_1.stringify(component) + "'");
}
}
return directives.map(function (type) { return _this.getDirectiveMetadata(type); });
};
CompileMetadataResolver.prototype.getViewPipesMetadata = function (component) {
var _this = this;
var view = this._viewResolver.resolve(component);
var pipes = flattenPipes(view, this._config.platformPipes);
for (var i = 0; i < pipes.length; i++) {
if (!isValidType(pipes[i])) {
throw new exceptions_1.BaseException("Unexpected piped value '" + lang_1.stringify(pipes[i]) + "' on the View of component '" + lang_1.stringify(component) + "'");
}
}
return pipes.map(function (type) { return _this.getPipeMetadata(type); });
};
CompileMetadataResolver.prototype.getDependenciesMetadata = function (typeOrFunc, dependencies) {

@@ -348,20 +585,54 @@ var _this = this;

};
CompileMetadataResolver.prototype.getProvidersMetadata = function (providers) {
CompileMetadataResolver.prototype.getProvidersMetadata = function (providers, targetEntryComponents) {
var _this = this;
return providers.map(function (provider) {
var compileProviders = [];
providers.forEach(function (provider) {
provider = core_1.resolveForwardRef(provider);
if (core_private_1.isProviderLiteral(provider)) {
provider = core_private_1.createProvider(provider);
}
var compileProvider;
if (lang_1.isArray(provider)) {
return _this.getProvidersMetadata(provider);
compileProvider = _this.getProvidersMetadata(provider, targetEntryComponents);
}
else if (provider instanceof core_1.Provider) {
return _this.getProviderMetadata(provider);
var tokenMeta = _this.getTokenMetadata(provider.token);
if (tokenMeta.equalsTo(identifiers_1.identifierToken(identifiers_1.Identifiers.ANALYZE_FOR_ENTRY_COMPONENTS))) {
targetEntryComponents.push.apply(targetEntryComponents, _this._getEntryComponentsFromProvider(provider));
}
else {
compileProvider = _this.getProviderMetadata(provider);
}
}
else if (core_private_1.isProviderLiteral(provider)) {
return _this.getProviderMetadata(core_private_1.createProvider(provider));
else if (isValidType(provider)) {
compileProvider = _this.getTypeMetadata(provider, staticTypeModuleUrl(provider));
}
else {
return _this.getTypeMetadata(provider, staticTypeModuleUrl(provider));
throw new exceptions_1.BaseException("Invalid provider - only instances of Provider and Type are allowed, got: " + lang_1.stringify(provider));
}
if (compileProvider) {
compileProviders.push(compileProvider);
}
});
return compileProviders;
};
CompileMetadataResolver.prototype._getEntryComponentsFromProvider = function (provider) {
var _this = this;
var components = [];
var collectedIdentifiers = [];
if (provider.useFactory || provider.useExisting || provider.useClass) {
throw new exceptions_1.BaseException("The ANALYZE_FOR_ENTRY_COMPONENTS token only supports useValue!");
}
if (!provider.multi) {
throw new exceptions_1.BaseException("The ANALYZE_FOR_ENTRY_COMPONENTS token only supports 'multi = true'!");
}
convertToCompileValue(provider.useValue, collectedIdentifiers);
collectedIdentifiers.forEach(function (identifier) {
var dirMeta = _this.getDirectiveMetadata(identifier.runtime, false);
if (dirMeta) {
components.push(dirMeta.type);
}
});
return components;
};
CompileMetadataResolver.prototype.getProviderMetadata = function (provider) {

@@ -382,3 +653,3 @@ var compileDeps;

useClass: compileTypeMetadata,
useValue: convertToCompileValue(provider.useValue),
useValue: convertToCompileValue(provider.useValue, []),
useFactory: compileFactoryMetadata,

@@ -393,9 +664,9 @@ useExisting: lang_1.isPresent(provider.useExisting) ? this.getTokenMetadata(provider.useExisting) :

var _this = this;
var compileQueries = [];
collection_1.StringMapWrapper.forEach(queries, function (query /** TODO #9100 */, propertyName /** TODO #9100 */) {
var res = [];
collection_1.StringMapWrapper.forEach(queries, function (query, propertyName) {
if (query.isViewQuery === isViewQuery) {
compileQueries.push(_this.getQueryMetadata(query, propertyName, directiveType));
res.push(_this.getQueryMetadata(query, propertyName, directiveType));
}
});
return compileQueries;
return res;
};

@@ -428,6 +699,8 @@ CompileMetadataResolver.prototype.getQueryMetadata = function (q, propertyName, typeOrFunc) {

CompileMetadataResolver.ctorParameters = [
{ type: ng_module_resolver_1.NgModuleResolver, },
{ type: directive_resolver_1.DirectiveResolver, },
{ type: pipe_resolver_1.PipeResolver, },
{ type: view_resolver_1.ViewResolver, },
{ type: config_1.CompilerConfig, },
{ type: core_private_1.Console, },
{ type: element_schema_registry_1.ElementSchemaRegistry, },
{ type: core_private_1.ReflectorReader, },

@@ -438,32 +711,31 @@ ];

exports.CompileMetadataResolver = CompileMetadataResolver;
function flattenDirectives(view, platformDirectives) {
var directives = [];
if (lang_1.isPresent(platformDirectives)) {
flattenArray(platformDirectives, directives);
}
if (lang_1.isPresent(view.directives)) {
flattenArray(view.directives, directives);
}
return directives;
function getTransitiveModules(modules, includeImports, targetModules, visitedModules) {
if (targetModules === void 0) { targetModules = []; }
if (visitedModules === void 0) { visitedModules = new Set(); }
modules.forEach(function (ngModule) {
if (!visitedModules.has(ngModule.type.runtime)) {
visitedModules.add(ngModule.type.runtime);
var nestedModules = includeImports ?
ngModule.importedModules.concat(ngModule.exportedModules) :
ngModule.exportedModules;
getTransitiveModules(nestedModules, includeImports, targetModules, visitedModules);
// Add after recursing so imported/exported modules are before the module itself.
// This is important for overwriting providers of imported modules!
targetModules.push(ngModule);
}
});
return targetModules;
}
function flattenPipes(view, platformPipes) {
var pipes = [];
if (lang_1.isPresent(platformPipes)) {
flattenArray(platformPipes, pipes);
}
if (lang_1.isPresent(view.pipes)) {
flattenArray(view.pipes, pipes);
}
return pipes;
}
function flattenArray(tree, out) {
if (out === void 0) { out = []; }
for (var i = 0; i < tree.length; i++) {
var item = core_1.resolveForwardRef(tree[i]);
if (lang_1.isArray(item)) {
flattenArray(item, out);
if (tree) {
for (var i = 0; i < tree.length; i++) {
var item = core_1.resolveForwardRef(tree[i]);
if (lang_1.isArray(item)) {
flattenArray(item, out);
}
else {
out.push(item);
}
}
else {
out.push(item);
}
}

@@ -484,13 +756,10 @@ return out;

}
function isStaticType(value) {
return lang_1.isStringMap(value) && lang_1.isPresent(value['name']) && lang_1.isPresent(value['filePath']);
}
function isValidType(value) {
return isStaticType(value) || (value instanceof lang_1.Type);
return cpl.isStaticSymbol(value) || (value instanceof lang_1.Type);
}
function staticTypeModuleUrl(value) {
return isStaticType(value) ? value['filePath'] : null;
return cpl.isStaticSymbol(value) ? value.filePath : null;
}
function componentModuleUrl(reflector, type, cmpMetadata) {
if (isStaticType(type)) {
if (cpl.isStaticSymbol(type)) {
return staticTypeModuleUrl(type);

@@ -506,5 +775,4 @@ }

}
// Only fill CompileIdentifierMetadata.runtime if needed...
function convertToCompileValue(value) {
return util_1.visitValue(value, new _CompileValueConverter(), null);
function convertToCompileValue(value, targetIdentifiers) {
return util_1.visitValue(value, new _CompileValueConverter(), targetIdentifiers);
}

@@ -516,9 +784,12 @@ var _CompileValueConverter = (function (_super) {

}
_CompileValueConverter.prototype.visitOther = function (value, context) {
if (isStaticType(value)) {
return new cpl.CompileIdentifierMetadata({ name: value['name'], moduleUrl: staticTypeModuleUrl(value) });
_CompileValueConverter.prototype.visitOther = function (value, targetIdentifiers) {
var identifier;
if (cpl.isStaticSymbol(value)) {
identifier = new cpl.CompileIdentifierMetadata({ name: value.name, moduleUrl: value.filePath, runtime: value });
}
else {
return new cpl.CompileIdentifierMetadata({ runtime: value });
identifier = new cpl.CompileIdentifierMetadata({ runtime: value });
}
targetIdentifiers.push(identifier);
return identifier;
};

@@ -525,0 +796,0 @@ return _CompileValueConverter;

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"CompileMetadataResolver":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"./directive_resolver","name":"DirectiveResolver"},{"__symbolic":"reference","module":"./pipe_resolver","name":"PipeResolver"},{"__symbolic":"reference","module":"./view_resolver","name":"ViewResolver"},{"__symbolic":"reference","module":"./config","name":"CompilerConfig"},{"__symbolic":"reference","module":"../core_private","name":"ReflectorReader"}]}],"sanitizeTokenName":[{"__symbolic":"method"}],"clearCacheFor":[{"__symbolic":"method"}],"clearCache":[{"__symbolic":"method"}],"getAnimationEntryMetadata":[{"__symbolic":"method"}],"getAnimationStateMetadata":[{"__symbolic":"method"}],"getAnimationStyleMetadata":[{"__symbolic":"method"}],"getAnimationMetadata":[{"__symbolic":"method"}],"getDirectiveMetadata":[{"__symbolic":"method"}],"maybeGetDirectiveMetadata":[{"__symbolic":"method"}],"getTypeMetadata":[{"__symbolic":"method"}],"getFactoryMetadata":[{"__symbolic":"method"}],"getPipeMetadata":[{"__symbolic":"method"}],"getViewDirectivesMetadata":[{"__symbolic":"method"}],"getViewPipesMetadata":[{"__symbolic":"method"}],"getDependenciesMetadata":[{"__symbolic":"method"}],"getTokenMetadata":[{"__symbolic":"method"}],"getProvidersMetadata":[{"__symbolic":"method"}],"getProviderMetadata":[{"__symbolic":"method"}],"getQueriesMetadata":[{"__symbolic":"method"}],"getQueryMetadata":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"CompileMetadataResolver":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"./ng_module_resolver","name":"NgModuleResolver"},{"__symbolic":"reference","module":"./directive_resolver","name":"DirectiveResolver"},{"__symbolic":"reference","module":"./pipe_resolver","name":"PipeResolver"},{"__symbolic":"reference","module":"./config","name":"CompilerConfig"},{"__symbolic":"reference","module":"../core_private","name":"Console"},{"__symbolic":"reference","module":"./schema/element_schema_registry","name":"ElementSchemaRegistry"},{"__symbolic":"reference","module":"../core_private","name":"ReflectorReader"}]}],"sanitizeTokenName":[{"__symbolic":"method"}],"clearCacheFor":[{"__symbolic":"method"}],"clearCache":[{"__symbolic":"method"}],"getAnimationEntryMetadata":[{"__symbolic":"method"}],"getAnimationStateMetadata":[{"__symbolic":"method"}],"getAnimationStyleMetadata":[{"__symbolic":"method"}],"getAnimationMetadata":[{"__symbolic":"method"}],"getDirectiveMetadata":[{"__symbolic":"method"}],"getNgModuleMetadata":[{"__symbolic":"method"}],"addComponentToModule":[{"__symbolic":"method"}],"_verifyModule":[{"__symbolic":"method"}],"_addTypeToModule":[{"__symbolic":"method"}],"_getTransitiveViewDirectivesAndPipes":[{"__symbolic":"method"}],"_getTransitiveNgModuleMetadata":[{"__symbolic":"method"}],"_addDirectiveToModule":[{"__symbolic":"method"}],"_addPipeToModule":[{"__symbolic":"method"}],"getTypeMetadata":[{"__symbolic":"method"}],"getFactoryMetadata":[{"__symbolic":"method"}],"getPipeMetadata":[{"__symbolic":"method"}],"getDependenciesMetadata":[{"__symbolic":"method"}],"getTokenMetadata":[{"__symbolic":"method"}],"getProvidersMetadata":[{"__symbolic":"method"}],"_getEntryComponentsFromProvider":[{"__symbolic":"method"}],"getProviderMetadata":[{"__symbolic":"method"}],"getQueriesMetadata":[{"__symbolic":"method"}],"getQueryMetadata":[{"__symbolic":"method"}]}}}}

@@ -1,6 +0,8 @@

import { CompileDirectiveMetadata, CompilePipeMetadata } from './compile_metadata';
import { CompileNgModuleMetadata, StaticSymbol } from './compile_metadata';
import { DirectiveNormalizer } from './directive_normalizer';
import { CompileMetadataResolver } from './metadata_resolver';
import { NgModuleCompiler } from './ng_module_compiler';
import { OutputEmitter } from './output/abstract_emitter';
import { StyleCompiler } from './style_compiler';
import { TemplateParser } from './template_parser';
import { TemplateParser } from './template_parser/template_parser';
import { ViewCompiler } from './view_compiler/view_compiler';

@@ -12,14 +14,8 @@ export declare class SourceModule {

}
export declare class StyleSheetSourceWithImports {
source: SourceModule;
importedUrls: string[];
constructor(source: SourceModule, importedUrls: string[]);
export declare class NgModulesSummary {
ngModuleByComponent: Map<StaticSymbol, CompileNgModuleMetadata>;
constructor(ngModuleByComponent: Map<StaticSymbol, CompileNgModuleMetadata>);
}
export declare class NormalizedComponentWithViewDirectives {
component: CompileDirectiveMetadata;
directives: CompileDirectiveMetadata[];
pipes: CompilePipeMetadata[];
constructor(component: CompileDirectiveMetadata, directives: CompileDirectiveMetadata[], pipes: CompilePipeMetadata[]);
}
export declare class OfflineCompiler {
private _metadataResolver;
private _directiveNormalizer;

@@ -29,9 +25,13 @@ private _templateParser;

private _viewCompiler;
private _ngModuleCompiler;
private _outputEmitter;
constructor(_directiveNormalizer: DirectiveNormalizer, _templateParser: TemplateParser, _styleCompiler: StyleCompiler, _viewCompiler: ViewCompiler, _outputEmitter: OutputEmitter);
normalizeDirectiveMetadata(directive: CompileDirectiveMetadata): Promise<CompileDirectiveMetadata>;
compileTemplates(components: NormalizedComponentWithViewDirectives[]): SourceModule[];
private _compileComponent(compMeta, directives, pipes, componentStyles, fileSuffix, targetStatements);
constructor(_metadataResolver: CompileMetadataResolver, _directiveNormalizer: DirectiveNormalizer, _templateParser: TemplateParser, _styleCompiler: StyleCompiler, _viewCompiler: ViewCompiler, _ngModuleCompiler: NgModuleCompiler, _outputEmitter: OutputEmitter);
analyzeModules(ngModules: StaticSymbol[]): NgModulesSummary;
clearCache(): void;
compile(moduleUrl: string, ngModulesSummary: NgModulesSummary, components: StaticSymbol[], ngModules: StaticSymbol[]): Promise<SourceModule[]>;
private _compileModule(ngModuleType, targetStatements);
private _compileComponentFactory(compMeta, fileSuffix, targetStatements);
private _compileComponent(compMeta, directives, pipes, schemas, componentStyles, fileSuffix, targetStatements);
private _codgenStyles(stylesCompileResult, fileSuffix);
private _codegenSourceModule(moduleUrl, statements, exportedVars);
}

@@ -9,14 +9,8 @@ /**

"use strict";
var core_1 = require('@angular/core');
var compile_metadata_1 = require('./compile_metadata');
var collection_1 = require('./facade/collection');
var exceptions_1 = require('./facade/exceptions');
var identifiers_1 = require('./identifiers');
var o = require('./output/output_ast');
var util_1 = require('./util');
var view_compiler_1 = require('./view_compiler/view_compiler');
var _COMPONENT_FACTORY_IDENTIFIER = new compile_metadata_1.CompileIdentifierMetadata({
name: 'ComponentFactory',
runtime: core_1.ComponentFactory,
moduleUrl: util_1.assetUrl('core', 'linker/component_factory')
});
var SourceModule = (function () {

@@ -30,21 +24,12 @@ function SourceModule(moduleUrl, source) {

exports.SourceModule = SourceModule;
var StyleSheetSourceWithImports = (function () {
function StyleSheetSourceWithImports(source, importedUrls) {
this.source = source;
this.importedUrls = importedUrls;
var NgModulesSummary = (function () {
function NgModulesSummary(ngModuleByComponent) {
this.ngModuleByComponent = ngModuleByComponent;
}
return StyleSheetSourceWithImports;
return NgModulesSummary;
}());
exports.StyleSheetSourceWithImports = StyleSheetSourceWithImports;
var NormalizedComponentWithViewDirectives = (function () {
function NormalizedComponentWithViewDirectives(component, directives, pipes) {
this.component = component;
this.directives = directives;
this.pipes = pipes;
}
return NormalizedComponentWithViewDirectives;
}());
exports.NormalizedComponentWithViewDirectives = NormalizedComponentWithViewDirectives;
exports.NgModulesSummary = NgModulesSummary;
var OfflineCompiler = (function () {
function OfflineCompiler(_directiveNormalizer, _templateParser, _styleCompiler, _viewCompiler, _outputEmitter) {
function OfflineCompiler(_metadataResolver, _directiveNormalizer, _templateParser, _styleCompiler, _viewCompiler, _ngModuleCompiler, _outputEmitter) {
this._metadataResolver = _metadataResolver;
this._directiveNormalizer = _directiveNormalizer;

@@ -54,43 +39,86 @@ this._templateParser = _templateParser;

this._viewCompiler = _viewCompiler;
this._ngModuleCompiler = _ngModuleCompiler;
this._outputEmitter = _outputEmitter;
}
OfflineCompiler.prototype.normalizeDirectiveMetadata = function (directive) {
return this._directiveNormalizer.normalizeDirective(directive).asyncResult;
OfflineCompiler.prototype.analyzeModules = function (ngModules) {
var _this = this;
var ngModuleByComponent = new Map();
ngModules.forEach(function (ngModule) {
var ngModuleMeta = _this._metadataResolver.getNgModuleMetadata(ngModule);
ngModuleMeta.declaredDirectives.forEach(function (dirMeta) {
if (dirMeta.isComponent) {
ngModuleByComponent.set(dirMeta.type.runtime, ngModuleMeta);
}
});
});
return new NgModulesSummary(ngModuleByComponent);
};
OfflineCompiler.prototype.compileTemplates = function (components) {
OfflineCompiler.prototype.clearCache = function () {
this._directiveNormalizer.clearCache();
this._metadataResolver.clearCache();
};
OfflineCompiler.prototype.compile = function (moduleUrl, ngModulesSummary, components, ngModules) {
var _this = this;
if (components.length === 0) {
throw new exceptions_1.BaseException('No components given');
}
var fileSuffix = _splitLastSuffix(moduleUrl)[1];
var statements = [];
var exportedVars = [];
var moduleUrl = _ngfactoryModuleUrl(components[0].component.type);
var outputSourceModules = [];
components.forEach(function (componentWithDirs) {
var compMeta = componentWithDirs.component;
_assertComponent(compMeta);
var fileSuffix = _splitLastSuffix(compMeta.type.moduleUrl)[1];
var stylesCompileResults = _this._styleCompiler.compileComponent(compMeta);
stylesCompileResults.externalStylesheets.forEach(function (compiledStyleSheet) {
outputSourceModules.push(_this._codgenStyles(compiledStyleSheet, fileSuffix));
// compile all ng modules
exportedVars.push.apply(exportedVars, ngModules.map(function (ngModuleType) { return _this._compileModule(ngModuleType, statements); }));
// compile components
return Promise
.all(components.map(function (compType) {
var compMeta = _this._metadataResolver.getDirectiveMetadata(compType);
var ngModule = ngModulesSummary.ngModuleByComponent.get(compType);
if (!ngModule) {
throw new exceptions_1.BaseException("Cannot determine the module for component " + compMeta.type.name + "!");
}
return Promise
.all([compMeta].concat(ngModule.transitiveModule.directives).map(function (dirMeta) { return _this._directiveNormalizer.normalizeDirective(dirMeta).asyncResult; }))
.then(function (normalizedCompWithDirectives) {
var compMeta = normalizedCompWithDirectives[0];
var dirMetas = normalizedCompWithDirectives.slice(1);
_assertComponent(compMeta);
// compile styles
var stylesCompileResults = _this._styleCompiler.compileComponent(compMeta);
stylesCompileResults.externalStylesheets.forEach(function (compiledStyleSheet) {
outputSourceModules.push(_this._codgenStyles(compiledStyleSheet, fileSuffix));
});
// compile components
exportedVars.push(_this._compileComponentFactory(compMeta, fileSuffix, statements));
exportedVars.push(_this._compileComponent(compMeta, dirMetas, ngModule.transitiveModule.pipes, ngModule.schemas, stylesCompileResults.componentStylesheet, fileSuffix, statements));
});
var compViewFactoryVar = _this._compileComponent(compMeta, componentWithDirs.directives, componentWithDirs.pipes, stylesCompileResults.componentStylesheet, fileSuffix, statements);
exportedVars.push(compViewFactoryVar);
var hostMeta = compile_metadata_1.createHostComponentMeta(compMeta.type, compMeta.selector);
var hostViewFactoryVar = _this._compileComponent(hostMeta, [compMeta], [], null, fileSuffix, statements);
var compFactoryVar = _componentFactoryName(compMeta.type);
statements.push(o.variable(compFactoryVar)
.set(o.importExpr(_COMPONENT_FACTORY_IDENTIFIER, [o.importType(compMeta.type)])
.instantiate([
o.literal(compMeta.selector), o.variable(hostViewFactoryVar),
o.importExpr(compMeta.type)
], o.importType(_COMPONENT_FACTORY_IDENTIFIER, [o.importType(compMeta.type)], [o.TypeModifier.Const])))
.toDeclStmt(null, [o.StmtModifier.Final]));
exportedVars.push(compFactoryVar);
}))
.then(function () {
if (statements.length > 0) {
outputSourceModules.unshift(_this._codegenSourceModule(_ngfactoryModuleUrl(moduleUrl), statements, exportedVars));
}
return outputSourceModules;
});
outputSourceModules.unshift(this._codegenSourceModule(moduleUrl, statements, exportedVars));
return outputSourceModules;
};
OfflineCompiler.prototype._compileComponent = function (compMeta, directives, pipes, componentStyles, fileSuffix, targetStatements) {
var parsedTemplate = this._templateParser.parse(compMeta, compMeta.template.template, directives, pipes, compMeta.type.name);
OfflineCompiler.prototype._compileModule = function (ngModuleType, targetStatements) {
var ngModule = this._metadataResolver.getNgModuleMetadata(ngModuleType);
var appCompileResult = this._ngModuleCompiler.compile(ngModule, []);
appCompileResult.dependencies.forEach(function (dep) {
dep.placeholder.name = _componentFactoryName(dep.comp);
dep.placeholder.moduleUrl = _ngfactoryModuleUrl(dep.comp.moduleUrl);
});
targetStatements.push.apply(targetStatements, appCompileResult.statements);
return appCompileResult.ngModuleFactoryVar;
};
OfflineCompiler.prototype._compileComponentFactory = function (compMeta, fileSuffix, targetStatements) {
var hostMeta = compile_metadata_1.createHostComponentMeta(compMeta);
var hostViewFactoryVar = this._compileComponent(hostMeta, [compMeta], [], [], null, fileSuffix, targetStatements);
var compFactoryVar = _componentFactoryName(compMeta.type);
targetStatements.push(o.variable(compFactoryVar)
.set(o.importExpr(identifiers_1.Identifiers.ComponentFactory, [o.importType(compMeta.type)])
.instantiate([
o.literal(compMeta.selector), o.variable(hostViewFactoryVar),
o.importExpr(compMeta.type)
], o.importType(identifiers_1.Identifiers.ComponentFactory, [o.importType(compMeta.type)], [o.TypeModifier.Const])))
.toDeclStmt(null, [o.StmtModifier.Final]));
return compFactoryVar;
};
OfflineCompiler.prototype._compileComponent = function (compMeta, directives, pipes, schemas, componentStyles, fileSuffix, targetStatements) {
var parsedTemplate = this._templateParser.parse(compMeta, compMeta.template.template, directives, pipes, schemas, compMeta.type.name);
var stylesExpr = componentStyles ? o.variable(componentStyles.stylesVar) : o.literalArr([]);

@@ -118,3 +146,3 @@ var viewResult = this._viewCompiler.compileComponent(compMeta, parsedTemplate, stylesExpr, pipes);

var vfd = dep;
vfd.placeholder.moduleUrl = _ngfactoryModuleUrl(vfd.comp);
vfd.placeholder.moduleUrl = _ngfactoryModuleUrl(vfd.comp.moduleUrl);
}

@@ -124,3 +152,3 @@ else if (dep instanceof view_compiler_1.ComponentFactoryDependency) {

cfd.placeholder.name = _componentFactoryName(cfd.comp);
cfd.placeholder.moduleUrl = _ngfactoryModuleUrl(cfd.comp);
cfd.placeholder.moduleUrl = _ngfactoryModuleUrl(cfd.comp.moduleUrl);
}

@@ -136,4 +164,4 @@ });

}
function _ngfactoryModuleUrl(comp) {
var urlWithSuffix = _splitLastSuffix(comp.moduleUrl);
function _ngfactoryModuleUrl(compUrl) {
var urlWithSuffix = _splitLastSuffix(compUrl);
return urlWithSuffix[0] + ".ngfactory" + urlWithSuffix[1];

@@ -140,0 +168,0 @@ }

@@ -198,3 +198,2 @@ /**

// some builtins just mean to skip the call.
// e.g. `bind` in Dart.
return null;

@@ -201,0 +200,0 @@ }

@@ -112,3 +112,3 @@ /**

export declare class ReadVarExpr extends Expression {
name: any;
name: string;
builtin: BuiltinVar;

@@ -429,3 +429,2 @@ constructor(name: string | BuiltinVar, type?: Type);

export declare function importType(id: CompileIdentifierMetadata, typeParams?: Type[], typeModifiers?: TypeModifier[]): ExternalType;
export declare function literal(value: any, type?: Type): LiteralExpr;
export declare function literalArr(values: Expression[], type?: Type): LiteralArrayExpr;

@@ -435,1 +434,2 @@ export declare function literalMap(values: Array<Array<string | Expression>>, type?: MapType): LiteralMapExpr;

export declare function fn(params: FnParam[], body: Statement[], type?: Type): FunctionExpr;
export declare function literal(value: any, type?: Type): LiteralExpr;

@@ -962,7 +962,2 @@ /**

exports.importType = importType;
function literal(value, type) {
if (type === void 0) { type = null; }
return new LiteralExpr(value, type);
}
exports.literal = literal;
function literalArr(values, type) {

@@ -987,2 +982,7 @@ if (type === void 0) { type = null; }

exports.fn = fn;
function literal(value, type) {
if (type === void 0) { type = null; }
return new LiteralExpr(value, type);
}
exports.literal = literal;
//# sourceMappingURL=output_ast.js.map

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"DYNAMIC_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Dynamic"}]},"BOOL_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Bool"}]},"INT_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Int"}]},"NUMBER_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Number"}]},"STRING_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"String"}]},"FUNCTION_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Function"}]},"THIS_EXPR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinVar"},"member":"This"}]},"SUPER_EXPR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinVar"},"member":"Super"}]},"CATCH_ERROR_VAR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinVar"},"member":"CatchError"}]},"CATCH_STACK_VAR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinVar"},"member":"CatchStack"}]},"NULL_EXPR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"LiteralExpr"},"arguments":[null,null]},"variable":{"__symbolic":"function","parameters":["name","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"reference","name":"name"},{"__symbolic":"reference","name":"type"}]}},"importExpr":{"__symbolic":"function","parameters":["id","typeParams"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ExternalExpr"},"arguments":[{"__symbolic":"reference","name":"id"},null,{"__symbolic":"reference","name":"typeParams"}]}},"importType":{"__symbolic":"function","parameters":["id","typeParams","typeModifiers"],"value":{"__symbolic":"error","message":"Expression form not supported","line":874,"character":8}},"literal":{"__symbolic":"function","parameters":["value","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"LiteralExpr"},"arguments":[{"__symbolic":"reference","name":"value"},{"__symbolic":"reference","name":"type"}]}},"literalArr":{"__symbolic":"function","parameters":["values","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"LiteralArrayExpr"},"arguments":[{"__symbolic":"reference","name":"values"},{"__symbolic":"reference","name":"type"}]}},"literalMap":{"__symbolic":"function","parameters":["values","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"LiteralMapExpr"},"arguments":[{"__symbolic":"reference","name":"values"},{"__symbolic":"reference","name":"type"}]}},"not":{"__symbolic":"function","parameters":["expr"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"NotExpr"},"arguments":[{"__symbolic":"reference","name":"expr"}]}},"fn":{"__symbolic":"function","parameters":["params","body","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"FunctionExpr"},"arguments":[{"__symbolic":"reference","name":"params"},{"__symbolic":"reference","name":"body"},{"__symbolic":"reference","name":"type"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"TypeModifier":{"Const":0},"BuiltinTypeName":{"Dynamic":0,"Bool":1,"String":2,"Int":3,"Number":4,"Function":5},"DYNAMIC_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Dynamic"}]},"BOOL_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Bool"}]},"INT_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Int"}]},"NUMBER_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Number"}]},"STRING_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"String"}]},"FUNCTION_TYPE":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"BuiltinType"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinTypeName"},"member":"Function"}]},"BinaryOperator":{"Equals":0,"NotEquals":1,"Identical":2,"NotIdentical":3,"Minus":4,"Plus":5,"Divide":6,"Multiply":7,"Modulo":8,"And":9,"Or":10,"Lower":11,"LowerEquals":12,"Bigger":13,"BiggerEquals":14},"BuiltinVar":{"This":0,"Super":1,"CatchError":2,"CatchStack":3},"BuiltinMethod":{"ConcatArray":0,"SubscribeObservable":1,"bind":2},"THIS_EXPR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinVar"},"member":"This"}]},"SUPER_EXPR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinVar"},"member":"Super"}]},"CATCH_ERROR_VAR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinVar"},"member":"CatchError"}]},"CATCH_STACK_VAR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"BuiltinVar"},"member":"CatchStack"}]},"NULL_EXPR":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"LiteralExpr"},"arguments":[null,null]},"StmtModifier":{"Final":0,"Private":1},"variable":{"__symbolic":"function","parameters":["name","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ReadVarExpr"},"arguments":[{"__symbolic":"reference","name":"name"},{"__symbolic":"reference","name":"type"}]},"defaults":[null,null]},"importExpr":{"__symbolic":"function","parameters":["id","typeParams"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ExternalExpr"},"arguments":[{"__symbolic":"reference","name":"id"},null,{"__symbolic":"reference","name":"typeParams"}]},"defaults":[null,null]},"importType":{"__symbolic":"function","parameters":["id","typeParams","typeModifiers"],"value":{"__symbolic":"if","condition":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"../facade/lang","name":"isPresent"},"arguments":[{"__symbolic":"reference","name":"id"}]},"thenExpression":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ExternalType"},"arguments":[{"__symbolic":"reference","name":"id"},{"__symbolic":"reference","name":"typeParams"},{"__symbolic":"reference","name":"typeModifiers"}]},"elseExpression":null},"defaults":[null,null,null]},"literalArr":{"__symbolic":"function","parameters":["values","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"LiteralArrayExpr"},"arguments":[{"__symbolic":"reference","name":"values"},{"__symbolic":"reference","name":"type"}]},"defaults":[null,null]},"literalMap":{"__symbolic":"function","parameters":["values","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"LiteralMapExpr"},"arguments":[{"__symbolic":"reference","name":"values"},{"__symbolic":"reference","name":"type"}]},"defaults":[null,null]},"not":{"__symbolic":"function","parameters":["expr"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"NotExpr"},"arguments":[{"__symbolic":"reference","name":"expr"}]}},"fn":{"__symbolic":"function","parameters":["params","body","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"FunctionExpr"},"arguments":[{"__symbolic":"reference","name":"params"},{"__symbolic":"reference","name":"body"},{"__symbolic":"reference","name":"type"}]},"defaults":[null,null,null]},"literal":{"__symbolic":"function","parameters":["value","type"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"LiteralExpr"},"arguments":[{"__symbolic":"reference","name":"value"},{"__symbolic":"reference","name":"type"}]},"defaults":[null,null]}}}
import * as o from './output_ast';
export declare function interpretStatements(statements: o.Statement[], resultVar: string, instanceFactory: InstanceFactory): any;
export interface InstanceFactory {
createInstance(superClass: any, clazz: any, constructorArgs: any[], props: Map<string, any>, getters: Map<string, Function>, methods: Map<string, Function>): DynamicInstance;
}
export declare abstract class DynamicInstance {
props: Map<string, any>;
getters: Map<string, Function>;
methods: Map<string, any>;
clazz: any;
}
export declare function interpretStatements(statements: o.Statement[], resultVar: string): any;

@@ -9,13 +9,10 @@ /**

"use strict";
var core_private_1 = require('../../core_private');
var async_1 = require('../facade/async');
var collection_1 = require('../facade/collection');
var exceptions_1 = require('../facade/exceptions');
var lang_1 = require('../facade/lang');
var dart_emitter_1 = require('./dart_emitter');
var o = require('./output_ast');
var ts_emitter_1 = require('./ts_emitter');
function interpretStatements(statements, resultVar, instanceFactory) {
function interpretStatements(statements, resultVar) {
var stmtsWithReturn = statements.concat([new o.ReturnStatement(o.variable(resultVar))]);
var ctx = new _ExecutionContext(null, null, null, null, new Map(), new Map(), new Map(), new Map(), instanceFactory);
var ctx = new _ExecutionContext(null, null, null, new Map());
var visitor = new StatementInterpreter();

@@ -26,37 +23,2 @@ var result = visitor.visitAllStatements(stmtsWithReturn, ctx);

exports.interpretStatements = interpretStatements;
var DynamicInstance = (function () {
function DynamicInstance() {
}
Object.defineProperty(DynamicInstance.prototype, "props", {
get: function () { return exceptions_1.unimplemented(); },
enumerable: true,
configurable: true
});
Object.defineProperty(DynamicInstance.prototype, "getters", {
get: function () { return exceptions_1.unimplemented(); },
enumerable: true,
configurable: true
});
Object.defineProperty(DynamicInstance.prototype, "methods", {
get: function () { return exceptions_1.unimplemented(); },
enumerable: true,
configurable: true
});
Object.defineProperty(DynamicInstance.prototype, "clazz", {
get: function () { return exceptions_1.unimplemented(); },
enumerable: true,
configurable: true
});
return DynamicInstance;
}());
exports.DynamicInstance = DynamicInstance;
function isDynamicInstance(instance) {
if (lang_1.IS_DART) {
return instance instanceof DynamicInstance;
}
else {
return lang_1.isPresent(instance) && lang_1.isPresent(instance.props) && lang_1.isPresent(instance.getters) &&
lang_1.isPresent(instance.methods);
}
}
function _executeFunctionStatements(varNames, varValues, statements, ctx, visitor) {

@@ -71,15 +33,10 @@ var childCtx = ctx.createChildWihtLocalVars();

var _ExecutionContext = (function () {
function _ExecutionContext(parent, superClass, superInstance, className, vars, props, getters, methods, instanceFactory) {
function _ExecutionContext(parent, instance, className, vars) {
this.parent = parent;
this.superClass = superClass;
this.superInstance = superInstance;
this.instance = instance;
this.className = className;
this.vars = vars;
this.props = props;
this.getters = getters;
this.methods = methods;
this.instanceFactory = instanceFactory;
}
_ExecutionContext.prototype.createChildWihtLocalVars = function () {
return new _ExecutionContext(this, this.superClass, this.superInstance, this.className, new Map(), this.props, this.getters, this.methods, this.instanceFactory);
return new _ExecutionContext(this, this.instance, this.className, new Map());
};

@@ -94,36 +51,50 @@ return _ExecutionContext;

}());
var _DynamicClass = (function () {
function _DynamicClass(_classStmt, _ctx, _visitor) {
this._classStmt = _classStmt;
this._ctx = _ctx;
this._visitor = _visitor;
}
_DynamicClass.prototype.instantiate = function (args) {
function createDynamicClass(_classStmt, _ctx, _visitor) {
var propertyDescriptors = {};
_classStmt.getters.forEach(function (getter) {
// Note: use `function` instead of arrow function to capture `this`
propertyDescriptors[getter.name] = {
configurable: false,
get: function () {
var instanceCtx = new _ExecutionContext(_ctx, this, _classStmt.name, _ctx.vars);
return _executeFunctionStatements([], [], getter.body, instanceCtx, _visitor);
}
};
});
_classStmt.methods.forEach(function (method) {
var paramNames = method.params.map(function (param) { return param.name; });
// Note: use `function` instead of arrow function to capture `this`
propertyDescriptors[method.name] = {
writable: false,
configurable: false,
value: function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i - 0] = arguments[_i];
}
var instanceCtx = new _ExecutionContext(_ctx, this, _classStmt.name, _ctx.vars);
return _executeFunctionStatements(paramNames, args, method.body, instanceCtx, _visitor);
}
};
});
var ctorParamNames = _classStmt.constructorMethod.params.map(function (param) { return param.name; });
// Note: use `function` instead of arrow function to capture `this`
var ctor = function () {
var _this = this;
var props = new Map();
var getters = new Map();
var methods = new Map();
var superClass = this._classStmt.parent.visitExpression(this._visitor, this._ctx);
var instanceCtx = new _ExecutionContext(this._ctx, superClass, null, this._classStmt.name, this._ctx.vars, props, getters, methods, this._ctx.instanceFactory);
this._classStmt.fields.forEach(function (field) { props.set(field.name, null); });
this._classStmt.getters.forEach(function (getter) {
getters.set(getter.name, function () { return _executeFunctionStatements([], [], getter.body, instanceCtx, _this._visitor); });
});
this._classStmt.methods.forEach(function (method) {
var paramNames = method.params.map(function (param) { return param.name; });
methods.set(method.name, _declareFn(paramNames, method.body, instanceCtx, _this._visitor));
});
var ctorParamNames = this._classStmt.constructorMethod.params.map(function (param) { return param.name; });
_executeFunctionStatements(ctorParamNames, args, this._classStmt.constructorMethod.body, instanceCtx, this._visitor);
return instanceCtx.superInstance;
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i - 0] = arguments[_i];
}
var instanceCtx = new _ExecutionContext(_ctx, this, _classStmt.name, _ctx.vars);
_classStmt.fields.forEach(function (field) { _this[field.name] = undefined; });
_executeFunctionStatements(ctorParamNames, args, _classStmt.constructorMethod.body, instanceCtx, _visitor);
};
_DynamicClass.prototype.debugAst = function () { return this._visitor.debugAst(this._classStmt); };
return _DynamicClass;
}());
var superClass = _classStmt.parent.visitExpression(_visitor, _ctx);
ctor.prototype = Object.create(superClass.prototype, propertyDescriptors);
return ctor;
}
var StatementInterpreter = (function () {
function StatementInterpreter() {
}
StatementInterpreter.prototype.debugAst = function (ast) {
return lang_1.IS_DART ? dart_emitter_1.debugOutputAstAsDart(ast) : ts_emitter_1.debugOutputAstAsTypeScript(ast);
};
StatementInterpreter.prototype.debugAst = function (ast) { return ts_emitter_1.debugOutputAstAsTypeScript(ast); };
StatementInterpreter.prototype.visitDeclareVarStmt = function (stmt, ctx) {

@@ -150,4 +121,5 @@ ctx.vars.set(stmt.name, stmt.value.visitExpression(this, ctx));

case o.BuiltinVar.Super:
return ctx.instance.__proto__;
case o.BuiltinVar.This:
return ctx.superInstance;
return ctx.instance;
case o.BuiltinVar.CatchError:

@@ -182,14 +154,3 @@ varName = CATCH_ERROR_VAR;

var value = expr.value.visitExpression(this, ctx);
if (isDynamicInstance(receiver)) {
var di = receiver;
if (di.props.has(expr.name)) {
di.props.set(expr.name, value);
}
else {
core_private_1.reflector.setter(expr.name)(receiver, value);
}
}
else {
core_private_1.reflector.setter(expr.name)(receiver, value);
}
receiver[expr.name] = value;
return value;

@@ -207,11 +168,6 @@ };

case o.BuiltinMethod.SubscribeObservable:
result = async_1.ObservableWrapper.subscribe(receiver, args[0]);
result = receiver.subscribe({ next: args[0] });
break;
case o.BuiltinMethod.bind:
if (lang_1.IS_DART) {
result = receiver;
}
else {
result = receiver.bind(args[0]);
}
result = receiver.bind(args[0]);
break;

@@ -222,13 +178,4 @@ default:

}
else if (isDynamicInstance(receiver)) {
var di = receiver;
if (di.methods.has(expr.name)) {
result = lang_1.FunctionWrapper.apply(di.methods.get(expr.name), args);
}
else {
result = core_private_1.reflector.method(expr.name)(receiver, args);
}
}
else {
result = core_private_1.reflector.method(expr.name)(receiver, args);
result = receiver[expr.name].apply(receiver, args);
}

@@ -241,4 +188,3 @@ return result;

if (fnExpr instanceof o.ReadVarExpr && fnExpr.builtin === o.BuiltinVar.Super) {
ctx.superInstance = ctx.instanceFactory.createInstance(ctx.superClass, ctx.className, args, ctx.props, ctx.getters, ctx.methods);
ctx.parent.superInstance = ctx.superInstance;
ctx.instance.constructor.prototype.constructor.apply(ctx.instance, args);
return null;

@@ -248,3 +194,3 @@ }

var fn = stmt.fn.visitExpression(this, ctx);
return lang_1.FunctionWrapper.apply(fn, args);
return fn.apply(null, args);
}

@@ -256,3 +202,3 @@ };

StatementInterpreter.prototype.visitDeclareClassStmt = function (stmt, ctx) {
var clazz = new _DynamicClass(stmt, ctx, this);
var clazz = createDynamicClass(stmt, ctx, this);
ctx.vars.set(stmt.name, clazz);

@@ -292,8 +238,3 @@ return null;

var clazz = ast.classExpr.visitExpression(this, ctx);
if (clazz instanceof _DynamicClass) {
return clazz.instantiate(args);
}
else {
return lang_1.FunctionWrapper.apply(core_private_1.reflector.factory(clazz), args);
}
return new (clazz.bind.apply(clazz, [void 0].concat(args)))();
};

@@ -368,20 +309,3 @@ StatementInterpreter.prototype.visitLiteralExpr = function (ast, ctx) { return ast.value; };

var receiver = ast.receiver.visitExpression(this, ctx);
if (isDynamicInstance(receiver)) {
var di = receiver;
if (di.props.has(ast.name)) {
result = di.props.get(ast.name);
}
else if (di.getters.has(ast.name)) {
result = di.getters.get(ast.name)();
}
else if (di.methods.has(ast.name)) {
result = di.methods.get(ast.name);
}
else {
result = core_private_1.reflector.getter(ast.name)(receiver);
}
}
else {
result = core_private_1.reflector.getter(ast.name)(receiver);
}
result = receiver[ast.name];
return result;

@@ -421,48 +345,9 @@ };

function _declareFn(varNames, statements, ctx, visitor) {
switch (varNames.length) {
case 0:
return function () { return _executeFunctionStatements(varNames, [], statements, ctx, visitor); };
case 1:
return function (d0 /** TODO #9100 */) {
return _executeFunctionStatements(varNames, [d0], statements, ctx, visitor);
};
case 2:
return function (d0 /** TODO #9100 */, d1 /** TODO #9100 */) {
return _executeFunctionStatements(varNames, [d0, d1], statements, ctx, visitor);
};
case 3:
return function (d0 /** TODO #9100 */, d1 /** TODO #9100 */, d2 /** TODO #9100 */) {
return _executeFunctionStatements(varNames, [d0, d1, d2], statements, ctx, visitor);
};
case 4:
return function (d0 /** TODO #9100 */, d1 /** TODO #9100 */, d2 /** TODO #9100 */, d3 /** TODO #9100 */) {
return _executeFunctionStatements(varNames, [d0, d1, d2, d3], statements, ctx, visitor);
};
case 5:
return function (d0 /** TODO #9100 */, d1 /** TODO #9100 */, d2 /** TODO #9100 */, d3 /** TODO #9100 */, d4 /** TODO #9100 */) {
return _executeFunctionStatements(varNames, [d0, d1, d2, d3, d4], statements, ctx, visitor);
};
case 6:
return function (d0 /** TODO #9100 */, d1 /** TODO #9100 */, d2 /** TODO #9100 */, d3 /** TODO #9100 */, d4 /** TODO #9100 */, d5 /** TODO #9100 */) {
return _executeFunctionStatements(varNames, [d0, d1, d2, d3, d4, d5], statements, ctx, visitor);
};
case 7:
return function (d0 /** TODO #9100 */, d1 /** TODO #9100 */, d2 /** TODO #9100 */, d3 /** TODO #9100 */, d4 /** TODO #9100 */, d5 /** TODO #9100 */, d6 /** TODO #9100 */) {
return _executeFunctionStatements(varNames, [d0, d1, d2, d3, d4, d5, d6], statements, ctx, visitor);
};
case 8:
return function (d0 /** TODO #9100 */, d1 /** TODO #9100 */, d2 /** TODO #9100 */, d3 /** TODO #9100 */, d4 /** TODO #9100 */, d5 /** TODO #9100 */, d6 /** TODO #9100 */, d7 /** TODO #9100 */) {
return _executeFunctionStatements(varNames, [d0, d1, d2, d3, d4, d5, d6, d7], statements, ctx, visitor);
};
case 9:
return function (d0 /** TODO #9100 */, d1 /** TODO #9100 */, d2 /** TODO #9100 */, d3 /** TODO #9100 */, d4 /** TODO #9100 */, d5 /** TODO #9100 */, d6 /** TODO #9100 */, d7 /** TODO #9100 */, d8 /** TODO #9100 */) {
return _executeFunctionStatements(varNames, [d0, d1, d2, d3, d4, d5, d6, d7, d8], statements, ctx, visitor);
};
case 10:
return function (d0 /** TODO #9100 */, d1 /** TODO #9100 */, d2 /** TODO #9100 */, d3 /** TODO #9100 */, d4 /** TODO #9100 */, d5 /** TODO #9100 */, d6 /** TODO #9100 */, d7 /** TODO #9100 */, d8 /** TODO #9100 */, d9 /** TODO #9100 */) {
return _executeFunctionStatements(varNames, [d0, d1, d2, d3, d4, d5, d6, d7, d8, d9], statements, ctx, visitor);
};
default:
throw new exceptions_1.BaseException('Declaring functions with more than 10 arguments is not supported right now');
}
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i - 0] = arguments[_i];
}
return _executeFunctionStatements(varNames, args, statements, ctx, visitor);
};
}

@@ -469,0 +354,0 @@ var CATCH_ERROR_VAR = 'error';

@@ -15,5 +15,5 @@ /**

var lang_1 = require('../facade/lang');
var util_1 = require('../util');
var abstract_emitter_1 = require('./abstract_emitter');
var abstract_js_emitter_1 = require('./abstract_js_emitter');
var util_1 = require('../util');
function jitStatements(sourceUrl, statements, resultVar) {

@@ -20,0 +20,0 @@ var converter = new JitEmitterVisitor();

@@ -10,5 +10,4 @@ /**

var exceptions_1 = require('../facade/exceptions');
var lang_1 = require('../facade/lang');
// asset:<package-name>/<realm>/<path-to-module>
var _ASSET_URL_RE = /asset:([^\/]+)\/([^\/]+)\/(.+)/g;
var _ASSET_URL_RE = /asset:([^\/]+)\/([^\/]+)\/(.+)/;
/**

@@ -32,4 +31,4 @@ * Interface that defines how import statements should be generated.

if (allowNonMatching === void 0) { allowNonMatching = true; }
var match = lang_1.RegExpWrapper.firstMatch(_ASSET_URL_RE, url);
if (lang_1.isPresent(match)) {
var match = url.match(_ASSET_URL_RE);
if (match !== null) {
return new AssetUrl(match[1], match[2], match[3]);

@@ -36,0 +35,0 @@ }

@@ -1,8 +0,1 @@

/**
* @license
* Copyright Google Inc. 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
*/
export declare class ParseLocation {

@@ -24,3 +17,4 @@ file: ParseSourceFile;

end: ParseLocation;
constructor(start: ParseLocation, end: ParseLocation);
details: string;
constructor(start: ParseLocation, end: ParseLocation, details?: string);
toString(): string;

@@ -27,0 +21,0 @@ }

@@ -0,1 +1,2 @@

"use strict";
/**

@@ -8,3 +9,3 @@ * @license

*/
"use strict";
var lang_1 = require('./facade/lang');
var ParseLocation = (function () {

@@ -17,3 +18,5 @@ function ParseLocation(file, offset, line, col) {

}
ParseLocation.prototype.toString = function () { return this.file.url + "@" + this.line + ":" + this.col; };
ParseLocation.prototype.toString = function () {
return lang_1.isPresent(this.offset) ? this.file.url + "@" + this.line + ":" + this.col : this.file.url;
};
return ParseLocation;

@@ -31,5 +34,7 @@ }());

var ParseSourceSpan = (function () {
function ParseSourceSpan(start, end) {
function ParseSourceSpan(start, end, details) {
if (details === void 0) { details = null; }
this.start = start;
this.end = end;
this.details = details;
}

@@ -57,31 +62,39 @@ ParseSourceSpan.prototype.toString = function () {

var ctxStart = this.span.start.offset;
if (ctxStart > source.length - 1) {
ctxStart = source.length - 1;
}
var ctxEnd = ctxStart;
var ctxLen = 0;
var ctxLines = 0;
while (ctxLen < 100 && ctxStart > 0) {
ctxStart--;
ctxLen++;
if (source[ctxStart] == '\n') {
if (++ctxLines == 3) {
break;
var contextStr = '';
var details = '';
if (lang_1.isPresent(ctxStart)) {
if (ctxStart > source.length - 1) {
ctxStart = source.length - 1;
}
var ctxEnd = ctxStart;
var ctxLen = 0;
var ctxLines = 0;
while (ctxLen < 100 && ctxStart > 0) {
ctxStart--;
ctxLen++;
if (source[ctxStart] == '\n') {
if (++ctxLines == 3) {
break;
}
}
}
}
ctxLen = 0;
ctxLines = 0;
while (ctxLen < 100 && ctxEnd < source.length - 1) {
ctxEnd++;
ctxLen++;
if (source[ctxEnd] == '\n') {
if (++ctxLines == 3) {
break;
ctxLen = 0;
ctxLines = 0;
while (ctxLen < 100 && ctxEnd < source.length - 1) {
ctxEnd++;
ctxLen++;
if (source[ctxEnd] == '\n') {
if (++ctxLines == 3) {
break;
}
}
}
var context = source.substring(ctxStart, this.span.start.offset) + '[ERROR ->]' +
source.substring(this.span.start.offset, ctxEnd + 1);
contextStr = " (\"" + context + "\")";
}
var context = source.substring(ctxStart, this.span.start.offset) + '[ERROR ->]' +
source.substring(this.span.start.offset, ctxEnd + 1);
return this.msg + " (\"" + context + "\"): " + this.span.start;
if (this.span.details) {
details = ", " + this.span.details;
}
return "" + this.msg + contextStr + ": " + this.span.start + details;
};

@@ -88,0 +101,0 @@ return ParseError;

@@ -10,3 +10,3 @@ /**

import { ReflectorReader } from '../core_private';
import { Type } from '../src/facade/lang';
import { Type } from './facade/lang';
/**

@@ -25,3 +25,3 @@ * Resolve a `Type` for {@link PipeMetadata}.

*/
resolve(type: Type): PipeMetadata;
resolve(type: Type, throwIfNotFound?: boolean): PipeMetadata;
}

@@ -11,4 +11,4 @@ /**

var core_private_1 = require('../core_private');
var exceptions_1 = require('../src/facade/exceptions');
var lang_1 = require('../src/facade/lang');
var exceptions_1 = require('./facade/exceptions');
var lang_1 = require('./facade/lang');
function _isPipeMetadata(type) {

@@ -25,3 +25,4 @@ return type instanceof core_1.PipeMetadata;

*/
PipeResolver.prototype.resolve = function (type) {
PipeResolver.prototype.resolve = function (type, throwIfNotFound) {
if (throwIfNotFound === void 0) { throwIfNotFound = true; }
var metas = this._reflector.annotations(core_1.resolveForwardRef(type));

@@ -34,3 +35,6 @@ if (lang_1.isPresent(metas)) {

}
throw new exceptions_1.BaseException("No Pipe decorator found on " + lang_1.stringify(type));
if (throwIfNotFound) {
throw new exceptions_1.BaseException("No Pipe decorator found on " + lang_1.stringify(type));
}
return null;
};

@@ -37,0 +41,0 @@ /** @nocollapse */

@@ -8,10 +8,12 @@ /**

*/
import { Compiler, ComponentFactory, ComponentResolver } from '@angular/core';
import { ConcreteType, Type } from '../src/facade/lang';
import { Compiler, ComponentFactory, Injector, ModuleWithComponentFactories, NgModuleFactory } from '@angular/core';
import { Console } from '../core_private';
import { CompilerConfig } from './config';
import { DirectiveNormalizer } from './directive_normalizer';
import { ConcreteType, Type } from './facade/lang';
import { CompileMetadataResolver } from './metadata_resolver';
import { NgModuleCompiler } from './ng_module_compiler';
import { StyleCompiler } from './style_compiler';
import { TemplateParser } from './template_parser/template_parser';
import { ViewCompiler } from './view_compiler/view_compiler';
import { TemplateParser } from './template_parser';
import { DirectiveNormalizer } from './directive_normalizer';
import { CompileMetadataResolver } from './metadata_resolver';
import { CompilerConfig } from './config';
/**

@@ -26,3 +28,4 @@ * An internal module of the Angular compiler that begins with component types,

*/
export declare class RuntimeCompiler implements ComponentResolver, Compiler {
export declare class RuntimeCompiler implements Compiler {
private _injector;
private _metadataResolver;

@@ -33,14 +36,26 @@ private _templateNormalizer;

private _viewCompiler;
private _genConfig;
private _ngModuleCompiler;
private _compilerConfig;
private _console;
private _compiledTemplateCache;
private _compiledHostTemplateCache;
constructor(_metadataResolver: CompileMetadataResolver, _templateNormalizer: DirectiveNormalizer, _templateParser: TemplateParser, _styleCompiler: StyleCompiler, _viewCompiler: ViewCompiler, _genConfig: CompilerConfig);
resolveComponent(component: Type | string): Promise<ComponentFactory<any>>;
compileComponentAsync<T>(compType: ConcreteType<T>): Promise<ComponentFactory<T>>;
compileComponentSync<T>(compType: ConcreteType<T>): ComponentFactory<T>;
clearCacheFor(compType: Type): void;
private _compiledNgModuleCache;
constructor(_injector: Injector, _metadataResolver: CompileMetadataResolver, _templateNormalizer: DirectiveNormalizer, _templateParser: TemplateParser, _styleCompiler: StyleCompiler, _viewCompiler: ViewCompiler, _ngModuleCompiler: NgModuleCompiler, _compilerConfig: CompilerConfig, _console: Console);
injector: Injector;
compileModuleSync<T>(moduleType: ConcreteType<T>): NgModuleFactory<T>;
compileModuleAsync<T>(moduleType: ConcreteType<T>): Promise<NgModuleFactory<T>>;
compileModuleAndAllComponentsSync<T>(moduleType: ConcreteType<T>): ModuleWithComponentFactories<T>;
compileModuleAndAllComponentsAsync<T>(moduleType: ConcreteType<T>): Promise<ModuleWithComponentFactories<T>>;
compileComponentAsync<T>(compType: ConcreteType<T>, ngModule?: ConcreteType<any>): Promise<ComponentFactory<T>>;
compileComponentSync<T>(compType: ConcreteType<T>, ngModule?: ConcreteType<any>): ComponentFactory<T>;
private _compileModuleAndComponents<T>(moduleType, isSync);
private _compileModuleAndAllComponents<T>(moduleType, isSync);
private _compileModule<T>(moduleType);
private _compileComponentInModule<T>(compType, isSync, moduleType);
clearCacheFor(type: Type): void;
clearCache(): void;
private _getCompiledHostTemplate(type);
private _getCompiledTemplate(type);
private _getTransitiveCompiledTemplates(compType, isHost, target?);
private _createCompiledHostTemplate(compType);
private _createCompiledTemplate(compMeta, ngModule);
private _assertComponentKnown(compType, isHost);
private _assertComponentLoaded(compType, isHost);
private _compileTemplate(template);

@@ -47,0 +62,0 @@ private _resolveStylesCompileResult(result, externalStylesheetsByModuleUrl);

@@ -10,18 +10,20 @@ /**

var core_1 = require('@angular/core');
var exceptions_1 = require('../src/facade/exceptions');
var lang_1 = require('../src/facade/lang');
var async_1 = require('../src/facade/async');
var core_private_1 = require('../core_private');
var compile_metadata_1 = require('./compile_metadata');
var style_compiler_1 = require('./style_compiler');
var view_compiler_1 = require('./view_compiler/view_compiler');
var template_parser_1 = require('./template_parser');
var config_1 = require('./config');
var directive_normalizer_1 = require('./directive_normalizer');
var exceptions_1 = require('./facade/exceptions');
var lang_1 = require('./facade/lang');
var metadata_resolver_1 = require('./metadata_resolver');
var config_1 = require('./config');
var ng_module_compiler_1 = require('./ng_module_compiler');
var ir = require('./output/output_ast');
var output_interpreter_1 = require('./output/output_interpreter');
var output_jit_1 = require('./output/output_jit');
var output_interpreter_1 = require('./output/output_interpreter');
var interpretive_view_1 = require('./output/interpretive_view');
var style_compiler_1 = require('./style_compiler');
var template_parser_1 = require('./template_parser/template_parser');
var util_1 = require('./util');
var view_compiler_1 = require('./view_compiler/view_compiler');
var RuntimeCompiler = (function () {
function RuntimeCompiler(_metadataResolver, _templateNormalizer, _templateParser, _styleCompiler, _viewCompiler, _genConfig) {
function RuntimeCompiler(_injector, _metadataResolver, _templateNormalizer, _templateParser, _styleCompiler, _viewCompiler, _ngModuleCompiler, _compilerConfig, _console) {
this._injector = _injector;
this._metadataResolver = _metadataResolver;

@@ -32,44 +34,160 @@ this._templateNormalizer = _templateNormalizer;

this._viewCompiler = _viewCompiler;
this._genConfig = _genConfig;
this._ngModuleCompiler = _ngModuleCompiler;
this._compilerConfig = _compilerConfig;
this._console = _console;
this._compiledTemplateCache = new Map();
this._compiledHostTemplateCache = new Map();
this._compiledNgModuleCache = new Map();
}
RuntimeCompiler.prototype.resolveComponent = function (component) {
if (lang_1.isString(component)) {
return async_1.PromiseWrapper.reject(new exceptions_1.BaseException("Cannot resolve component using '" + component + "'."), null);
Object.defineProperty(RuntimeCompiler.prototype, "injector", {
get: function () { return this._injector; },
enumerable: true,
configurable: true
});
RuntimeCompiler.prototype.compileModuleSync = function (moduleType) {
return this._compileModuleAndComponents(moduleType, true).syncResult;
};
RuntimeCompiler.prototype.compileModuleAsync = function (moduleType) {
return this._compileModuleAndComponents(moduleType, false).asyncResult;
};
RuntimeCompiler.prototype.compileModuleAndAllComponentsSync = function (moduleType) {
return this._compileModuleAndAllComponents(moduleType, true).syncResult;
};
RuntimeCompiler.prototype.compileModuleAndAllComponentsAsync = function (moduleType) {
return this._compileModuleAndAllComponents(moduleType, false).asyncResult;
};
RuntimeCompiler.prototype.compileComponentAsync = function (compType, ngModule) {
if (ngModule === void 0) { ngModule = null; }
if (!ngModule) {
throw new exceptions_1.BaseException("Calling compileComponentAsync on the root compiler without a module is not allowed! (Compiling component " + lang_1.stringify(compType) + ")");
}
return this.compileComponentAsync(component);
return this._compileComponentInModule(compType, false, ngModule).asyncResult;
};
RuntimeCompiler.prototype.compileComponentAsync = function (compType) {
RuntimeCompiler.prototype.compileComponentSync = function (compType, ngModule) {
if (ngModule === void 0) { ngModule = null; }
if (!ngModule) {
throw new exceptions_1.BaseException("Calling compileComponentSync on the root compiler without a module is not allowed! (Compiling component " + lang_1.stringify(compType) + ")");
}
return this._compileComponentInModule(compType, true, ngModule).syncResult;
};
RuntimeCompiler.prototype._compileModuleAndComponents = function (moduleType, isSync) {
var componentPromise = this._compileComponents(moduleType, isSync);
var ngModuleFactory = this._compileModule(moduleType);
return new util_1.SyncAsyncResult(ngModuleFactory, componentPromise.then(function () { return ngModuleFactory; }));
};
RuntimeCompiler.prototype._compileModuleAndAllComponents = function (moduleType, isSync) {
var _this = this;
var templates = this._getTransitiveCompiledTemplates(compType, true);
var loadingPromises = [];
templates.forEach(function (template) {
if (template.loading) {
loadingPromises.push(template.loading);
}
var componentPromise = this._compileComponents(moduleType, isSync);
var ngModuleFactory = this._compileModule(moduleType);
var moduleMeta = this._metadataResolver.getNgModuleMetadata(moduleType);
var componentFactories = [];
var templates = new Set();
moduleMeta.transitiveModule.modules.forEach(function (moduleMeta) {
moduleMeta.declaredDirectives.forEach(function (dirMeta) {
if (dirMeta.isComponent) {
var template = _this._createCompiledHostTemplate(dirMeta.type.runtime);
templates.add(template);
componentFactories.push(template.proxyComponentFactory);
}
});
});
return Promise.all(loadingPromises).then(function () {
var syncResult = new core_1.ModuleWithComponentFactories(ngModuleFactory, componentFactories);
// Note: host components themselves can always be compiled synchronously as they have an
// inline template. However, we still need to wait for the components that they
// reference to be loaded / compiled.
var compile = function () {
templates.forEach(function (template) { _this._compileTemplate(template); });
return _this._getCompiledHostTemplate(compType).proxyComponentFactory;
});
return syncResult;
};
var asyncResult = isSync ? Promise.resolve(compile()) : componentPromise.then(compile);
return new util_1.SyncAsyncResult(syncResult, asyncResult);
};
RuntimeCompiler.prototype.compileComponentSync = function (compType) {
RuntimeCompiler.prototype._compileModule = function (moduleType) {
var _this = this;
var templates = this._getTransitiveCompiledTemplates(compType, true);
var ngModuleFactory = this._compiledNgModuleCache.get(moduleType);
if (!ngModuleFactory) {
var moduleMeta_1 = this._metadataResolver.getNgModuleMetadata(moduleType);
var transitiveModuleMeta = moduleMeta_1.transitiveModule;
var boundCompilerFactory = function (parentResolver) {
return new ModuleBoundCompiler(_this, moduleMeta_1.type.runtime, parentResolver, _this._console);
};
// Always provide a bound Compiler and ComponentResolver
var extraProviders = [
this._metadataResolver.getProviderMetadata(new core_1.Provider(core_1.Compiler, {
useFactory: boundCompilerFactory,
deps: [[new core_1.OptionalMetadata(), new core_1.SkipSelfMetadata(), core_1.ComponentResolver]]
})),
this._metadataResolver.getProviderMetadata(new core_1.Provider(core_1.ComponentResolver, { useExisting: core_1.Compiler }))
];
var compileResult = this._ngModuleCompiler.compile(moduleMeta_1, extraProviders);
compileResult.dependencies.forEach(function (dep) {
dep.placeholder.runtime =
_this._assertComponentKnown(dep.comp.runtime, true).proxyComponentFactory;
dep.placeholder.name = "compFactory_" + dep.comp.name;
});
if (!this._compilerConfig.useJit) {
ngModuleFactory =
output_interpreter_1.interpretStatements(compileResult.statements, compileResult.ngModuleFactoryVar);
}
else {
ngModuleFactory = output_jit_1.jitStatements(moduleMeta_1.type.name + ".ngfactory.js", compileResult.statements, compileResult.ngModuleFactoryVar);
}
this._compiledNgModuleCache.set(moduleMeta_1.type.runtime, ngModuleFactory);
}
return ngModuleFactory;
};
RuntimeCompiler.prototype._compileComponentInModule = function (compType, isSync, moduleType) {
this._metadataResolver.addComponentToModule(moduleType, compType);
var componentPromise = this._compileComponents(moduleType, isSync);
var componentFactory = this._assertComponentKnown(compType, true).proxyComponentFactory;
return new util_1.SyncAsyncResult(componentFactory, componentPromise.then(function () { return componentFactory; }));
};
/**
* @internal
*/
RuntimeCompiler.prototype._compileComponents = function (mainModule, isSync) {
var _this = this;
var templates = new Set();
var loadingPromises = [];
var ngModule = this._metadataResolver.getNgModuleMetadata(mainModule);
ngModule.transitiveModule.modules.forEach(function (localModuleMeta) {
localModuleMeta.declaredDirectives.forEach(function (dirMeta) {
if (dirMeta.isComponent) {
templates.add(_this._createCompiledTemplate(dirMeta, localModuleMeta));
dirMeta.entryComponents.forEach(function (entryComponentType) {
templates.add(_this._createCompiledHostTemplate(entryComponentType.runtime));
});
}
});
localModuleMeta.entryComponents.forEach(function (entryComponentType) {
templates.add(_this._createCompiledHostTemplate(entryComponentType.runtime));
});
});
templates.forEach(function (template) {
if (template.loading) {
throw new exceptions_1.BaseException("Can't compile synchronously as " + template.compType.name + " is still being loaded!");
if (isSync) {
throw new core_1.ComponentStillLoadingError(template.compType.runtime);
}
else {
loadingPromises.push(template.loading);
}
}
});
templates.forEach(function (template) { _this._compileTemplate(template); });
return this._getCompiledHostTemplate(compType).proxyComponentFactory;
var compile = function () { templates.forEach(function (template) { _this._compileTemplate(template); }); };
if (isSync) {
compile();
return Promise.resolve(null);
}
else {
return Promise.all(loadingPromises).then(compile);
}
};
RuntimeCompiler.prototype.clearCacheFor = function (compType) {
this._metadataResolver.clearCacheFor(compType);
this._compiledHostTemplateCache.delete(compType);
var compiledTemplate = this._compiledTemplateCache.get(compType);
RuntimeCompiler.prototype.clearCacheFor = function (type) {
this._compiledNgModuleCache.delete(type);
this._metadataResolver.clearCacheFor(type);
this._compiledHostTemplateCache.delete(type);
var compiledTemplate = this._compiledTemplateCache.get(type);
if (compiledTemplate) {
this._templateNormalizer.clearCacheFor(compiledTemplate.normalizedCompMeta);
this._compiledTemplateCache.delete(compType);
this._compiledTemplateCache.delete(type);
}

@@ -82,47 +200,39 @@ };

this._templateNormalizer.clearCache();
this._compiledNgModuleCache.clear();
};
RuntimeCompiler.prototype._getCompiledHostTemplate = function (type) {
var compiledTemplate = this._compiledHostTemplateCache.get(type);
RuntimeCompiler.prototype._createCompiledHostTemplate = function (compType) {
var compiledTemplate = this._compiledHostTemplateCache.get(compType);
if (lang_1.isBlank(compiledTemplate)) {
var compMeta = this._metadataResolver.getDirectiveMetadata(type);
var compMeta = this._metadataResolver.getDirectiveMetadata(compType);
assertComponent(compMeta);
var hostMeta = compile_metadata_1.createHostComponentMeta(compMeta.type, compMeta.selector);
compiledTemplate = new CompiledTemplate(true, compMeta.selector, compMeta.type, [], [type], [], [], this._templateNormalizer.normalizeDirective(hostMeta));
this._compiledHostTemplateCache.set(type, compiledTemplate);
var hostMeta = compile_metadata_1.createHostComponentMeta(compMeta);
compiledTemplate = new CompiledTemplate(true, compMeta.selector, compMeta.type, [compMeta], [], [], this._templateNormalizer.normalizeDirective(hostMeta));
this._compiledHostTemplateCache.set(compType, compiledTemplate);
}
return compiledTemplate;
};
RuntimeCompiler.prototype._getCompiledTemplate = function (type) {
var compiledTemplate = this._compiledTemplateCache.get(type);
RuntimeCompiler.prototype._createCompiledTemplate = function (compMeta, ngModule) {
var compiledTemplate = this._compiledTemplateCache.get(compMeta.type.runtime);
if (lang_1.isBlank(compiledTemplate)) {
var compMeta = this._metadataResolver.getDirectiveMetadata(type);
assertComponent(compMeta);
var viewDirectives = [];
var viewComponentTypes = [];
this._metadataResolver.getViewDirectivesMetadata(type).forEach(function (dirOrComp) {
if (dirOrComp.isComponent) {
viewComponentTypes.push(dirOrComp.type.runtime);
}
else {
viewDirectives.push(dirOrComp);
}
});
var precompileComponentTypes = compMeta.precompile.map(function (typeMeta) { return typeMeta.runtime; });
var pipes = this._metadataResolver.getViewPipesMetadata(type);
compiledTemplate = new CompiledTemplate(false, compMeta.selector, compMeta.type, viewDirectives, viewComponentTypes, precompileComponentTypes, pipes, this._templateNormalizer.normalizeDirective(compMeta));
this._compiledTemplateCache.set(type, compiledTemplate);
compiledTemplate = new CompiledTemplate(false, compMeta.selector, compMeta.type, ngModule.transitiveModule.directives, ngModule.transitiveModule.pipes, ngModule.schemas, this._templateNormalizer.normalizeDirective(compMeta));
this._compiledTemplateCache.set(compMeta.type.runtime, compiledTemplate);
}
return compiledTemplate;
};
RuntimeCompiler.prototype._getTransitiveCompiledTemplates = function (compType, isHost, target) {
var _this = this;
if (target === void 0) { target = new Set(); }
var template = isHost ? this._getCompiledHostTemplate(compType) : this._getCompiledTemplate(compType);
if (!target.has(template)) {
target.add(template);
template.viewComponentTypes.forEach(function (compType) { _this._getTransitiveCompiledTemplates(compType, false, target); });
template.precompileHostComponentTypes.forEach(function (compType) { _this._getTransitiveCompiledTemplates(compType, true, target); });
RuntimeCompiler.prototype._assertComponentKnown = function (compType, isHost) {
var compiledTemplate = isHost ? this._compiledHostTemplateCache.get(compType) :
this._compiledTemplateCache.get(compType);
if (!compiledTemplate) {
throw new exceptions_1.BaseException("Illegal state: CompiledTemplate for " + lang_1.stringify(compType) + " (isHost: " + isHost + ") does not exist!");
}
return target;
return compiledTemplate;
};
RuntimeCompiler.prototype._assertComponentLoaded = function (compType, isHost) {
var compiledTemplate = this._assertComponentKnown(compType, isHost);
if (compiledTemplate.loading) {
throw new exceptions_1.BaseException("Illegal state: CompiledTemplate for " + lang_1.stringify(compType) + " (isHost: " + isHost + ") is still loading!");
}
return compiledTemplate;
};
RuntimeCompiler.prototype._compileTemplate = function (template) {

@@ -138,10 +248,10 @@ var _this = this;

this._resolveStylesCompileResult(stylesCompileResult.componentStylesheet, externalStylesheetsByModuleUrl);
var viewCompMetas = template.viewComponentTypes.map(function (compType) { return _this._getCompiledTemplate(compType).normalizedCompMeta; });
var parsedTemplate = this._templateParser.parse(compMeta, compMeta.template.template, template.viewDirectives.concat(viewCompMetas), template.viewPipes, compMeta.type.name);
var viewCompMetas = template.viewComponentTypes.map(function (compType) { return _this._assertComponentLoaded(compType, false).normalizedCompMeta; });
var parsedTemplate = this._templateParser.parse(compMeta, compMeta.template.template, template.viewDirectives.concat(viewCompMetas), template.viewPipes, template.schemas, compMeta.type.name);
var compileResult = this._viewCompiler.compileComponent(compMeta, parsedTemplate, ir.variable(stylesCompileResult.componentStylesheet.stylesVar), template.viewPipes);
var depTemplates = compileResult.dependencies.map(function (dep) {
compileResult.dependencies.forEach(function (dep) {
var depTemplate;
if (dep instanceof view_compiler_1.ViewFactoryDependency) {
var vfd = dep;
depTemplate = _this._getCompiledTemplate(vfd.comp.runtime);
depTemplate = _this._assertComponentLoaded(vfd.comp.runtime, false);
vfd.placeholder.runtime = depTemplate.proxyViewFactory;

@@ -152,15 +262,14 @@ vfd.placeholder.name = "viewFactory_" + vfd.comp.name;

var cfd = dep;
depTemplate = _this._getCompiledHostTemplate(cfd.comp.runtime);
depTemplate = _this._assertComponentLoaded(cfd.comp.runtime, true);
cfd.placeholder.runtime = depTemplate.proxyComponentFactory;
cfd.placeholder.name = "compFactory_" + cfd.comp.name;
}
return depTemplate;
});
var statements = stylesCompileResult.componentStylesheet.statements.concat(compileResult.statements);
var factory;
if (lang_1.IS_DART || !this._genConfig.useJit) {
factory = output_interpreter_1.interpretStatements(statements, compileResult.viewFactoryVar, new interpretive_view_1.InterpretiveAppViewInstanceFactory());
if (!this._compilerConfig.useJit) {
factory = output_interpreter_1.interpretStatements(statements, compileResult.viewFactoryVar);
}
else {
factory = output_jit_1.jitStatements(template.compType.name + ".template.js", statements, compileResult.viewFactoryVar);
factory = output_jit_1.jitStatements(template.compType.name + ".ngfactory.js", statements, compileResult.viewFactoryVar);
}

@@ -180,4 +289,4 @@ template.compiled(factory);

this._resolveStylesCompileResult(result, externalStylesheetsByModuleUrl);
if (lang_1.IS_DART || !this._genConfig.useJit) {
return output_interpreter_1.interpretStatements(result.statements, result.stylesVar, new interpretive_view_1.InterpretiveAppViewInstanceFactory());
if (!this._compilerConfig.useJit) {
return output_interpreter_1.interpretStatements(result.statements, result.stylesVar);
}

@@ -194,2 +303,3 @@ else {

RuntimeCompiler.ctorParameters = [
{ type: core_1.Injector, },
{ type: metadata_resolver_1.CompileMetadataResolver, },

@@ -200,3 +310,5 @@ { type: directive_normalizer_1.DirectiveNormalizer, },

{ type: view_compiler_1.ViewCompiler, },
{ type: ng_module_compiler_1.NgModuleCompiler, },
{ type: config_1.CompilerConfig, },
{ type: core_private_1.Console, },
];

@@ -207,11 +319,8 @@ return RuntimeCompiler;

var CompiledTemplate = (function () {
function CompiledTemplate(isHost, selector, compType, viewDirectives, viewComponentTypes, precompileHostComponentTypes, viewPipes, _normalizeResult) {
function CompiledTemplate(isHost, selector, compType, viewDirectivesAndComponents, viewPipes, schemas, _normalizeResult) {
var _this = this;
this.isHost = isHost;
this.compType = compType;
this.viewDirectives = viewDirectives;
this.viewComponentTypes = viewComponentTypes;
this.precompileHostComponentTypes = precompileHostComponentTypes;
this.viewPipes = viewPipes;
this._normalizeResult = _normalizeResult;
this.schemas = schemas;
this._viewFactory = null;

@@ -222,2 +331,12 @@ this.loading = null;

this.isCompiledWithDeps = false;
this.viewComponentTypes = [];
this.viewDirectives = [];
viewDirectivesAndComponents.forEach(function (dirMeta) {
if (dirMeta.isComponent) {
_this.viewComponentTypes.push(dirMeta.type.runtime);
}
else {
_this.viewDirectives.push(dirMeta);
}
});
this.proxyViewFactory = function () {

@@ -228,2 +347,5 @@ var args = [];

}
if (!_this._viewFactory) {
throw new exceptions_1.BaseException("Illegal state: CompiledTemplate for " + lang_1.stringify(_this.compType) + " is not compiled yet!");
}
return _this._viewFactory.apply(null, args);

@@ -266,2 +388,69 @@ };

}
/**
* Implements `Compiler` and `ComponentResolver` by delegating
* to the RuntimeCompiler using a known module.
*/
var ModuleBoundCompiler = (function () {
function ModuleBoundCompiler(_delegate, _ngModule, _parentComponentResolver, _console) {
this._delegate = _delegate;
this._ngModule = _ngModule;
this._parentComponentResolver = _parentComponentResolver;
this._console = _console;
this._warnOnComponentResolver = true;
}
Object.defineProperty(ModuleBoundCompiler.prototype, "_injector", {
get: function () { return this._delegate.injector; },
enumerable: true,
configurable: true
});
ModuleBoundCompiler.prototype.resolveComponent = function (component) {
if (lang_1.isString(component)) {
if (this._parentComponentResolver) {
return this._parentComponentResolver.resolveComponent(component);
}
else {
return Promise.reject(new exceptions_1.BaseException("Cannot resolve component using '" + component + "'."));
}
}
if (this._warnOnComponentResolver) {
this._console.warn(core_1.ComponentResolver.DynamicCompilationDeprecationMsg);
this._warnOnComponentResolver = false;
}
return this.compileComponentAsync(component);
};
ModuleBoundCompiler.prototype.compileComponentAsync = function (compType, ngModule) {
if (ngModule === void 0) { ngModule = null; }
return this._delegate.compileComponentAsync(compType, ngModule ? ngModule : this._ngModule);
};
ModuleBoundCompiler.prototype.compileComponentSync = function (compType, ngModule) {
if (ngModule === void 0) { ngModule = null; }
return this._delegate.compileComponentSync(compType, ngModule ? ngModule : this._ngModule);
};
ModuleBoundCompiler.prototype.compileModuleSync = function (moduleType) {
return this._delegate.compileModuleSync(moduleType);
};
ModuleBoundCompiler.prototype.compileModuleAsync = function (moduleType) {
return this._delegate.compileModuleAsync(moduleType);
};
ModuleBoundCompiler.prototype.compileModuleAndAllComponentsSync = function (moduleType) {
return this._delegate.compileModuleAndAllComponentsSync(moduleType);
};
ModuleBoundCompiler.prototype.compileModuleAndAllComponentsAsync = function (moduleType) {
return this._delegate.compileModuleAndAllComponentsAsync(moduleType);
};
/**
* Clears all caches
*/
ModuleBoundCompiler.prototype.clearCache = function () {
this._delegate.clearCache();
if (this._parentComponentResolver) {
this._parentComponentResolver.clearCache();
}
};
/**
* Clears the cache for the given component/ngModule.
*/
ModuleBoundCompiler.prototype.clearCacheFor = function (type) { this._delegate.clearCacheFor(type); };
return ModuleBoundCompiler;
}());
//# sourceMappingURL=runtime_compiler.js.map

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"RuntimeCompiler":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"./metadata_resolver","name":"CompileMetadataResolver"},{"__symbolic":"reference","module":"./directive_normalizer","name":"DirectiveNormalizer"},{"__symbolic":"reference","module":"./template_parser","name":"TemplateParser"},{"__symbolic":"reference","module":"./style_compiler","name":"StyleCompiler"},{"__symbolic":"reference","module":"./view_compiler/view_compiler","name":"ViewCompiler"},{"__symbolic":"reference","module":"./config","name":"CompilerConfig"}]}],"resolveComponent":[{"__symbolic":"method"}],"compileComponentAsync":[{"__symbolic":"method"}],"compileComponentSync":[{"__symbolic":"method"}],"clearCacheFor":[{"__symbolic":"method"}],"clearCache":[{"__symbolic":"method"}],"_getCompiledHostTemplate":[{"__symbolic":"method"}],"_getCompiledTemplate":[{"__symbolic":"method"}],"_getTransitiveCompiledTemplates":[{"__symbolic":"method"}],"_compileTemplate":[{"__symbolic":"method"}],"_resolveStylesCompileResult":[{"__symbolic":"method"}],"_resolveAndEvalStylesCompileResult":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"RuntimeCompiler":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector"},{"__symbolic":"reference","module":"./metadata_resolver","name":"CompileMetadataResolver"},{"__symbolic":"reference","module":"./directive_normalizer","name":"DirectiveNormalizer"},{"__symbolic":"reference","module":"./template_parser/template_parser","name":"TemplateParser"},{"__symbolic":"reference","module":"./style_compiler","name":"StyleCompiler"},{"__symbolic":"reference","module":"./view_compiler/view_compiler","name":"ViewCompiler"},{"__symbolic":"reference","module":"./ng_module_compiler","name":"NgModuleCompiler"},{"__symbolic":"reference","module":"./config","name":"CompilerConfig"},{"__symbolic":"reference","module":"../core_private","name":"Console"}]}],"compileModuleSync":[{"__symbolic":"method"}],"compileModuleAsync":[{"__symbolic":"method"}],"compileModuleAndAllComponentsSync":[{"__symbolic":"method"}],"compileModuleAndAllComponentsAsync":[{"__symbolic":"method"}],"compileComponentAsync":[{"__symbolic":"method"}],"compileComponentSync":[{"__symbolic":"method"}],"_compileModuleAndComponents":[{"__symbolic":"method"}],"_compileModuleAndAllComponents":[{"__symbolic":"method"}],"_compileModule":[{"__symbolic":"method"}],"_compileComponentInModule":[{"__symbolic":"method"}],"_compileComponents":[{"__symbolic":"method"}],"clearCacheFor":[{"__symbolic":"method"}],"clearCache":[{"__symbolic":"method"}],"_createCompiledHostTemplate":[{"__symbolic":"method"}],"_createCompiledTemplate":[{"__symbolic":"method"}],"_assertComponentKnown":[{"__symbolic":"method"}],"_assertComponentLoaded":[{"__symbolic":"method"}],"_compileTemplate":[{"__symbolic":"method"}],"_resolveStylesCompileResult":[{"__symbolic":"method"}],"_resolveAndEvalStylesCompileResult":[{"__symbolic":"method"}]}}}}

@@ -1,2 +0,9 @@

import { SecurityContext } from '../../core_private';
/**
* @license
* Copyright Google Inc. 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 { SchemaMetadata, SecurityContext } from '@angular/core';
import { ElementSchemaRegistry } from './element_schema_registry';

@@ -10,3 +17,3 @@ export declare class DomElementSchemaRegistry extends ElementSchemaRegistry {

constructor();
hasProperty(tagName: string, propName: string): boolean;
hasProperty(tagName: string, propName: string, schemaMetas: SchemaMetadata[]): boolean;
/**

@@ -24,2 +31,3 @@ * securityContext returns the security context for the given property on the given DOM tag.

getMappedPropName(propName: string): string;
getDefaultComponentElementName(): string;
}

@@ -15,3 +15,2 @@ /**

var core_1 = require('@angular/core');
var core_private_1 = require('../../core_private');
var collection_1 = require('../facade/collection');

@@ -79,4 +78,3 @@ var lang_1 = require('../facade/lang');

// =================================================================================================
var SCHEMA =
/*@ts2dart_const*/ ([
var SCHEMA = ([
'*|textContent,%classList,className,id,innerHTML,*beforecopy,*beforecut,*beforepaste,*copy,*cut,*paste,*search,*selectstart,*webkitfullscreenchange,*webkitfullscreenerror,*wheel,outerHTML,#scrollLeft,#scrollTop',

@@ -272,3 +270,3 @@ '^*|accessKey,contentEditable,dir,!draggable,!hidden,innerText,lang,*abort,*autocomplete,*autocompleteerror,*beforecopy,*beforecut,*beforepaste,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*copy,*cuechange,*cut,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*message,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*mozfullscreenchange,*mozfullscreenerror,*mozpointerlockchange,*mozpointerlockerror,*paste,*pause,*play,*playing,*progress,*ratechange,*reset,*resize,*scroll,*search,*seeked,*seeking,*select,*selectstart,*show,*stalled,*submit,*suspend,*timeupdate,*toggle,*volumechange,*waiting,*webglcontextcreationerror,*webglcontextlost,*webglcontextrestored,*webkitfullscreenchange,*webkitfullscreenerror,*wheel,outerText,!spellcheck,%style,#tabIndex,title,!translate',

}
DomElementSchemaRegistry.prototype.hasProperty = function (tagName, propName) {
DomElementSchemaRegistry.prototype.hasProperty = function (tagName, propName, schemaMetas) {
if (tagName.indexOf('-') !== -1) {

@@ -278,13 +276,13 @@ if (tagName === 'ng-container' || tagName === 'ng-content') {

}
// Can't tell now as we don't know which properties a custom element will get
// once it is instantiated
return true;
}
else {
var elementProperties = this.schema[tagName.toLowerCase()];
if (!lang_1.isPresent(elementProperties)) {
elementProperties = this.schema['unknown'];
if (schemaMetas.some(function (schema) { return schema.name === core_1.CUSTOM_ELEMENTS_SCHEMA.name; })) {
// Can't tell now as we don't know which properties a custom element will get
// once it is instantiated
return true;
}
return lang_1.isPresent(elementProperties[propName]);
}
var elementProperties = this.schema[tagName.toLowerCase()];
if (!lang_1.isPresent(elementProperties)) {
elementProperties = this.schema['unknown'];
}
return lang_1.isPresent(elementProperties[propName]);
};

@@ -310,3 +308,3 @@ /**

ctx = dom_security_schema_1.SECURITY_SCHEMA['*|' + propName];
return ctx !== undefined ? ctx : core_private_1.SecurityContext.NONE;
return ctx !== undefined ? ctx : core_1.SecurityContext.NONE;
};

@@ -317,2 +315,3 @@ DomElementSchemaRegistry.prototype.getMappedPropName = function (propName) {

};
DomElementSchemaRegistry.prototype.getDefaultComponentElementName = function () { return 'ng-component'; };
/** @nocollapse */

@@ -319,0 +318,0 @@ DomElementSchemaRegistry.decorators = [

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"DomElementSchemaRegistry":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"hasProperty":[{"__symbolic":"method"}],"securityContext":[{"__symbolic":"method"}],"getMappedPropName":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"DomElementSchemaRegistry":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"hasProperty":[{"__symbolic":"method"}],"securityContext":[{"__symbolic":"method"}],"getMappedPropName":[{"__symbolic":"method"}],"getDefaultComponentElementName":[{"__symbolic":"method"}]}}}}

@@ -8,3 +8,3 @@ /**

*/
import { SecurityContext } from '../../core_private';
import { SecurityContext } from '@angular/core';
/** Map from tagName|propertyName SecurityContext. Properties applying to all tags use '*'. */

@@ -11,0 +11,0 @@ export declare const SECURITY_SCHEMA: {

@@ -9,3 +9,3 @@ /**

"use strict";
var core_private_1 = require('../../core_private');
var core_1 = require('@angular/core');
// =================================================================================================

@@ -30,3 +30,3 @@ // =================================================================================================

// Case is insignificant below, all element and attribute names are lower-cased for lookup.
registerContext(core_private_1.SecurityContext.HTML, [
registerContext(core_1.SecurityContext.HTML, [
'iframe|srcdoc',

@@ -36,11 +36,11 @@ '*|innerHTML',

]);
registerContext(core_private_1.SecurityContext.STYLE, ['*|style']);
registerContext(core_1.SecurityContext.STYLE, ['*|style']);
// NB: no SCRIPT contexts here, they are never allowed due to the parser stripping them.
registerContext(core_private_1.SecurityContext.URL, [
registerContext(core_1.SecurityContext.URL, [
'*|formAction', 'area|href', 'area|ping', 'audio|src', 'a|href',
'a|ping', 'blockquote|cite', 'body|background', 'del|cite', 'form|action',
'img|src', 'img|srcset', 'input|src', 'ins|cite', 'q|cite',
'source|src', 'source|srcset', 'video|poster', 'video|src',
'source|src', 'source|srcset', 'track|src', 'video|poster', 'video|src',
]);
registerContext(core_private_1.SecurityContext.RESOURCE_URL, [
registerContext(core_1.SecurityContext.RESOURCE_URL, [
'applet|code',

@@ -59,4 +59,3 @@ 'applet|codebase',

'script|src',
'track|src',
]);
//# sourceMappingURL=dom_security_schema.js.map

@@ -8,6 +8,8 @@ /**

*/
import { SchemaMetadata } from '@angular/core';
export declare abstract class ElementSchemaRegistry {
abstract hasProperty(tagName: string, propName: string): boolean;
abstract hasProperty(tagName: string, propName: string, schemaMetas: SchemaMetadata[]): boolean;
abstract securityContext(tagName: string, propName: string): any;
abstract getMappedPropName(propName: string): string;
abstract getDefaultComponentElementName(): string;
}

@@ -9,9 +9,7 @@ /**

"use strict";
var collection_1 = require('../src/facade/collection');
var exceptions_1 = require('../src/facade/exceptions');
var lang_1 = require('../src/facade/lang');
var collection_1 = require('./facade/collection');
var exceptions_1 = require('./facade/exceptions');
var lang_1 = require('./facade/lang');
var _EMPTY_ATTR_VALUE = '';
// TODO: Can't use `const` here as
// in Dart this is not transpiled into `final` yet...
var _SELECTOR_REGEXP = lang_1.RegExpWrapper.create('(\\:not\\()|' +
var _SELECTOR_REGEXP = new RegExp('(\\:not\\()|' +
'([-\\w]+)|' +

@@ -21,3 +19,4 @@ '(?:\\.([-\\w]+))|' +

'(\\))|' +
'(\\s*,\\s*)'); // ","
'(\\s*,\\s*)', // ","
'g');
/**

@@ -45,7 +44,7 @@ * A css selector contains an element name,

var cssSelector = new CssSelector();
var matcher = lang_1.RegExpWrapper.matcher(_SELECTOR_REGEXP, selector);
var match;
var current = cssSelector;
var inNot = false;
while (lang_1.isPresent(match = lang_1.RegExpMatcherWrapper.next(matcher))) {
_SELECTOR_REGEXP.lastIndex = 0;
while (lang_1.isPresent(match = _SELECTOR_REGEXP.exec(selector))) {
if (lang_1.isPresent(match[1])) {

@@ -148,8 +147,8 @@ if (inNot) {

function SelectorMatcher() {
this._elementMap = new collection_1.Map();
this._elementPartialMap = new collection_1.Map();
this._classMap = new collection_1.Map();
this._classPartialMap = new collection_1.Map();
this._attrValueMap = new collection_1.Map();
this._attrValuePartialMap = new collection_1.Map();
this._elementMap = new Map();
this._elementPartialMap = new Map();
this._classMap = new Map();
this._classPartialMap = new Map();
this._attrValueMap = new Map();
this._attrValuePartialMap = new Map();
this._listContexts = [];

@@ -213,3 +212,3 @@ }

if (lang_1.isBlank(terminalValuesMap)) {
terminalValuesMap = new collection_1.Map();
terminalValuesMap = new Map();
terminalMap.set(attrName, terminalValuesMap);

@@ -223,3 +222,3 @@ }

if (lang_1.isBlank(partialValuesMap)) {
partialValuesMap = new collection_1.Map();
partialValuesMap = new Map();
parttialMap.set(attrName, partialValuesMap);

@@ -226,0 +225,0 @@ }

@@ -9,4 +9,4 @@ /**

"use strict";
var collection_1 = require('../src/facade/collection');
var lang_1 = require('../src/facade/lang');
var collection_1 = require('./facade/collection');
var lang_1 = require('./facade/lang');
/**

@@ -238,4 +238,4 @@ * This file is a port of shadowCSS from webcomponents.js to TypeScript.

var r = '', m;
var matcher = lang_1.RegExpWrapper.matcher(_cssContentUnscopedRuleRe, cssText);
while (lang_1.isPresent(m = lang_1.RegExpMatcherWrapper.next(matcher))) {
_cssContentUnscopedRuleRe.lastIndex = 0;
while ((m = _cssContentUnscopedRuleRe.exec(cssText)) !== null) {
var rule = m[0];

@@ -350,3 +350,3 @@ rule = lang_1.StringWrapper.replace(rule, m[2], '');

var re = this._makeScopeMatcher(scopeSelector);
return !lang_1.isPresent(lang_1.RegExpWrapper.firstMatch(re, selector));
return !re.test(selector);
};

@@ -358,3 +358,3 @@ ShadowCss.prototype._makeScopeMatcher = function (scopeSelector) {

scopeSelector = lang_1.StringWrapper.replaceAll(scopeSelector, rre, '\\]');
return lang_1.RegExpWrapper.create('^(' + scopeSelector + ')' + _selectorReSuffix, 'm');
return new RegExp('^(' + scopeSelector + ')' + _selectorReSuffix, 'm');
};

@@ -367,3 +367,3 @@ ShadowCss.prototype._applySelectorScope = function (selector, scopeSelector, hostSelector) {

ShadowCss.prototype._applySimpleSelectorScope = function (selector, scopeSelector, hostSelector) {
if (lang_1.isPresent(lang_1.RegExpWrapper.firstMatch(_polyfillHostRe, selector))) {
if (_polyfillHostRe.test(selector)) {
var replaceBy = this.strictStyling ? "[" + hostSelector + "]" : scopeSelector;

@@ -393,5 +393,4 @@ selector = lang_1.StringWrapper.replace(selector, _polyfillHostNoCombinator, replaceBy);

!lang_1.StringWrapper.contains(t, attrName)) {
var re = /([^:]*)(:*)(.*)/g;
var m = lang_1.RegExpWrapper.firstMatch(re, t);
if (lang_1.isPresent(m)) {
var m = t.match(/([^:]*)(:*)(.*)/);
if (m !== null) {
p = m[1] + attrName + m[2] + m[3];

@@ -423,4 +422,4 @@ }

')\\))?([^,{]*)';
var _cssColonHostRe = lang_1.RegExpWrapper.create('(' + _polyfillHost + _parenSuffix, 'im');
var _cssColonHostContextRe = lang_1.RegExpWrapper.create('(' + _polyfillHostContext + _parenSuffix, 'im');
var _cssColonHostRe = new RegExp('(' + _polyfillHost + _parenSuffix, 'gim');
var _cssColonHostContextRe = new RegExp('(' + _polyfillHostContext + _parenSuffix, 'gim');
var _polyfillHostNoCombinator = _polyfillHost + '-no-combinator';

@@ -437,3 +436,3 @@ var _shadowDOMSelectorsRe = [

var _selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$';
var _polyfillHostRe = lang_1.RegExpWrapper.create(_polyfillHost, 'im');
var _polyfillHostRe = new RegExp(_polyfillHost, 'im');
var _colonHostRe = /:host/gim;

@@ -440,0 +439,0 @@ var _colonHostContextRe = /:host-context/gim;

@@ -52,3 +52,2 @@ /**

var _this = this;
var shim = comp.template.encapsulation === core_1.ViewEncapsulation.Emulated;
var externalStylesheets = [];

@@ -55,0 +54,0 @@ var componentStylesheet = this._compileStyles(comp, new compile_metadata_1.CompileStylesheetMetadata({

@@ -11,3 +11,3 @@ /**

// https://github.com/webcomponents/webcomponentsjs/blob/master/src/HTMLImports/path.js
var lang_1 = require('../src/facade/lang');
var lang_1 = require('./facade/lang');
var StyleWithImports = (function () {

@@ -24,4 +24,4 @@ function StyleWithImports(style, styleUrls) {

return false;
var schemeMatch = lang_1.RegExpWrapper.firstMatch(_urlWithSchemaRe, url);
return lang_1.isBlank(schemeMatch) || schemeMatch[1] == 'package' || schemeMatch[1] == 'asset';
var schemeMatch = url.match(_urlWithSchemaRe);
return schemeMatch === null || schemeMatch[1] == 'package' || schemeMatch[1] == 'asset';
}

@@ -48,5 +48,3 @@ exports.isStyleUrlResolvable = isStyleUrlResolvable;

var _cssImportRe = /@import\s+(?:url\()?\s*(?:(?:['"]([^'"]*))|([^;\)\s]*))[^;]*;?/g;
// TODO: can't use /^[^:/?#.]+:/g due to clang-format bug:
// https://github.com/angular/angular/issues/4596
var _urlWithSchemaRe = /^([a-zA-Z\-\+\.]+):/g;
var _urlWithSchemaRe = /^([^:/?#]+):/;
//# sourceMappingURL=style_url_resolver.js.map

@@ -10,3 +10,3 @@ /**

var core_1 = require('@angular/core');
var lang_1 = require('../src/facade/lang');
var lang_1 = require('./facade/lang');
var _ASSET_SCHEME = 'asset:';

@@ -192,3 +192,3 @@ /**

*/
var _splitRe = lang_1.RegExpWrapper.create('^' +
var _splitRe = new RegExp('^' +
'(?:' +

@@ -240,3 +240,3 @@ '([^:/?#.]+)' +

function _split(uri) {
return lang_1.RegExpWrapper.firstMatch(_splitRe, uri);
return uri.match(_splitRe);
}

@@ -243,0 +243,0 @@ /**

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"createUrlResolverWithoutPackagePrefix":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"UrlResolver"}}},"createOfflineCompileUrlResolver":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"UrlResolver"},"arguments":["asset:"]}},"DEFAULT_PACKAGE_URL_PROVIDER":{"provide":{"__symbolic":"reference","module":"@angular/core","name":"PACKAGE_ROOT_URL"},"useValue":"/"},"UrlResolver":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject"},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"PACKAGE_ROOT_URL"}]}]],"parameters":[{"__symbolic":"reference","name":"string"}]}],"resolve":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"createUrlResolverWithoutPackagePrefix":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"UrlResolver"}}},"createOfflineCompileUrlResolver":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"UrlResolver"},"arguments":["asset:"]}},"DEFAULT_PACKAGE_URL_PROVIDER":{"provide":{"__symbolic":"reference","module":"@angular/core","name":"PACKAGE_ROOT_URL"},"useValue":"/"},"UrlResolver":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject"},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"PACKAGE_ROOT_URL"}]}]],"parameters":[{"__symbolic":"reference","name":"string"}]}],"resolve":[{"__symbolic":"method"}]}},"_ComponentIndex":{"Scheme":1,"UserInfo":2,"Domain":3,"Port":4,"Path":5,"QueryData":6,"Fragment":7}}}

@@ -1,2 +0,11 @@

export declare var MODULE_SUFFIX: string;
/**
* @license
* Copyright Google Inc. 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 { CompileTokenMetadata } from './compile_metadata';
import * as o from './output/output_ast';
export declare const MODULE_SUFFIX: string;
export declare function camelCaseToDashCase(input: string): string;

@@ -23,1 +32,7 @@ export declare function splitAtColon(input: string, defaultValues: string[]): string[];

export declare function assetUrl(pkg: string, path?: string, type?: string): string;
export declare function createDiTokenExpression(token: CompileTokenMetadata): o.Expression;
export declare class SyncAsyncResult<T> {
syncResult: T;
asyncResult: Promise<T>;
constructor(syncResult: T, asyncResult?: Promise<T>);
}

@@ -11,3 +11,4 @@ /**

var lang_1 = require('./facade/lang');
exports.MODULE_SUFFIX = lang_1.IS_DART ? '.dart' : '';
var o = require('./output/output_ast');
exports.MODULE_SUFFIX = '';
var CAMEL_CASE_REGEXP = /([A-Z])/g;

@@ -19,9 +20,6 @@ function camelCaseToDashCase(input) {

function splitAtColon(input, defaultValues) {
var parts = lang_1.StringWrapper.split(input.trim(), /\s*:\s*/g);
if (parts.length > 1) {
return parts;
}
else {
var colonIndex = input.indexOf(':');
if (colonIndex == -1)
return defaultValues;
}
return [input.slice(0, colonIndex).trim(), input.slice(colonIndex + 1).trim()];
}

@@ -71,20 +69,35 @@ exports.splitAtColon = splitAtColon;

if (type === void 0) { type = 'src'; }
if (lang_1.IS_DART) {
if (path == null) {
return "asset:angular2/" + pkg + "/" + pkg + ".dart";
}
else {
return "asset:angular2/lib/" + pkg + "/src/" + path + ".dart";
}
if (path == null) {
return "asset:@angular/lib/" + pkg + "/index";
}
else {
if (path == null) {
return "asset:@angular/lib/" + pkg + "/index";
}
else {
return "asset:@angular/lib/" + pkg + "/src/" + path;
}
return "asset:@angular/lib/" + pkg + "/src/" + path;
}
}
exports.assetUrl = assetUrl;
function createDiTokenExpression(token) {
if (lang_1.isPresent(token.value)) {
return o.literal(token.value);
}
else if (token.identifierIsInstance) {
return o.importExpr(token.identifier)
.instantiate([], o.importType(token.identifier, [], [o.TypeModifier.Const]));
}
else {
return o.importExpr(token.identifier);
}
}
exports.createDiTokenExpression = createDiTokenExpression;
var SyncAsyncResult = (function () {
function SyncAsyncResult(syncResult, asyncResult) {
if (asyncResult === void 0) { asyncResult = null; }
this.syncResult = syncResult;
this.asyncResult = asyncResult;
if (!asyncResult) {
this.asyncResult = Promise.resolve(syncResult);
}
}
return SyncAsyncResult;
}());
exports.SyncAsyncResult = SyncAsyncResult;
//# sourceMappingURL=util.js.map

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"MODULE_SUFFIX":{"__symbolic":"error","message":"Expression form not supported","line":11,"character":26},"camelCaseToDashCase":{"__symbolic":"function","parameters":["input"],"value":{"__symbolic":"error","message":"Function call not supported","line":17,"character":31}},"sanitizeIdentifier":{"__symbolic":"function","parameters":["name"],"value":{"__symbolic":"error","message":"Expression form not supported","line":30,"character":39}}}}
{"__symbolic":"module","version":1,"metadata":{"MODULE_SUFFIX":"","camelCaseToDashCase":{"__symbolic":"function","parameters":["input"],"value":{"__symbolic":"error","message":"Reference to a local symbol","line":15,"character":3,"context":{"name":"CAMEL_CASE_REGEXP"}}},"sanitizeIdentifier":{"__symbolic":"function","parameters":["name"],"value":{"__symbolic":"error","message":"Expression form not supported","line":29,"character":39}}}}

@@ -8,3 +8,3 @@ /**

*/
import { TemplateAst } from '../template_ast';
import { TemplateAst } from '../template_parser/template_ast';
import { CompileNode } from './compile_element';

@@ -11,0 +11,0 @@ export declare class CompileBinding {

@@ -0,5 +1,5 @@

import { CompileDirectiveMetadata, CompileIdentifierMap, CompileIdentifierMetadata, CompileTokenMetadata } from '../compile_metadata';
import * as o from '../output/output_ast';
import { ProviderAst, ReferenceAst, TemplateAst } from '../template_ast';
import { ProviderAst, ReferenceAst, TemplateAst } from '../template_parser/template_ast';
import { CompileView } from './compile_view';
import { CompileDirectiveMetadata, CompileTokenMetadata, CompileIdentifierMetadata } from '../compile_metadata';
export declare class CompileNode {

@@ -26,3 +26,3 @@ parent: CompileElement;

injector: o.Expression;
private _instances;
instances: CompileIdentifierMap<CompileTokenMetadata, o.Expression>;
private _resolvedProviders;

@@ -34,3 +34,2 @@ private _queryCount;

embeddedView: CompileView;
directiveInstances: o.Expression[];
referenceTokens: {

@@ -41,3 +40,3 @@ [key: string]: CompileTokenMetadata;

private _createAppElement();
createComponentFactoryResolver(precompileComponent: CompileIdentifierMetadata[]): void;
createComponentFactoryResolver(entryComponents: CompileIdentifierMetadata[]): void;
setComponentView(compViewExpr: o.Expression): void;

@@ -44,0 +43,0 @@ setEmbeddedView(embeddedView: CompileView): void;

@@ -14,3 +14,3 @@ /**

};
var core_1 = require('@angular/core');
var compile_metadata_1 = require('../compile_metadata');
var collection_1 = require('../facade/collection');

@@ -20,9 +20,9 @@ var lang_1 = require('../facade/lang');

var o = require('../output/output_ast');
var template_ast_1 = require('../template_ast');
var value_util_1 = require('../output/value_util');
var template_ast_1 = require('../template_parser/template_ast');
var util_1 = require('../util');
var compile_method_1 = require('./compile_method');
var compile_query_1 = require('./compile_query');
var constants_1 = require('./constants');
var compile_metadata_1 = require('../compile_metadata');
var util_1 = require('./util');
var compile_query_1 = require('./compile_query');
var compile_method_1 = require('./compile_method');
var util_2 = require('../util');
var util_2 = require('./util');
var CompileNode = (function () {

@@ -52,5 +52,5 @@ function CompileNode(parent, view, nodeIndex, renderNode, sourceAst) {

this._compViewExpr = null;
this._instances = new compile_metadata_1.CompileTokenMap();
this.instances = new compile_metadata_1.CompileIdentifierMap();
this._queryCount = 0;
this._queries = new compile_metadata_1.CompileTokenMap();
this._queries = new compile_metadata_1.CompileIdentifierMap();
this._componentConstructorViewQueryLists = [];

@@ -61,6 +61,6 @@ this.contentNodesByNgContentIndex = null;

this.elementRef = o.importExpr(identifiers_1.Identifiers.ElementRef).instantiate([this.renderNode]);
this._instances.add(identifiers_1.identifierToken(identifiers_1.Identifiers.ElementRef), this.elementRef);
this.instances.add(identifiers_1.identifierToken(identifiers_1.Identifiers.ElementRef), this.elementRef);
this.injector = o.THIS_EXPR.callMethod('injector', [o.literal(this.nodeIndex)]);
this._instances.add(identifiers_1.identifierToken(identifiers_1.Identifiers.Injector), this.injector);
this._instances.add(identifiers_1.identifierToken(identifiers_1.Identifiers.Renderer), o.THIS_EXPR.prop('renderer'));
this.instances.add(identifiers_1.identifierToken(identifiers_1.Identifiers.Injector), this.injector);
this.instances.add(identifiers_1.identifierToken(identifiers_1.Identifiers.Renderer), o.THIS_EXPR.prop('renderer'));
if (this.hasViewContainer || this.hasEmbeddedView || lang_1.isPresent(this.component)) {

@@ -85,11 +85,11 @@ this._createAppElement();

this.appElement = o.THIS_EXPR.prop(fieldName);
this._instances.add(identifiers_1.identifierToken(identifiers_1.Identifiers.AppElement), this.appElement);
this.instances.add(identifiers_1.identifierToken(identifiers_1.Identifiers.AppElement), this.appElement);
};
CompileElement.prototype.createComponentFactoryResolver = function (precompileComponent) {
if (!precompileComponent || precompileComponent.length === 0) {
CompileElement.prototype.createComponentFactoryResolver = function (entryComponents) {
if (!entryComponents || entryComponents.length === 0) {
return;
}
var createComponentFactoryResolverExpr = o.importExpr(identifiers_1.Identifiers.CodegenComponentFactoryResolver).instantiate([
o.literalArr(precompileComponent.map(function (precompiledComponent) { return o.importExpr(precompiledComponent); })),
util_1.injectFromViewParentInjector(identifiers_1.identifierToken(identifiers_1.Identifiers.ComponentFactoryResolver), false)
o.literalArr(entryComponents.map(function (entryComponent) { return o.importExpr(entryComponent); })),
util_2.injectFromViewParentInjector(identifiers_1.identifierToken(identifiers_1.Identifiers.ComponentFactoryResolver), false)
]);

@@ -103,3 +103,3 @@ var provider = new compile_metadata_1.CompileProviderMetadata({

// but nobody else
this._resolvedProvidersArray.unshift(new template_ast_1.ProviderAst(provider.token, false, true, [provider], template_ast_1.ProviderAstType.PrivateService, this.sourceAst.sourceSpan));
this._resolvedProvidersArray.unshift(new template_ast_1.ProviderAst(provider.token, false, true, [provider], template_ast_1.ProviderAstType.PrivateService, [], this.sourceAst.sourceSpan));
};

@@ -122,3 +122,3 @@ CompileElement.prototype.setComponentView = function (compViewExpr) {

// Add TemplateRef as first provider as it does not have deps on other providers
this._resolvedProvidersArray.unshift(new template_ast_1.ProviderAst(provider.token, false, true, [provider], template_ast_1.ProviderAstType.Builtin, this.sourceAst.sourceSpan));
this._resolvedProvidersArray.unshift(new template_ast_1.ProviderAst(provider.token, false, true, [provider], template_ast_1.ProviderAstType.Builtin, [], this.sourceAst.sourceSpan));
}

@@ -129,5 +129,5 @@ };

if (this.hasViewContainer) {
this._instances.add(identifiers_1.identifierToken(identifiers_1.Identifiers.ViewContainerRef), this.appElement.prop('vcRef'));
this.instances.add(identifiers_1.identifierToken(identifiers_1.Identifiers.ViewContainerRef), this.appElement.prop('vcRef'));
}
this._resolvedProviders = new compile_metadata_1.CompileTokenMap();
this._resolvedProviders = new compile_metadata_1.CompileIdentifierMap();
this._resolvedProvidersArray.forEach(function (provider) { return _this._resolvedProviders.add(provider.token, provider); });

@@ -153,14 +153,12 @@ // create all the provider instances, some in the view constructor,

else {
return _convertValueToOutputAst(provider.useValue);
return value_util_1.convertValueToOutputAst(provider.useValue);
}
});
var propName = "_" + resolvedProvider.token.name + "_" + _this.nodeIndex + "_" + _this._instances.size;
var propName = "_" + resolvedProvider.token.name + "_" + _this.nodeIndex + "_" + _this.instances.size;
var instance = createProviderProperty(propName, resolvedProvider, providerValueExpressions, resolvedProvider.multiProvider, resolvedProvider.eager, _this);
_this._instances.add(resolvedProvider.token, instance);
_this.instances.add(resolvedProvider.token, instance);
});
this.directiveInstances =
this._directives.map(function (directive) { return _this._instances.get(identifiers_1.identifierToken(directive.type)); });
for (var i = 0; i < this.directiveInstances.length; i++) {
var directiveInstance = this.directiveInstances[i];
for (var i = 0; i < this._directives.length; i++) {
var directive = this._directives[i];
var directiveInstance = this.instances.get(identifiers_1.identifierToken(directive.type));
directive.queries.forEach(function (queryMeta) { _this._addQuery(queryMeta, directiveInstance); });

@@ -177,3 +175,3 @@ }

if (lang_1.isPresent(token)) {
varValue = _this._instances.get(token);
varValue = _this.instances.get(token);
}

@@ -191,3 +189,3 @@ else {

// query for an identifier
value = _this._instances.get(queryWithRead.read);
value = _this.instances.get(queryWithRead.read);
}

@@ -198,3 +196,3 @@ else {

if (lang_1.isPresent(token)) {
value = _this._instances.get(token);
value = _this.instances.get(token);
}

@@ -225,3 +223,3 @@ else {

// matches first.
var providerExpr = _this._instances.get(resolvedProvider.token);
var providerExpr = _this.instances.get(resolvedProvider.token);
// Note: view providers are only visible on the injector of that element.

@@ -242,3 +240,3 @@ // This is not fully correct as the rules during codegen don't allow a directive

CompileElement.prototype.getComponent = function () {
return lang_1.isPresent(this.component) ? this._instances.get(identifiers_1.identifierToken(this.component.type)) :
return lang_1.isPresent(this.component) ? this.instances.get(identifiers_1.identifierToken(this.component.type)) :
null;

@@ -296,3 +294,3 @@ };

else {
return util_1.getPropertyInView(o.THIS_EXPR.prop('ref'), this.view, this.view.componentView);
return util_2.getPropertyInView(o.THIS_EXPR.prop('ref'), this.view, this.view.componentView);
}

@@ -311,3 +309,3 @@ }

}
result = this._instances.get(dep.token);
result = this.instances.get(dep.token);
}

@@ -332,3 +330,3 @@ }

if (lang_1.isBlank(result)) {
result = util_1.injectFromViewParentInjector(dep.token, dep.isOptional);
result = util_2.injectFromViewParentInjector(dep.token, dep.isOptional);
}

@@ -338,3 +336,3 @@ if (lang_1.isBlank(result)) {

}
return util_1.getPropertyInView(result, this.view, currElement.view);
return util_2.getPropertyInView(result, this.view, currElement.view);
};

@@ -394,36 +392,2 @@ return CompileElement;

}());
function _convertValueToOutputAst(value) {
return util_2.visitValue(value, new _ValueOutputAstTransformer(), null);
}
var _ValueOutputAstTransformer = (function (_super) {
__extends(_ValueOutputAstTransformer, _super);
function _ValueOutputAstTransformer() {
_super.apply(this, arguments);
}
_ValueOutputAstTransformer.prototype.visitArray = function (arr, context) {
var _this = this;
return o.literalArr(arr.map(function (value) { return util_2.visitValue(value, _this, context); }));
};
_ValueOutputAstTransformer.prototype.visitStringMap = function (map, context) {
var _this = this;
var entries = [];
collection_1.StringMapWrapper.forEach(map, function (value, key) {
entries.push([key, util_2.visitValue(value, _this, context)]);
});
return o.literalMap(entries);
};
_ValueOutputAstTransformer.prototype.visitPrimitive = function (value, context) { return o.literal(value); };
_ValueOutputAstTransformer.prototype.visitOther = function (value, context) {
if (value instanceof compile_metadata_1.CompileIdentifierMetadata) {
return o.importExpr(value);
}
else if (value instanceof o.Expression) {
return value;
}
else {
throw new core_1.BaseException("Illegal state: Don't now how to compile value " + value);
}
};
return _ValueOutputAstTransformer;
}(util_2.ValueTransformer));
//# sourceMappingURL=compile_element.js.map
import * as o from '../output/output_ast';
import { TemplateAst } from '../template_ast';
import { TemplateAst } from '../template_parser/template_ast';
import { CompileView } from './compile_view';

@@ -4,0 +4,0 @@ export declare class CompileMethod {

@@ -16,7 +16,6 @@ /**

instance: o.ReadPropExpr;
private _purePipeProxies;
private _purePipeProxyCount;
constructor(view: CompileView, meta: CompilePipeMetadata);
pure: boolean;
create(): void;
private _call(callingView, args);
}

@@ -14,16 +14,20 @@ /**

var util_1 = require('./util');
var _PurePipeProxy = (function () {
function _PurePipeProxy(view, instance, argCount) {
this.view = view;
this.instance = instance;
this.argCount = argCount;
}
return _PurePipeProxy;
}());
var CompilePipe = (function () {
function CompilePipe(view, meta) {
var _this = this;
this.view = view;
this.meta = meta;
this._purePipeProxies = [];
this._purePipeProxyCount = 0;
this.instance = o.THIS_EXPR.prop("_pipe_" + meta.name + "_" + view.pipeCount++);
var deps = this.meta.type.diDeps.map(function (diDep) {
if (diDep.token.equalsTo(identifiers_1.identifierToken(identifiers_1.Identifiers.ChangeDetectorRef))) {
return util_1.getPropertyInView(o.THIS_EXPR.prop('ref'), _this.view, _this.view.componentView);
}
return util_1.injectFromViewParentInjector(diDep.token, false);
});
this.view.fields.push(new o.ClassField(this.instance.name, o.importType(this.meta.type)));
this.view.createMethod.resetDebugInfo(null, null);
this.view.createMethod.addStmt(o.THIS_EXPR.prop(this.instance.name)
.set(o.importExpr(this.meta.type).instantiate(deps))
.toStmt());
}

@@ -55,31 +59,11 @@ CompilePipe.call = function (view, name, args) {

});
CompilePipe.prototype.create = function () {
var _this = this;
var deps = this.meta.type.diDeps.map(function (diDep) {
if (diDep.token.equalsTo(identifiers_1.identifierToken(identifiers_1.Identifiers.ChangeDetectorRef))) {
return util_1.getPropertyInView(o.THIS_EXPR.prop('ref'), _this.view, _this.view.componentView);
}
return util_1.injectFromViewParentInjector(diDep.token, false);
});
this.view.fields.push(new o.ClassField(this.instance.name, o.importType(this.meta.type)));
this.view.createMethod.resetDebugInfo(null, null);
this.view.createMethod.addStmt(o.THIS_EXPR.prop(this.instance.name)
.set(o.importExpr(this.meta.type).instantiate(deps))
.toStmt());
this._purePipeProxies.forEach(function (purePipeProxy) {
var pipeInstanceSeenFromPureProxy = util_1.getPropertyInView(_this.instance, purePipeProxy.view, _this.view);
util_1.createPureProxy(pipeInstanceSeenFromPureProxy.prop('transform')
.callMethod(o.BuiltinMethod.bind, [pipeInstanceSeenFromPureProxy]), purePipeProxy.argCount, purePipeProxy.instance, purePipeProxy.view);
});
};
CompilePipe.prototype._call = function (callingView, args) {
if (this.meta.pure) {
// PurePipeProxies live on the view that called them.
var purePipeProxy = new _PurePipeProxy(callingView, o.THIS_EXPR.prop(this.instance.name + "_" + this._purePipeProxies.length), args.length);
this._purePipeProxies.push(purePipeProxy);
var purePipeProxyInstance = o.THIS_EXPR.prop(this.instance.name + "_" + this._purePipeProxyCount++);
var pipeInstanceSeenFromPureProxy = util_1.getPropertyInView(this.instance, callingView, this.view);
util_1.createPureProxy(pipeInstanceSeenFromPureProxy.prop('transform')
.callMethod(o.BuiltinMethod.bind, [pipeInstanceSeenFromPureProxy]), args.length, purePipeProxyInstance, callingView);
return o.importExpr(identifiers_1.Identifiers.castByValue)
.callFn([
purePipeProxy.instance,
util_1.getPropertyInView(this.instance.prop('transform'), callingView, this.view)
])
.callFn([purePipeProxyInstance, pipeInstanceSeenFromPureProxy.prop('transform')])
.callFn(args);

@@ -86,0 +70,0 @@ }

@@ -8,3 +8,3 @@ /**

*/
import { CompileQueryMetadata, CompileTokenMap } from '../compile_metadata';
import { CompileIdentifierMap, CompileQueryMetadata, CompileTokenMetadata } from '../compile_metadata';
import * as o from '../output/output_ast';

@@ -25,2 +25,2 @@ import { CompileMethod } from './compile_method';

export declare function createQueryList(query: CompileQueryMetadata, directiveInstance: o.Expression, propertyName: string, compileView: CompileView): o.Expression;
export declare function addQueryToTokenMap(map: CompileTokenMap<CompileQuery[]>, query: CompileQuery): void;
export declare function addQueryToTokenMap(map: CompileIdentifierMap<CompileTokenMetadata, CompileQuery[]>, query: CompileQuery): void;

@@ -97,3 +97,4 @@ /**

return declarationAppElement.callMethod('mapNestedViews', [
o.variable(view.className), o.fn([new o.FnParam('nestedView', view.classType)], [new o.ReturnStatement(o.literalArr(adjustedExpressions))])
o.variable(view.className),
o.fn([new o.FnParam('nestedView', view.classType)], [new o.ReturnStatement(o.literalArr(adjustedExpressions))], o.DYNAMIC_TYPE)
]);

@@ -100,0 +101,0 @@ }

@@ -10,3 +10,3 @@ /**

import { CompiledAnimation } from '../animation/animation_compiler';
import { CompileDirectiveMetadata, CompilePipeMetadata, CompileTokenMap } from '../compile_metadata';
import { CompileDirectiveMetadata, CompileIdentifierMap, CompilePipeMetadata, CompileTokenMetadata } from '../compile_metadata';
import { CompilerConfig } from '../config';

@@ -25,2 +25,3 @@ import * as o from '../output/output_ast';

styles: o.Expression;
animations: CompiledAnimation[];
viewIndex: number;

@@ -30,3 +31,3 @@ declarationElement: CompileElement;

viewType: ViewType;
viewQueries: CompileTokenMap<CompileQuery[]>;
viewQueries: CompileIdentifierMap<CompileTokenMetadata, CompileQuery[]>;
nodes: CompileNode[];

@@ -62,3 +63,2 @@ rootNodesOrAppElements: o.Expression[];

pipeCount: number;
animations: Map<string, CompiledAnimation>;
componentContext: o.Expression;

@@ -65,0 +65,0 @@ constructor(component: CompileDirectiveMetadata, genConfig: CompilerConfig, pipeMetas: CompilePipeMetadata[], styles: o.Expression, animations: CompiledAnimation[], viewIndex: number, declarationElement: CompileElement, templateVariableBindings: string[][]);

@@ -27,2 +27,3 @@ /**

this.styles = styles;
this.animations = animations;
this.viewIndex = viewIndex;

@@ -47,4 +48,2 @@ this.declarationElement = declarationElement;

this.pipeCount = 0;
this.animations = new Map();
animations.forEach(function (entry) { return _this.animations.set(entry.name, entry); });
this.createMethod = new compile_method_1.CompileMethod(this);

@@ -73,3 +72,3 @@ this.injectorGetMethod = new compile_method_1.CompileMethod(this);

util_1.getPropertyInView(o.THIS_EXPR.prop('context'), this, this.componentView);
var viewQueries = new compile_metadata_1.CompileTokenMap();
var viewQueries = new compile_metadata_1.CompileIdentifierMap();
if (this.viewType === core_private_1.ViewType.COMPONENT) {

@@ -154,3 +153,2 @@ var directiveInstance = o.THIS_EXPR.prop('context');

var _this = this;
this.pipes.forEach(function (pipe) { return pipe.create(); });
this.viewQueries.values().forEach(function (queries) { return queries.forEach(function (query) { return query.afterChildren(_this.createMethod, _this.updateViewQueriesMethod); }); });

@@ -157,0 +155,0 @@ };

@@ -10,3 +10,3 @@ /**

import * as o from '../output/output_ast';
import { BoundEventAst, DirectiveAst } from '../template_ast';
import { BoundEventAst, DirectiveAst } from '../template_parser/template_ast';
import { CompileElement } from './compile_element';

@@ -13,0 +13,0 @@ export declare class CompileEventListener {

@@ -11,2 +11,3 @@ /**

var lang_1 = require('../facade/lang');
var identifiers_1 = require('../identifiers');
var o = require('../output/output_ast');

@@ -106,4 +107,4 @@ var compile_binding_1 = require('./compile_binding');

});
collection_1.ListWrapper.forEachWithIndex(dirs, function (directiveAst, i) {
var directiveInstance = compileElement.directiveInstances[i];
dirs.forEach(function (directiveAst) {
var directiveInstance = compileElement.instances.get(identifiers_1.identifierToken(directiveAst.directive.type));
directiveAst.hostEvents.forEach(function (hostEvent) {

@@ -110,0 +111,0 @@ compileElement.view.bindings.push(new compile_binding_1.CompileBinding(compileElement, hostEvent));

@@ -9,2 +9,3 @@ /**

"use strict";
var cdAst = require('../expression_parser/ast');
var exceptions_1 = require('../facade/exceptions');

@@ -14,3 +15,2 @@ var lang_1 = require('../facade/lang');

var o = require('../output/output_ast');
var IMPLICIT_RECEIVER = o.variable('#implicit');
var ExpressionWithWrappedValueInfo = (function () {

@@ -65,2 +65,3 @@ function ExpressionWithWrappedValueInfo(expression, needsValueUnwrapper) {

this._valueUnwrapper = _valueUnwrapper;
this._map = new Map();
this.needsValueUnwrapper = false;

@@ -119,3 +120,3 @@ }

}
return convertToStatementIfNeeded(mode, new o.BinaryOperatorExpr(op, ast.left.visit(this, _Mode.Expression), ast.right.visit(this, _Mode.Expression)));
return convertToStatementIfNeeded(mode, new o.BinaryOperatorExpr(op, this.visit(ast.left, _Mode.Expression), this.visit(ast.right, _Mode.Expression)));
};

@@ -127,7 +128,7 @@ _AstToIrVisitor.prototype.visitChain = function (ast, mode) {

_AstToIrVisitor.prototype.visitConditional = function (ast, mode) {
var value = ast.condition.visit(this, _Mode.Expression);
return convertToStatementIfNeeded(mode, value.conditional(ast.trueExp.visit(this, _Mode.Expression), ast.falseExp.visit(this, _Mode.Expression)));
var value = this.visit(ast.condition, _Mode.Expression);
return convertToStatementIfNeeded(mode, value.conditional(this.visit(ast.trueExp, _Mode.Expression), this.visit(ast.falseExp, _Mode.Expression)));
};
_AstToIrVisitor.prototype.visitPipe = function (ast, mode) {
var input = ast.exp.visit(this, _Mode.Expression);
var input = this.visit(ast.exp, _Mode.Expression);
var args = this.visitAll(ast.args, _Mode.Expression);

@@ -139,7 +140,7 @@ var value = this._nameResolver.callPipe(ast.name, input, args);

_AstToIrVisitor.prototype.visitFunctionCall = function (ast, mode) {
return convertToStatementIfNeeded(mode, ast.target.visit(this, _Mode.Expression).callFn(this.visitAll(ast.args, _Mode.Expression)));
return convertToStatementIfNeeded(mode, this.visit(ast.target, _Mode.Expression).callFn(this.visitAll(ast.args, _Mode.Expression)));
};
_AstToIrVisitor.prototype.visitImplicitReceiver = function (ast, mode) {
ensureExpressionMode(mode, ast);
return IMPLICIT_RECEIVER;
return this._implicitReceiver;
};

@@ -151,3 +152,3 @@ _AstToIrVisitor.prototype.visitInterpolation = function (ast, mode) {

args.push(o.literal(ast.strings[i]));
args.push(ast.expressions[i].visit(this, _Mode.Expression));
args.push(this.visit(ast.expressions[i], _Mode.Expression));
}

@@ -158,8 +159,8 @@ args.push(o.literal(ast.strings[ast.strings.length - 1]));

_AstToIrVisitor.prototype.visitKeyedRead = function (ast, mode) {
return convertToStatementIfNeeded(mode, ast.obj.visit(this, _Mode.Expression).key(ast.key.visit(this, _Mode.Expression)));
return convertToStatementIfNeeded(mode, this.visit(ast.obj, _Mode.Expression).key(this.visit(ast.key, _Mode.Expression)));
};
_AstToIrVisitor.prototype.visitKeyedWrite = function (ast, mode) {
var obj = ast.obj.visit(this, _Mode.Expression);
var key = ast.key.visit(this, _Mode.Expression);
var value = ast.value.visit(this, _Mode.Expression);
var obj = this.visit(ast.obj, _Mode.Expression);
var key = this.visit(ast.key, _Mode.Expression);
var value = this.visit(ast.value, _Mode.Expression);
return convertToStatementIfNeeded(mode, obj.key(key).set(value));

@@ -173,3 +174,3 @@ };

for (var i = 0; i < ast.keys.length; i++) {
parts.push([ast.keys[i], ast.values[i].visit(this, _Mode.Expression)]);
parts.push([ast.keys[i], this.visit(ast.values[i], _Mode.Expression)]);
}

@@ -182,39 +183,45 @@ return convertToStatementIfNeeded(mode, this._nameResolver.createLiteralMap(parts));

_AstToIrVisitor.prototype.visitMethodCall = function (ast, mode) {
var args = this.visitAll(ast.args, _Mode.Expression);
var result = null;
var receiver = ast.receiver.visit(this, _Mode.Expression);
if (receiver === IMPLICIT_RECEIVER) {
var varExpr = this._nameResolver.getLocal(ast.name);
if (lang_1.isPresent(varExpr)) {
result = varExpr.callFn(args);
var leftMostSafe = this.leftMostSafeNode(ast);
if (leftMostSafe) {
return this.convertSafeAccess(ast, leftMostSafe, mode);
}
else {
var args = this.visitAll(ast.args, _Mode.Expression);
var result = null;
var receiver = this.visit(ast.receiver, _Mode.Expression);
if (receiver === this._implicitReceiver) {
var varExpr = this._nameResolver.getLocal(ast.name);
if (lang_1.isPresent(varExpr)) {
result = varExpr.callFn(args);
}
}
else {
receiver = this._implicitReceiver;
if (lang_1.isBlank(result)) {
result = receiver.callMethod(ast.name, args);
}
return convertToStatementIfNeeded(mode, result);
}
if (lang_1.isBlank(result)) {
result = receiver.callMethod(ast.name, args);
}
return convertToStatementIfNeeded(mode, result);
};
_AstToIrVisitor.prototype.visitPrefixNot = function (ast, mode) {
return convertToStatementIfNeeded(mode, o.not(ast.expression.visit(this, _Mode.Expression)));
return convertToStatementIfNeeded(mode, o.not(this.visit(ast.expression, _Mode.Expression)));
};
_AstToIrVisitor.prototype.visitPropertyRead = function (ast, mode) {
var result = null;
var receiver = ast.receiver.visit(this, _Mode.Expression);
if (receiver === IMPLICIT_RECEIVER) {
result = this._nameResolver.getLocal(ast.name);
var leftMostSafe = this.leftMostSafeNode(ast);
if (leftMostSafe) {
return this.convertSafeAccess(ast, leftMostSafe, mode);
}
else {
var result = null;
var receiver = this.visit(ast.receiver, _Mode.Expression);
if (receiver === this._implicitReceiver) {
result = this._nameResolver.getLocal(ast.name);
}
if (lang_1.isBlank(result)) {
receiver = this._implicitReceiver;
result = receiver.prop(ast.name);
}
return convertToStatementIfNeeded(mode, result);
}
if (lang_1.isBlank(result)) {
result = receiver.prop(ast.name);
}
return convertToStatementIfNeeded(mode, result);
};
_AstToIrVisitor.prototype.visitPropertyWrite = function (ast, mode) {
var receiver = ast.receiver.visit(this, _Mode.Expression);
if (receiver === IMPLICIT_RECEIVER) {
var receiver = this.visit(ast.receiver, _Mode.Expression);
if (receiver === this._implicitReceiver) {
var varExpr = this._nameResolver.getLocal(ast.name);

@@ -224,18 +231,14 @@ if (lang_1.isPresent(varExpr)) {

}
receiver = this._implicitReceiver;
}
return convertToStatementIfNeeded(mode, receiver.prop(ast.name).set(ast.value.visit(this, _Mode.Expression)));
return convertToStatementIfNeeded(mode, receiver.prop(ast.name).set(this.visit(ast.value, _Mode.Expression)));
};
_AstToIrVisitor.prototype.visitSafePropertyRead = function (ast, mode) {
var receiver = ast.receiver.visit(this, _Mode.Expression);
return convertToStatementIfNeeded(mode, receiver.isBlank().conditional(o.NULL_EXPR, receiver.prop(ast.name)));
return this.convertSafeAccess(ast, this.leftMostSafeNode(ast), mode);
};
_AstToIrVisitor.prototype.visitSafeMethodCall = function (ast, mode) {
var receiver = ast.receiver.visit(this, _Mode.Expression);
var args = this.visitAll(ast.args, _Mode.Expression);
return convertToStatementIfNeeded(mode, receiver.isBlank().conditional(o.NULL_EXPR, receiver.callMethod(ast.name, args)));
return this.convertSafeAccess(ast, this.leftMostSafeNode(ast), mode);
};
_AstToIrVisitor.prototype.visitAll = function (asts, mode) {
var _this = this;
return asts.map(function (ast) { return ast.visit(_this, mode); });
return asts.map(function (ast) { return _this.visit(ast, mode); });
};

@@ -245,2 +248,94 @@ _AstToIrVisitor.prototype.visitQuote = function (ast, mode) {

};
_AstToIrVisitor.prototype.visit = function (ast, mode) {
return (this._map.get(ast) || ast).visit(this, mode);
};
_AstToIrVisitor.prototype.convertSafeAccess = function (ast, leftMostSafe, mode) {
// If the expression contains a safe access node on the left it needs to be converted to
// an expression that guards the access to the member by checking the receiver for blank. As
// execution proceeds from left to right, the left most part of the expression must be guarded
// first but, because member access is left associative, the right side of the expression is at
// the top of the AST. The desired result requires lifting a copy of the the left part of the
// expression up to test it for blank before generating the unguarded version.
// Consider, for example the following expression: a?.b.c?.d.e
// This results in the ast:
// .
// / \
// ?. e
// / \
// . d
// / \
// ?. c
// / \
// a b
// The following tree should be generated:
//
// /---- ? ----\
// / | \
// a /--- ? ---\ null
// / | \
// . . null
// / \ / \
// . c . e
// / \ / \
// a b , d
// / \
// . c
// / \
// a b
//
// Notice that the first guard condition is the left hand of the left most safe access node
// which comes in as leftMostSafe to this routine.
var condition = this.visit(leftMostSafe.receiver, mode).isBlank();
// Convert the ast to an unguarded access to the receiver's member. The map will substitute
// leftMostNode with its unguarded version in the call to `this.visit()`.
if (leftMostSafe instanceof cdAst.SafeMethodCall) {
this._map.set(leftMostSafe, new cdAst.MethodCall(leftMostSafe.span, leftMostSafe.receiver, leftMostSafe.name, leftMostSafe.args));
}
else {
this._map.set(leftMostSafe, new cdAst.PropertyRead(leftMostSafe.span, leftMostSafe.receiver, leftMostSafe.name));
}
// Recursively convert the node now without the guarded member access.
var access = this.visit(ast, mode);
// Remove the mapping. This is not strictly required as the converter only traverses each node
// once but is safer if the conversion is changed to traverse the nodes more than once.
this._map.delete(leftMostSafe);
// Produce the conditional
return condition.conditional(o.literal(null), access);
};
// Given a expression of the form a?.b.c?.d.e the the left most safe node is
// the (a?.b). The . and ?. are left associative thus can be rewritten as:
// ((((a?.c).b).c)?.d).e. This returns the most deeply nested safe read or
// safe method call as this needs be transform initially to:
// a == null ? null : a.c.b.c?.d.e
// then to:
// a == null ? null : a.b.c == null ? null : a.b.c.d.e
_AstToIrVisitor.prototype.leftMostSafeNode = function (ast) {
var _this = this;
var visit = function (visitor, ast) {
return (_this._map.get(ast) || ast).visit(visitor);
};
return ast.visit({
visitBinary: function (ast) { return null; },
visitChain: function (ast) { return null; },
visitConditional: function (ast) { return null; },
visitFunctionCall: function (ast) { return null; },
visitImplicitReceiver: function (ast) { return null; },
visitInterpolation: function (ast) { return null; },
visitKeyedRead: function (ast) { return visit(this, ast.obj); },
visitKeyedWrite: function (ast) { return null; },
visitLiteralArray: function (ast) { return null; },
visitLiteralMap: function (ast) { return null; },
visitLiteralPrimitive: function (ast) { return null; },
visitMethodCall: function (ast) { return visit(this, ast.receiver); },
visitPipe: function (ast) { return null; },
visitPrefixNot: function (ast) { return null; },
visitPropertyRead: function (ast) { return visit(this, ast.receiver); },
visitPropertyWrite: function (ast) { return null; },
visitQuote: function (ast) { return null; },
visitSafeMethodCall: function (ast) { return visit(this, ast.receiver) || ast; },
visitSafePropertyRead: function (ast) {
return visit(this, ast.receiver) || ast;
}
});
};
return _AstToIrVisitor;

@@ -247,0 +342,0 @@ }());

import { CompileDirectiveMetadata, CompilePipeMetadata } from '../compile_metadata';
import * as o from '../output/output_ast';
import { DirectiveAst } from '../template_ast';
import { DirectiveAst, ProviderAst } from '../template_parser/template_ast';
import { CompileElement } from './compile_element';

@@ -9,3 +9,3 @@ import { CompileView } from './compile_view';

export declare function bindDirectiveAfterViewLifecycleCallbacks(directiveMeta: CompileDirectiveMetadata, directiveInstance: o.Expression, compileElement: CompileElement): void;
export declare function bindDirectiveDestroyLifecycleCallbacks(directiveMeta: CompileDirectiveMetadata, directiveInstance: o.Expression, compileElement: CompileElement): void;
export declare function bindInjectableDestroyLifecycleCallbacks(provider: ProviderAst, providerInstance: o.Expression, compileElement: CompileElement): void;
export declare function bindPipeDestroyLifecycleCallbacks(pipeMeta: CompilePipeMetadata, pipeInstance: o.Expression, view: CompileView): void;

@@ -17,3 +17,3 @@ /**

var detectChangesInInputsMethod = view.detectChangesInInputsMethod;
var lifecycleHooks = directiveAst.directive.lifecycleHooks;
var lifecycleHooks = directiveAst.directive.type.lifecycleHooks;
if (lifecycleHooks.indexOf(core_private_1.LifecycleHooks.OnChanges) !== -1 && directiveAst.inputs.length > 0) {

@@ -32,3 +32,3 @@ detectChangesInInputsMethod.addStmt(new o.IfStmt(constants_1.DetectChangesVars.changes.notIdentical(o.NULL_EXPR), [directiveInstance.callMethod('ngOnChanges', [constants_1.DetectChangesVars.changes]).toStmt()]));

var view = compileElement.view;
var lifecycleHooks = directiveMeta.lifecycleHooks;
var lifecycleHooks = directiveMeta.type.lifecycleHooks;
var afterContentLifecycleCallbacksMethod = view.afterContentLifecycleCallbacksMethod;

@@ -46,3 +46,3 @@ afterContentLifecycleCallbacksMethod.resetDebugInfo(compileElement.nodeIndex, compileElement.sourceAst);

var view = compileElement.view;
var lifecycleHooks = directiveMeta.lifecycleHooks;
var lifecycleHooks = directiveMeta.type.lifecycleHooks;
var afterViewLifecycleCallbacksMethod = view.afterViewLifecycleCallbacksMethod;

@@ -58,13 +58,13 @@ afterViewLifecycleCallbacksMethod.resetDebugInfo(compileElement.nodeIndex, compileElement.sourceAst);

exports.bindDirectiveAfterViewLifecycleCallbacks = bindDirectiveAfterViewLifecycleCallbacks;
function bindDirectiveDestroyLifecycleCallbacks(directiveMeta, directiveInstance, compileElement) {
function bindInjectableDestroyLifecycleCallbacks(provider, providerInstance, compileElement) {
var onDestroyMethod = compileElement.view.destroyMethod;
onDestroyMethod.resetDebugInfo(compileElement.nodeIndex, compileElement.sourceAst);
if (directiveMeta.lifecycleHooks.indexOf(core_private_1.LifecycleHooks.OnDestroy) !== -1) {
onDestroyMethod.addStmt(directiveInstance.callMethod('ngOnDestroy', []).toStmt());
if (provider.lifecycleHooks.indexOf(core_private_1.LifecycleHooks.OnDestroy) !== -1) {
onDestroyMethod.addStmt(providerInstance.callMethod('ngOnDestroy', []).toStmt());
}
}
exports.bindDirectiveDestroyLifecycleCallbacks = bindDirectiveDestroyLifecycleCallbacks;
exports.bindInjectableDestroyLifecycleCallbacks = bindInjectableDestroyLifecycleCallbacks;
function bindPipeDestroyLifecycleCallbacks(pipeMeta, pipeInstance, view) {
var onDestroyMethod = view.destroyMethod;
if (pipeMeta.lifecycleHooks.indexOf(core_private_1.LifecycleHooks.OnDestroy) !== -1) {
if (pipeMeta.type.lifecycleHooks.indexOf(core_private_1.LifecycleHooks.OnDestroy) !== -1) {
onDestroyMethod.addStmt(pipeInstance.callMethod('ngOnDestroy', []).toStmt());

@@ -71,0 +71,0 @@ }

import * as o from '../output/output_ast';
import { BoundTextAst, BoundElementPropertyAst, DirectiveAst } from '../template_ast';
import { BoundElementPropertyAst, BoundTextAst, DirectiveAst } from '../template_parser/template_ast';
import { CompileElement, CompileNode } from './compile_element';
import { CompileView } from './compile_view';
import { CompileElement, CompileNode } from './compile_element';
export declare function bindRenderText(boundText: BoundTextAst, compileNode: CompileNode, view: CompileView): void;

@@ -6,0 +6,0 @@ export declare function bindRenderInputs(boundProps: BoundElementPropertyAst[], compileElement: CompileElement): void;

@@ -9,2 +9,3 @@ /**

"use strict";
var core_1 = require('@angular/core');
var core_private_1 = require('../../core_private');

@@ -14,8 +15,7 @@ var lang_1 = require('../facade/lang');

var o = require('../output/output_ast');
var template_ast_1 = require('../template_parser/template_ast');
var util_1 = require('../util');
var compile_binding_1 = require('./compile_binding');
var constants_1 = require('./constants');
var template_ast_1 = require('../template_ast');
var util_1 = require('../util');
var expression_converter_1 = require('./expression_converter');
var compile_binding_1 = require('./compile_binding');
var core_1 = require('@angular/core');
function createBindFieldExpr(exprIndex) {

@@ -27,2 +27,3 @@ return o.THIS_EXPR.prop("_expr_" + exprIndex);

}
var _animationViewCheckedFlagMap = new Map();
function bind(view, currValExpr, fieldExpr, parsedExpression, context, actions, method) {

@@ -36,3 +37,3 @@ var checkExpression = expression_converter_1.convertCdExpressionToIr(view, context, parsedExpression, constants_1.DetectChangesVars.valUnwrapper);

view.fields.push(new o.ClassField(fieldExpr.name, null, [o.StmtModifier.Private]));
view.createMethod.addStmt(o.THIS_EXPR.prop(fieldExpr.name).set(o.importExpr(identifiers_1.Identifiers.uninitialized)).toStmt());
view.createMethod.addStmt(o.THIS_EXPR.prop(fieldExpr.name).set(o.importExpr(identifiers_1.Identifiers.UNINITIALIZED)).toStmt());
if (checkExpression.needsValueUnwrapper) {

@@ -62,3 +63,3 @@ var initValueUnwrapperStmt = constants_1.DetectChangesVars.valUnwrapper.callMethod('reset', []).toStmt();

exports.bindRenderText = bindRenderText;
function bindAndWriteToRenderer(boundProps, context, compileElement) {
function bindAndWriteToRenderer(boundProps, context, compileElement, isHostProp) {
var view = compileElement.view;

@@ -109,6 +110,7 @@ var renderNode = compileElement.renderNode;

var animationName = boundProp.name;
var animation = view.componentView.animations.get(animationName);
if (!lang_1.isPresent(animation)) {
throw new core_1.BaseException("Internal Error: couldn't find an animation entry for " + boundProp.name);
var targetViewExpr = o.THIS_EXPR;
if (isHostProp) {
targetViewExpr = compileElement.appElement.prop('componentView');
}
var animationFnExpr = targetViewExpr.prop('componentType').prop('animations').key(o.literal(animationName));
// it's important to normalize the void value as `void` explicitly

@@ -120,11 +122,16 @@ // so that the styles data can be obtained from the stringmap

updateStmts.push(oldRenderVar.set(oldRenderValue).toDeclStmt());
updateStmts.push(new o.IfStmt(oldRenderVar.equals(o.importExpr(identifiers_1.Identifiers.uninitialized)), [oldRenderVar.set(emptyStateValue).toStmt()]));
updateStmts.push(new o.IfStmt(oldRenderVar.equals(o.importExpr(identifiers_1.Identifiers.UNINITIALIZED)), [oldRenderVar.set(emptyStateValue).toStmt()]));
// ... => void
var newRenderVar = o.variable('newRenderVar');
updateStmts.push(newRenderVar.set(renderValue).toDeclStmt());
updateStmts.push(new o.IfStmt(newRenderVar.equals(o.importExpr(identifiers_1.Identifiers.uninitialized)), [newRenderVar.set(emptyStateValue).toStmt()]));
updateStmts.push(animation.fnVariable.callFn([o.THIS_EXPR, renderNode, oldRenderVar, newRenderVar])
updateStmts.push(new o.IfStmt(newRenderVar.equals(o.importExpr(identifiers_1.Identifiers.UNINITIALIZED)), [newRenderVar.set(emptyStateValue).toStmt()]));
updateStmts.push(animationFnExpr.callFn([o.THIS_EXPR, renderNode, oldRenderVar, newRenderVar]).toStmt());
view.detachMethod.addStmt(animationFnExpr.callFn([o.THIS_EXPR, renderNode, oldRenderValue, emptyStateValue])
.toStmt());
view.detachMethod.addStmt(animation.fnVariable.callFn([o.THIS_EXPR, renderNode, oldRenderValue, emptyStateValue])
.toStmt());
if (!_animationViewCheckedFlagMap.get(view)) {
_animationViewCheckedFlagMap.set(view, true);
var triggerStmt = o.THIS_EXPR.callMethod('triggerQueuedAnimations', []).toStmt();
view.afterViewLifecycleCallbacksMethod.addStmt(triggerStmt);
view.detachMethod.addStmt(triggerStmt);
}
break;

@@ -138,17 +145,17 @@ }

switch (boundProp.securityContext) {
case core_private_1.SecurityContext.NONE:
case core_1.SecurityContext.NONE:
return renderValue; // No sanitization needed.
case core_private_1.SecurityContext.HTML:
case core_1.SecurityContext.HTML:
enumValue = 'HTML';
break;
case core_private_1.SecurityContext.STYLE:
case core_1.SecurityContext.STYLE:
enumValue = 'STYLE';
break;
case core_private_1.SecurityContext.SCRIPT:
case core_1.SecurityContext.SCRIPT:
enumValue = 'SCRIPT';
break;
case core_private_1.SecurityContext.URL:
case core_1.SecurityContext.URL:
enumValue = 'URL';
break;
case core_private_1.SecurityContext.RESOURCE_URL:
case core_1.SecurityContext.RESOURCE_URL:
enumValue = 'RESOURCE_URL';

@@ -164,7 +171,7 @@ break;

function bindRenderInputs(boundProps, compileElement) {
bindAndWriteToRenderer(boundProps, compileElement.view.componentContext, compileElement);
bindAndWriteToRenderer(boundProps, compileElement.view.componentContext, compileElement, false);
}
exports.bindRenderInputs = bindRenderInputs;
function bindDirectiveHostProps(directiveAst, directiveInstance, compileElement) {
bindAndWriteToRenderer(directiveAst.hostProperties, directiveInstance, compileElement);
bindAndWriteToRenderer(directiveAst.hostProperties, directiveInstance, compileElement, true);
}

@@ -179,3 +186,3 @@ exports.bindDirectiveHostProps = bindDirectiveHostProps;

detectChangesInInputsMethod.resetDebugInfo(compileElement.nodeIndex, compileElement.sourceAst);
var lifecycleHooks = directiveAst.directive.lifecycleHooks;
var lifecycleHooks = directiveAst.directive.type.lifecycleHooks;
var calcChangesMap = lifecycleHooks.indexOf(core_private_1.LifecycleHooks.OnChanges) !== -1;

@@ -221,3 +228,3 @@ var isOnPushComp = directiveAst.directive.isComponent &&

function logBindingUpdateStmt(renderNode, propName, value) {
return o.THIS_EXPR.prop('renderer')
var tryStmt = o.THIS_EXPR.prop('renderer')
.callMethod('setBindingDebugInfo', [

@@ -228,3 +235,10 @@ renderNode, o.literal("ng-reflect-" + util_1.camelCaseToDashCase(propName)),

.toStmt();
var catchStmt = o.THIS_EXPR.prop('renderer')
.callMethod('setBindingDebugInfo', [
renderNode, o.literal("ng-reflect-" + util_1.camelCaseToDashCase(propName)),
o.literal('[ERROR] Exception while trying to serialize the value')
])
.toStmt();
return new o.TryCatchStmt([tryStmt], [catchStmt]);
}
//# sourceMappingURL=property_binder.js.map

@@ -0,3 +1,10 @@

/**
* @license
* Copyright Google Inc. 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 { CompileDirectiveMetadata, CompileTokenMetadata } from '../compile_metadata';
import * as o from '../output/output_ast';
import { CompileTokenMetadata, CompileDirectiveMetadata } from '../compile_metadata';
import { CompileView } from './compile_view';

@@ -7,4 +14,3 @@ export declare function getPropertyInView(property: o.Expression, callingView: CompileView, definedView: CompileView): o.Expression;

export declare function getViewFactoryName(component: CompileDirectiveMetadata, embeddedTemplateIndex: number): string;
export declare function createDiTokenExpression(token: CompileTokenMetadata): o.Expression;
export declare function createFlatArray(expressions: o.Expression[]): o.Expression;
export declare function createPureProxy(fn: o.Expression, argCount: number, pureProxyProp: o.ReadPropExpr, view: CompileView): void;

@@ -11,4 +11,5 @@ /**

var lang_1 = require('../facade/lang');
var identifiers_1 = require('../identifiers');
var o = require('../output/output_ast');
var identifiers_1 = require('../identifiers');
var util_1 = require('../util');
function getPropertyInView(property, callingView, definedView) {

@@ -41,3 +42,3 @@ if (callingView === definedView) {

function injectFromViewParentInjector(token, optional) {
var args = [createDiTokenExpression(token)];
var args = [util_1.createDiTokenExpression(token)];
if (optional) {

@@ -53,15 +54,2 @@ args.push(o.NULL_EXPR);

exports.getViewFactoryName = getViewFactoryName;
function createDiTokenExpression(token) {
if (lang_1.isPresent(token.value)) {
return o.literal(token.value);
}
else if (token.identifierIsInstance) {
return o.importExpr(token.identifier)
.instantiate([], o.importType(token.identifier, [], [o.TypeModifier.Const]));
}
else {
return o.importExpr(token.identifier);
}
}
exports.createDiTokenExpression = createDiTokenExpression;
function createFlatArray(expressions) {

@@ -68,0 +56,0 @@ var lastNonArrayExpressions = [];

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"getViewFactoryName":{"__symbolic":"function","parameters":["component","embeddedTemplateIndex"],"value":{"__symbolic":"error","message":"Expression form not supported","line":54,"character":8}}}}
{"__symbolic":"module","version":1,"metadata":{"getViewFactoryName":{"__symbolic":"function","parameters":["component","embeddedTemplateIndex"],"value":{"__symbolic":"error","message":"Expression form not supported","line":55,"character":8}}}}

@@ -1,3 +0,3 @@

import { TemplateAst } from '../template_ast';
import { TemplateAst } from '../template_parser/template_ast';
import { CompileView } from './compile_view';
export declare function bindView(view: CompileView, parsedTemplate: TemplateAst[]): void;

@@ -9,7 +9,7 @@ /**

"use strict";
var collection_1 = require('../facade/collection');
var template_ast_1 = require('../template_ast');
var property_binder_1 = require('./property_binder');
var identifiers_1 = require('../identifiers');
var template_ast_1 = require('../template_parser/template_ast');
var event_binder_1 = require('./event_binder');
var lifecycle_binder_1 = require('./lifecycle_binder');
var property_binder_1 = require('./property_binder');
function bindView(view, parsedTemplate) {

@@ -41,4 +41,4 @@ var visitor = new ViewBinderVisitor(view);

event_binder_1.bindRenderOutputs(eventListeners);
collection_1.ListWrapper.forEachWithIndex(ast.directives, function (directiveAst, index) {
var directiveInstance = compileElement.directiveInstances[index];
ast.directives.forEach(function (directiveAst) {
var directiveInstance = compileElement.instances.get(identifiers_1.identifierToken(directiveAst.directive.type));
property_binder_1.bindDirectiveInputs(directiveAst, directiveInstance, compileElement);

@@ -52,8 +52,11 @@ lifecycle_binder_1.bindDirectiveDetectChangesLifecycleCallbacks(directiveAst, directiveInstance, compileElement);

// so that children are notified before parents
collection_1.ListWrapper.forEachWithIndex(ast.directives, function (directiveAst, index) {
var directiveInstance = compileElement.directiveInstances[index];
ast.directives.forEach(function (directiveAst) {
var directiveInstance = compileElement.instances.get(identifiers_1.identifierToken(directiveAst.directive.type));
lifecycle_binder_1.bindDirectiveAfterContentLifecycleCallbacks(directiveAst.directive, directiveInstance, compileElement);
lifecycle_binder_1.bindDirectiveAfterViewLifecycleCallbacks(directiveAst.directive, directiveInstance, compileElement);
lifecycle_binder_1.bindDirectiveDestroyLifecycleCallbacks(directiveAst.directive, directiveInstance, compileElement);
});
ast.providers.forEach(function (providerAst) {
var providerInstance = compileElement.instances.get(providerAst.token);
lifecycle_binder_1.bindInjectableDestroyLifecycleCallbacks(providerAst, providerInstance, compileElement);
});
return null;

@@ -64,4 +67,4 @@ };

var eventListeners = event_binder_1.collectEventListeners(ast.outputs, ast.directives, compileElement);
collection_1.ListWrapper.forEachWithIndex(ast.directives, function (directiveAst, index) {
var directiveInstance = compileElement.directiveInstances[index];
ast.directives.forEach(function (directiveAst) {
var directiveInstance = compileElement.instances.get(identifiers_1.identifierToken(directiveAst.directive.type));
property_binder_1.bindDirectiveInputs(directiveAst, directiveInstance, compileElement);

@@ -72,4 +75,7 @@ lifecycle_binder_1.bindDirectiveDetectChangesLifecycleCallbacks(directiveAst, directiveInstance, compileElement);

lifecycle_binder_1.bindDirectiveAfterViewLifecycleCallbacks(directiveAst.directive, directiveInstance, compileElement);
lifecycle_binder_1.bindDirectiveDestroyLifecycleCallbacks(directiveAst.directive, directiveInstance, compileElement);
});
ast.providers.forEach(function (providerAst) {
var providerInstance = compileElement.instances.get(providerAst.token);
lifecycle_binder_1.bindInjectableDestroyLifecycleCallbacks(providerAst, providerInstance, compileElement);
});
bindView(compileElement.embeddedView, ast.children);

@@ -76,0 +82,0 @@ return null;

import { CompileIdentifierMetadata } from '../compile_metadata';
import * as o from '../output/output_ast';
import { TemplateAst } from '../template_ast';
import { TemplateAst } from '../template_parser/template_ast';
import { CompileView } from './compile_view';

@@ -5,0 +5,0 @@ export declare class ViewFactoryDependency {

@@ -17,7 +17,8 @@ /**

var o = require('../output/output_ast');
var template_ast_1 = require('../template_ast');
var template_ast_1 = require('../template_parser/template_ast');
var util_1 = require('../util');
var compile_element_1 = require('./compile_element');
var compile_view_1 = require('./compile_view');
var constants_1 = require('./constants');
var util_1 = require('./util');
var util_2 = require('./util');
var IMPLICIT_TEMPLATE_VAR = '\$implicit';

@@ -186,10 +187,10 @@ var CLASS_ATTR = 'class';

if (lang_1.isPresent(component)) {
var nestedComponentIdentifier = new compile_metadata_1.CompileIdentifierMetadata({ name: util_1.getViewFactoryName(component, 0) });
var nestedComponentIdentifier = new compile_metadata_1.CompileIdentifierMetadata({ name: util_2.getViewFactoryName(component, 0) });
this.targetDependencies.push(new ViewFactoryDependency(component.type, nestedComponentIdentifier));
var precompileComponentIdentifiers = component.precompile.map(function (precompileComp) {
var id = new compile_metadata_1.CompileIdentifierMetadata({ name: precompileComp.name });
_this.targetDependencies.push(new ComponentFactoryDependency(precompileComp, id));
var entryComponentIdentifiers = component.entryComponents.map(function (entryComponent) {
var id = new compile_metadata_1.CompileIdentifierMetadata({ name: entryComponent.name });
_this.targetDependencies.push(new ComponentFactoryDependency(entryComponent, id));
return id;
});
compileElement.createComponentFactoryResolver(precompileComponentIdentifiers);
compileElement.createComponentFactoryResolver(entryComponentIdentifiers);
compViewExpr = o.variable("compView_" + nodeIndex); // fix highlighting: `

@@ -213,3 +214,3 @@ compileElement.setComponentView(compViewExpr);

else {
codeGenContentNodes = o.literalArr(compileElement.contentNodesByNgContentIndex.map(function (nodes) { return util_1.createFlatArray(nodes); }));
codeGenContentNodes = o.literalArr(compileElement.contentNodesByNgContentIndex.map(function (nodes) { return util_2.createFlatArray(nodes); }));
}

@@ -237,3 +238,3 @@ this.view.createMethod.addStmt(compViewExpr

this.view.nodes.push(compileElement);
var compiledAnimations = this._animationCompiler.compileComponent(this.view.component);
var compiledAnimations = this._animationCompiler.compileComponent(this.view.component, [ast]);
this.nestedViewCount++;

@@ -411,2 +412,3 @@ var embeddedView = new compile_view_1.CompileView(this.view.component, this.view.genConfig, this.view.pipeMetas, o.NULL_EXPR, compiledAnimations, this.view.viewIndex + this.nestedViewCount, compileElement, templateVariableBindings);

if (view.viewIndex === 0) {
var animationsExpr = o.literalMap(view.animations.map(function (entry) { return [entry.name, entry.fnVariable]; }));
initRenderCompTypeStmts = [new o.IfStmt(renderCompTypeVar.identical(o.NULL_EXPR), [

@@ -417,3 +419,4 @@ renderCompTypeVar

o.literal(view.component.template.ngContentSelectors.length),
constants_1.ViewEncapsulationEnum.fromValue(view.component.template.encapsulation), view.styles
constants_1.ViewEncapsulationEnum.fromValue(view.component.template.encapsulation), view.styles,
animationsExpr
]))

@@ -447,3 +450,3 @@ .toStmt()

.callMethod('init', [
util_1.createFlatArray(view.rootNodesOrAppElements),
util_2.createFlatArray(view.rootNodesOrAppElements),
o.literalArr(view.nodes.map(function (node) { return node.renderNode; })), o.literalArr(view.disposables),

@@ -450,0 +453,0 @@ o.literalArr(view.subscriptions)

import { CompileDirectiveMetadata, CompilePipeMetadata } from '../compile_metadata';
import { CompilerConfig } from '../config';
import * as o from '../output/output_ast';
import { TemplateAst } from '../template_ast';
import { TemplateAst } from '../template_parser/template_ast';
import { ComponentFactoryDependency, ViewFactoryDependency } from './view_builder';

@@ -6,0 +6,0 @@ export { ComponentFactoryDependency, ViewFactoryDependency } from './view_builder';

@@ -35,3 +35,3 @@ /**

var dependencies = [];
var compiledAnimations = this._animationCompiler.compileComponent(component);
var compiledAnimations = this._animationCompiler.compileComponent(component, template);
var statements = [];

@@ -38,0 +38,0 @@ compiledAnimations.map(function (entry) {

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"ViewCompiler":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../config","name":"CompilerConfig"}]}],"compileComponent":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"ViewCompiler":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../config","name":"CompilerConfig"}]}],"compileComponent":[{"__symbolic":"method"}]}}},"exports":[{"from":"./view_builder","export":["ComponentFactoryDependency","ViewFactoryDependency"]}]}

@@ -9,4 +9,45 @@ /**

export * from './testing/schema_registry_mock';
export * from './testing/view_resolver_mock';
export * from './testing/test_component_builder';
export * from './testing/directive_resolver_mock';
export * from './testing/ng_module_resolver_mock';
export * from './testing/pipe_resolver_mock';
import { ConcreteType, Type } from './src/facade/lang';
import { ModuleWithComponentFactories, CompilerOptions, PlatformRef, CompilerFactory, ComponentFactory, NgModuleFactory, Injector, NgModuleMetadataType, ComponentMetadataType, DirectiveMetadataType, PipeMetadataType } from '@angular/core';
import { MetadataOverride } from '@angular/core/testing';
import { TestingCompilerFactory, TestingCompiler } from './core_private_testing';
import { RuntimeCompiler } from './index';
import { MockDirectiveResolver } from './testing/directive_resolver_mock';
import { MockNgModuleResolver } from './testing/ng_module_resolver_mock';
import { MockPipeResolver } from './testing/pipe_resolver_mock';
export declare class TestingCompilerFactoryImpl implements TestingCompilerFactory {
private _compilerFactory;
constructor(_compilerFactory: CompilerFactory);
createTestingCompiler(options: CompilerOptions[]): TestingCompiler;
}
export declare class TestingCompilerImpl implements TestingCompiler {
private _compiler;
private _directiveResolver;
private _pipeResolver;
private _moduleResolver;
private _overrider;
constructor(_compiler: RuntimeCompiler, _directiveResolver: MockDirectiveResolver, _pipeResolver: MockPipeResolver, _moduleResolver: MockNgModuleResolver);
injector: Injector;
compileComponentAsync<T>(component: ConcreteType<T>, ngModule?: Type): Promise<ComponentFactory<T>>;
compileComponentSync<T>(component: ConcreteType<T>, ngModule?: Type): ComponentFactory<T>;
compileModuleSync<T>(moduleType: ConcreteType<T>): NgModuleFactory<T>;
compileModuleAsync<T>(moduleType: ConcreteType<T>): Promise<NgModuleFactory<T>>;
compileModuleAndAllComponentsSync<T>(moduleType: ConcreteType<T>): ModuleWithComponentFactories<T>;
compileModuleAndAllComponentsAsync<T>(moduleType: ConcreteType<T>): Promise<ModuleWithComponentFactories<T>>;
overrideModule(ngModule: ConcreteType<any>, override: MetadataOverride<NgModuleMetadataType>): void;
overrideDirective(directive: ConcreteType<any>, override: MetadataOverride<DirectiveMetadataType>): void;
overrideComponent(component: ConcreteType<any>, override: MetadataOverride<ComponentMetadataType>): void;
overridePipe(pipe: ConcreteType<any>, override: MetadataOverride<PipeMetadataType>): void;
clearCache(): void;
clearCacheFor(type: Type): void;
}
/**
* Platform for dynamic tests
*
* @experimental
*/
export declare const platformCoreDynamicTesting: (extraProviders?: any[]) => PlatformRef;

@@ -13,5 +13,105 @@ /**

__export(require('./testing/schema_registry_mock'));
__export(require('./testing/view_resolver_mock'));
__export(require('./testing/test_component_builder'));
__export(require('./testing/directive_resolver_mock'));
__export(require('./testing/ng_module_resolver_mock'));
__export(require('./testing/pipe_resolver_mock'));
var core_1 = require('@angular/core');
var core_private_testing_1 = require('./core_private_testing');
var index_1 = require('./index');
var directive_resolver_mock_2 = require('./testing/directive_resolver_mock');
var ng_module_resolver_mock_2 = require('./testing/ng_module_resolver_mock');
var pipe_resolver_mock_2 = require('./testing/pipe_resolver_mock');
var metadata_overrider_1 = require('./testing/metadata_overrider');
var TestingCompilerFactoryImpl = (function () {
function TestingCompilerFactoryImpl(_compilerFactory) {
this._compilerFactory = _compilerFactory;
}
TestingCompilerFactoryImpl.prototype.createTestingCompiler = function (options) {
var compiler = this._compilerFactory.createCompiler(options);
return new TestingCompilerImpl(compiler, compiler.injector.get(directive_resolver_mock_2.MockDirectiveResolver), compiler.injector.get(pipe_resolver_mock_2.MockPipeResolver), compiler.injector.get(ng_module_resolver_mock_2.MockNgModuleResolver));
};
/** @nocollapse */
TestingCompilerFactoryImpl.decorators = [
{ type: core_1.Injectable },
];
/** @nocollapse */
TestingCompilerFactoryImpl.ctorParameters = [
{ type: core_1.CompilerFactory, },
];
return TestingCompilerFactoryImpl;
}());
exports.TestingCompilerFactoryImpl = TestingCompilerFactoryImpl;
var TestingCompilerImpl = (function () {
function TestingCompilerImpl(_compiler, _directiveResolver, _pipeResolver, _moduleResolver) {
this._compiler = _compiler;
this._directiveResolver = _directiveResolver;
this._pipeResolver = _pipeResolver;
this._moduleResolver = _moduleResolver;
this._overrider = new metadata_overrider_1.MetadataOverrider();
}
Object.defineProperty(TestingCompilerImpl.prototype, "injector", {
get: function () { return this._compiler.injector; },
enumerable: true,
configurable: true
});
TestingCompilerImpl.prototype.compileComponentAsync = function (component, ngModule) {
if (ngModule === void 0) { ngModule = null; }
return this._compiler.compileComponentAsync(component, ngModule);
};
TestingCompilerImpl.prototype.compileComponentSync = function (component, ngModule) {
if (ngModule === void 0) { ngModule = null; }
return this._compiler.compileComponentSync(component, ngModule);
};
TestingCompilerImpl.prototype.compileModuleSync = function (moduleType) {
return this._compiler.compileModuleSync(moduleType);
};
TestingCompilerImpl.prototype.compileModuleAsync = function (moduleType) {
return this._compiler.compileModuleAsync(moduleType);
};
TestingCompilerImpl.prototype.compileModuleAndAllComponentsSync = function (moduleType) {
return this._compiler.compileModuleAndAllComponentsSync(moduleType);
};
TestingCompilerImpl.prototype.compileModuleAndAllComponentsAsync = function (moduleType) {
return this._compiler.compileModuleAndAllComponentsAsync(moduleType);
};
TestingCompilerImpl.prototype.overrideModule = function (ngModule, override) {
var oldMetadata = this._moduleResolver.resolve(ngModule, false);
this._moduleResolver.setNgModule(ngModule, this._overrider.overrideMetadata(core_1.NgModuleMetadata, oldMetadata, override));
};
TestingCompilerImpl.prototype.overrideDirective = function (directive, override) {
var oldMetadata = this._directiveResolver.resolve(directive, false);
this._directiveResolver.setDirective(directive, this._overrider.overrideMetadata(core_1.DirectiveMetadata, oldMetadata, override));
};
TestingCompilerImpl.prototype.overrideComponent = function (component, override) {
var oldMetadata = this._directiveResolver.resolve(component, false);
this._directiveResolver.setDirective(component, this._overrider.overrideMetadata(core_1.ComponentMetadata, oldMetadata, override));
};
TestingCompilerImpl.prototype.overridePipe = function (pipe, override) {
var oldMetadata = this._pipeResolver.resolve(pipe, false);
this._pipeResolver.setPipe(pipe, this._overrider.overrideMetadata(core_1.PipeMetadata, oldMetadata, override));
};
TestingCompilerImpl.prototype.clearCache = function () { this._compiler.clearCache(); };
TestingCompilerImpl.prototype.clearCacheFor = function (type) { this._compiler.clearCacheFor(type); };
return TestingCompilerImpl;
}());
exports.TestingCompilerImpl = TestingCompilerImpl;
/**
* Platform for dynamic tests
*
* @experimental
*/
exports.platformCoreDynamicTesting = core_1.createPlatformFactory(index_1.platformCoreDynamic, 'coreDynamicTesting', [
{
provide: core_1.COMPILER_OPTIONS,
useValue: {
providers: [
pipe_resolver_mock_2.MockPipeResolver, { provide: index_1.PipeResolver, useExisting: pipe_resolver_mock_2.MockPipeResolver },
directive_resolver_mock_2.MockDirectiveResolver, { provide: index_1.DirectiveResolver, useExisting: directive_resolver_mock_2.MockDirectiveResolver },
ng_module_resolver_mock_2.MockNgModuleResolver, { provide: index_1.NgModuleResolver, useExisting: ng_module_resolver_mock_2.MockNgModuleResolver }
]
},
multi: true
},
{ provide: core_private_testing_1.TestingCompilerFactory, useClass: TestingCompilerFactoryImpl }
]);
//# sourceMappingURL=testing.js.map

@@ -8,3 +8,3 @@ /**

*/
import { DirectiveMetadata, Injector } from '@angular/core';
import { AnimationEntryMetadata, DirectiveMetadata, Injector, ViewMetadata } from '@angular/core';
import { DirectiveResolver } from '../src/directive_resolver';

@@ -18,9 +18,32 @@ import { Type } from '../src/facade/lang';

private _injector;
private _directives;
private _providerOverrides;
private viewProviderOverrides;
private _viewProviderOverrides;
private _views;
private _inlineTemplates;
private _animations;
private _directiveOverrides;
constructor(_injector: Injector);
private _compiler;
resolve(type: Type): DirectiveMetadata;
private _clearCacheFor(component);
resolve(type: Type, throwIfNotFound?: boolean): DirectiveMetadata;
/**
* Overrides the {@link DirectiveMetadata} for a directive.
*/
setDirective(type: Type, metadata: DirectiveMetadata): void;
setProvidersOverride(type: Type, providers: any[]): void;
setViewProvidersOverride(type: Type, viewProviders: any[]): void;
/**
* Overrides the {@link ViewMetadata} for a component.
*/
setView(component: Type, view: ViewMetadata): void;
/**
* Overrides the inline template for a component - other configuration remains unchanged.
*/
setInlineTemplate(component: Type, template: string): void;
setAnimations(component: Type, animations: AnimationEntryMetadata[]): void;
/**
* Overrides a directive from the component {@link ViewMetadata}.
*/
overrideViewDirective(component: Type, from: Type, to: Type): void;
}

@@ -17,2 +17,3 @@ /**

var collection_1 = require('../src/facade/collection');
var exceptions_1 = require('../src/facade/exceptions');
var lang_1 = require('../src/facade/lang');

@@ -24,4 +25,9 @@ var MockDirectiveResolver = (function (_super) {

this._injector = _injector;
this._directives = new collection_1.Map();
this._providerOverrides = new collection_1.Map();
this.viewProviderOverrides = new collection_1.Map();
this._viewProviderOverrides = new collection_1.Map();
this._views = new collection_1.Map();
this._inlineTemplates = new collection_1.Map();
this._animations = new collection_1.Map();
this._directiveOverrides = new collection_1.Map();
}

@@ -33,49 +39,134 @@ Object.defineProperty(MockDirectiveResolver.prototype, "_compiler", {

});
MockDirectiveResolver.prototype.resolve = function (type) {
var dm = _super.prototype.resolve.call(this, type);
MockDirectiveResolver.prototype._clearCacheFor = function (component) { this._compiler.clearCacheFor(component); };
MockDirectiveResolver.prototype.resolve = function (type, throwIfNotFound) {
if (throwIfNotFound === void 0) { throwIfNotFound = true; }
var metadata = this._directives.get(type);
if (!metadata) {
metadata = _super.prototype.resolve.call(this, type, throwIfNotFound);
}
if (!metadata) {
return null;
}
var providerOverrides = this._providerOverrides.get(type);
var viewProviderOverrides = this.viewProviderOverrides.get(type);
var providers = dm.providers;
var viewProviderOverrides = this._viewProviderOverrides.get(type);
var providers = metadata.providers;
if (lang_1.isPresent(providerOverrides)) {
var originalViewProviders = lang_1.isPresent(dm.providers) ? dm.providers : [];
var originalViewProviders = lang_1.isPresent(metadata.providers) ? metadata.providers : [];
providers = originalViewProviders.concat(providerOverrides);
}
if (dm instanceof core_1.ComponentMetadata) {
var viewProviders = dm.viewProviders;
if (metadata instanceof core_1.ComponentMetadata) {
var viewProviders = metadata.viewProviders;
if (lang_1.isPresent(viewProviderOverrides)) {
var originalViewProviders = lang_1.isPresent(dm.viewProviders) ? dm.viewProviders : [];
var originalViewProviders = lang_1.isPresent(metadata.viewProviders) ? metadata.viewProviders : [];
viewProviders = originalViewProviders.concat(viewProviderOverrides);
}
var view = this._views.get(type);
if (!view) {
view = metadata;
}
var directives_1 = [];
if (lang_1.isPresent(view.directives)) {
flattenArray(view.directives, directives_1);
}
var animations = view.animations;
var templateUrl = view.templateUrl;
var directiveOverrides = this._directiveOverrides.get(type);
var inlineAnimations = this._animations.get(type);
if (lang_1.isPresent(inlineAnimations)) {
animations = inlineAnimations;
}
var inlineTemplate = this._inlineTemplates.get(type);
if (lang_1.isPresent(inlineTemplate)) {
templateUrl = null;
}
else {
inlineTemplate = view.template;
}
if (lang_1.isPresent(directiveOverrides) && lang_1.isPresent(view.directives)) {
directiveOverrides.forEach(function (to, from) {
var srcIndex = directives_1.indexOf(from);
if (srcIndex == -1) {
throw new exceptions_1.BaseException("Overriden directive " + lang_1.stringify(from) + " not found in the template of " + lang_1.stringify(type));
}
directives_1[srcIndex] = to;
});
}
return new core_1.ComponentMetadata({
selector: dm.selector,
inputs: dm.inputs,
outputs: dm.outputs,
host: dm.host,
exportAs: dm.exportAs,
moduleId: dm.moduleId,
queries: dm.queries,
changeDetection: dm.changeDetection,
selector: metadata.selector,
inputs: metadata.inputs,
outputs: metadata.outputs,
host: metadata.host,
exportAs: metadata.exportAs,
moduleId: metadata.moduleId,
queries: metadata.queries,
changeDetection: metadata.changeDetection,
providers: providers,
viewProviders: viewProviders,
precompile: dm.precompile
entryComponents: metadata.entryComponents,
template: inlineTemplate,
templateUrl: templateUrl,
directives: directives_1.length > 0 ? directives_1 : null,
animations: animations,
styles: view.styles,
styleUrls: view.styleUrls,
pipes: view.pipes,
encapsulation: view.encapsulation,
interpolation: view.interpolation
});
}
return new core_1.DirectiveMetadata({
selector: dm.selector,
inputs: dm.inputs,
outputs: dm.outputs,
host: dm.host,
selector: metadata.selector,
inputs: metadata.inputs,
outputs: metadata.outputs,
host: metadata.host,
providers: providers,
exportAs: dm.exportAs,
queries: dm.queries
exportAs: metadata.exportAs,
queries: metadata.queries
});
};
/**
* Overrides the {@link DirectiveMetadata} for a directive.
*/
MockDirectiveResolver.prototype.setDirective = function (type, metadata) {
this._directives.set(type, metadata);
this._clearCacheFor(type);
};
MockDirectiveResolver.prototype.setProvidersOverride = function (type, providers) {
this._providerOverrides.set(type, providers);
this._compiler.clearCacheFor(type);
this._clearCacheFor(type);
};
MockDirectiveResolver.prototype.setViewProvidersOverride = function (type, viewProviders) {
this.viewProviderOverrides.set(type, viewProviders);
this._compiler.clearCacheFor(type);
this._viewProviderOverrides.set(type, viewProviders);
this._clearCacheFor(type);
};
/**
* Overrides the {@link ViewMetadata} for a component.
*/
MockDirectiveResolver.prototype.setView = function (component, view) {
this._views.set(component, view);
this._clearCacheFor(component);
};
/**
* Overrides the inline template for a component - other configuration remains unchanged.
*/
MockDirectiveResolver.prototype.setInlineTemplate = function (component, template) {
this._inlineTemplates.set(component, template);
this._clearCacheFor(component);
};
MockDirectiveResolver.prototype.setAnimations = function (component, animations) {
this._animations.set(component, animations);
this._clearCacheFor(component);
};
/**
* Overrides a directive from the component {@link ViewMetadata}.
*/
MockDirectiveResolver.prototype.overrideViewDirective = function (component, from, to) {
var overrides = this._directiveOverrides.get(component);
if (!overrides) {
overrides = new collection_1.Map();
this._directiveOverrides.set(component, overrides);
}
overrides.set(from, to);
this._clearCacheFor(component);
};
/** @nocollapse */

@@ -92,2 +183,15 @@ MockDirectiveResolver.decorators = [

exports.MockDirectiveResolver = MockDirectiveResolver;
function flattenArray(tree, out) {
if (!lang_1.isPresent(tree))
return;
for (var i = 0; i < tree.length; i++) {
var item = core_1.resolveForwardRef(tree[i]);
if (lang_1.isArray(item)) {
flattenArray(item, out);
}
else {
out.push(item);
}
}
}
//# sourceMappingURL=directive_resolver_mock.js.map

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"MockDirectiveResolver":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector"}]}],"resolve":[{"__symbolic":"method"}],"setProvidersOverride":[{"__symbolic":"method"}],"setViewProvidersOverride":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"MockDirectiveResolver":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector"}]}],"_clearCacheFor":[{"__symbolic":"method"}],"resolve":[{"__symbolic":"method"}],"setDirective":[{"__symbolic":"method"}],"setProvidersOverride":[{"__symbolic":"method"}],"setViewProvidersOverride":[{"__symbolic":"method"}],"setView":[{"__symbolic":"method"}],"setInlineTemplate":[{"__symbolic":"method"}],"setAnimations":[{"__symbolic":"method"}],"overrideViewDirective":[{"__symbolic":"method"}]}}}}

@@ -8,3 +8,3 @@ /**

*/
import { SecurityContext } from '../core_private';
import { SchemaMetadata, SecurityContext } from '@angular/core';
import { ElementSchemaRegistry } from '../index';

@@ -23,5 +23,6 @@ export declare class MockSchemaRegistry implements ElementSchemaRegistry {

});
hasProperty(tagName: string, property: string): boolean;
hasProperty(tagName: string, property: string, schemas: SchemaMetadata[]): boolean;
securityContext(tagName: string, property: string): SecurityContext;
getMappedPropName(attrName: string): string;
getDefaultComponentElementName(): string;
}

@@ -9,3 +9,3 @@ /**

"use strict";
var core_private_1 = require('../core_private');
var core_1 = require('@angular/core');
var lang_1 = require('../src/facade/lang');

@@ -17,3 +17,3 @@ var MockSchemaRegistry = (function () {

}
MockSchemaRegistry.prototype.hasProperty = function (tagName, property) {
MockSchemaRegistry.prototype.hasProperty = function (tagName, property, schemas) {
var result = this.existingProperties[property];

@@ -23,3 +23,3 @@ return lang_1.isPresent(result) ? result : true;

MockSchemaRegistry.prototype.securityContext = function (tagName, property) {
return core_private_1.SecurityContext.NONE;
return core_1.SecurityContext.NONE;
};

@@ -30,2 +30,3 @@ MockSchemaRegistry.prototype.getMappedPropName = function (attrName) {

};
MockSchemaRegistry.prototype.getDefaultComponentElementName = function () { return 'ng-component'; };
return MockSchemaRegistry;

@@ -32,0 +33,0 @@ }());

@@ -12,24 +12,7 @@ /**

/**
* @deprecated Import TestComponentRenderer from @angular/core/testing
*/
export { TestComponentRenderer } from '@angular/core/testing';
/**
* @deprecated Import TestComponentBuilder from @angular/core/testing
*/
export { TestComponentBuilder } from '@angular/core/testing';
/**
* @deprecated Import ComponentFixture from @angular/core/testing
*/
export { ComponentFixture } from '@angular/core/testing';
/**
* @deprecated Import ComponentFixtureNoNgZone from @angular/core/testing
*/
export { ComponentFixtureNoNgZone } from '@angular/core/testing';
/**
* @deprecated Import ComponentFixtureAutoDetect from @angular/core/testing
*/
export { ComponentFixtureAutoDetect } from '@angular/core/testing';
/**
* A TestComponentBuilder that allows overriding based on the compiler.
*/
*
* @deprecated Use `TestBed.configureTestModule` / `TestBed.override...` / `TestBed.createComponent`
* instead.
*/
export declare class OverridingTestComponentBuilder extends TestComponentBuilder {

@@ -36,0 +19,0 @@ constructor(injector: Injector);

@@ -19,27 +19,2 @@ /**

var lang_1 = require('../src/facade/lang');
/**
* @deprecated Import TestComponentRenderer from @angular/core/testing
*/
var testing_2 = require('@angular/core/testing');
exports.TestComponentRenderer = testing_2.TestComponentRenderer;
/**
* @deprecated Import TestComponentBuilder from @angular/core/testing
*/
var testing_3 = require('@angular/core/testing');
exports.TestComponentBuilder = testing_3.TestComponentBuilder;
/**
* @deprecated Import ComponentFixture from @angular/core/testing
*/
var testing_4 = require('@angular/core/testing');
exports.ComponentFixture = testing_4.ComponentFixture;
/**
* @deprecated Import ComponentFixtureNoNgZone from @angular/core/testing
*/
var testing_5 = require('@angular/core/testing');
exports.ComponentFixtureNoNgZone = testing_5.ComponentFixtureNoNgZone;
/**
* @deprecated Import ComponentFixtureAutoDetect from @angular/core/testing
*/
var testing_6 = require('@angular/core/testing');
exports.ComponentFixtureAutoDetect = testing_6.ComponentFixtureAutoDetect;
var OverridingTestComponentBuilder = (function (_super) {

@@ -117,8 +92,7 @@ __extends(OverridingTestComponentBuilder, _super);

var mockDirectiveResolver = this._injector.get(index_1.DirectiveResolver);
var mockViewResolver = this._injector.get(index_1.ViewResolver);
this._viewOverrides.forEach(function (view, type) { mockViewResolver.setView(type, view); });
this._templateOverrides.forEach(function (template, type) { return mockViewResolver.setInlineTemplate(type, template); });
this._animationOverrides.forEach(function (animationsEntry, type) { return mockViewResolver.setAnimations(type, animationsEntry); });
this._viewOverrides.forEach(function (view, type) { mockDirectiveResolver.setView(type, view); });
this._templateOverrides.forEach(function (template, type) { return mockDirectiveResolver.setInlineTemplate(type, template); });
this._animationOverrides.forEach(function (animationsEntry, type) { return mockDirectiveResolver.setAnimations(type, animationsEntry); });
this._directiveOverrides.forEach(function (overrides, component) {
overrides.forEach(function (to, from) { mockViewResolver.overrideViewDirective(component, from, to); });
overrides.forEach(function (to, from) { mockDirectiveResolver.overrideViewDirective(component, from, to); });
});

@@ -134,3 +108,3 @@ this._bindingsOverrides.forEach(function (bindings, type) { return mockDirectiveResolver.setProvidersOverride(type, bindings); });

OverridingTestComponentBuilder.ctorParameters = [
{ type: core_1.Injector, },
{ type: core_1.Injector, decorators: [{ type: core_1.Inject, args: [testing_1.TestBed,] },] },
];

@@ -137,0 +111,0 @@ return OverridingTestComponentBuilder;

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":1,"metadata":{"OverridingTestComponentBuilder":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector"}]}],"_clone":[{"__symbolic":"method"}],"overrideTemplate":[{"__symbolic":"method"}],"overrideAnimations":[{"__symbolic":"method"}],"overrideView":[{"__symbolic":"method"}],"overrideDirective":[{"__symbolic":"method"}],"overrideProviders":[{"__symbolic":"method"}],"overrideViewProviders":[{"__symbolic":"method"}],"createAsync":[{"__symbolic":"method"}],"createSync":[{"__symbolic":"method"}],"_applyMetadataOverrides":[{"__symbolic":"method"}]}}}}
{"__symbolic":"module","version":1,"metadata":{"OverridingTestComponentBuilder":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject"},"arguments":[{"__symbolic":"reference","module":"@angular/core/testing","name":"TestBed"}]}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector"}]}],"_clone":[{"__symbolic":"method"}],"overrideTemplate":[{"__symbolic":"method"}],"overrideAnimations":[{"__symbolic":"method"}],"overrideView":[{"__symbolic":"method"}],"overrideDirective":[{"__symbolic":"method"}],"overrideProviders":[{"__symbolic":"method"}],"overrideViewProviders":[{"__symbolic":"method"}],"createAsync":[{"__symbolic":"method"}],"createSync":[{"__symbolic":"method"}],"_applyMetadataOverrides":[{"__symbolic":"method"}]}}}}

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc