UNPKG

angular2

Version:

Angular 2 - a web framework for modern web apps

67 lines (66 loc) 3.04 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; import { PostMessageBus, PostMessageBusSink, PostMessageBusSource } from 'angular2/src/web_workers/shared/post_message_bus'; import { MessageBus } from 'angular2/src/web_workers/shared/message_bus'; import { APP_INITIALIZER } from 'angular2/core'; import { Injector, Injectable, Provider } from 'angular2/src/core/di'; import { WORKER_RENDER_APPLICATION_COMMON, WORKER_SCRIPT, initializeGenericWorkerRenderer } from 'angular2/src/platform/worker_render_common'; import { BaseException } from 'angular2/src/facade/exceptions'; import { CONST_EXPR } from 'angular2/src/facade/lang'; /** * Wrapper class that exposes the Worker * and underlying {@link MessageBus} for lower level message passing. */ export let WebWorkerInstance = class WebWorkerInstance { /** @internal */ init(worker, bus) { this.worker = worker; this.bus = bus; } }; WebWorkerInstance = __decorate([ Injectable(), __metadata('design:paramtypes', []) ], WebWorkerInstance); /** * An array of providers that should be passed into `application()` when initializing a new Worker. */ export const WORKER_RENDER_APPLICATION = CONST_EXPR([ WORKER_RENDER_APPLICATION_COMMON, WebWorkerInstance, new Provider(APP_INITIALIZER, { useFactory: (injector) => () => initWebWorkerApplication(injector), multi: true, deps: [Injector] }), new Provider(MessageBus, { useFactory: (instance) => instance.bus, deps: [WebWorkerInstance] }) ]); function initWebWorkerApplication(injector) { var scriptUri; try { scriptUri = injector.get(WORKER_SCRIPT); } catch (e) { throw new BaseException("You must provide your WebWorker's initialization script with the WORKER_SCRIPT token"); } let instance = injector.get(WebWorkerInstance); spawnWebWorker(scriptUri, instance); initializeGenericWorkerRenderer(injector); } /** * Spawns a new class and initializes the WebWorkerInstance */ function spawnWebWorker(uri, instance) { var webWorker = new Worker(uri); var sink = new PostMessageBusSink(webWorker); var source = new PostMessageBusSource(webWorker); var bus = new PostMessageBus(sink, source); instance.init(webWorker, bus); }