UNPKG

angular2

Version:

Angular 2 - a web framework for modern web apps

113 lines 5.74 kB
import { provide } from 'angular2/src/core/di'; import { FORM_PROVIDERS } from 'angular2/src/common/forms'; import { isPresent, print } from 'angular2/src/facade/lang'; import { ExceptionHandler } from 'angular2/src/facade/exceptions'; import { PromiseWrapper } from 'angular2/src/facade/async'; import { XHR } from 'angular2/src/compiler/xhr'; import { WebWorkerXHRImpl } from 'angular2/src/web_workers/worker/xhr_impl'; import { AppRootUrl } from 'angular2/src/compiler/app_root_url'; import { WebWorkerRenderer } from './renderer'; import { Renderer } from 'angular2/src/core/render/api'; import { ClientMessageBrokerFactory, ClientMessageBrokerFactory_ } from 'angular2/src/web_workers/shared/client_message_broker'; import { ServiceMessageBrokerFactory, ServiceMessageBrokerFactory_ } from 'angular2/src/web_workers/shared/service_message_broker'; import { MessageBus } from 'angular2/src/web_workers/shared/message_bus'; import { platformCommon, applicationCommonProviders } from 'angular2/src/core/application_ref'; 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'; import { RenderViewWithFragmentsStore } from 'angular2/src/web_workers/shared/render_view_with_fragments_store'; import { ObservableWrapper } from 'angular2/src/facade/async'; import { SETUP_CHANNEL } from 'angular2/src/web_workers/shared/messaging_api'; import { WebWorkerEventDispatcher } from 'angular2/src/web_workers/worker/event_dispatcher'; import { compilerProviders } from 'angular2/src/compiler/compiler'; /** * Initialize the Angular 'platform' on the page in a manner suitable for applications * running in a web worker. Applications running on a web worker do not have direct * access to DOM APIs. * * 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 age 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. * *##For Web Worker Appplications * * 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) { return platformCommon(bindings); } class PrintLogger { constructor() { this.log = print; this.logError = print; this.logGroup = print; } logGroupEnd() { } } function webWorkerProviders(appComponentType, bus, initData) { return [ compilerProviders(), Serializer, provide(MessageBus, { useValue: bus }), provide(ClientMessageBrokerFactory, { useClass: ClientMessageBrokerFactory_ }), provide(ServiceMessageBrokerFactory, { useClass: ServiceMessageBrokerFactory_ }), WebWorkerRenderer, provide(Renderer, { useExisting: WebWorkerRenderer }), provide(ON_WEB_WORKER, { useValue: true }), RenderViewWithFragmentsStore, RenderProtoViewRefStore, provide(ExceptionHandler, { useFactory: () => new ExceptionHandler(new PrintLogger()), deps: [] }), WebWorkerXHRImpl, provide(XHR, { useExisting: WebWorkerXHRImpl }), provide(AppRootUrl, { useValue: new AppRootUrl(initData['rootUrl']) }), WebWorkerEventDispatcher, FORM_PROVIDERS ]; } export function bootstrapWebWorkerCommon(appComponentType, bus, appProviders = null) { var bootstrapProcess = PromiseWrapper.completer(); var appPromise = platform().asyncApplication((zone) => { // TODO(rado): prepopulate template cache, so applications with only // index.html and main.js are possible. // bus.attachToZone(zone); bus.initChannel(SETUP_CHANNEL, false); var subscription; var emitter = bus.from(SETUP_CHANNEL); subscription = ObservableWrapper.subscribe(emitter, (message) => { var bindings = [applicationCommonProviders(), webWorkerProviders(appComponentType, bus, message)]; if (isPresent(appProviders)) { bindings.push(appProviders); } bootstrapProcess.resolve(bindings); ObservableWrapper.dispose(subscription); }); ObservableWrapper.callNext(bus.to(SETUP_CHANNEL), "ready"); return bootstrapProcess.promise; }); return PromiseWrapper.then(appPromise, (app) => app.bootstrap(appComponentType)); } //# sourceMappingURL=application_common.js.map