2016-06-23 09:47:54 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @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
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 06:47:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { ObservableWrapper ,  PromiseCompleter ,  PromiseWrapper }  from  '../src/facade/async' ;  
						 
					
						
							
								
									
										
										
										
											2016-04-28 17:50:03 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { ListWrapper }  from  '../src/facade/collection' ;  
						 
					
						
							
								
									
										
										
										
											2016-05-01 22:50:37 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { BaseException ,  ExceptionHandler ,  unimplemented }  from  '../src/facade/exceptions' ;  
						 
					
						
							
								
									
										
										
										
											2016-08-02 06:54:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { ConcreteType ,  Type ,  isBlank ,  isPresent ,  isPromise ,  stringify }  from  '../src/facade/lang' ;  
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 07:38:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { AppInitStatus }  from  './application_init' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { APP_BOOTSTRAP_LISTENER ,  PLATFORM_INITIALIZER }  from  './application_tokens' ;  
						 
					
						
							
								
									
										
										
										
											2016-04-28 17:50:03 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { ChangeDetectorRef }  from  './change_detection/change_detector_ref' ;  
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { Console }  from  './console' ;  
						 
					
						
							
								
									
										
										
										
											2016-07-18 03:50:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { Inject ,  Injectable ,  Injector ,  OpaqueToken ,  Optional ,  ReflectiveInjector ,  SkipSelf ,  forwardRef }  from  './di' ;  
						 
					
						
							
								
									
										
											 
										
											
												refactor(core): clean up platform bootstrap and initTestEnvironment
- Introduces `CompilerFactory` which can be part of a `PlatformRef`.
- Introduces `WorkerAppModule`, `WorkerUiModule`, `ServerModule`
- Introduces `serverDynamicPlatform` for applications using runtime compilation
  on the server.
- Changes browser bootstrap for runtime and offline compilation (see below for an example).
  * introduces `bootstrapModule` and `bootstrapModuleFactory` in `@angular/core`
  * introduces new `browserDynamicPlatform` in `@angular/platform-browser-dynamic
- Changes `initTestEnvironment` (which used to be `setBaseTestProviders`) to not take a compiler factory any more (see below for an example).
BREAKING CHANGE:
## Migration from `setBaseTestProviders` to `initTestEnvironment`:
- For the browser platform:
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);
  ```
  AFTER:
  ```
  import {initTestEnvironment} from ‘@angular/core/testing’;
  import {browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  initTestEnvironment(
      BrowserDynamicTestModule,
      browserDynamicTestPlatform());
  ```
