diff --git a/modules/angular2/angular2.dart b/modules/angular2/angular2.dart
index d0c2e10178..affb09c27c 100644
--- a/modules/angular2/angular2.dart
+++ b/modules/angular2/angular2.dart
@@ -13,3 +13,4 @@ export 'package:angular2/lifecycle_hooks.dart';
export 'package:angular2/src/core/application_tokens.dart'
hide APP_COMPONENT_REF_PROMISE, APP_ID_RANDOM_PROVIDER;
export 'package:angular2/src/core/render/dom/dom_tokens.dart';
+export 'package:angular2/platform/browser_static.dart' hide bootstrapStatic;
diff --git a/modules/angular2/angular2.ts b/modules/angular2/angular2.ts
index c4358d1b21..54d0f5f37a 100644
--- a/modules/angular2/angular2.ts
+++ b/modules/angular2/angular2.ts
@@ -2,5 +2,5 @@ export * from './common';
export * from './core';
export * from './profile';
export * from './lifecycle_hooks';
-export * from './bootstrap';
+export * from './platform/browser';
export * from './upgrade';
diff --git a/modules/angular2/bootstrap.ts b/modules/angular2/bootstrap.ts
index 8a9456270b..d7c24b6848 100644
--- a/modules/angular2/bootstrap.ts
+++ b/modules/angular2/bootstrap.ts
@@ -1,5 +1,5 @@
/**
- * This file is only used for dart applications and for internal examples
- * that compile with both JavaScript and Dart.
+ * See {@link bootstrap} for more information.
+ * @deprecated
*/
-export {bootstrap} from 'angular2/src/core/bootstrap';
+export {bootstrap} from 'angular2/platform/browser';
diff --git a/modules/angular2/bootstrap_static.dart b/modules/angular2/bootstrap_static.dart
deleted file mode 100644
index 5297bb9bd6..0000000000
--- a/modules/angular2/bootstrap_static.dart
+++ /dev/null
@@ -1,3 +0,0 @@
-library angular2.bootstrap_static;
-
-export 'src/core/application_static.dart';
diff --git a/modules/angular2/bootstrap_static.ts b/modules/angular2/bootstrap_static.ts
new file mode 100644
index 0000000000..a3a242aff7
--- /dev/null
+++ b/modules/angular2/bootstrap_static.ts
@@ -0,0 +1,5 @@
+/**
+ * See {@link bootstrap} for more information.
+ * @deprecated
+ */
+export {bootstrapStatic} from 'angular2/platform/browser_static';
diff --git a/modules/angular2/compiler.ts b/modules/angular2/compiler.ts
index 1d4eb68690..57856c054b 100644
--- a/modules/angular2/compiler.ts
+++ b/modules/angular2/compiler.ts
@@ -4,4 +4,5 @@
* Starting point to import all compiler APIs.
*/
export * from './src/compiler/url_resolver';
-export * from './src/compiler/xhr';
\ No newline at end of file
+export * from './src/compiler/xhr';
+export * from './src/compiler/compiler';
\ No newline at end of file
diff --git a/modules/angular2/core.dart b/modules/angular2/core.dart
index 7bc88ba7d8..164a4bc129 100644
--- a/modules/angular2/core.dart
+++ b/modules/angular2/core.dart
@@ -7,8 +7,6 @@ export 'package:angular2/src/core/dev_mode.dart';
export 'package:angular2/src/core/di.dart';
export 'package:angular2/src/common/pipes.dart';
export 'package:angular2/src/facade/facade.dart';
-// Do not export application for dart. Must import from angular2/bootstrap
-//export 'package:angular2/src/core/application.dart';
export 'package:angular2/src/core/application_ref.dart'
hide ApplicationRef_, PlatformRef_;
export 'package:angular2/src/core/services.dart';
@@ -20,3 +18,6 @@ export 'package:angular2/src/common/forms.dart';
export 'package:angular2/src/core/debug.dart';
export 'package:angular2/src/core/change_detection.dart';
export 'package:angular2/src/core/platform_directives_and_pipes.dart';
+export 'package:angular2/src/core/platform_common_providers.dart';
+export 'package:angular2/src/core/application_common_providers.dart';
+export 'package:angular2/src/core/reflection/reflection.dart';
diff --git a/modules/angular2/core.ts b/modules/angular2/core.ts
index 55ea21dd9b..93286a4768 100644
--- a/modules/angular2/core.ts
+++ b/modules/angular2/core.ts
@@ -8,11 +8,10 @@ export * from './src/core/util';
export * from './src/core/di';
export * from './src/common/pipes';
export * from './src/facade/facade';
-export * from './src/core/application';
-export * from './src/core/bootstrap';
export * from './src/core/services';
export * from './src/core/linker';
-export {ApplicationRef} from './src/core/application_ref';
+export {platform, createNgZone, PlatformRef, ApplicationRef} from './src/core/application_ref';
+export {APP_ID, APP_COMPONENT} from './src/core/application_tokens';
export * from './src/core/zone';
export * from './src/core/render';
export * from './src/common/directives';
@@ -21,3 +20,6 @@ export * from './src/core/debug';
export * from './src/core/change_detection';
export * from './src/core/platform_directives_and_pipes';
export * from './src/core/dev_mode';
+export * from './src/core/reflection/reflection';
+export * from './src/core/application_common_providers';
+export * from './src/core/platform_common_providers';
diff --git a/modules/angular2/examples/core/ts/dev_mode/dev_mode_example.ts b/modules/angular2/examples/core/ts/dev_mode/dev_mode_example.ts
index d3ec8bcbdc..95dbf56cd2 100644
--- a/modules/angular2/examples/core/ts/dev_mode/dev_mode_example.ts
+++ b/modules/angular2/examples/core/ts/dev_mode/dev_mode_example.ts
@@ -1,5 +1,5 @@
// #docregion enableDevMode
-import {bootstrap, enableDevMode} from 'angular2/core';
+import {bootstrap, enableDevMode} from 'angular2/angular2';
import {MyComponent} from 'my_component';
enableDevMode();
diff --git a/modules/angular2/platform/browser.ts b/modules/angular2/platform/browser.ts
new file mode 100644
index 0000000000..06028fa382
--- /dev/null
+++ b/modules/angular2/platform/browser.ts
@@ -0,0 +1,113 @@
+export {BROWSER_PROVIDERS} from 'angular2/src/platform/browser_common';
+
+import {Type, isPresent, CONST_EXPR} from 'angular2/src/facade/lang';
+import {Promise} from 'angular2/src/facade/promise';
+import {
+ BROWSER_PROVIDERS,
+ BROWSER_APP_COMMON_PROVIDERS,
+ initBrowser
+} from 'angular2/src/platform/browser_common';
+import {COMPILER_PROVIDERS} from 'angular2/compiler';
+import {ComponentRef, platform, reflector} from 'angular2/core';
+import {ReflectionCapabilities} from 'angular2/src/core/reflection/reflection_capabilities';
+
+/**
+ * An array of providers that should be passed into `application()` when bootstrapping a component.
+ */
+export const BROWSER_APP_PROVIDERS: Array =
+ CONST_EXPR([BROWSER_APP_COMMON_PROVIDERS, COMPILER_PROVIDERS]);
+
+/**
+ * Bootstrapping for Angular applications.
+ *
+ * You instantiate an Angular application by explicitly specifying a component to use
+ * as the root component for your application via the `bootstrap()` method.
+ *
+ * ## Simple Example
+ *
+ * Assuming this `index.html`:
+ *
+ * ```html
+ *
+ *
+ *
+ * loading...
+ *
+ *
+ * ```
+ *
+ * An application is bootstrapped inside an existing browser DOM, typically `index.html`.
+ * Unlike Angular 1, Angular 2 does not compile/process providers in `index.html`. This is
+ * mainly for security reasons, as well as architectural changes in Angular 2. This means
+ * that `index.html` can safely be processed using server-side technologies such as
+ * providers. Bindings can thus use double-curly `{{ syntax }}` without collision from
+ * Angular 2 component double-curly `{{ syntax }}`.
+ *
+ * We can use this script code:
+ *
+ * ```
+ * @Component({
+ * selector: 'my-app',
+ * template: 'Hello {{ name }}!'
+ * })
+ * class MyApp {
+ * name:string;
+ *
+ * constructor() {
+ * this.name = 'World';
+ * }
+ * }
+ *
+ * main() {
+ * return bootstrap(MyApp);
+ * }
+ * ```
+ *
+ * When the app developer invokes `bootstrap()` with the root component `MyApp` as its
+ * argument, Angular performs the following tasks:
+ *
+ * 1. It uses the component's `selector` property to locate the DOM element which needs
+ * to be upgraded into the angular component.
+ * 2. It creates a new child injector (from the platform injector). Optionally, you can
+ * also override the injector configuration for an app by invoking `bootstrap` with the
+ * `componentInjectableBindings` argument.
+ * 3. It creates a new `Zone` and connects it to the angular application's change detection
+ * domain instance.
+ * 4. It creates an emulated or shadow DOM on the selected component's host element and loads the
+ * template into it.
+ * 5. It instantiates the specified component.
+ * 6. Finally, Angular performs change detection to apply the initial data providers for the
+ * application.
+ *
+ *
+ * ## Bootstrapping Multiple Applications
+ *
+ * When working within a browser window, there are many singleton resources: cookies, title,
+ * location, and others. Angular services that represent these resources must likewise be
+ * shared across all Angular applications that occupy the same browser window. For this
+ * reason, Angular creates exactly one global platform object which stores all shared
+ * services, and each angular application injector has the platform injector as its parent.
+ *
+ * Each application has its own private injector as well. When there are multiple
+ * applications on a page, Angular treats each application injector's services as private
+ * to that application.
+ *
+ * ## API
+ *
+ * - `appComponentType`: The root component which should act as the application. This is
+ * a reference to a `Type` which is annotated with `@Component(...)`.
+ * - `customProviders`: An additional set of providers that can be added to the
+ * app injector to override default injection behavior.
+ *
+ * Returns a `Promise` of {@link ComponentRef}.
+ */
+export function bootstrap(
+ appComponentType: Type,
+ customProviders?: Array): Promise {
+ reflector.reflectionCapabilities = new ReflectionCapabilities();
+ initBrowser();
+
+ let appProviders =
+ isPresent(customProviders) ? [BROWSER_APP_PROVIDERS, customProviders] : BROWSER_APP_PROVIDERS;
+ return platform(BROWSER_PROVIDERS).application(appProviders).bootstrap(appComponentType);
+}
\ No newline at end of file
diff --git a/modules/angular2/platform/browser_static.ts b/modules/angular2/platform/browser_static.ts
new file mode 100644
index 0000000000..98ed515e7e
--- /dev/null
+++ b/modules/angular2/platform/browser_static.ts
@@ -0,0 +1,34 @@
+export {BROWSER_PROVIDERS} from 'angular2/src/platform/browser_common';
+
+import {Type, isPresent, CONST_EXPR} from 'angular2/src/facade/lang';
+import {Promise} from 'angular2/src/facade/promise';
+import {
+ BROWSER_PROVIDERS,
+ BROWSER_APP_COMMON_PROVIDERS,
+ initBrowser
+} from 'angular2/src/platform/browser_common';
+import {ComponentRef, platform, reflector} from 'angular2/core';
+
+/**
+ * An array of providers that should be passed into `application()` when bootstrapping a component
+ * when all templates
+ * have been precompiled offline.
+ */
+export const BROWSER_APP_PROVIDERS: Array =
+ BROWSER_APP_COMMON_PROVIDERS;
+
+/**
+ * See {@link bootstrap} for more information.
+ */
+export function bootstrapStatic(appComponentType: Type,
+ customProviders?: Array,
+ initReflector?: Function): Promise {
+ initBrowser();
+ if (isPresent(initReflector)) {
+ initReflector();
+ }
+
+ let appProviders =
+ isPresent(customProviders) ? [BROWSER_APP_PROVIDERS, customProviders] : BROWSER_APP_PROVIDERS;
+ return platform(BROWSER_PROVIDERS).application(appProviders).bootstrap(appComponentType);
+}
\ No newline at end of file
diff --git a/modules/angular2/src/compiler/compiler.ts b/modules/angular2/src/compiler/compiler.ts
index e1b34c891b..a64ea755f8 100644
--- a/modules/angular2/src/compiler/compiler.ts
+++ b/modules/angular2/src/compiler/compiler.ts
@@ -8,7 +8,7 @@ export {
export {SourceModule, SourceWithImports} from './source_module';
export {PLATFORM_DIRECTIVES, PLATFORM_PIPES} from 'angular2/src/core/platform_directives_and_pipes';
-import {assertionsEnabled, Type} from 'angular2/src/facade/lang';
+import {assertionsEnabled, Type, CONST_EXPR} from 'angular2/src/facade/lang';
import {provide, Provider} from 'angular2/src/core/di';
import {TemplateParser} from 'angular2/src/compiler/template_parser';
import {HtmlParser} from 'angular2/src/compiler/html_parser';
@@ -28,26 +28,27 @@ import {AppRootUrl} from 'angular2/src/compiler/app_root_url';
import {AnchorBasedAppRootUrl} from 'angular2/src/compiler/anchor_based_app_root_url';
import {Parser, Lexer} from 'angular2/src/core/change_detection/change_detection';
-export function compilerProviders(): Array {
- return [
- Lexer,
- Parser,
- HtmlParser,
- TemplateParser,
- TemplateNormalizer,
- RuntimeMetadataResolver,
- StyleCompiler,
- CommandCompiler,
- ChangeDetectionCompiler,
- provide(ChangeDetectorGenConfig,
- {useValue: new ChangeDetectorGenConfig(assertionsEnabled(), false, true)}),
- TemplateCompiler,
- provide(RuntimeCompiler, {useClass: RuntimeCompiler_}),
- provide(Compiler, {useExisting: RuntimeCompiler}),
- DomElementSchemaRegistry,
- provide(ElementSchemaRegistry, {useExisting: DomElementSchemaRegistry}),
- AnchorBasedAppRootUrl,
- provide(AppRootUrl, {useExisting: AnchorBasedAppRootUrl}),
- UrlResolver
- ];
+function _createChangeDetectorGenConfig() {
+ return new ChangeDetectorGenConfig(assertionsEnabled(), false, true);
}
+
+export const COMPILER_PROVIDERS: Array = CONST_EXPR([
+ Lexer,
+ Parser,
+ HtmlParser,
+ TemplateParser,
+ TemplateNormalizer,
+ RuntimeMetadataResolver,
+ StyleCompiler,
+ CommandCompiler,
+ ChangeDetectionCompiler,
+ new Provider(ChangeDetectorGenConfig, {useFactory: _createChangeDetectorGenConfig, deps: []}),
+ TemplateCompiler,
+ new Provider(RuntimeCompiler, {useClass: RuntimeCompiler_}),
+ new Provider(Compiler, {useExisting: RuntimeCompiler}),
+ DomElementSchemaRegistry,
+ new Provider(ElementSchemaRegistry, {useExisting: DomElementSchemaRegistry}),
+ AnchorBasedAppRootUrl,
+ new Provider(AppRootUrl, {useExisting: AnchorBasedAppRootUrl}),
+ UrlResolver
+]);
diff --git a/modules/angular2/src/core/application.dart b/modules/angular2/src/core/application.dart
deleted file mode 100644
index 3cee988d86..0000000000
--- a/modules/angular2/src/core/application.dart
+++ /dev/null
@@ -1,29 +0,0 @@
-library angular2.src.core.application;
-
-import 'dart:async';
-
-import 'package:angular2/src/core/reflection/reflection.dart' show reflector;
-import 'package:angular2/src/core/reflection/reflection_capabilities.dart'
- show ReflectionCapabilities;
-import 'application_common.dart';
-
-import 'package:angular2/src/compiler/compiler.dart';
-import 'package:angular2/src/core/linker/dynamic_component_loader.dart';
-export 'package:angular2/src/core/linker/dynamic_component_loader.dart'
- show ComponentRef;
-
-/// Starts an application from a root component. This implementation uses
-/// mirrors. Angular 2 transformer automatically replaces this method with a
-/// static implementation (see `application_static.dart`) that does not use
-/// mirrors and produces a faster and more compact JS code.
-///
-/// See [commonBootstrap] for detailed documentation.
-Future bootstrap(Type appComponentType,
- [List componentInjectableProviders]) {
- reflector.reflectionCapabilities = new ReflectionCapabilities();
- var providers = [compilerProviders()];
- if (componentInjectableProviders != null) {
- providers.add(componentInjectableProviders);
- }
- return commonBootstrap(appComponentType, providers);
-}
diff --git a/modules/angular2/src/core/application.ts b/modules/angular2/src/core/application.ts
deleted file mode 100644
index b275f2210b..0000000000
--- a/modules/angular2/src/core/application.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-// Public API for Application
-import {Provider} from './di';
-import {Type, isPresent} from 'angular2/src/facade/lang';
-import {Promise} from 'angular2/src/facade/async';
-import {compilerProviders} from 'angular2/src/compiler/compiler';
-import {commonBootstrap} from './application_common';
-import {ComponentRef} from './linker/dynamic_component_loader';
-
-export {APP_COMPONENT, APP_ID} from './application_tokens';
-export {platform} from './application_common';
-export {
- PlatformRef,
- ApplicationRef,
- applicationCommonProviders,
- createNgZone,
- platformCommon,
- platformProviders
-} from './application_ref';
-
-/// See [commonBootstrap] for detailed documentation.
-export function bootstrap(
- appComponentType: /*Type*/ any,
- appProviders: Array = null): Promise {
- var providers = [compilerProviders()];
- if (isPresent(appProviders)) {
- providers.push(appProviders);
- }
- return commonBootstrap(appComponentType, providers);
-}
diff --git a/modules/angular2/src/core/application_common.ts b/modules/angular2/src/core/application_common.ts
deleted file mode 100644
index 8552ed5dfc..0000000000
--- a/modules/angular2/src/core/application_common.ts
+++ /dev/null
@@ -1,219 +0,0 @@
-import {FORM_PROVIDERS} from 'angular2/src/common/forms';
-import {provide, Provider} from 'angular2/src/core/di';
-import {Type, isBlank, isPresent, stringify} from 'angular2/src/facade/lang';
-import {BrowserDomAdapter} from 'angular2/src/core/dom/browser_adapter';
-import {BrowserGetTestability} from 'angular2/src/core/testability/browser_testability';
-import {DOM} from 'angular2/src/core/dom/dom_adapter';
-import {Promise} from 'angular2/src/facade/async';
-import {XHR} from 'angular2/src/compiler/xhr';
-import {XHRImpl} from 'angular2/src/compiler/xhr_impl';
-
-import {
- EventManager,
- DomEventsPlugin,
- EVENT_MANAGER_PLUGINS
-} from 'angular2/src/core/render/dom/events/event_manager';
-import {KeyEventsPlugin} from 'angular2/src/core/render/dom/events/key_events';
-import {HammerGesturesPlugin} from 'angular2/src/core/render/dom/events/hammer_gestures';
-import {ComponentRef} from 'angular2/src/core/linker/dynamic_component_loader';
-import {Testability} from 'angular2/src/core/testability/testability';
-import {Renderer} from 'angular2/src/core/render/api';
-import {DomRenderer, DomRenderer_, DOCUMENT} from 'angular2/src/core/render/render';
-import {
- SharedStylesHost,
- DomSharedStylesHost
-} from 'angular2/src/core/render/dom/shared_styles_host';
-import {EXCEPTION_PROVIDER} from './platform_bindings';
-import {AnimationBuilder} from 'angular2/src/animate/animation_builder';
-import {BrowserDetails} from 'angular2/src/animate/browser_details';
-import {wtfInit} from './profile/wtf_init';
-import {platformCommon, PlatformRef, applicationCommonProviders} from './application_ref';
-
-/**
- * A default set of providers which apply only to an Angular application running on
- * the UI thread.
- */
-export function applicationDomProviders(): Array {
- if (isBlank(DOM)) {
- throw "Must set a root DOM adapter first.";
- }
- return [
- provide(DOCUMENT, {useValue: DOM.defaultDoc()}),
- EventManager,
- new Provider(EVENT_MANAGER_PLUGINS, {useClass: DomEventsPlugin, multi: true}),
- new Provider(EVENT_MANAGER_PLUGINS, {useClass: KeyEventsPlugin, multi: true}),
- new Provider(EVENT_MANAGER_PLUGINS, {useClass: HammerGesturesPlugin, multi: true}),
- provide(DomRenderer, {useClass: DomRenderer_}),
- provide(Renderer, {useExisting: DomRenderer}),
- DomSharedStylesHost,
- provide(SharedStylesHost, {useExisting: DomSharedStylesHost}),
- EXCEPTION_PROVIDER,
- provide(XHR, {useValue: new XHRImpl()}),
- Testability,
- BrowserDetails,
- AnimationBuilder,
- FORM_PROVIDERS
- ];
-}
-
-/**
- * Initialize the Angular 'platform' on the page.
- *
- * See {@link PlatformRef} for details on the Angular platform.
- *
- *##Without specified providers
- *
- * If no providers are specified, `platform`'s behavior depends on whether an existing
- * platform exists:
- *
- * If no platform exists, a new one will be created with the default {@link platformProviders}.
- *
- * If a platform already exists, it will be returned (regardless of what providers it
- * was created with). This is a convenience feature, allowing for multiple applications
- * to be loaded into the same platform without awareness of each other.
- *
- *##With specified providers
- *
- * It is also possible to specify providers to be made in the new platform. These providers
- * will be shared between all applications on the page. For example, an abstraction for
- * the browser cookie jar should be bound at the platform level, because there is only one
- * cookie jar regardless of how many applications on the page will be accessing it.
- *
- * If providers are specified directly, `platform` will create the Angular platform with
- * them if a platform did not exist already. If it did exist, however, an error will be
- * thrown.
- *
- *##DOM Applications
- *
- * This version of `platform` initializes Angular to run in the UI thread, with direct
- * DOM access. Web-worker applications should call `platform` from
- * `src/web_workers/worker/application_common` instead.
- */
-export function platform(providers?: Array): PlatformRef {
- return platformCommon(providers, () => {
- BrowserDomAdapter.makeCurrent();
- wtfInit();
- BrowserGetTestability.init();
- });
-}
-
-/**
- * Bootstrapping for Angular applications.
- *
- * You instantiate an Angular application by explicitly specifying a component to use
- * as the root component for your application via the `bootstrap()` method.
- *
- * ## Simple Example
- *
- * Assuming this `index.html`:
- *
- * ```html
- *
- *
- *
- * loading...
- *
- *
- * ```
- *
- * An application is bootstrapped inside an existing browser DOM, typically `index.html`.
- * Unlike Angular 1, Angular 2 does not compile/process providers in `index.html`. This is
- * mainly for security reasons, as well as architectural changes in Angular 2. This means
- * that `index.html` can safely be processed using server-side technologies such as
- * providers. Bindings can thus use double-curly `{{ syntax }}` without collision from
- * Angular 2 component double-curly `{{ syntax }}`.
- *
- * We can use this script code:
- *
- * ```
- * @Component({
- * selector: 'my-app',
- * template: 'Hello {{ name }}!'
- * })
- * class MyApp {
- * name:string;
- *
- * constructor() {
- * this.name = 'World';
- * }
- * }
- *
- * main() {
- * return bootstrap(MyApp);
- * }
- * ```
- *
- * When the app developer invokes `bootstrap()` with the root component `MyApp` as its
- * argument, Angular performs the following tasks:
- *
- * 1. It uses the component's `selector` property to locate the DOM element which needs
- * to be upgraded into the angular component.
- * 2. It creates a new child injector (from the platform injector). Optionally, you can
- * also override the injector configuration for an app by invoking `bootstrap` with the
- * `componentInjectableBindings` argument.
- * 3. It creates a new `Zone` and connects it to the angular application's change detection
- * domain instance.
- * 4. It creates an emulated or shadow DOM on the selected component's host element and loads the
- * template into it.
- * 5. It instantiates the specified component.
- * 6. Finally, Angular performs change detection to apply the initial data providers for the
- * application.
- *
- *
- * ## Instantiating Multiple Applications on a Single Page
- *
- * There are two ways to do this.
- *
- * ### Isolated Applications
- *
- * Angular creates a new application each time that the `bootstrap()` method is invoked.
- * When multiple applications are created for a page, Angular treats each application as
- * independent within an isolated change detection and `Zone` domain. If you need to share
- * data between applications, use the strategy described in the next section, "Applications
- * That Share Change Detection."
- *
- *
- * ### Applications That Share Change Detection
- *
- * If you need to bootstrap multiple applications that share common data, the applications
- * must share a common change detection and zone. To do that, create a meta-component that
- * lists the application components in its template.
- *
- * By only invoking the `bootstrap()` method once, with the meta-component as its argument,
- * you ensure that only a single change detection zone is created and therefore data can be
- * shared across the applications.
- *
- *
- * ## Platform Injector
- *
- * When working within a browser window, there are many singleton resources: cookies, title,
- * location, and others. Angular services that represent these resources must likewise be
- * shared across all Angular applications that occupy the same browser window. For this
- * reason, Angular creates exactly one global platform injector which stores all shared
- * services, and each angular application injector has the platform injector as its parent.
- *
- * Each application has its own private injector as well. When there are multiple
- * applications on a page, Angular treats each application injector's services as private
- * to that application.
- *
- *
- *##API
- * - `appComponentType`: The root component which should act as the application. This is
- * a reference to a `Type` which is annotated with `@Component(...)`.
- * - `componentInjectableBindings`: An additional set of providers that can be added to the
- * app injector to override default injection behavior.
- * - `errorReporter`: `function(exception:any, stackTrace:string)` a default error reporter
- * for unhandled exceptions.
- *
- * Returns a `Promise` of {@link ComponentRef}.
- */
-export function commonBootstrap(
- appComponentType: /*Type*/ any,
- appProviders: Array = null): Promise {
- var p = platform();
- var bindings = [applicationCommonProviders(), applicationDomProviders()];
- if (isPresent(appProviders)) {
- bindings.push(appProviders);
- }
- return p.application(bindings).bootstrap(appComponentType);
-}
diff --git a/modules/angular2/src/core/application_common_providers.ts b/modules/angular2/src/core/application_common_providers.ts
new file mode 100644
index 0000000000..f766c2ee9d
--- /dev/null
+++ b/modules/angular2/src/core/application_common_providers.ts
@@ -0,0 +1,49 @@
+import {Type, CONST_EXPR} from 'angular2/src/facade/lang';
+import {provide, Provider, Injector, OpaqueToken} from 'angular2/src/core/di';
+import {
+ APP_COMPONENT_REF_PROMISE,
+ APP_COMPONENT,
+ APP_ID_RANDOM_PROVIDER
+} from './application_tokens';
+import {
+ IterableDiffers,
+ defaultIterableDiffers,
+ KeyValueDiffers,
+ defaultKeyValueDiffers
+} from './change_detection/change_detection';
+import {AppViewPool, APP_VIEW_POOL_CAPACITY} from './linker/view_pool';
+import {AppViewManager} from './linker/view_manager';
+import {AppViewManager_} from "./linker/view_manager";
+import {AppViewManagerUtils} from './linker/view_manager_utils';
+import {ViewResolver} from './linker/view_resolver';
+import {AppViewListener} from './linker/view_listener';
+import {ProtoViewFactory} from './linker/proto_view_factory';
+import {DirectiveResolver} from './linker/directive_resolver';
+import {PipeResolver} from './linker/pipe_resolver';
+import {Compiler} from './linker/compiler';
+import {Compiler_} from "./linker/compiler";
+import {DynamicComponentLoader} from './linker/dynamic_component_loader';
+import {DynamicComponentLoader_} from "./linker/dynamic_component_loader";
+import {EventManager} from './render/dom/events/event_manager';
+
+/**
+ * A default set of providers which should be included in any Angular
+ * application, regardless of the platform it runs onto.
+ */
+export const APPLICATION_COMMON_PROVIDERS: Array = CONST_EXPR([
+ new Provider(Compiler, {useClass: Compiler_}),
+ APP_ID_RANDOM_PROVIDER,
+ AppViewPool,
+ new Provider(APP_VIEW_POOL_CAPACITY, {useValue: 10000}),
+ new Provider(AppViewManager, {useClass: AppViewManager_}),
+ AppViewManagerUtils,
+ AppViewListener,
+ ProtoViewFactory,
+ ViewResolver,
+ new Provider(IterableDiffers, {useValue: defaultIterableDiffers}),
+ new Provider(KeyValueDiffers, {useValue: defaultKeyValueDiffers}),
+ DirectiveResolver,
+ PipeResolver,
+ new Provider(DynamicComponentLoader, {useClass: DynamicComponentLoader_}),
+ EventManager
+]);
\ No newline at end of file
diff --git a/modules/angular2/src/core/application_ref.ts b/modules/angular2/src/core/application_ref.ts
index aa7514b9a1..5b8b057ac7 100644
--- a/modules/angular2/src/core/application_ref.ts
+++ b/modules/angular2/src/core/application_ref.ts
@@ -13,7 +13,6 @@ import {
ObservableWrapper
} from 'angular2/src/facade/async';
import {ListWrapper} from 'angular2/src/facade/collection';
-import {Reflector, reflector} from 'angular2/src/core/reflection/reflection';
import {TestabilityRegistry, Testability} from 'angular2/src/core/testability/testability';
import {
ComponentRef,
@@ -27,39 +26,10 @@ import {
} from 'angular2/src/facade/exceptions';
import {DOM} from 'angular2/src/core/dom/dom_adapter';
import {internalView} from 'angular2/src/core/linker/view_ref';
-import {
- IterableDiffers,
- defaultIterableDiffers,
- KeyValueDiffers,
- defaultKeyValueDiffers
-} from 'angular2/src/core/change_detection/change_detection';
-import {AppViewPool, APP_VIEW_POOL_CAPACITY} from 'angular2/src/core/linker/view_pool';
-import {AppViewManager} from 'angular2/src/core/linker/view_manager';
-import {AppViewManagerUtils} from 'angular2/src/core/linker/view_manager_utils';
-import {AppViewListener} from 'angular2/src/core/linker/view_listener';
-import {ProtoViewFactory} from './linker/proto_view_factory';
-import {ViewResolver} from './linker/view_resolver';
-import {DirectiveResolver} from './linker/directive_resolver';
-import {PipeResolver} from './linker/pipe_resolver';
-import {Compiler} from 'angular2/src/core/linker/compiler';
-import {DynamicComponentLoader_} from "./linker/dynamic_component_loader";
-import {AppViewManager_} from "./linker/view_manager";
-import {Compiler_} from "./linker/compiler";
import {wtfLeave, wtfCreateScope, WtfScopeFn} from './profile/profile';
import {ChangeDetectorRef} from 'angular2/src/core/change_detection/change_detector_ref';
-import {PLATFORM_DIRECTIVES, PLATFORM_PIPES} from "angular2/src/core/platform_directives_and_pipes";
import {lockDevMode} from 'angular2/src/facade/lang';
-import {COMMON_DIRECTIVES, COMMON_PIPES} from "angular2/common";
-/**
- * Constructs the set of providers meant for use at the platform level.
- *
- * These are providers that should be singletons shared among all Angular applications
- * running on the page.
- */
-export function platformProviders(): Array {
- return [provide(Reflector, {useValue: reflector}), TestabilityRegistry];
-}
/**
* Construct providers specific to an individual root component.
@@ -96,31 +66,6 @@ function _componentProviders(appComponentType: Type): Array {
- return [
- provide(Compiler, {useClass: Compiler_}),
- APP_ID_RANDOM_PROVIDER,
- AppViewPool,
- provide(APP_VIEW_POOL_CAPACITY, {useValue: 10000}),
- provide(AppViewManager, {useClass: AppViewManager_}),
- AppViewManagerUtils,
- AppViewListener,
- ProtoViewFactory,
- ViewResolver,
- provide(IterableDiffers, {useValue: defaultIterableDiffers}),
- provide(KeyValueDiffers, {useValue: defaultKeyValueDiffers}),
- DirectiveResolver,
- PipeResolver,
- provide(PLATFORM_PIPES, {useValue: COMMON_PIPES, multi: true}),
- provide(PLATFORM_DIRECTIVES, {useValue: COMMON_DIRECTIVES, multi: true}),
- provide(DynamicComponentLoader, {useClass: DynamicComponentLoader_})
- ];
-}
-
/**
* Create an Angular zone.
*/
@@ -129,25 +74,41 @@ export function createNgZone(): NgZone {
}
var _platform: PlatformRef;
+var _platformProviders: any[];
-export function platformCommon(providers?: Array,
- initializer?: () => void): PlatformRef {
+/**
+ * Initialize the Angular 'platform' on the page.
+ *
+ * See {@link PlatformRef} for details on the Angular platform.
+ *
+ * It is also possible to specify providers to be made in the new platform. These providers
+ * will be shared between all applications on the page. For example, an abstraction for
+ * the browser cookie jar should be bound at the platform level, because there is only one
+ * cookie jar regardless of how many applications on the page will be accessing it.
+ *
+ * The platform function can be called multiple times as long as the same list of providers
+ * is passed into each call. If the platform function is called with a different set of
+ * provides, Angular will throw an exception.
+ */
+export function platform(providers?: Array): PlatformRef {
lockDevMode();
if (isPresent(_platform)) {
- if (isBlank(providers)) {
+ if (ListWrapper.equals(_platformProviders, providers)) {
return _platform;
+ } else {
+ throw new BaseException("platform cannot be initialized with different sets of providers.");
}
- throw "platform() can only be called once per page";
+ } else {
+ return _createPlatform(providers);
}
+}
- if (isPresent(initializer)) {
- initializer();
- }
-
- if (isBlank(providers)) {
- providers = platformProviders();
- }
- _platform = new PlatformRef_(Injector.resolveAndCreate(providers), () => { _platform = null; });
+function _createPlatform(providers?: Array): PlatformRef {
+ _platformProviders = providers;
+ _platform = new PlatformRef_(Injector.resolveAndCreate(providers), () => {
+ _platform = null;
+ _platformProviders = null;
+ });
return _platform;
}
@@ -192,7 +153,7 @@ export abstract class PlatformRef {
* var myAppProviders = [MyAppService];
*
* platform()
- * .application([applicationCommonProviders(), applicationDomProviders(), myAppProviders])
+ * .application([myAppProviders])
* .bootstrap(MyTopLevelComponent);
* ```
*##See Also
@@ -255,8 +216,10 @@ export class PlatformRef_ extends PlatformRef {
var injector: Injector;
var app: ApplicationRef;
zone.run(() => {
- providers.push(provide(NgZone, {useValue: zone}));
- providers.push(provide(ApplicationRef, {useFactory: (): ApplicationRef => app, deps: []}));
+ providers = ListWrapper.concat(providers, [
+ provide(NgZone, {useValue: zone}),
+ provide(ApplicationRef, {useFactory: (): ApplicationRef => app, deps: []})
+ ]);
var exceptionHandler;
try {
@@ -320,7 +283,7 @@ export abstract class ApplicationRef {
*
* ### Example
* ```
- * var app = platform.application([applicationCommonProviders(), applicationDomProviders()];
+ * var app = platform.application([appProviders];
* app.bootstrap(FirstRootComponent);
* app.bootstrap(SecondRootComponent, [provide(OverrideBinding, {useClass: OverriddenBinding})]);
* ```
diff --git a/modules/angular2/src/core/application_static.dart b/modules/angular2/src/core/application_static.dart
deleted file mode 100644
index fac49ccf1c..0000000000
--- a/modules/angular2/src/core/application_static.dart
+++ /dev/null
@@ -1,17 +0,0 @@
-library angular2.src.core.application_static;
-
-import 'dart:async';
-import 'application_common.dart';
-import 'package:angular2/src/core/linker/dynamic_component_loader.dart'
- show ComponentRef;
-
-/// Starts an application from a root component.
-///
-/// See [commonBootstrap] for detailed documentation.
-Future bootstrapStatic(Type appComponentType,
- [List componentInjectableBindings, void initReflector()]) {
- if (initReflector != null) {
- initReflector();
- }
- return commonBootstrap(appComponentType, componentInjectableBindings);
-}
diff --git a/modules/angular2/src/core/bootstrap.dart b/modules/angular2/src/core/bootstrap.dart
deleted file mode 100644
index 92eea16693..0000000000
--- a/modules/angular2/src/core/bootstrap.dart
+++ /dev/null
@@ -1,3 +0,0 @@
-library angular2.src.core.bootstrap;
-
-export './application.dart' show bootstrap;
diff --git a/modules/angular2/src/core/bootstrap.ts b/modules/angular2/src/core/bootstrap.ts
deleted file mode 100644
index aec7fd2afe..0000000000
--- a/modules/angular2/src/core/bootstrap.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-// Note: This file only exists so that Dart users can import
-// bootstrap from angular2/bootstrap. JS users should import
-// from angular2/core.
-export {bootstrap} from './application';
diff --git a/modules/angular2/src/core/dom/generic_browser_adapter.ts b/modules/angular2/src/core/dom/generic_browser_adapter.ts
index 9460390b7f..878c2a63d7 100644
--- a/modules/angular2/src/core/dom/generic_browser_adapter.ts
+++ b/modules/angular2/src/core/dom/generic_browser_adapter.ts
@@ -1,7 +1,7 @@
import {ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection';
import {isPresent, isFunction, Type} from 'angular2/src/facade/lang';
import {DomAdapter} from './dom_adapter';
-import {XHRImpl} from 'angular2/src/compiler/xhr_impl';
+import {XHRImpl} from 'angular2/src/platform/browser/xhr_impl';
/**
diff --git a/modules/angular2/src/core/platform_bindings.dart b/modules/angular2/src/core/platform_bindings.dart
deleted file mode 100644
index ff33b34fad..0000000000
--- a/modules/angular2/src/core/platform_bindings.dart
+++ /dev/null
@@ -1,12 +0,0 @@
-library angular2.src.core.platform_bindings;
-
-import 'package:angular2/core.dart';
-import 'package:angular2/src/facade/exceptions.dart';
-import 'package:angular2/src/core/dom/dom_adapter.dart';
-
-exceptionFactory() => new ExceptionHandler(DOM, true);
-
-const EXCEPTION_PROVIDER = const Binding(ExceptionHandler,
- toFactory: exceptionFactory, deps: const []);
-
-const EXCEPTION_BINDING = EXCEPTION_PROVIDER;
diff --git a/modules/angular2/src/core/platform_bindings.ts b/modules/angular2/src/core/platform_bindings.ts
deleted file mode 100644
index 059df5a2bb..0000000000
--- a/modules/angular2/src/core/platform_bindings.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import {provide} from 'angular2/src/core/di';
-import {ExceptionHandler} from 'angular2/src/facade/exceptions';
-import {DOM} from 'angular2/src/core/dom/dom_adapter';
-
-export const EXCEPTION_PROVIDER =
- provide(ExceptionHandler, {useFactory: () => new ExceptionHandler(DOM, false), deps: []});
-
-export const EXCEPTION_BINDING = EXCEPTION_PROVIDER;
\ No newline at end of file
diff --git a/modules/angular2/src/core/platform_common_providers.ts b/modules/angular2/src/core/platform_common_providers.ts
new file mode 100644
index 0000000000..14a84c1603
--- /dev/null
+++ b/modules/angular2/src/core/platform_common_providers.ts
@@ -0,0 +1,14 @@
+import {Type, isBlank, isPresent, assertionsEnabled, CONST_EXPR} from 'angular2/src/facade/lang';
+import {provide, Provider, Injector, OpaqueToken} from 'angular2/src/core/di';
+import {Reflector, reflector} from './reflection/reflection';
+import {TestabilityRegistry} from 'angular2/src/core/testability/testability';
+
+function _reflector(): Reflector {
+ return reflector;
+}
+
+/**
+ * A default set of providers which should be included in any Angular platform.
+ */
+export const PLATFORM_COMMON_PROVIDERS: Array =
+ CONST_EXPR([new Provider(Reflector, {useFactory: _reflector, deps: []}), TestabilityRegistry]);
diff --git a/modules/angular2/src/compiler/xhr_impl.dart b/modules/angular2/src/platform/browser/xhr_impl.dart
similarity index 88%
rename from modules/angular2/src/compiler/xhr_impl.dart
rename to modules/angular2/src/platform/browser/xhr_impl.dart
index 078c730b40..988e331973 100644
--- a/modules/angular2/src/compiler/xhr_impl.dart
+++ b/modules/angular2/src/platform/browser/xhr_impl.dart
@@ -3,7 +3,7 @@ library angular2.src.services.xhr_impl;
import 'dart:async' show Future;
import 'dart:html' show HttpRequest;
import 'package:angular2/core.dart';
-import './xhr.dart' show XHR;
+import 'package:angular2/compiler.dart' show XHR;
@Injectable()
class XHRImpl extends XHR {
diff --git a/modules/angular2/src/compiler/xhr_impl.ts b/modules/angular2/src/platform/browser/xhr_impl.ts
similarity index 96%
rename from modules/angular2/src/compiler/xhr_impl.ts
rename to modules/angular2/src/platform/browser/xhr_impl.ts
index f6f2c576f5..c54d4c76f1 100644
--- a/modules/angular2/src/compiler/xhr_impl.ts
+++ b/modules/angular2/src/platform/browser/xhr_impl.ts
@@ -1,6 +1,6 @@
import {Promise, PromiseWrapper, PromiseCompleter} from 'angular2/src/facade/promise';
import {isPresent} from 'angular2/src/facade/lang';
-import {XHR} from './xhr';
+import {XHR} from 'angular2/src/compiler/xhr';
export class XHRImpl extends XHR {
get(url: string): Promise {
diff --git a/modules/angular2/src/platform/browser_common.ts b/modules/angular2/src/platform/browser_common.ts
new file mode 100644
index 0000000000..2bccddf9ee
--- /dev/null
+++ b/modules/angular2/src/platform/browser_common.ts
@@ -0,0 +1,75 @@
+import {CONST_EXPR} from 'angular2/src/facade/lang';
+import {provide, Provider, Injector, OpaqueToken} from 'angular2/src/core/di';
+
+import {XHR} from 'angular2/compiler';
+import {
+ PLATFORM_DIRECTIVES,
+ PLATFORM_PIPES,
+ ComponentRef,
+ platform,
+ ExceptionHandler,
+ Reflector,
+ reflector,
+ APPLICATION_COMMON_PROVIDERS,
+ PLATFORM_COMMON_PROVIDERS
+} from "angular2/core";
+import {COMMON_DIRECTIVES, COMMON_PIPES, FORM_PROVIDERS} from "angular2/common";
+import {Renderer} from 'angular2/render';
+import {XHRImpl} from "angular2/src/platform/browser/xhr_impl";
+import {Testability} from 'angular2/src/core/testability/testability';
+
+// TODO change these imports once dom_adapter is moved out of core
+import {DOM} from 'angular2/src/core/dom/dom_adapter';
+import {
+ DomEventsPlugin,
+ EVENT_MANAGER_PLUGINS
+} from 'angular2/src/core/render/dom/events/event_manager';
+import {KeyEventsPlugin} from 'angular2/src/core/render/dom/events/key_events';
+import {HammerGesturesPlugin} from 'angular2/src/core/render/dom/events/hammer_gestures';
+import {DOCUMENT} from 'angular2/src/core/render/dom/dom_tokens';
+import {DomRenderer, DomRenderer_} from 'angular2/src/core/render/dom/dom_renderer';
+import {DomSharedStylesHost} from 'angular2/src/core/render/dom/shared_styles_host';
+import {SharedStylesHost} from "angular2/src/core/render/dom/shared_styles_host";
+import {BrowserDetails} from "angular2/src/animate/browser_details";
+import {AnimationBuilder} from "angular2/src/animate/animation_builder";
+import {BrowserDomAdapter} from 'angular2/src/core/dom/browser_adapter';
+import {BrowserGetTestability} from 'angular2/src/core/testability/browser_testability';
+import {wtfInit} from 'angular2/src/core/profile/wtf_init';
+
+export const BROWSER_PROVIDERS: Array =
+ CONST_EXPR([PLATFORM_COMMON_PROVIDERS]);
+
+function _exceptionHandler(): ExceptionHandler {
+ return new ExceptionHandler(DOM, false);
+}
+
+function _document(): any {
+ return DOM.defaultDoc();
+}
+
+export const BROWSER_APP_COMMON_PROVIDERS: Array = CONST_EXPR([
+ APPLICATION_COMMON_PROVIDERS,
+ FORM_PROVIDERS,
+ new Provider(PLATFORM_PIPES, {useValue: COMMON_PIPES, multi: true}),
+ new Provider(PLATFORM_DIRECTIVES, {useValue: COMMON_DIRECTIVES, multi: true}),
+ new Provider(ExceptionHandler, {useFactory: _exceptionHandler, deps: []}),
+ new Provider(DOCUMENT, {useFactory: _document, deps: []}),
+ new Provider(EVENT_MANAGER_PLUGINS, {useClass: DomEventsPlugin, multi: true}),
+ new Provider(EVENT_MANAGER_PLUGINS, {useClass: KeyEventsPlugin, multi: true}),
+ new Provider(EVENT_MANAGER_PLUGINS, {useClass: HammerGesturesPlugin, multi: true}),
+ new Provider(DomRenderer, {useClass: DomRenderer_}),
+ new Provider(Renderer, {useExisting: DomRenderer}),
+ new Provider(SharedStylesHost, {useExisting: DomSharedStylesHost}),
+ new Provider(XHR, {useClass: XHRImpl}),
+ DomSharedStylesHost,
+ Testability,
+ BrowserDetails,
+ AnimationBuilder
+]);
+
+export function initBrowser() {
+ // TODO: refactor into a generic init function
+ BrowserDomAdapter.makeCurrent();
+ wtfInit();
+ BrowserGetTestability.init();
+}
\ No newline at end of file
diff --git a/modules/angular2/src/testing/test_injector.ts b/modules/angular2/src/testing/test_injector.ts
index 2362cab53a..1a05c952f1 100644
--- a/modules/angular2/src/testing/test_injector.ts
+++ b/modules/angular2/src/testing/test_injector.ts
@@ -54,7 +54,7 @@ import {
import {APP_ID} from 'angular2/src/core/application_tokens';
import {Serializer} from "angular2/src/web_workers/shared/serializer";
import {Log} from './utils';
-import {compilerProviders} from 'angular2/src/compiler/compiler';
+import {COMPILER_PROVIDERS} from 'angular2/src/compiler/compiler';
import {DomRenderer_} from "angular2/src/core/render/dom/dom_renderer";
import {DynamicComponentLoader_} from "angular2/src/core/linker/dynamic_component_loader";
import {AppViewManager_} from "angular2/src/core/linker/view_manager";
@@ -88,7 +88,7 @@ function _getAppBindings() {
}
return [
- compilerProviders(),
+ COMPILER_PROVIDERS,
provide(ChangeDetectorGenConfig, {useValue: new ChangeDetectorGenConfig(true, false, true)}),
provide(DOCUMENT, {useValue: appDoc}),
provide(DomRenderer, {useClass: DomRenderer_}),
diff --git a/modules/angular2/src/upgrade/upgrade_adapter.ts b/modules/angular2/src/upgrade/upgrade_adapter.ts
index ba20e1a35f..59e9195339 100644
--- a/modules/angular2/src/upgrade/upgrade_adapter.ts
+++ b/modules/angular2/src/upgrade/upgrade_adapter.ts
@@ -13,10 +13,10 @@ import {
Provider,
Type
} from 'angular2/angular2';
-import {applicationDomProviders} from 'angular2/src/core/application_common';
-import {applicationCommonProviders} from 'angular2/src/core/application_ref';
-import {compilerProviders} from 'angular2/src/compiler/compiler';
+import {APPLICATION_COMMON_PROVIDERS} from 'angular2/core';
+import {COMPILER_PROVIDERS} from 'angular2/src/compiler/compiler';
import {ObservableWrapper} from 'angular2/src/facade/async';
+import {BROWSER_PROVIDERS, BROWSER_APP_PROVIDERS} from 'angular2/platform/browser';
import {getComponentInfo, ComponentInfo} from './metadata';
import {onError, controllerKey} from './util';
@@ -296,11 +296,9 @@ export class UpgradeAdapter {
config?: angular.IAngularBootstrapConfig): UpgradeAdapterRef {
var upgrade = new UpgradeAdapterRef();
var ng1Injector: angular.IInjectorService = null;
- var platformRef: PlatformRef = platform();
+ var platformRef: PlatformRef = platform(BROWSER_PROVIDERS);
var applicationRef: ApplicationRef = platformRef.application([
- applicationCommonProviders(),
- applicationDomProviders(),
- compilerProviders(),
+ BROWSER_APP_PROVIDERS,
provide(NG1_INJECTOR, {useFactory: () => ng1Injector}),
provide(NG1_COMPILE, {useFactory: () => ng1Injector.get(NG1_COMPILE)}),
this.providers
diff --git a/modules/angular2/src/web_workers/ui/di_bindings.ts b/modules/angular2/src/web_workers/ui/di_bindings.ts
index 801a7d284f..abfee91c4c 100644
--- a/modules/angular2/src/web_workers/ui/di_bindings.ts
+++ b/modules/angular2/src/web_workers/ui/di_bindings.ts
@@ -40,7 +40,7 @@ import {
import {UrlResolver} from 'angular2/src/compiler/url_resolver';
import {Testability} from 'angular2/src/core/testability/testability';
import {XHR} from 'angular2/src/compiler/xhr';
-import {XHRImpl} from 'angular2/src/compiler/xhr_impl';
+import {XHRImpl} from 'angular2/src/platform/browser/xhr_impl';
import {Serializer} from 'angular2/src/web_workers/shared/serializer';
import {ON_WEB_WORKER} from 'angular2/src/web_workers/shared/api';
import {RenderProtoViewRefStore} from 'angular2/src/web_workers/shared/render_proto_view_ref_store';
diff --git a/modules/angular2/src/web_workers/worker/application_common.ts b/modules/angular2/src/web_workers/worker/application_common.ts
index 30b15f1ec9..f6cdac9aa4 100644
--- a/modules/angular2/src/web_workers/worker/application_common.ts
+++ b/modules/angular2/src/web_workers/worker/application_common.ts
@@ -26,11 +26,12 @@ import {
} from 'angular2/src/web_workers/shared/service_message_broker';
import {MessageBus} from 'angular2/src/web_workers/shared/message_bus';
import {
- platformCommon,
PlatformRef,
ApplicationRef,
- applicationCommonProviders
-} from 'angular2/src/core/application_ref';
+ APPLICATION_COMMON_PROVIDERS,
+ PLATFORM_COMMON_PROVIDERS
+} from 'angular2/core';
+import * as core from 'angular2/core';
import {Serializer} from "angular2/src/web_workers/shared/serializer";
import {ON_WEB_WORKER} from "angular2/src/web_workers/shared/api";
import {RenderProtoViewRefStore} from 'angular2/src/web_workers/shared/render_proto_view_ref_store';
@@ -42,7 +43,7 @@ import {SETUP_CHANNEL} from 'angular2/src/web_workers/shared/messaging_api';
import {WebWorkerEventDispatcher} from 'angular2/src/web_workers/worker/event_dispatcher';
import {ComponentRef} from 'angular2/src/core/linker/dynamic_component_loader';
import {NgZone} from 'angular2/src/core/zone/ng_zone';
-import {compilerProviders} from 'angular2/src/compiler/compiler';
+import {COMPILER_PROVIDERS} from 'angular2/src/compiler/compiler';
/**
* Initialize the Angular 'platform' on the page in a manner suitable for applications
@@ -73,15 +74,17 @@ import {compilerProviders} from 'angular2/src/compiler/compiler';
* them if a platform did not exist already. If it did exist, however, an error will be
* thrown.
*
- *##For Web Worker Appplications
+ *##For Web Worker Applications
*
* This version of `platform` initializes Angular for use with applications
* that do not directly touch the DOM, such as applications which run in a
* web worker context. Applications that need direct access to the DOM should
* use `platform` from `core/application_common` instead.
*/
-export function platform(bindings?: Array): PlatformRef {
- return platformCommon(bindings);
+export function platform(providers?: Array): PlatformRef {
+ let platformProviders =
+ isPresent(providers) ? [PLATFORM_COMMON_PROVIDERS, providers] : PLATFORM_COMMON_PROVIDERS;
+ return core.platform(platformProviders);
}
class PrintLogger {
@@ -94,7 +97,7 @@ class PrintLogger {
function webWorkerProviders(appComponentType, bus: MessageBus,
initData: {[key: string]: any}): Array {
return [
- compilerProviders(),
+ COMPILER_PROVIDERS,
Serializer,
provide(MessageBus, {useValue: bus}),
provide(ClientMessageBrokerFactory, {useClass: ClientMessageBrokerFactory_}),
@@ -129,7 +132,7 @@ export function bootstrapWebWorkerCommon(
var emitter = bus.from(SETUP_CHANNEL);
subscription = ObservableWrapper.subscribe(emitter, (message: {[key: string]: any}) => {
var bindings =
- [applicationCommonProviders(), webWorkerProviders(appComponentType, bus, message)];
+ [APPLICATION_COMMON_PROVIDERS, webWorkerProviders(appComponentType, bus, message)];
if (isPresent(appProviders)) {
bindings.push(appProviders);
}
diff --git a/modules/angular2/test/core/application_spec.ts b/modules/angular2/test/platform/bootstrap_spec.ts
similarity index 93%
rename from modules/angular2/test/core/application_spec.ts
rename to modules/angular2/test/platform/bootstrap_spec.ts
index 1ed6f3a5db..09b01f2401 100644
--- a/modules/angular2/test/core/application_spec.ts
+++ b/modules/angular2/test/platform/bootstrap_spec.ts
@@ -11,10 +11,10 @@ import {
xit
} from 'angular2/testing_internal';
import {IS_DART, isPresent, stringify} from 'angular2/src/facade/lang';
-import {bootstrap} from 'angular2/bootstrap';
-import {platform, applicationDomProviders} from 'angular2/src/core/application_common';
-import {applicationCommonProviders, ApplicationRef} from 'angular2/src/core/application_ref';
-import {Component, Directive, View} from 'angular2/core';
+import {bootstrap} from 'angular2/platform/browser';
+import {ApplicationRef} from 'angular2/src/core/application_ref';
+import {Component, Directive, View, platform} from 'angular2/core';
+import {BROWSER_PROVIDERS, BROWSER_APP_PROVIDERS} from 'angular2/platform/browser';
import {DOM} from 'angular2/src/core/dom/dom_adapter';
import {DOCUMENT} from 'angular2/render';
import {PromiseWrapper} from 'angular2/src/facade/async';
@@ -22,7 +22,6 @@ import {provide, Inject, Injector} from 'angular2/core';
import {ExceptionHandler} from 'angular2/src/facade/exceptions';
import {Testability, TestabilityRegistry} from 'angular2/src/core/testability/testability';
import {ComponentRef_} from "angular2/src/core/linker/dynamic_component_loader";
-import {compilerProviders} from 'angular2/src/compiler/compiler';
@Component({selector: 'hello-app'})
@View({template: '{{greeting}} world!'})
@@ -163,14 +162,10 @@ export function main() {
async.done();
});
}));
+
it('should unregister change detectors when components are disposed',
inject([AsyncTestCompleter], (async) => {
- var app = platform().application([
- applicationCommonProviders(),
- applicationDomProviders(),
- compilerProviders(),
- testProviders
- ]);
+ var app = platform(BROWSER_PROVIDERS).application([BROWSER_APP_PROVIDERS, testProviders]);
app.bootstrap(HelloRootCmp)
.then((ref) => {
ref.dispose();
diff --git a/modules/angular2/test/compiler/xhr_impl_spec.ts b/modules/angular2/test/platform/xhr_impl_spec.ts
similarity index 94%
rename from modules/angular2/test/compiler/xhr_impl_spec.ts
rename to modules/angular2/test/platform/xhr_impl_spec.ts
index 3ac4283645..91906410c0 100644
--- a/modules/angular2/test/compiler/xhr_impl_spec.ts
+++ b/modules/angular2/test/platform/xhr_impl_spec.ts
@@ -10,7 +10,7 @@ import {
xit
} from 'angular2/testing_internal';
-import {XHRImpl} from 'angular2/src/compiler/xhr_impl';
+import {XHRImpl} from 'angular2/src/platform/browser/xhr_impl';
import {PromiseWrapper} from 'angular2/src/facade/async';
export function main() {
diff --git a/modules/angular2/test/public_api_spec.ts b/modules/angular2/test/public_api_spec.ts
index 7b53f8df29..7b80767e6c 100644
--- a/modules/angular2/test/public_api_spec.ts
+++ b/modules/angular2/test/public_api_spec.ts
@@ -97,6 +97,7 @@ var NG_ALL = [
'ApplicationRef.injector:js',
'ApplicationRef.zone:js',
'ApplicationRef.componentTypes:js',
+ 'APPLICATION_COMMON_PROVIDERS',
/*
Abstract methods
'ApplicationRef.bootstrap()',
@@ -126,6 +127,8 @@ var NG_ALL = [
'Binding.toClass',
'Binding.toFactory',
'Binding.toValue',
+ 'BROWSER_APP_PROVIDERS',
+ 'BROWSER_PROVIDERS',
'Provider',
'Provider.dependencies',
'Provider.multi',
@@ -1232,7 +1235,6 @@ var NG_ALL = [
'WrappedValue.wrapped=',
'WtfScopeFn:dart',
'ZeroArgFunction:dart',
- 'applicationCommonProviders()',
'asNativeElements()',
'bind()',
'provide()',
@@ -1242,10 +1244,9 @@ var NG_ALL = [
'inspectElement()',
'inspectNativeElement()',
'platform():js',
- 'platformProviders()',
- 'platformCommon()',
'resolveForwardRef():js',
'wtfCreateScope():js',
+ 'PLATFORM_COMMON_PROVIDERS',
'wtfCreateScope:dart',
'wtfEndTimeRange():js',
'wtfEndTimeRange:dart',
@@ -1272,6 +1273,7 @@ var NG_ALL = [
'OnInit:dart',
'PipeOnDestroy:dart',
'PipeTransform:dart',
+ 'reflector',
'RenderBeginCmd:dart',
'RenderBeginCmd.isBound',
'RenderBeginCmd.ngContentIndex',
@@ -1347,6 +1349,54 @@ var NG_ALL = [
'Stream.toSet():dart',
'Stream.transform():dart',
'Stream.where():dart',
+
+ "GetterFn:dart",
+ "MethodFn:dart",
+ "NoReflectionCapabilities:dart",
+ "NoReflectionCapabilities.annotations():dart",
+ "NoReflectionCapabilities.factory():dart",
+ "NoReflectionCapabilities.getter():dart",
+ "NoReflectionCapabilities.importUri():dart",
+ "NoReflectionCapabilities.interfaces():dart",
+ "NoReflectionCapabilities.isReflectionEnabled():dart",
+ "NoReflectionCapabilities.method():dart",
+ "NoReflectionCapabilities.moduleId():dart",
+ "NoReflectionCapabilities.parameters():dart",
+ "NoReflectionCapabilities.propMetadata():dart",
+ "NoReflectionCapabilities.setter():dart",
+ "PlatformReflectionCapabilities:dart",
+ "ReflectionInfo:dart",
+ "ReflectionInfo.annotations:dart",
+ "ReflectionInfo.annotations=:dart",
+ "ReflectionInfo.factory:dart",
+ "ReflectionInfo.factory=:dart",
+ "ReflectionInfo.interfaces:dart",
+ "ReflectionInfo.interfaces=:dart",
+ "ReflectionInfo.parameters:dart",
+ "ReflectionInfo.parameters=:dart",
+ "ReflectionInfo.propMetadata:dart",
+ "ReflectionInfo.propMetadata=:dart",
+ "Reflector:dart",
+ "Reflector.annotations():dart",
+ "Reflector.factory():dart",
+ "Reflector.getter():dart",
+ "Reflector.importUri():dart",
+ "Reflector.interfaces():dart",
+ "Reflector.isReflectionEnabled():dart",
+ "Reflector.listUnusedKeys():dart",
+ "Reflector.method():dart",
+ "Reflector.parameters():dart",
+ "Reflector.propMetadata():dart",
+ "Reflector.reflectionCapabilities:dart",
+ "Reflector.reflectionCapabilities=:dart",
+ "Reflector.registerFunction():dart",
+ "Reflector.registerGetters():dart",
+ "Reflector.registerMethods():dart",
+ "Reflector.registerSetters():dart",
+ "Reflector.registerType():dart",
+ "Reflector.setter():dart",
+ "Reflector.trackUsage():dart",
+ "SetterFn:dart"
];
var NG_UPGRADE = [
diff --git a/modules/angular2/test/testing/testing_public_spec.ts b/modules/angular2/test/testing/testing_public_spec.ts
index 3d5ca49552..c517187faa 100644
--- a/modules/angular2/test/testing/testing_public_spec.ts
+++ b/modules/angular2/test/testing/testing_public_spec.ts
@@ -17,7 +17,7 @@ import {
import {Injectable, NgIf, bind} from 'angular2/core';
import {Directive, Component, View, ViewMetadata} from 'angular2/angular2';
import {XHR} from 'angular2/src/compiler/xhr';
-import {XHRImpl} from 'angular2/src/compiler/xhr_impl';
+import {XHRImpl} from 'angular2/src/platform/browser/xhr_impl';
// Services, and components for the tests.
diff --git a/tools/broccoli/html-replace/SCRIPTS.html b/tools/broccoli/html-replace/SCRIPTS.html
index 6434c63eca..296b260221 100644
--- a/tools/broccoli/html-replace/SCRIPTS.html
+++ b/tools/broccoli/html-replace/SCRIPTS.html
@@ -11,6 +11,7 @@
// not even be in src/*. Move them!
'angular2/src/testing/benchmark_util': {defaultExtension: 'js'},
'angular2/src/facade/browser': {defaultExtension: 'js'},
+ 'angular2/bootstrap': {defaultExtension: 'js'},
}
});
diff --git a/tools/broccoli/html-replace/SCRIPTS_benchmarks.html b/tools/broccoli/html-replace/SCRIPTS_benchmarks.html
index 66c7ebdd28..a62d620412 100644
--- a/tools/broccoli/html-replace/SCRIPTS_benchmarks.html
+++ b/tools/broccoli/html-replace/SCRIPTS_benchmarks.html
@@ -12,6 +12,7 @@
// not even be in src/*. Move them!
'angular2/src/testing/benchmark_util': {defaultExtension: 'js'},
'angular2/src/facade/browser': {defaultExtension: 'js'},
+ 'angular2/bootstrap': {defaultExtension: 'js'},
}
});
diff --git a/tools/broccoli/trees/node_tree.ts b/tools/broccoli/trees/node_tree.ts
index 5932608acb..3ff5f7c1f8 100644
--- a/tools/broccoli/trees/node_tree.ts
+++ b/tools/broccoli/trees/node_tree.ts
@@ -24,7 +24,7 @@ module.exports = function makeNodeTree(destinationPath) {
'angular2/test/core/zone/**',
'angular2/test/testing/fake_async_spec.ts',
'angular2/test/testing/testing_public_spec.ts',
- 'angular2/test/compiler/xhr_impl_spec.ts',
+ 'angular2/test/platform/xhr_impl_spec.ts',
'angular2/test/common/forms/**',
'angular2/test/tools/tools_spec.ts',
'angular1_router/**',