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
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												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  { LowerCasePipe ,  NgIf }  from  '@angular/common' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { XHR }  from  '@angular/compiler' ;  
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { APP_INITIALIZER ,  Component ,  Directive ,  ExceptionHandler ,  Inject ,  Input ,  OnDestroy ,  PLATFORM_DIRECTIVES ,  PLATFORM_INITIALIZER ,  PLATFORM_PIPES ,  Pipe ,  ReflectiveInjector ,  coreLoadAndBootstrap ,  createPlatform ,  provide }  from  '@angular/core' ;  
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { ApplicationRef ,  disposePlatform }  from  '@angular/core/src/application_ref' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { Console }  from  '@angular/core/src/console' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { ComponentRef }  from  '@angular/core/src/linker/component_factory' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { Testability ,  TestabilityRegistry }  from  '@angular/core/src/testability/testability' ;  
						 
					
						
							
								
									
										
											 
										
											
												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  { ComponentFixture }  from  '@angular/core/testing' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { AsyncTestCompleter ,  Log ,  afterEach ,  beforeEach ,  beforeEachProviders ,  ddescribe ,  describe ,  expect ,  iit ,  inject ,  it }  from  '@angular/core/testing/testing_internal' ;  
						 
					
						
							
								
									
										
										
										
											2016-06-10 10:21:53 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { BROWSER_APP_PROVIDERS ,  BROWSER_PLATFORM_PROVIDERS }  from  '@angular/platform-browser' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { BROWSER_APP_COMPILER_PROVIDERS ,  bootstrap }  from  '@angular/platform-browser-dynamic' ;  
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { getDOM }  from  '@angular/platform-browser/src/dom/dom_adapter' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { DOCUMENT }  from  '@angular/platform-browser/src/dom/dom_tokens' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { PromiseWrapper }  from  '../../src/facade/async' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { stringify }  from  '../../src/facade/lang' ;  
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app' ,  template :  '{{greeting}} world!' } )  
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								class  HelloRootCmp  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  greeting : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor ( )  {  this . greeting  =  'hello' ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app' ,  template :  'before: <ng-content></ng-content> after: done' } )  
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								class  HelloRootCmpContent  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor ( )  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app-2' ,  template :  '{{greeting}} world, again!' } )  
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								class  HelloRootCmp2  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  greeting : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor ( )  {  this . greeting  =  'hello' ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app' ,  template :  '' } )  
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								class  HelloRootCmp3  {  
						 
					
						
							
								
									
										
										
										
											2016-06-08 15:45:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  appBinding : any  /** TODO #9100 */ ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  constructor ( @Inject ( 'appBinding' )  appBinding : any  /** TODO #9100 */ )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this . appBinding  =  appBinding ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app' ,  template :  '' } )  
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								class  HelloRootCmp4  {  
						 
					
						
							
								
									
										
										
										
											2016-06-08 15:45:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  appRef : any  /** TODO #9100 */ ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  constructor ( @Inject ( ApplicationRef )  appRef : ApplicationRef )  {  this . appRef  =  appRef ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app' } )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  HelloRootMissingTemplate  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@Directive ( { selector :  'hello-app' } )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  HelloRootDirectiveIsNotCmp  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app' ,  template :  '' } )  
						 
					
						
							
								
									
										
										
										
											2015-11-10 15:42:22 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  HelloOnDestroyTickCmp  implements  OnDestroy  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  appRef : ApplicationRef ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  constructor ( @Inject ( ApplicationRef )  appRef : ApplicationRef )  {  this . appRef  =  appRef ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 15:42:22 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												refactor(lifecycle): prefix lifecycle methods with "ng"
BREAKING CHANGE:
Previously, components that would implement lifecycle interfaces would include methods
like "onChanges" or "afterViewInit." Given that components were at risk of using such
names without realizing that Angular would call the methods at different points of
the component lifecycle. This change adds an "ng" prefix to all lifecycle hook methods,
far reducing the risk of an accidental name collision.
To fix, just rename these methods:
 * onInit
 * onDestroy
 * doCheck
 * onChanges
 * afterContentInit
 * afterContentChecked
 * afterViewInit
 * afterViewChecked
 * _Router Hooks_
 * onActivate
 * onReuse
 * onDeactivate
 * canReuse
 * canDeactivate
To:
 * ngOnInit,
 * ngOnDestroy,
 * ngDoCheck,
 * ngOnChanges,
 * ngAfterContentInit,
 * ngAfterContentChecked,
 * ngAfterViewInit,
 * ngAfterViewChecked
 * _Router Hooks_
 * routerOnActivate
 * routerOnReuse
 * routerOnDeactivate
 * routerCanReuse
 * routerCanDeactivate
The names of lifecycle interfaces and enums have not changed, though interfaces
have been updated to reflect the new method names.
Closes #5036
											 
										 
										
											2015-11-16 17:04:36 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  ngOnDestroy ( ) :  void  {  this . appRef . tick ( ) ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 15:42:22 -08: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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app' ,  templateUrl :  './sometemplate.html' } )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  HelloUrlCmp  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  greeting  =  'hello' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Directive ( { selector :  '[someDir]' ,  host :  { '[title]' :  'someDir' } } )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  SomeDirective  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  @Input ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  someDir : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@Pipe ( { name :  'somePipe' } )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  SomePipe  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  transform ( value : string ) :  any  {  return  ` transformed  ${ value } ` ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app' ,  template :  ` <div  [someDir]="'someValue' | somePipe"></div> ` } )  
						 
					
						
							
								
									
										
											 
										
											
												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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  HelloCmpUsingPlatformDirectiveAndPipe  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  show : boolean  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-27 15:47:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  _ArrayLogger  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  res : any [ ]  =  [ ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  log ( s : any ) :  void  {  this . res . push ( s ) ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-24 11:35:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  logError ( s : any ) :  void  {  this . res . push ( s ) ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-27 15:47:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  logGroup ( s : any ) :  void  {  this . res . push ( s ) ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-23 18:00:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  logGroupEnd ( ) { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-27 15:47:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-15 08:34:44 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  DummyConsole  implements  Console  {  
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  public  warnings : string [ ]  =  [ ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  log ( message : string )  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  warn ( message : string )  {  this . warnings . push ( message ) ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-15 08:34:44 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								export  function  main() {  
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  var  fakeDoc : any  /** TODO #9100 */ ,  el : any  /** TODO #9100 */ ,  el2 : any  /** TODO #9100 */ , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      testProviders : any  /** TODO #9100 */ ,  lightDom : any  /** TODO #9100 */ ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  describe ( 'bootstrap factory method' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  compilerConsole : DummyConsole ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-23 17:10:22 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    beforeEachProviders ( ( )  = >  {  return  [ Log ] ;  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-06-24 13:46:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    beforeEach ( ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      disposePlatform ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 17:50:03 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      fakeDoc  =  getDOM ( ) . createHtmlDocument ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      el  =  getDOM ( ) . createElement ( 'hello-app' ,  fakeDoc ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      el2  =  getDOM ( ) . createElement ( 'hello-app-2' ,  fakeDoc ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      lightDom  =  getDOM ( ) . createElement ( 'light-dom-el' ,  fakeDoc ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      getDOM ( ) . appendChild ( fakeDoc . body ,  el ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      getDOM ( ) . appendChild ( fakeDoc . body ,  el2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      getDOM ( ) . appendChild ( el ,  lightDom ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      getDOM ( ) . setText ( lightDom ,  'loading' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      compilerConsole  =  new  DummyConsole ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-15 08:34:44 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      testProviders  = 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          [ { provide : DOCUMENT ,  useValue : fakeDoc } ,  { provide : Console ,  useValue : compilerConsole } ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-24 13:46:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-18 09:18:37 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    afterEach ( disposePlatform ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should throw if bootstrapped Directive is not a Component' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
											 
										
											
												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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      expect ( ( )  = >  bootstrap ( HelloRootDirectiveIsNotCmp ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          . toThrowError ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              ` Could not compile ' ${ stringify ( HelloRootDirectiveIsNotCmp ) } ' because it is not a component. ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should throw if no element is found' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-27 15:47:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         var  logger  =  new  _ArrayLogger ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-25 14:24:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         var  exceptionHandler  =  new  ExceptionHandler ( logger ,  false ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-23 18:00:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-27 15:47:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         var  refPromise  = 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-02 17:30:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             bootstrap ( HelloRootCmp ,  [ { provide : ExceptionHandler ,  useValue : exceptionHandler } ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								         PromiseWrapper . then ( refPromise ,  null ,  ( reason )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           expect ( reason . message ) . toContain ( 'The selector "hello-app" did not match any elements' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           return  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 17:50:03 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( getDOM ( ) . supportsDOMEvents ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-25 14:24:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      it ( 'should forward the error to promise when bootstrap fails' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-25 14:24:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           // Skip for dart since it causes a confusing error message in console when test passes.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           var  logger  =  new  _ArrayLogger ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           var  exceptionHandler  =  new  ExceptionHandler ( logger ,  false ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           var  refPromise  = 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-02 17:30:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               bootstrap ( HelloRootCmp ,  [ { provide : ExceptionHandler ,  useValue : exceptionHandler } ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 14:13:44 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           PromiseWrapper . then ( refPromise ,  null ,  ( reason : any )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-25 14:24:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             expect ( reason . message ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                 . toContain ( 'The selector "hello-app" did not match any elements' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-27 15:47:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      it ( 'should invoke the default exception handler when bootstrap fails' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-27 15:47:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           var  logger  =  new  _ArrayLogger ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-25 14:24:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           var  exceptionHandler  =  new  ExceptionHandler ( logger ,  false ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-27 15:47:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           var  refPromise  = 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-02 17:30:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               bootstrap ( HelloRootCmp ,  [ { provide : ExceptionHandler ,  useValue : exceptionHandler } ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-27 15:47:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           PromiseWrapper . then ( refPromise ,  null ,  ( reason )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             expect ( logger . res . join ( '' ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-27 15:47:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                 . toContain ( 'The selector "hello-app" did not match any elements' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             return  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    it ( 'should create an injector promise' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 22:11:13 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      var  refPromise  =  bootstrap ( HelloRootCmp ,  testProviders ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								      expect ( refPromise ) . not . toBe ( null ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should display hello world' ,  inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 22:11:13 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         var  refPromise  =  bootstrap ( HelloRootCmp ,  testProviders ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								         refPromise . then ( ( ref )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           expect ( el ) . toHaveText ( 'hello world!' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should support multiple calls to bootstrap' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 22:11:13 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         var  refPromise1  =  bootstrap ( HelloRootCmp ,  testProviders ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         var  refPromise2  =  bootstrap ( HelloRootCmp2 ,  testProviders ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         PromiseWrapper . all ( [ refPromise1 ,  refPromise2 ] ) . then ( ( refs )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           expect ( el ) . toHaveText ( 'hello world!' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           expect ( el2 ) . toHaveText ( 'hello world, again!' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-13 11:21:16 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 15:42:22 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should not crash if change detection is invoked when the root component is disposed' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         bootstrap ( HelloOnDestroyTickCmp ,  testProviders ) . then ( ( ref )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           expect ( ( )  = >  ref . destroy ( ) ) . not . toThrow ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 15:42:22 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 10:40:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should unregister change detectors when components are disposed' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         var  platform  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             createPlatform ( ReflectiveInjector . resolveAndCreate ( BROWSER_PLATFORM_PROVIDERS ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         var  app  =  ReflectiveInjector 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                       . resolveAndCreate ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           [ BROWSER_APP_PROVIDERS ,  BROWSER_APP_COMPILER_PROVIDERS ,  testProviders ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           platform . injector ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                       . get ( ApplicationRef ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         coreLoadAndBootstrap ( HelloRootCmp ,  app . injector ) . then ( ( ref )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           ref . destroy ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           expect ( ( )  = >  app . tick ( ) ) . not . toThrow ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 10:40:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should make the provided bindings available to the application component' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 22:11:13 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         var  refPromise  =  bootstrap ( 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             HelloRootCmp3 ,  [ testProviders ,  { provide :  'appBinding' ,  useValue :  'BoundValue' } ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         refPromise . then ( ( ref )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           expect ( ref . instance . appBinding ) . toEqual ( 'BoundValue' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should avoid cyclic dependencies when root component requires Lifecycle through DI' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 22:11:13 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         var  refPromise  =  bootstrap ( HelloRootCmp4 ,  testProviders ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         refPromise . then ( ( ref )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-13 17:05:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           expect ( ref . instance . appRef ) . toBe ( ref . injector . get ( ApplicationRef ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should run platform initializers' ,  inject ( [ Log ] ,  ( log : Log )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         let  p  =  createPlatform ( ReflectiveInjector . resolveAndCreate ( [ 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-19 14:31:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           BROWSER_PLATFORM_PROVIDERS , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           { provide : PLATFORM_INITIALIZER ,  useValue : log.fn ( 'platform_init1' ) ,  multi : true } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           { provide : PLATFORM_INITIALIZER ,  useValue : log.fn ( 'platform_init2' ) ,  multi : true } 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         ] ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         expect ( log . result ( ) ) . toEqual ( 'platform_init1; platform_init2' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-18 09:18:37 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         log . clear ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         var  a  =  ReflectiveInjector . resolveAndCreate ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             [ 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-19 14:31:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               BROWSER_APP_PROVIDERS , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               { provide : APP_INITIALIZER ,  useValue : log.fn ( 'app_init1' ) ,  multi : true } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               { provide : APP_INITIALIZER ,  useValue : log.fn ( 'app_init2' ) ,  multi : true } 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             p . injector ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         a . get ( ApplicationRef ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-18 09:18:37 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         expect ( log . result ( ) ) . toEqual ( 'app_init1; app_init2' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-18 09:18:37 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    it ( 'should register each application with the testability registry' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-30 10:52:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         var  refPromise1 : Promise < ComponentRef < any > >  =  bootstrap ( HelloRootCmp ,  testProviders ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         var  refPromise2 : Promise < ComponentRef < any > >  =  bootstrap ( HelloRootCmp2 ,  testProviders ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         PromiseWrapper . all ( [ refPromise1 ,  refPromise2 ] ) . then ( ( refs : ComponentRef < any > [ ] )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           var  registry  =  refs [ 0 ] . injector . get ( TestabilityRegistry ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           var  testabilities  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               [ refs [ 0 ] . injector . get ( Testability ) ,  refs [ 1 ] . injector . get ( Testability ) ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           PromiseWrapper . all ( testabilities ) . then ( ( testabilities : Testability [ ] )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             expect ( registry . findTestabilityInTree ( el ) ) . toEqual ( testabilities [ 0 ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             expect ( registry . findTestabilityInTree ( el2 ) ) . toEqual ( testabilities [ 1 ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // Note: This will soon be deprecated as bootstrap creates a separate injector for the compiler,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // i.e. such providers needs to go into that injecotr (when calling `browserCompiler`);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    it ( 'should still allow to provide a custom xhr via the regular providers' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         let  spyXhr : XHR  =  { get :  ( url : string )  = >  Promise . resolve ( '{{greeting}} world!' ) } ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         bootstrap ( HelloUrlCmp ,  testProviders . concat ( [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           { provide : XHR ,  useValue : spyXhr } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         ] ) ) . then ( ( compRef )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           expect ( el ) . toHaveText ( 'hello world!' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           expect ( compilerConsole . warnings ) . toEqual ( [ 
							 
						 
					
						
							
								
									
										
											 
										
											
												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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             'Passing an instance of XHR to "bootstrap()" as provider is deprecated. Pass the provider via the new parameter "compilerOptions" of "bootstrap()" instead.' 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // Note: This will soon be deprecated as bootstrap creates a separate injector for the compiler,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // i.e. such providers needs to go into that injecotr (when calling `browserCompiler`);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    it ( 'should still allow to provide platform directives/pipes via the regular providers' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       inject ( [ Console ,  AsyncTestCompleter ] ,  ( console : DummyConsole ,  async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
											 
										
											
												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 ( HelloCmpUsingPlatformDirectiveAndPipe ,  testProviders . concat ( [ 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           { provide : PLATFORM_DIRECTIVES ,  useValue :  [ SomeDirective ] } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           { provide : PLATFORM_PIPES ,  useValue :  [ SomePipe ] } 
							 
						 
					
						
							
								
									
										
											 
										
											
												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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         ] ) ) . then ( ( compRef )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           let  compFixture  =  new  ComponentFixture ( compRef ,  null ,  null ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           compFixture . detectChanges ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           expect ( compFixture . debugElement . children [ 0 ] . properties [ 'title' ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               . toBe ( 'transformed someValue' ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           expect ( compilerConsole . warnings ) . toEqual ( [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             'Passing PLATFORM_DIRECTIVES to "bootstrap()" as provider is deprecated. Use the new parameter "directives" of "bootstrap()" instead.' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-08 13:40:54 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             'Passing PLATFORM_PIPES to "bootstrap()" as provider is deprecated. Use the new parameter "pipes" of "bootstrap()" instead.' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             ` Providing platform directives via the PLATFORM_DIRECTIVES provider or the "CompilerConfig" is deprecated. Provide platform directives via an @AppModule instead. Directives:  ${ stringify ( SomeDirective ) } ` , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             ` Providing platform pipes via the PLATFORM_PIPES provider or the "CompilerConfig" is deprecated. Provide platform pipes via an @AppModule instead. Pipes:  ${ stringify ( SomePipe ) } ` 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}