- For the server platform:
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);
  ```
  AFTER:
  ```
  import {initTestEnvironment} from ‘@angular/core/testing’;
  import {serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  initTestEnvironment(
      ServerTestModule,
      serverTestPlatform());
  ```
## Bootstrap changes
```
@AppModule({
  modules: [BrowserModule],
  precompile: [MainComponent],
  providers: […], // additional providers
  directives: […], // additional platform directives
  pipes: […] // additional platform pipes
})
class MyModule {
  constructor(appRef: ApplicationRef) {
    appRef.bootstrap(MainComponent);
  }
}
// offline compile
import {browserPlatform} from ‘@angular/platform-browser’;
import {bootstrapModuleFactory} from ‘@angular/core’;
bootstrapModuleFactory(MyModuleNgFactory, browserPlatform());
// runtime compile long form
import {browserDynamicPlatform} from ‘@angular/platform-browser-dynamic’;
import {bootstrapModule} from ‘@angular/core’;
bootstrapModule(MyModule, browserDynamicPlatform());
```
Closes #9922
Part of #9726
											 
										 
										
											2016-07-08 10:47:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { Compiler ,  CompilerFactory ,  CompilerOptions }  from  './linker/compiler' ;  
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { ComponentFactory ,  ComponentRef }  from  './linker/component_factory' ;  
						 
					
						
							
								
									
										
											 
										
											
												feat(browser): use AppModules for bootstrap in the browser
This introduces the `BrowserModule` to be used for long form
bootstrap and offline compile bootstrap:
```
@AppModule({
  modules: [BrowserModule],
  precompile: [MainComponent],
  providers: […], // additional providers
  directives: […], // additional platform directives
  pipes: […] // additional platform pipes
})
class MyModule {
  constructor(appRef: ApplicationRef) {
    appRef.bootstrap(MainComponent);
  }
}
// offline compile
import {bootstrapModuleFactory} from ‘@angular/platform-browser’;
bootstrapModuleFactory(MyModuleNgFactory);
// runtime compile long form
import {bootstrapModule} from ‘@angular/platform-browser-dynamic’;
bootstrapModule(MyModule);
```
The short form, `bootstrap(...)`, can now creates a module on the fly,
given `directives`, `pipes, `providers`, `precompile` and `modules`
properties.
Related changes:
- make `SanitizationService`, `SecurityContext` public in `@angular/core` so that the offline compiler can resolve the token
- move `AnimationDriver` to `platform-browser` and make it
  public so that the offline compiler can resolve the token
BREAKING CHANGES:
- short form bootstrap does no longer allow
  to inject compiler internals (i.e. everything 
  from `@angular/compiler). Inject `Compiler` instead.
  To provide custom providers for the compiler,
  create a custom compiler via `browserCompiler({providers: [...]})`
  and pass that into the `bootstrap` method.
											 
										 
										
											2016-06-30 13:07:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { ComponentFactoryResolver }  from  './linker/component_factory_resolver' ;  
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { ComponentResolver }  from  './linker/component_resolver' ;  
						 
					
						
							
								
									
										
										
										
											2016-08-02 06:54:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { NgModuleFactory ,  NgModuleInjector ,  NgModuleRef }  from  './linker/ng_module_factory' ;  
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { WtfScopeFn ,  wtfCreateScope ,  wtfLeave }  from  './profile/profile' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { Testability ,  TestabilityRegistry }  from  './testability/testability' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { NgZone ,  NgZoneError }  from  './zone/ng_zone' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-17 14:09:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								var  _devMode : boolean  =  true ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								var  _runModeLocked : boolean  =  false ;  
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								var  _platform : PlatformRef ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-17 14:09:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Disable  Angular ' s  development  mode ,  which  turns  off  assertions  and  other 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  checks  within  the  framework . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  One  important  assertion  this  disables  verifies  that  a  change  detection  pass 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  does  not  result  in  additional  changes  to  any  bindings  ( also  known  as 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  unidirectional  data  flow ) . 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-27 12:27:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @experimental  APIs  related  to  application  bootstrap  are  currently  under  review . 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-17 14:09:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  function  enableProdMode ( ) :  void  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( _runModeLocked )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // Cannot use BaseException as that ends up importing from facade/lang.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    throw  new  BaseException ( 'Cannot enable prod mode after platform setup.' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  _devMode  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
									
										
										
										
											2016-07-07 14:42:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  Locks  the  run  mode  of  Angular .  After  this  has  been  called , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  it  can ' t  be  changed  any  more .  I . e .  ` isDevMode() `  will  always 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  return  the  same  value . 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-27 12:27:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 14:42:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  @deprecated  This  is  a  noop  now .  { @link  isDevMode }  automatically  locks  the  run  mode  on  first  call . 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-17 14:09:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 14:42:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								export  function  lockRunMode ( ) :  void  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  console . warn ( 'lockRunMode() is deprecated and not needed any more.' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-17 14:09:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
									
										
										
										
											2016-07-07 14:42:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  Returns  whether  Angular  is  in  development  mode .  After  called  once , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  the  value  is  locked  and  won ' t  change  any  more . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  By  default ,  this  is  true ,  unless  a  user  calls  ` enableProdMode `  before  calling  this . 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-27 12:27:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @experimental  APIs  related  to  application  bootstrap  are  currently  under  review . 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-17 14:09:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 14:42:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								export  function  isDevMode ( ) :  boolean  {  
						 
					
						
							
								
									
										
										
										
											2016-06-17 14:09:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  _runModeLocked  =  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 14:42:46 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  _devMode ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-17 14:09:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-13 11:21:16 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  Creates  a  platform . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Platforms  have  to  be  eagerly  created  via  this  function . 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-27 12:27:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @experimental  APIs  related  to  application  bootstrap  are  currently  under  review . 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-13 11:21:16 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								export  function  createPlatform ( injector : Injector ) :  PlatformRef  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( isPresent ( _platform )  &&  ! _platform . disposed )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    throw  new  BaseException ( 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        'There can be only one platform. Destroy the previous one to create a new one.' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 06:47:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  _platform  =  injector . get ( PlatformRef ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  inits : Function [ ]  =  < Function [ ] > injector . get ( PLATFORM_INITIALIZER ,  null ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( isPresent ( inits ) )  inits . forEach ( init  = >  init ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  _platform ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-18 03:50:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Factory  for  a  platform . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @experimental 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  type  PlatformFactory  =  ( extraProviders? : any [ ] )  = >  PlatformRef ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												refactor(core): clean up platform bootstrap and initTestEnvironment
- Introduces `CompilerFactory` which can be part of a `PlatformRef`.
- Introduces `WorkerAppModule`, `WorkerUiModule`, `ServerModule`
- Introduces `serverDynamicPlatform` for applications using runtime compilation
  on the server.
- Changes browser bootstrap for runtime and offline compilation (see below for an example).
  * introduces `bootstrapModule` and `bootstrapModuleFactory` in `@angular/core`
  * introduces new `browserDynamicPlatform` in `@angular/platform-browser-dynamic
- Changes `initTestEnvironment` (which used to be `setBaseTestProviders`) to not take a compiler factory any more (see below for an example).
BREAKING CHANGE:
## Migration from `setBaseTestProviders` to `initTestEnvironment`:
- For the browser platform:
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);
  ```
  AFTER:
  ```
  import {initTestEnvironment} from ‘@angular/core/testing’;
  import {browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  initTestEnvironment(
      BrowserDynamicTestModule,
      browserDynamicTestPlatform());
  ```
- For the server platform:
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);
  ```
  AFTER:
  ```
  import {initTestEnvironment} from ‘@angular/core/testing’;
  import {serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  initTestEnvironment(
      ServerTestModule,
      serverTestPlatform());
  ```
## Bootstrap changes
```
@AppModule({
  modules: [BrowserModule],
  precompile: [MainComponent],
  providers: […], // additional providers
  directives: […], // additional platform directives
  pipes: […] // additional platform pipes
})
class MyModule {
  constructor(appRef: ApplicationRef) {
    appRef.bootstrap(MainComponent);
  }
}
// offline compile
import {browserPlatform} from ‘@angular/platform-browser’;
import {bootstrapModuleFactory} from ‘@angular/core’;
bootstrapModuleFactory(MyModuleNgFactory, browserPlatform());
// runtime compile long form
import {browserDynamicPlatform} from ‘@angular/platform-browser-dynamic’;
import {bootstrapModule} from ‘@angular/core’;
bootstrapModule(MyModule, browserDynamicPlatform());
```
Closes #9922
Part of #9726
											 
										 
										
											2016-07-08 10:47:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Creates  a  fatory  for  a  platform 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @experimental  APIs  related  to  application  bootstrap  are  currently  under  review . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-18 03:50:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								export  function  createPlatformFactory (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    parentPlaformFactory : PlatformFactory ,  name : string ,  providers : any [ ]  =  [ ] ) :  PlatformFactory  { 
							 
						 
					
						
							
								
									
										
											 
										
											
												refactor(core): clean up platform bootstrap and initTestEnvironment
- Introduces `CompilerFactory` which can be part of a `PlatformRef`.
- Introduces `WorkerAppModule`, `WorkerUiModule`, `ServerModule`
- Introduces `serverDynamicPlatform` for applications using runtime compilation
  on the server.
- Changes browser bootstrap for runtime and offline compilation (see below for an example).
  * introduces `bootstrapModule` and `bootstrapModuleFactory` in `@angular/core`
  * introduces new `browserDynamicPlatform` in `@angular/platform-browser-dynamic
- Changes `initTestEnvironment` (which used to be `setBaseTestProviders`) to not take a compiler factory any more (see below for an example).
BREAKING CHANGE:
## Migration from `setBaseTestProviders` to `initTestEnvironment`:
- For the browser platform:
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);
  ```
  AFTER:
  ```
  import {initTestEnvironment} from ‘@angular/core/testing’;
  import {browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  initTestEnvironment(
      BrowserDynamicTestModule,
      browserDynamicTestPlatform());
  ```
- For the server platform:
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);
  ```
  AFTER:
  ```
  import {initTestEnvironment} from ‘@angular/core/testing’;
  import {serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  initTestEnvironment(
      ServerTestModule,
      serverTestPlatform());
  ```
## Bootstrap changes
```
@AppModule({
  modules: [BrowserModule],
  precompile: [MainComponent],
  providers: […], // additional providers
  directives: […], // additional platform directives
  pipes: […] // additional platform pipes
})
class MyModule {
  constructor(appRef: ApplicationRef) {
    appRef.bootstrap(MainComponent);
  }
}
// offline compile
import {browserPlatform} from ‘@angular/platform-browser’;
import {bootstrapModuleFactory} from ‘@angular/core’;
bootstrapModuleFactory(MyModuleNgFactory, browserPlatform());
// runtime compile long form
import {browserDynamicPlatform} from ‘@angular/platform-browser-dynamic’;
import {bootstrapModule} from ‘@angular/core’;
bootstrapModule(MyModule, browserDynamicPlatform());
```
Closes #9922
Part of #9726
											 
										 
										
											2016-07-08 10:47:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  marker  =  new  OpaqueToken ( ` Platform:  ${ name } ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-18 03:50:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  ( extraProviders : any [ ]  =  [ ] )  = >  { 
							 
						 
					
						
							
								
									
										
											 
										
											
												refactor(core): clean up platform bootstrap and initTestEnvironment
- Introduces `CompilerFactory` which can be part of a `PlatformRef`.
- Introduces `WorkerAppModule`, `WorkerUiModule`, `ServerModule`
- Introduces `serverDynamicPlatform` for applications using runtime compilation
  on the server.
- Changes browser bootstrap for runtime and offline compilation (see below for an example).
  * introduces `bootstrapModule` and `bootstrapModuleFactory` in `@angular/core`
  * introduces new `browserDynamicPlatform` in `@angular/platform-browser-dynamic
- Changes `initTestEnvironment` (which used to be `setBaseTestProviders`) to not take a compiler factory any more (see below for an example).
BREAKING CHANGE:
## Migration from `setBaseTestProviders` to `initTestEnvironment`:
- For the browser platform:
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);
  ```
  AFTER:
  ```
  import {initTestEnvironment} from ‘@angular/core/testing’;
  import {browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  initTestEnvironment(
      BrowserDynamicTestModule,
      browserDynamicTestPlatform());
  ```
- For the server platform:
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);
  ```
  AFTER:
  ```
  import {initTestEnvironment} from ‘@angular/core/testing’;
  import {serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  initTestEnvironment(
      ServerTestModule,
      serverTestPlatform());
  ```
## Bootstrap changes
```
@AppModule({
  modules: [BrowserModule],
  precompile: [MainComponent],
  providers: […], // additional providers
  directives: […], // additional platform directives
  pipes: […] // additional platform pipes
})
class MyModule {
  constructor(appRef: ApplicationRef) {
    appRef.bootstrap(MainComponent);
  }
}
// offline compile
import {browserPlatform} from ‘@angular/platform-browser’;
import {bootstrapModuleFactory} from ‘@angular/core’;
bootstrapModuleFactory(MyModuleNgFactory, browserPlatform());
// runtime compile long form
import {browserDynamicPlatform} from ‘@angular/platform-browser-dynamic’;
import {bootstrapModule} from ‘@angular/core’;
bootstrapModule(MyModule, browserDynamicPlatform());
```
Closes #9922
Part of #9726
											 
										 
										
											2016-07-08 10:47:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ! getPlatform ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-18 03:50:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      if  ( parentPlaformFactory )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        parentPlaformFactory ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            providers . concat ( extraProviders ) . concat ( { provide : marker ,  useValue : true } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        createPlatform ( ReflectiveInjector . resolveAndCreate ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            providers . concat ( extraProviders ) . concat ( { provide : marker ,  useValue : true } ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
									
										
											 
										
											
												refactor(core): clean up platform bootstrap and initTestEnvironment
- Introduces `CompilerFactory` which can be part of a `PlatformRef`.
- Introduces `WorkerAppModule`, `WorkerUiModule`, `ServerModule`
- Introduces `serverDynamicPlatform` for applications using runtime compilation
  on the server.
- Changes browser bootstrap for runtime and offline compilation (see below for an example).
  * introduces `bootstrapModule` and `bootstrapModuleFactory` in `@angular/core`
  * introduces new `browserDynamicPlatform` in `@angular/platform-browser-dynamic
- Changes `initTestEnvironment` (which used to be `setBaseTestProviders`) to not take a compiler factory any more (see below for an example).
BREAKING CHANGE:
## Migration from `setBaseTestProviders` to `initTestEnvironment`:
- For the browser platform:
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);
  ```
  AFTER:
  ```
  import {initTestEnvironment} from ‘@angular/core/testing’;
  import {browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  initTestEnvironment(
      BrowserDynamicTestModule,
      browserDynamicTestPlatform());
  ```
- For the server platform:
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);
  ```
  AFTER:
  ```
  import {initTestEnvironment} from ‘@angular/core/testing’;
  import {serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  initTestEnvironment(
      ServerTestModule,
      serverTestPlatform());
  ```
## Bootstrap changes
```
@AppModule({
  modules: [BrowserModule],
  precompile: [MainComponent],
  providers: […], // additional providers
  directives: […], // additional platform directives
  pipes: […] // additional platform pipes
})
class MyModule {
  constructor(appRef: ApplicationRef) {
    appRef.bootstrap(MainComponent);
  }
}
// offline compile
import {browserPlatform} from ‘@angular/platform-browser’;
import {bootstrapModuleFactory} from ‘@angular/core’;
bootstrapModuleFactory(MyModuleNgFactory, browserPlatform());
// runtime compile long form
import {browserDynamicPlatform} from ‘@angular/platform-browser-dynamic’;
import {bootstrapModule} from ‘@angular/core’;
bootstrapModule(MyModule, browserDynamicPlatform());
```
Closes #9922
Part of #9726
											 
										 
										
											2016-07-08 10:47:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  assertPlatform ( marker ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Checks  that  there  currently  is  a  platform 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  which  contains  the  given  token  as  a  provider . 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-27 12:27:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @experimental  APIs  related  to  application  bootstrap  are  currently  under  review . 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  function  assertPlatform ( requiredToken : any ) :  PlatformRef  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  var  platform  =  getPlatform ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( isBlank ( platform ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-20 11:18:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    throw  new  BaseException ( 'No platform exists!' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( isPresent ( platform )  &&  isBlank ( platform . injector . get ( requiredToken ,  null ) ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    throw  new  BaseException ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        'A platform with a different configuration has been created. Please destroy it first.' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  platform ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-13 11:21:16 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2015-11-12 13:40:29 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-18 09:18:37 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Dispose  the  existing  platform . 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-27 12:27:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  @deprecated  Use  ` destroyPlatform `  instead 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-18 09:18:37 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  function  disposePlatform ( ) :  void  {  
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  destroyPlatform ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Destroy  the  existing  platform . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @experimental  APIs  related  to  application  bootstrap  are  currently  under  review . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  function  destroyPlatform ( ) :  void  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( isPresent ( _platform )  &&  ! _platform . destroyed )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _platform . destroy ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-18 09:18:37 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Returns  the  current  platform . 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-27 12:27:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @experimental  APIs  related  to  application  bootstrap  are  currently  under  review . 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  function  getPlatform ( ) :  PlatformRef  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  isPresent ( _platform )  &&  ! _platform . disposed  ?  _platform  : null ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Shortcut  for  ApplicationRef . bootstrap . 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-20 11:18:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  Requires  a  platform  to  be  created  first . 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-27 12:27:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-08 13:40:54 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  @deprecated  Use  { @link  bootstrapModuleFactory }  instead . 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								export  function  coreBootstrap < C > (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    componentFactory : ComponentFactory < C > ,  injector : Injector ) :  ComponentRef < C >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-18 03:50:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  throw  new  BaseException ( 'coreBootstrap is deprecated. Use bootstrapModuleFactory instead.' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Resolves  the  componentFactory  for  the  given  component , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  waits  for  asynchronous  initializers  and  bootstraps  the  component . 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-20 11:18:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  Requires  a  platform  to  be  created  first . 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-27 12:27:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-08 13:40:54 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  @deprecated  Use  { @link  bootstrapModule }  instead . 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								export  function  coreLoadAndBootstrap (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    componentType : Type ,  injector : Injector ) :  Promise < ComponentRef < any > >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-18 03:50:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  throw  new  BaseException ( 'coreLoadAndBootstrap is deprecated. Use bootstrapModule instead.' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-18 09:18:37 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
									
										
										
										
											2015-09-15 15:51:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  The  Angular  platform  is  the  entry  point  for  Angular  on  a  web  page .  Each  page 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  has  exactly  one  platform ,  and  services  ( such  as  reflection )  which  are  common 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  to  every  Angular  application  running  on  the  page  are  bound  in  its  scope . 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-20 17:18:27 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-15 15:51:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  A  page ' s  platform  is  initialized  implicitly  when  { @link  bootstrap } ( )  is  called ,  or 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  explicitly  by  calling  { @link  createPlatform } ( ) . 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-27 12:27:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @experimental  APIs  related  to  application  bootstrap  are  currently  under  review . 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-20 17:18:27 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								export  abstract  class  PlatformRef  {  
						 
					
						
							
								
									
										
										
										
											2015-10-26 10:50:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-26 05:21:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   *  Creates  an  instance  of  an  ` @NgModule `  for  the  given  platform 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  for  offline  compilation . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  # #  Simple  Example 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  ` ` ` typescript
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  my_module . ts : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  @NgModule ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *    imports :  [ BrowserModule ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  class  MyModule  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  main . ts : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  import  { MyModuleNgFactory }  from  './my_module.ngfactory' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  import  { browserPlatform }  from  '@angular/platform-browser' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  let  moduleRef  =  browserPlatform ( ) . bootstrapModuleFactory ( MyModuleNgFactory ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  ` ` ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  @experimental  APIs  related  to  application  bootstrap  are  currently  under  review . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 06:47:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  bootstrapModuleFactory < M > ( moduleFactory : NgModuleFactory < M > ) :  Promise < NgModuleRef < M > >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-26 05:21:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    throw  unimplemented ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  Creates  an  instance  of  an  ` @NgModule `  for  a  given  platform  using  the  given  runtime  compiler . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  # #  Simple  Example 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  ` ` ` typescript
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  @NgModule ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *    imports :  [ BrowserModule ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  class  MyModule  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  let  moduleRef  =  browserPlatform ( ) . bootstrapModule ( MyModule ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  ` ` ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  @stable 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-26 10:50:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-26 05:21:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  bootstrapModule < M > ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      moduleType : ConcreteType < M > , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      compilerOptions : CompilerOptions | CompilerOptions [ ]  =  [ ] ) :  Promise < NgModuleRef < M > >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    throw  unimplemented ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 06:47:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   *  Register  a  listener  to  be  called  when  the  platform  is  disposed . 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   *  @deprecated  Use  ` OnDestroy `  instead 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 06:47:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-26 10:50:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  abstract  registerDisposeListener ( dispose :  ( )  = >  void ) :  void ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  Register  a  listener  to  be  called  when  the  platform  is  disposed . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  abstract  onDestroy ( callback :  ( )  = >  void ) :  void ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-15 15:51:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   *  Retrieve  the  platform  { @link  Injector } ,  which  is  the  parent  injector  for 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 22:11:13 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   *  every  Angular  application  on  the  page  and  provides  singleton  providers . 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-19 11:49:31 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  get  injector ( ) :  Injector  {  throw  unimplemented ( ) ;  } ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-20 17:18:27 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  Destroy  the  Angular  platform  and  all  Angular  applications  on  the  page . 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   *  @deprecated  Use  ` destroy `  instead 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  abstract  dispose ( ) :  void ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  Destroy  the  Angular  platform  and  all  Angular  applications  on  the  page . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  abstract  destroy ( ) :  void ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  @deprecated  Use  ` destroyd `  instead 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  get  disposed ( ) :  boolean  {  throw  unimplemented ( ) ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  get  destroyed ( ) :  boolean  {  throw  unimplemented ( ) ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 06:47:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								function  _callAndReportToExceptionHandler (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    exceptionHandler : ExceptionHandler ,  callback :  ( )  = >  any ) :  any  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  result  =  callback ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( isPromise ( result ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  result . catch ( ( e : any )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        exceptionHandler . call ( e ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // rethrow as the exception handler might not do it
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        throw  e ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  result ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }  catch  ( e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    exceptionHandler . call ( e ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // rethrow as the exception handler might not do it
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    throw  e ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Injectable ( )  
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								export  class  PlatformRef_  extends  PlatformRef  {  
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  private  _modules : NgModuleRef < any > [ ]  =  [ ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  private  _destroyListeners : Function [ ]  =  [ ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  private  _destroyed : boolean  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 06:47:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  constructor ( private  _injector : Injector )  {  super ( ) ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  @deprecated 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  registerDisposeListener ( dispose :  ( )  = >  void ) :  void  {  this . onDestroy ( dispose ) ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  onDestroy ( callback :  ( )  = >  void ) :  void  {  this . _destroyListeners . push ( callback ) ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  get  injector ( ) :  Injector  {  return  this . _injector ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  @deprecated 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  get  disposed() {  return  this . destroyed ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  get  destroyed() {  return  this . _destroyed ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  destroy() { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( this . _destroyed )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      throw  new  BaseException ( 'The platform is already destroyed!' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ListWrapper . clone ( this . _modules ) . forEach ( ( app )  = >  app . destroy ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this . _destroyListeners . forEach ( ( dispose )  = >  dispose ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this . _destroyed  =  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  @deprecated 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  dispose ( ) :  void  {  this . destroy ( ) ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-26 05:21:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 06:47:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  bootstrapModuleFactory < M > ( moduleFactory : NgModuleFactory < M > ) :  Promise < NgModuleRef < M > >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-26 05:21:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    // Note: We need to create the NgZone _before_ we instantiate the module,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // as instantiating the module creates some providers eagerly.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // So we create a mini parent injector that just contains the new NgZone and
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // pass that as parent to the NgModuleFactory.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  ngZone  =  new  NgZone ( { enableLongStackTrace : isDevMode ( ) } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 06:47:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    // Attention: Don't use ApplicationRef.run here,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // as we want to be sure that all possible constructor calls are inside `ngZone.run`!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ngZone . run ( ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      const  ngZoneInjector  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          ReflectiveInjector . resolveAndCreate ( [ { provide : NgZone ,  useValue : ngZone } ] ,  this . injector ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 06:54:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      const  moduleRef  =  < NgModuleInjector < M > > moduleFactory . create ( ngZoneInjector ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 14:45:05 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      const  exceptionHandler : ExceptionHandler  =  moduleRef . injector . get ( ExceptionHandler ,  null ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  ( ! exceptionHandler )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        throw  new  Error ( 'No ExceptionHandler. Is platform module (BrowserModule) included?' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      moduleRef . onDestroy ( ( )  = >  ListWrapper . remove ( this . _modules ,  moduleRef ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 06:47:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      ObservableWrapper . subscribe ( ngZone . onError ,  ( error : NgZoneError )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        exceptionHandler . call ( error . error ,  error . stackTrace ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  _callAndReportToExceptionHandler ( exceptionHandler ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 07:38:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const  initStatus : AppInitStatus  =  moduleRef . injector . get ( AppInitStatus ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  initStatus . donePromise . then ( ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 06:54:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          this . _moduleDoBootstrap ( moduleRef ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 06:47:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          return  moduleRef ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-26 05:21:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  bootstrapModule < M > ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      moduleType : ConcreteType < M > , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      compilerOptions : CompilerOptions | CompilerOptions [ ]  =  [ ] ) :  Promise < NgModuleRef < M > >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  compilerFactory : CompilerFactory  =  this . injector . get ( CompilerFactory ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  compiler  =  compilerFactory . createCompiler ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        compilerOptions  instanceof  Array  ?  compilerOptions  :  [ compilerOptions ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  compiler . compileModuleAsync ( moduleType ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 06:47:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        . then ( ( moduleFactory )  = >  this . bootstrapModuleFactory ( moduleFactory ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-26 05:21:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 06:54:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  private  _moduleDoBootstrap ( moduleRef : NgModuleInjector < any > )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  appRef  =  moduleRef . injector . get ( ApplicationRef ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( moduleRef . bootstrapFactories . length  >  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      moduleRef . bootstrapFactories . forEach ( ( compFactory )  = >  appRef . bootstrap ( compFactory ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }  else  if  ( moduleRef . instance . ngDoBootstrap )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      moduleRef . instance . ngDoBootstrap ( appRef ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      throw  new  BaseException ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          ` The module  ${ stringify ( moduleRef . instance . constructor ) }  was bootstrapped, but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method.  `  + 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          ` Please define one of these. ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
									
										
										
										
											2015-09-15 15:51:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  A  reference  to  an  Angular  application  running  on  a  page . 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-15 15:51:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  For  more  about  Angular  applications ,  see  the  documentation  for  { @link  bootstrap } . 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-27 12:27:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @experimental  APIs  related  to  application  bootstrap  are  currently  under  review . 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								export  abstract  class  ApplicationRef  {  
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-15 15:51:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   *  Register  a  listener  to  be  called  each  time  ` bootstrap() `  is  called  to  bootstrap 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  a  new  root  component . 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 05:22:44 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  @deprecated  Provide  a  callback  via  a  multi  provider  for  { @link  APP_BOOTSTRAP_LISTENER } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  instead . 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-30 10:52:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  abstract  registerBootstrapListener ( listener :  ( ref : ComponentRef < any > )  = >  void ) :  void ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-20 17:18:27 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-26 10:50:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  Register  a  listener  to  be  called  when  the  application  is  disposed . 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  @deprecated  Use  ` ngOnDestroy `  lifecycle  hook  or  { @link  NgModuleRef } . onDestroy . 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-26 10:50:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  abstract  registerDisposeListener ( dispose :  ( )  = >  void ) :  void ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  Returns  a  promise  that  resolves  when  all  asynchronous  application  initializers 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  are  done . 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 07:38:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  @deprecated  Use  the  { @link  AppInitStatus }  class  instead . 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  abstract  waitForAsyncInitializers ( ) :  Promise < any > ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  Runs  the  given  callback  in  the  zone  and  returns  the  result  of  the  callback . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  Exceptions  will  be  forwarded  to  the  ExceptionHandler  and  rethrown . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  abstract  run ( callback : Function ) :  any ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-20 17:18:27 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-15 15:51:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   *  Bootstrap  a  new  component  at  the  root  level  of  the  application . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-17 09:41:31 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   *  # # #  Bootstrap  process 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-15 15:51:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  When  bootstrapping  a  new  root  component  into  an  application ,  Angular  mounts  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  specified  application  component  onto  DOM  elements  identified  by  the  [ componentType ] ' s 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  selector  and  kicks  off  automatic  change  detection  to  finish  initializing  the  component . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-19 15:37:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   *  # # #  Example 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-30 08:28:54 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   *  { @example  core / ts / platform / platform . ts  region = 'longform' } 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(browser): use AppModules for bootstrap in the browser
This introduces the `BrowserModule` to be used for long form
bootstrap and offline compile bootstrap:
```
@AppModule({
  modules: [BrowserModule],
  precompile: [MainComponent],
  providers: […], // additional providers
  directives: […], // additional platform directives
  pipes: […] // additional platform pipes
})
class MyModule {
  constructor(appRef: ApplicationRef) {
    appRef.bootstrap(MainComponent);
  }
}
// offline compile
import {bootstrapModuleFactory} from ‘@angular/platform-browser’;
bootstrapModuleFactory(MyModuleNgFactory);
// runtime compile long form
import {bootstrapModule} from ‘@angular/platform-browser-dynamic’;
bootstrapModule(MyModule);
```
The short form, `bootstrap(...)`, can now creates a module on the fly,
given `directives`, `pipes, `providers`, `precompile` and `modules`
properties.
Related changes:
- make `SanitizationService`, `SecurityContext` public in `@angular/core` so that the offline compiler can resolve the token
- move `AnimationDriver` to `platform-browser` and make it
  public so that the offline compiler can resolve the token
BREAKING CHANGES:
- short form bootstrap does no longer allow
  to inject compiler internals (i.e. everything 
  from `@angular/compiler). Inject `Compiler` instead.
  To provide custom providers for the compiler,
  create a custom compiler via `browserCompiler({providers: [...]})`
  and pass that into the `bootstrap` method.
											 
										 
										
											2016-06-30 13:07:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  abstract  bootstrap < C > ( componentFactory : ComponentFactory < C > | ConcreteType < C > ) :  ComponentRef < C > ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  Retrieve  the  application  { @link  Injector } . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-19 11:49:31 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  get  injector ( ) :  Injector  {  return  < Injector > unimplemented ( ) ;  } ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  Retrieve  the  application  { @link  NgZone } . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-19 11:49:31 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  get  zone ( ) :  NgZone  {  return  < NgZone > unimplemented ( ) ;  } ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  Dispose  of  this  application  and  all  of  its  components . 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  @deprecated  Destroy  the  module  that  was  created  during  bootstrap  instead  by  calling 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  { @link  NgModuleRef } . destroy . 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  abstract  dispose ( ) :  void ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 16:22:07 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-28 10:34:13 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  Invoke  this  method  to  explicitly  process  change  detection  and  its  side - effects . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  In  development  mode ,  ` tick() `  also  performs  a  second  change  detection  cycle  to  ensure  that  no 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  further  changes  are  detected .  If  additional  changes  are  picked  up  during  this  second  cycle , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  bindings  in  the  app  have  side - effects  that  cannot  be  resolved  in  a  single  change  detection 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  pass . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  In  this  case ,  Angular  throws  an  error ,  since  an  Angular  application  can  only  have  one  change 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  detection  pass  during  which  all  change  detection  must  complete . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  abstract  tick ( ) :  void ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 16:22:07 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  Get  a  list  of  component  types  registered  to  this  application . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-19 11:49:31 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  get  componentTypes ( ) :  Type [ ]  {  return  < Type [ ] > unimplemented ( ) ;  } ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 06:54:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  Get  a  list  of  components  registered  to  this  application . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  get  components ( ) :  ComponentRef < any > [ ]  {  return  < ComponentRef < any > [ ] > unimplemented ( ) ;  } ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Injectable ( )  
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								export  class  ApplicationRef_  extends  ApplicationRef  {  
						 
					
						
							
								
									
										
										
										
											2015-10-28 10:34:13 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  /** @internal */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  static  _tickScope : WtfScopeFn  =  wtfCreateScope ( 'ApplicationRef#tick()' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  private  _bootstrapListeners : Function [ ]  =  [ ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  @deprecated 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-26 10:50:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  private  _disposeListeners : Function [ ]  =  [ ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-30 10:52:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  private  _rootComponents : ComponentRef < any > [ ]  =  [ ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 16:22:07 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  private  _rootComponentTypes : Type [ ]  =  [ ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-28 10:34:13 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  private  _changeDetectorRefs : ChangeDetectorRef [ ]  =  [ ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  private  _runningTick : boolean  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  private  _enforceNoNewChanges : boolean  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(browser): use AppModules for bootstrap in the browser
This introduces the `BrowserModule` to be used for long form
bootstrap and offline compile bootstrap:
```
@AppModule({
  modules: [BrowserModule],
  precompile: [MainComponent],
  providers: […], // additional providers
  directives: […], // additional platform directives
  pipes: […] // additional platform pipes
})
class MyModule {
  constructor(appRef: ApplicationRef) {
    appRef.bootstrap(MainComponent);
  }
}
// offline compile
import {bootstrapModuleFactory} from ‘@angular/platform-browser’;
bootstrapModuleFactory(MyModuleNgFactory);
// runtime compile long form
import {bootstrapModule} from ‘@angular/platform-browser-dynamic’;
bootstrapModule(MyModule);
```
The short form, `bootstrap(...)`, can now creates a module on the fly,
given `directives`, `pipes, `providers`, `precompile` and `modules`
properties.
Related changes:
- make `SanitizationService`, `SecurityContext` public in `@angular/core` so that the offline compiler can resolve the token
- move `AnimationDriver` to `platform-browser` and make it
  public so that the offline compiler can resolve the token
BREAKING CHANGES:
- short form bootstrap does no longer allow
  to inject compiler internals (i.e. everything 
  from `@angular/compiler). Inject `Compiler` instead.
  To provide custom providers for the compiler,
  create a custom compiler via `browserCompiler({providers: [...]})`
  and pass that into the `bootstrap` method.
											 
										 
										
											2016-06-30 13:07:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  constructor ( 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      private  _zone : NgZone ,  private  _console : Console ,  private  _injector : Injector , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      private  _exceptionHandler : ExceptionHandler , 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(browser): use AppModules for bootstrap in the browser
This introduces the `BrowserModule` to be used for long form
bootstrap and offline compile bootstrap:
```
@AppModule({
  modules: [BrowserModule],
  precompile: [MainComponent],
  providers: […], // additional providers
  directives: […], // additional platform directives
  pipes: […] // additional platform pipes
})
class MyModule {
  constructor(appRef: ApplicationRef) {
    appRef.bootstrap(MainComponent);
  }
}
// offline compile
import {bootstrapModuleFactory} from ‘@angular/platform-browser’;
bootstrapModuleFactory(MyModuleNgFactory);
// runtime compile long form
import {bootstrapModule} from ‘@angular/platform-browser-dynamic’;
bootstrapModule(MyModule);
```
The short form, `bootstrap(...)`, can now creates a module on the fly,
given `directives`, `pipes, `providers`, `precompile` and `modules`
properties.
Related changes:
- make `SanitizationService`, `SecurityContext` public in `@angular/core` so that the offline compiler can resolve the token
- move `AnimationDriver` to `platform-browser` and make it
  public so that the offline compiler can resolve the token
BREAKING CHANGES:
- short form bootstrap does no longer allow
  to inject compiler internals (i.e. everything 
  from `@angular/compiler). Inject `Compiler` instead.
  To provide custom providers for the compiler,
  create a custom compiler via `browserCompiler({providers: [...]})`
  and pass that into the `bootstrap` method.
											 
										 
										
											2016-06-30 13:07:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      private  _componentFactoryResolver : ComponentFactoryResolver , 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 07:38:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      private  _initStatus : AppInitStatus , 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(browser): use AppModules for bootstrap in the browser
This introduces the `BrowserModule` to be used for long form
bootstrap and offline compile bootstrap:
```
@AppModule({
  modules: [BrowserModule],
  precompile: [MainComponent],
  providers: […], // additional providers
  directives: […], // additional platform directives
  pipes: […] // additional platform pipes
})
class MyModule {
  constructor(appRef: ApplicationRef) {
    appRef.bootstrap(MainComponent);
  }
}
// offline compile
import {bootstrapModuleFactory} from ‘@angular/platform-browser’;
bootstrapModuleFactory(MyModuleNgFactory);
// runtime compile long form
import {bootstrapModule} from ‘@angular/platform-browser-dynamic’;
bootstrapModule(MyModule);
```
The short form, `bootstrap(...)`, can now creates a module on the fly,
given `directives`, `pipes, `providers`, `precompile` and `modules`
properties.
Related changes:
- make `SanitizationService`, `SecurityContext` public in `@angular/core` so that the offline compiler can resolve the token
- move `AnimationDriver` to `platform-browser` and make it
  public so that the offline compiler can resolve the token
BREAKING CHANGES:
- short form bootstrap does no longer allow
  to inject compiler internals (i.e. everything 
  from `@angular/compiler). Inject `Compiler` instead.
  To provide custom providers for the compiler,
  create a custom compiler via `browserCompiler({providers: [...]})`
  and pass that into the `bootstrap` method.
											 
										 
										
											2016-06-30 13:07:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @Optional ( )  private  _testabilityRegistry : TestabilityRegistry , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 06:47:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @Optional ( )  private  _testability : Testability )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    super ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-17 14:09:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    this . _enforceNoNewChanges  =  isDevMode ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ObservableWrapper . subscribe ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this . _zone . onMicrotaskEmpty ,  ( _ )  = >  {  this . _zone . run ( ( )  = >  {  this . tick ( ) ;  } ) ;  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 05:22:44 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  @deprecated 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-30 10:52:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  registerBootstrapListener ( listener :  ( ref : ComponentRef < any > )  = >  void ) :  void  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:53:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    this . _bootstrapListeners . push ( listener ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  @deprecated 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-26 10:50:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  registerDisposeListener ( dispose :  ( )  = >  void ) :  void  {  this . _disposeListeners . push ( dispose ) ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-28 10:34:13 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  registerChangeDetector ( changeDetector : ChangeDetectorRef ) :  void  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this . _changeDetectorRefs . push ( changeDetector ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 10:40:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  unregisterChangeDetector ( changeDetector : ChangeDetectorRef ) :  void  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ListWrapper . remove ( this . _changeDetectorRefs ,  changeDetector ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 06:47:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 07:38:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   *  @deprecated 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 06:47:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 07:38:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  waitForAsyncInitializers ( ) :  Promise < any >  {  return  this . _initStatus . donePromise ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  run ( callback : Function ) :  any  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 06:47:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  this . _zone . run ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( )  = >  _callAndReportToExceptionHandler ( this . _exceptionHandler ,  < any > callback ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(browser): use AppModules for bootstrap in the browser
This introduces the `BrowserModule` to be used for long form
bootstrap and offline compile bootstrap:
```
@AppModule({
  modules: [BrowserModule],
  precompile: [MainComponent],
  providers: […], // additional providers
  directives: […], // additional platform directives
  pipes: […] // additional platform pipes
})
class MyModule {
  constructor(appRef: ApplicationRef) {
    appRef.bootstrap(MainComponent);
  }
}
// offline compile
import {bootstrapModuleFactory} from ‘@angular/platform-browser’;
bootstrapModuleFactory(MyModuleNgFactory);
// runtime compile long form
import {bootstrapModule} from ‘@angular/platform-browser-dynamic’;
bootstrapModule(MyModule);
```
The short form, `bootstrap(...)`, can now creates a module on the fly,
given `directives`, `pipes, `providers`, `precompile` and `modules`
properties.
Related changes:
- make `SanitizationService`, `SecurityContext` public in `@angular/core` so that the offline compiler can resolve the token
- move `AnimationDriver` to `platform-browser` and make it
  public so that the offline compiler can resolve the token
BREAKING CHANGES:
- short form bootstrap does no longer allow
  to inject compiler internals (i.e. everything 
  from `@angular/compiler). Inject `Compiler` instead.
  To provide custom providers for the compiler,
  create a custom compiler via `browserCompiler({providers: [...]})`
  and pass that into the `bootstrap` method.
											 
										 
										
											2016-06-30 13:07:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  bootstrap < C > ( componentOrFactory : ComponentFactory < C > | ConcreteType < C > ) :  ComponentRef < C >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 07:38:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ! this . _initStatus . done )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      throw  new  BaseException ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          'Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  this . run ( ( )  = >  { 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(browser): use AppModules for bootstrap in the browser
This introduces the `BrowserModule` to be used for long form
bootstrap and offline compile bootstrap:
```
@AppModule({
  modules: [BrowserModule],
  precompile: [MainComponent],
  providers: […], // additional providers
  directives: […], // additional platform directives
  pipes: […] // additional platform pipes
})
class MyModule {
  constructor(appRef: ApplicationRef) {
    appRef.bootstrap(MainComponent);
  }
}
// offline compile
import {bootstrapModuleFactory} from ‘@angular/platform-browser’;
bootstrapModuleFactory(MyModuleNgFactory);
// runtime compile long form
import {bootstrapModule} from ‘@angular/platform-browser-dynamic’;
bootstrapModule(MyModule);
```
The short form, `bootstrap(...)`, can now creates a module on the fly,
given `directives`, `pipes, `providers`, `precompile` and `modules`
properties.
Related changes:
- make `SanitizationService`, `SecurityContext` public in `@angular/core` so that the offline compiler can resolve the token
- move `AnimationDriver` to `platform-browser` and make it
  public so that the offline compiler can resolve the token
BREAKING CHANGES:
- short form bootstrap does no longer allow
  to inject compiler internals (i.e. everything 
  from `@angular/compiler). Inject `Compiler` instead.
  To provide custom providers for the compiler,
  create a custom compiler via `browserCompiler({providers: [...]})`
  and pass that into the `bootstrap` method.
											 
										 
										
											2016-06-30 13:07:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      let  componentFactory : ComponentFactory < C > ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  ( componentOrFactory  instanceof  ComponentFactory )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        componentFactory  =  componentOrFactory ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        componentFactory  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            this . _componentFactoryResolver . resolveComponentFactory ( componentOrFactory ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      this . _rootComponentTypes . push ( componentFactory . componentType ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      var  compRef  =  componentFactory . create ( this . _injector ,  [ ] ,  componentFactory . selector ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      compRef . onDestroy ( ( )  = >  {  this . _unloadComponent ( compRef ) ;  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      var  testability  =  compRef . injector . get ( Testability ,  null ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  ( isPresent ( testability ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        compRef . injector . get ( TestabilityRegistry ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            . registerApplication ( compRef . location . nativeElement ,  testability ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      this . _loadComponent ( compRef ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-17 14:09:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      if  ( isDevMode ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-30 19:31:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        this . _console . log ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ` Angular 2 is running in the development mode. Call enableProdMode() to enable the production mode. ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-03 11:47:53 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      return  compRef ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-15 08:34:44 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 10:40:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  /** @internal */ 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-30 10:52:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  _loadComponent ( componentRef : ComponentRef < any > ) :  void  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-13 17:05:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    this . _changeDetectorRefs . push ( componentRef . changeDetectorRef ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 10:40:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    this . tick ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 17:01:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    this . _rootComponents . push ( componentRef ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 05:22:44 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    // Get the listeners lazily to prevent DI cycles.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  listeners  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < ( ( compRef : ComponentRef < any > )  = >  void ) [ ] > this . _injector . get ( APP_BOOTSTRAP_LISTENER ,  [ ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            . concat ( this . _bootstrapListeners ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    listeners . forEach ( ( listener )  = >  listener ( componentRef ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 10:40:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  /** @internal */ 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-30 10:52:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  _unloadComponent ( componentRef : ComponentRef < any > ) :  void  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 17:01:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ! ListWrapper . contains ( this . _rootComponents ,  componentRef ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 10:40:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-13 17:05:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    this . unregisterChangeDetector ( componentRef . changeDetectorRef ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 17:01:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ListWrapper . remove ( this . _rootComponents ,  componentRef ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 10:40:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-20 17:18:27 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  get  injector ( ) :  Injector  {  return  this . _injector ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  get  zone ( ) :  NgZone  {  return  this . _zone ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-28 10:34:13 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  tick ( ) :  void  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( this . _runningTick )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      throw  new  BaseException ( 'ApplicationRef.tick is called recursively' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-28 10:34:13 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    var  s  =  ApplicationRef_ . _tickScope ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      this . _runningTick  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      this . _changeDetectorRefs . forEach ( ( detector )  = >  detector . detectChanges ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  ( this . _enforceNoNewChanges )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this . _changeDetectorRefs . forEach ( ( detector )  = >  detector . checkNoChanges ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }  finally  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      this . _runningTick  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      wtfLeave ( s ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  ngOnDestroy() { 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    // TODO(alxhub): Dispose of the NgZone.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-13 17:05:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ListWrapper . clone ( this . _rootComponents ) . forEach ( ( ref )  = >  ref . destroy ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-26 10:50:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    this . _disposeListeners . forEach ( ( dispose )  = >  dispose ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-02 15:19:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 16:22:07 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 02:32:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   *  @deprecated 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  dispose ( ) :  void  {  this . ngOnDestroy ( ) ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-21 18:13:58 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  get  componentTypes ( ) :  Type [ ]  {  return  this . _rootComponentTypes ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 06:54:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  get  components ( ) :  ComponentRef < any > [ ]  {  return  this . _rootComponents ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-20 17:18:27 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}