refactor(platform-webworker): misc cleanup
This commit is contained in:
parent
1bdf7061b8
commit
f38dbfbd64
@ -29,9 +29,10 @@ export {platformWorkerUi} from './worker_render';
|
|||||||
export function bootstrapWorkerUi(
|
export function bootstrapWorkerUi(
|
||||||
workerScriptUri: string, customProviders: Provider[] = []): Promise<PlatformRef> {
|
workerScriptUri: string, customProviders: Provider[] = []): Promise<PlatformRef> {
|
||||||
// For now, just creates the worker ui platform...
|
// For now, just creates the worker ui platform...
|
||||||
return Promise.resolve(platformWorkerUi(([{
|
const platform = platformWorkerUi([
|
||||||
provide: WORKER_SCRIPT,
|
{provide: WORKER_SCRIPT, useValue: workerScriptUri},
|
||||||
useValue: workerScriptUri,
|
...customProviders,
|
||||||
}] as Provider[])
|
]);
|
||||||
.concat(customProviders)));
|
|
||||||
|
return Promise.resolve(platform);
|
||||||
}
|
}
|
||||||
|
@ -13,8 +13,6 @@ export const RenderDebugInfo: typeof r.RenderDebugInfo = r.RenderDebugInfo;
|
|||||||
|
|
||||||
export const ReflectionCapabilities: typeof r.ReflectionCapabilities = r.ReflectionCapabilities;
|
export const ReflectionCapabilities: typeof r.ReflectionCapabilities = r.ReflectionCapabilities;
|
||||||
|
|
||||||
export type DebugDomRootRenderer = typeof r._DebugDomRootRenderer;
|
|
||||||
export const DebugDomRootRenderer: typeof r.DebugDomRootRenderer = r.DebugDomRootRenderer;
|
|
||||||
export const reflector: typeof r.reflector = r.reflector;
|
export const reflector: typeof r.reflector = r.reflector;
|
||||||
|
|
||||||
export type NoOpAnimationPlayer = typeof r._NoOpAnimationPlayer;
|
export type NoOpAnimationPlayer = typeof r._NoOpAnimationPlayer;
|
||||||
|
@ -8,4 +8,4 @@
|
|||||||
|
|
||||||
import {InjectionToken} from '@angular/core';
|
import {InjectionToken} from '@angular/core';
|
||||||
|
|
||||||
export const ON_WEB_WORKER = new InjectionToken('WebWorker.onWebWorker');
|
export const ON_WEB_WORKER = new InjectionToken<boolean>('WebWorker.onWebWorker');
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
import {Injectable, Type} from '@angular/core';
|
import {Injectable, Type} from '@angular/core';
|
||||||
|
|
||||||
import {EventEmitter} from '../../facade/async';
|
import {EventEmitter} from '../../facade/async';
|
||||||
import {isPresent, print, stringify} from '../../facade/lang';
|
import {stringify} from '../../facade/lang';
|
||||||
|
|
||||||
import {MessageBus} from './message_bus';
|
import {MessageBus} from './message_bus';
|
||||||
import {Serializer} from './serializer';
|
import {Serializer} from './serializer';
|
||||||
@ -55,13 +55,12 @@ interface PromiseCompleter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class ClientMessageBroker_ extends ClientMessageBroker {
|
export class ClientMessageBroker_ extends ClientMessageBroker {
|
||||||
private _pending: Map<string, PromiseCompleter> = new Map<string, PromiseCompleter>();
|
private _pending = new Map<string, PromiseCompleter>();
|
||||||
private _sink: EventEmitter<any>;
|
private _sink: EventEmitter<any>;
|
||||||
/** @internal */
|
/** @internal */
|
||||||
public _serializer: Serializer;
|
public _serializer: Serializer;
|
||||||
|
|
||||||
constructor(
|
constructor(messageBus: MessageBus, _serializer: Serializer, public channel: any) {
|
||||||
messageBus: MessageBus, _serializer: Serializer, public channel: any /** TODO #9100 */) {
|
|
||||||
super();
|
super();
|
||||||
this._sink = messageBus.to(channel);
|
this._sink = messageBus.to(channel);
|
||||||
this._serializer = _serializer;
|
this._serializer = _serializer;
|
||||||
@ -74,7 +73,7 @@ export class ClientMessageBroker_ extends ClientMessageBroker {
|
|||||||
const time: string = stringify(new Date().getTime());
|
const time: string = stringify(new Date().getTime());
|
||||||
let iteration: number = 0;
|
let iteration: number = 0;
|
||||||
let id: string = name + time + stringify(iteration);
|
let id: string = name + time + stringify(iteration);
|
||||||
while (isPresent((this as any /** TODO #9100 */)._pending[id])) {
|
while (this._pending.has(id)) {
|
||||||
id = `${name}${time}${iteration}`;
|
id = `${name}${time}${iteration}`;
|
||||||
iteration++;
|
iteration++;
|
||||||
}
|
}
|
||||||
@ -82,8 +81,8 @@ export class ClientMessageBroker_ extends ClientMessageBroker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
runOnService(args: UiArguments, returnType: Type<any>): Promise<any> {
|
runOnService(args: UiArguments, returnType: Type<any>): Promise<any> {
|
||||||
const fnArgs: any[] /** TODO #9100 */ = [];
|
const fnArgs: any[] = [];
|
||||||
if (isPresent(args.args)) {
|
if (args.args) {
|
||||||
args.args.forEach(argument => {
|
args.args.forEach(argument => {
|
||||||
if (argument.type != null) {
|
if (argument.type != null) {
|
||||||
fnArgs.push(this._serializer.serialize(argument.value, argument.type));
|
fnArgs.push(this._serializer.serialize(argument.value, argument.type));
|
||||||
@ -100,26 +99,26 @@ export class ClientMessageBroker_ extends ClientMessageBroker {
|
|||||||
promise = new Promise((resolve, reject) => { completer = {resolve, reject}; });
|
promise = new Promise((resolve, reject) => { completer = {resolve, reject}; });
|
||||||
id = this._generateMessageId(args.method);
|
id = this._generateMessageId(args.method);
|
||||||
this._pending.set(id, completer);
|
this._pending.set(id, completer);
|
||||||
|
|
||||||
promise.catch((err) => {
|
promise.catch((err) => {
|
||||||
print(err);
|
if (console && console.log) {
|
||||||
|
// tslint:disable-next-line:no-console
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
|
||||||
completer.reject(err);
|
completer.reject(err);
|
||||||
});
|
});
|
||||||
|
|
||||||
promise = promise.then((value: any) => {
|
promise = promise.then(
|
||||||
if (this._serializer == null) {
|
(value: any) =>
|
||||||
return value;
|
this._serializer ? value : this._serializer.deserialize(value, returnType));
|
||||||
} else {
|
|
||||||
return this._serializer.deserialize(value, returnType);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
promise = null;
|
promise = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(jteplitz602): Create a class for these messages so we don't keep using StringMap #3685
|
|
||||||
const message = {'method': args.method, 'args': fnArgs};
|
const message = {'method': args.method, 'args': fnArgs};
|
||||||
if (id != null) {
|
if (id != null) {
|
||||||
(message as any /** TODO #9100 */)['id'] = id;
|
(message as any)['id'] = id;
|
||||||
}
|
}
|
||||||
this._sink.emit(message);
|
this._sink.emit(message);
|
||||||
|
|
||||||
@ -128,7 +127,6 @@ export class ClientMessageBroker_ extends ClientMessageBroker {
|
|||||||
|
|
||||||
private _handleMessage(message: {[key: string]: any}): void {
|
private _handleMessage(message: {[key: string]: any}): void {
|
||||||
const data = new MessageData(message);
|
const data = new MessageData(message);
|
||||||
// TODO(jteplitz602): replace these strings with messaging constants #3685
|
|
||||||
if (data.type === 'result' || data.type === 'error') {
|
if (data.type === 'result' || data.type === 'error') {
|
||||||
const id = data.id;
|
const id = data.id;
|
||||||
if (this._pending.has(id)) {
|
if (this._pending.has(id)) {
|
||||||
@ -167,7 +165,7 @@ class MessageData {
|
|||||||
* @experimental WebWorker support in Angular is experimental.
|
* @experimental WebWorker support in Angular is experimental.
|
||||||
*/
|
*/
|
||||||
export class FnArg {
|
export class FnArg {
|
||||||
constructor(public value: any /** TODO #9100 */, public type: Type<any>) {}
|
constructor(public value: any, public type: Type<any>) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -10,14 +10,9 @@ import {Injectable} from '@angular/core';
|
|||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class RenderStore {
|
export class RenderStore {
|
||||||
private _nextIndex: number = 0;
|
private _nextIndex = 0;
|
||||||
private _lookupById: Map<number, any>;
|
private _lookupById = new Map<number, any>();
|
||||||
private _lookupByObject: Map<any, number>;
|
private _lookupByObject = new Map<any, number>();
|
||||||
|
|
||||||
constructor() {
|
|
||||||
this._lookupById = new Map<number, any>();
|
|
||||||
this._lookupByObject = new Map<any, number>();
|
|
||||||
}
|
|
||||||
|
|
||||||
allocateId(): number { return this._nextIndex++; }
|
allocateId(): number { return this._nextIndex++; }
|
||||||
|
|
||||||
@ -33,21 +28,8 @@ export class RenderStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
deserialize(id: number): any {
|
deserialize(id: number): any {
|
||||||
if (id == null) {
|
return id == null || !this._lookupById.has(id) ? null : this._lookupById.get(id);
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this._lookupById.has(id)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this._lookupById.get(id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
serialize(obj: any): number {
|
serialize(obj: any): number { return obj == null ? null : this._lookupByObject.get(obj); }
|
||||||
if (obj == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return this._lookupByObject.get(obj);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import {Injectable, RenderComponentType, Type, ViewEncapsulation} from '@angular/core';
|
import {Injectable, RenderComponentType, Type, ViewEncapsulation} from '@angular/core';
|
||||||
|
|
||||||
import {isPresent} from '../../facade/lang';
|
import {stringify} from '../../facade/lang';
|
||||||
|
|
||||||
import {RenderStore} from './render_store';
|
import {RenderStore} from './render_store';
|
||||||
import {LocationType} from './serialized_types';
|
import {LocationType} from './serialized_types';
|
||||||
@ -25,11 +25,11 @@ export class Serializer {
|
|||||||
constructor(private _renderStore: RenderStore) {}
|
constructor(private _renderStore: RenderStore) {}
|
||||||
|
|
||||||
serialize(obj: any, type: any): Object {
|
serialize(obj: any, type: any): Object {
|
||||||
if (!isPresent(obj)) {
|
if (obj == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (Array.isArray(obj)) {
|
if (Array.isArray(obj)) {
|
||||||
return (<any[]>obj).map(v => this.serialize(v, type));
|
return obj.map(v => this.serialize(v, type));
|
||||||
}
|
}
|
||||||
if (type == PRIMITIVE) {
|
if (type == PRIMITIVE) {
|
||||||
return obj;
|
return obj;
|
||||||
@ -46,16 +46,16 @@ export class Serializer {
|
|||||||
if (type === LocationType) {
|
if (type === LocationType) {
|
||||||
return this._serializeLocation(obj);
|
return this._serializeLocation(obj);
|
||||||
}
|
}
|
||||||
throw new Error('No serializer for ' + type.toString());
|
throw new Error(`No serializer for type ${stringify}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
deserialize(map: any, type: any, data?: any): any {
|
deserialize(map: any, type: any, data?: any): any {
|
||||||
if (!isPresent(map)) {
|
if (map == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Array.isArray(map)) {
|
if (Array.isArray(map)) {
|
||||||
return (<any[]>map).map(val => this.deserialize(val, type, data));
|
return map.map(val => this.deserialize(val, type, data));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type === PRIMITIVE) {
|
if (type === PRIMITIVE) {
|
||||||
@ -91,7 +91,7 @@ export class Serializer {
|
|||||||
'pathname': loc.pathname,
|
'pathname': loc.pathname,
|
||||||
'search': loc.search,
|
'search': loc.search,
|
||||||
'hash': loc.hash,
|
'hash': loc.hash,
|
||||||
'origin': loc.origin
|
'origin': loc.origin,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ export class Serializer {
|
|||||||
'templateUrl': obj.templateUrl,
|
'templateUrl': obj.templateUrl,
|
||||||
'slotCount': obj.slotCount,
|
'slotCount': obj.slotCount,
|
||||||
'encapsulation': this.serialize(obj.encapsulation, ViewEncapsulation),
|
'encapsulation': this.serialize(obj.encapsulation, ViewEncapsulation),
|
||||||
'styles': this.serialize(obj.styles, PRIMITIVE)
|
'styles': this.serialize(obj.styles, PRIMITIVE),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,9 +56,7 @@ export class ServiceMessageBroker_ extends ServiceMessageBroker {
|
|||||||
private _sink: EventEmitter<any>;
|
private _sink: EventEmitter<any>;
|
||||||
private _methods: Map<string, Function> = new Map<string, Function>();
|
private _methods: Map<string, Function> = new Map<string, Function>();
|
||||||
|
|
||||||
constructor(
|
constructor(messageBus: MessageBus, private _serializer: Serializer, public channel: string) {
|
||||||
messageBus: MessageBus, private _serializer: Serializer,
|
|
||||||
public channel: any /** TODO #9100 */) {
|
|
||||||
super();
|
super();
|
||||||
this._sink = messageBus.to(channel);
|
this._sink = messageBus.to(channel);
|
||||||
const source = messageBus.from(channel);
|
const source = messageBus.from(channel);
|
||||||
@ -71,14 +69,14 @@ export class ServiceMessageBroker_ extends ServiceMessageBroker {
|
|||||||
this._methods.set(methodName, (message: ReceivedMessage) => {
|
this._methods.set(methodName, (message: ReceivedMessage) => {
|
||||||
const serializedArgs = message.args;
|
const serializedArgs = message.args;
|
||||||
const numArgs = signature === null ? 0 : signature.length;
|
const numArgs = signature === null ? 0 : signature.length;
|
||||||
const deserializedArgs: any[] = new Array(numArgs);
|
const deserializedArgs = new Array(numArgs);
|
||||||
for (let i = 0; i < numArgs; i++) {
|
for (let i = 0; i < numArgs; i++) {
|
||||||
const serializedArg = serializedArgs[i];
|
const serializedArg = serializedArgs[i];
|
||||||
deserializedArgs[i] = this._serializer.deserialize(serializedArg, signature[i]);
|
deserializedArgs[i] = this._serializer.deserialize(serializedArg, signature[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
const promise = method(...deserializedArgs);
|
const promise = method(...deserializedArgs);
|
||||||
if (isPresent(returnType) && promise) {
|
if (returnType && promise) {
|
||||||
this._wrapWebWorkerPromise(message.id, promise, returnType);
|
this._wrapWebWorkerPromise(message.id, promise, returnType);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -93,8 +91,11 @@ export class ServiceMessageBroker_ extends ServiceMessageBroker {
|
|||||||
|
|
||||||
private _wrapWebWorkerPromise(id: string, promise: Promise<any>, type: Type<any>): void {
|
private _wrapWebWorkerPromise(id: string, promise: Promise<any>, type: Type<any>): void {
|
||||||
promise.then((result: any) => {
|
promise.then((result: any) => {
|
||||||
this._sink.emit(
|
this._sink.emit({
|
||||||
{'type': 'result', 'value': this._serializer.serialize(result, type), 'id': id});
|
'type': 'result',
|
||||||
|
'value': this._serializer.serialize(result, type),
|
||||||
|
'id': id,
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,13 +17,13 @@ export class EventDispatcher {
|
|||||||
this._sink.emit({
|
this._sink.emit({
|
||||||
'element': this._serializer.serialize(element, RenderStoreObject),
|
'element': this._serializer.serialize(element, RenderStoreObject),
|
||||||
'animationPlayer': this._serializer.serialize(player, RenderStoreObject),
|
'animationPlayer': this._serializer.serialize(player, RenderStoreObject),
|
||||||
'phaseName': phaseName
|
'phaseName': phaseName,
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
dispatchRenderEvent(element: any, eventTarget: string, eventName: string, event: any): boolean {
|
dispatchRenderEvent(element: any, eventTarget: string, eventName: string, event: any): boolean {
|
||||||
let serializedEvent: any /** TODO #9100 */;
|
let serializedEvent: any;
|
||||||
// TODO (jteplitz602): support custom events #3350
|
// TODO (jteplitz602): support custom events #3350
|
||||||
switch (event.type) {
|
switch (event.type) {
|
||||||
case 'click':
|
case 'click':
|
||||||
@ -109,7 +109,7 @@ export class EventDispatcher {
|
|||||||
'element': this._serializer.serialize(element, RenderStoreObject),
|
'element': this._serializer.serialize(element, RenderStoreObject),
|
||||||
'eventName': eventName,
|
'eventName': eventName,
|
||||||
'eventTarget': eventTarget,
|
'eventTarget': eventTarget,
|
||||||
'event': serializedEvent
|
'event': serializedEvent,
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO(kegluneq): Eventually, we want the user to indicate from the UI side whether the event
|
// TODO(kegluneq): Eventually, we want the user to indicate from the UI side whether the event
|
||||||
|
@ -61,10 +61,10 @@ function addTarget(e: Event, serializedEvent: {[key: string]: any}): {[key: stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
function serializeEvent(e: any, properties: string[]): {[key: string]: any} {
|
function serializeEvent(e: any, properties: string[]): {[key: string]: any} {
|
||||||
const serialized = {};
|
const serialized: {[k: string]: any} = {};
|
||||||
for (let i = 0; i < properties.length; i++) {
|
for (let i = 0; i < properties.length; i++) {
|
||||||
const prop = properties[i];
|
const prop = properties[i];
|
||||||
(serialized as any /** TODO #9100 */)[prop] = e[prop];
|
serialized[prop] = e[prop];
|
||||||
}
|
}
|
||||||
return serialized;
|
return serialized;
|
||||||
}
|
}
|
||||||
|
@ -229,18 +229,16 @@ export class MessageBasedRenderer {
|
|||||||
|
|
||||||
private _listen(renderer: Renderer, renderElement: any, eventName: string, unlistenId: number) {
|
private _listen(renderer: Renderer, renderElement: any, eventName: string, unlistenId: number) {
|
||||||
const unregisterCallback = renderer.listen(
|
const unregisterCallback = renderer.listen(
|
||||||
renderElement, eventName,
|
renderElement, eventName, (event: any) => this._eventDispatcher.dispatchRenderEvent(
|
||||||
(event: any /** TODO #9100 */) =>
|
renderElement, null, eventName, event));
|
||||||
this._eventDispatcher.dispatchRenderEvent(renderElement, null, eventName, event));
|
|
||||||
this._renderStore.store(unregisterCallback, unlistenId);
|
this._renderStore.store(unregisterCallback, unlistenId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private _listenGlobal(
|
private _listenGlobal(
|
||||||
renderer: Renderer, eventTarget: string, eventName: string, unlistenId: number) {
|
renderer: Renderer, eventTarget: string, eventName: string, unlistenId: number) {
|
||||||
const unregisterCallback = renderer.listenGlobal(
|
const unregisterCallback = renderer.listenGlobal(
|
||||||
eventTarget, eventName,
|
eventTarget, eventName, (event: any) => this._eventDispatcher.dispatchRenderEvent(
|
||||||
(event: any /** TODO #9100 */) =>
|
null, eventTarget, eventName, event));
|
||||||
this._eventDispatcher.dispatchRenderEvent(null, eventTarget, eventName, event));
|
|
||||||
this._renderStore.store(unregisterCallback, unlistenId);
|
this._renderStore.store(unregisterCallback, unlistenId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,24 +7,23 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {PlatformLocation} from '@angular/common';
|
import {PlatformLocation} from '@angular/common';
|
||||||
import {APP_INITIALIZER, InjectionToken, NgZone} from '@angular/core';
|
import {APP_INITIALIZER, NgZone} from '@angular/core';
|
||||||
|
|
||||||
import {WebWorkerPlatformLocation} from './platform_location';
|
import {WebWorkerPlatformLocation} from './platform_location';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Those providers should be added when the router is used in a worker context in addition to the
|
* Those providers should be added when the router is used in a worker context in addition to the
|
||||||
* {@link ROUTER_PROVIDERS} and after them.
|
* {@link ROUTER_PROVIDERS} and after them.
|
||||||
* @experimental
|
* @experimental
|
||||||
*/
|
*/
|
||||||
export const WORKER_APP_LOCATION_PROVIDERS = [
|
export const WORKER_APP_LOCATION_PROVIDERS = [
|
||||||
{provide: PlatformLocation, useClass: WebWorkerPlatformLocation}, {
|
{provide: PlatformLocation, useClass: WebWorkerPlatformLocation},
|
||||||
|
{
|
||||||
provide: APP_INITIALIZER,
|
provide: APP_INITIALIZER,
|
||||||
useFactory: appInitFnFactory,
|
useFactory: appInitFnFactory,
|
||||||
multi: true,
|
multi: true,
|
||||||
deps: [PlatformLocation, NgZone]
|
deps: [PlatformLocation, NgZone]
|
||||||
}
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
function appInitFnFactory(platformLocation: WebWorkerPlatformLocation, zone: NgZone): () =>
|
function appInitFnFactory(platformLocation: WebWorkerPlatformLocation, zone: NgZone): () =>
|
||||||
|
@ -43,7 +43,7 @@ export class WebWorkerPlatformLocation extends PlatformLocation {
|
|||||||
listeners = this._hashChangeListeners;
|
listeners = this._hashChangeListeners;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (listeners !== null) {
|
if (listeners) {
|
||||||
const e = deserializeGenericEvent(msg['event']);
|
const e = deserializeGenericEvent(msg['event']);
|
||||||
// There was a popState or hashChange event, so the location object thas been updated
|
// There was a popState or hashChange event, so the location object thas been updated
|
||||||
this._location = this._serializer.deserialize(msg['location'], LocationType);
|
this._location = this._serializer.deserialize(msg['location'], LocationType);
|
||||||
@ -58,14 +58,13 @@ export class WebWorkerPlatformLocation extends PlatformLocation {
|
|||||||
init(): Promise<boolean> {
|
init(): Promise<boolean> {
|
||||||
const args: UiArguments = new UiArguments('getLocation');
|
const args: UiArguments = new UiArguments('getLocation');
|
||||||
|
|
||||||
const locationPromise: Promise<LocationType> = this._broker.runOnService(args, LocationType);
|
return this._broker.runOnService(args, LocationType)
|
||||||
return locationPromise.then(
|
.then(
|
||||||
(val: LocationType):
|
(val: LocationType) => {
|
||||||
boolean => {
|
|
||||||
this._location = val;
|
this._location = val;
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
(err): boolean => { throw new Error(err); });
|
err => { throw new Error(err); });
|
||||||
}
|
}
|
||||||
|
|
||||||
getBaseHrefFromDOM(): string {
|
getBaseHrefFromDOM(): string {
|
||||||
@ -77,29 +76,11 @@ export class WebWorkerPlatformLocation extends PlatformLocation {
|
|||||||
|
|
||||||
onHashChange(fn: LocationChangeListener): void { this._hashChangeListeners.push(fn); }
|
onHashChange(fn: LocationChangeListener): void { this._hashChangeListeners.push(fn); }
|
||||||
|
|
||||||
get pathname(): string {
|
get pathname(): string { return this._location ? this._location.pathname : null; }
|
||||||
if (this._location === null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this._location.pathname;
|
get search(): string { return this._location ? this._location.search : null; }
|
||||||
}
|
|
||||||
|
|
||||||
get search(): string {
|
get hash(): string { return this._location ? this._location.hash : null; }
|
||||||
if (this._location === null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this._location.search;
|
|
||||||
}
|
|
||||||
|
|
||||||
get hash(): string {
|
|
||||||
if (this._location === null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this._location.hash;
|
|
||||||
}
|
|
||||||
|
|
||||||
set pathname(newPath: string) {
|
set pathname(newPath: string) {
|
||||||
if (this._location === null) {
|
if (this._location === null) {
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
import {Injectable, RenderComponentType, Renderer, RootRenderer, ViewEncapsulation} from '@angular/core';
|
import {Injectable, RenderComponentType, Renderer, RootRenderer, ViewEncapsulation} from '@angular/core';
|
||||||
|
|
||||||
import {ListWrapper} from '../../facade/collection';
|
import {ListWrapper} from '../../facade/collection';
|
||||||
import {isPresent} from '../../facade/lang';
|
|
||||||
import {AnimationKeyframe, AnimationPlayer, AnimationStyles, RenderDebugInfo} from '../../private_import_core';
|
import {AnimationKeyframe, AnimationPlayer, AnimationStyles, RenderDebugInfo} from '../../private_import_core';
|
||||||
import {ClientMessageBrokerFactory, FnArg, UiArguments} from '../shared/client_message_broker';
|
import {ClientMessageBrokerFactory, FnArg, UiArguments} from '../shared/client_message_broker';
|
||||||
import {MessageBus} from '../shared/message_bus';
|
import {MessageBus} from '../shared/message_bus';
|
||||||
@ -21,7 +20,7 @@ import {deserializeGenericEvent} from './event_deserializer';
|
|||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class WebWorkerRootRenderer implements RootRenderer {
|
export class WebWorkerRootRenderer implements RootRenderer {
|
||||||
private _messageBroker: any /** TODO #9100 */;
|
private _messageBroker: ClientMessageBroker;
|
||||||
public globalEvents: NamedEventEmitter = new NamedEventEmitter();
|
public globalEvents: NamedEventEmitter = new NamedEventEmitter();
|
||||||
private _componentRenderers: Map<string, WebWorkerRenderer> =
|
private _componentRenderers: Map<string, WebWorkerRenderer> =
|
||||||
new Map<string, WebWorkerRenderer>();
|
new Map<string, WebWorkerRenderer>();
|
||||||
@ -39,6 +38,7 @@ export class WebWorkerRootRenderer implements RootRenderer {
|
|||||||
const element =
|
const element =
|
||||||
<WebWorkerRenderNode>this._serializer.deserialize(message['element'], RenderStoreObject);
|
<WebWorkerRenderNode>this._serializer.deserialize(message['element'], RenderStoreObject);
|
||||||
const playerData = message['animationPlayer'];
|
const playerData = message['animationPlayer'];
|
||||||
|
|
||||||
if (playerData) {
|
if (playerData) {
|
||||||
const phaseName = message['phaseName'];
|
const phaseName = message['phaseName'];
|
||||||
const player = <AnimationPlayer>this._serializer.deserialize(playerData, RenderStoreObject);
|
const player = <AnimationPlayer>this._serializer.deserialize(playerData, RenderStoreObject);
|
||||||
@ -47,7 +47,7 @@ export class WebWorkerRootRenderer implements RootRenderer {
|
|||||||
const eventName = message['eventName'];
|
const eventName = message['eventName'];
|
||||||
const target = message['eventTarget'];
|
const target = message['eventTarget'];
|
||||||
const event = deserializeGenericEvent(message['event']);
|
const event = deserializeGenericEvent(message['event']);
|
||||||
if (isPresent(target)) {
|
if (target) {
|
||||||
this.globalEvents.dispatchEvent(eventNameWithTarget(target, eventName), event);
|
this.globalEvents.dispatchEvent(eventNameWithTarget(target, eventName), event);
|
||||||
} else {
|
} else {
|
||||||
element.events.dispatchEvent(eventName, event);
|
element.events.dispatchEvent(eventName, event);
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
|
|
||||||
import {DomAdapter, setRootDomAdapter} from '../../private_import_platform-browser';
|
import {DomAdapter, setRootDomAdapter} from '../../private_import_platform-browser';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This adapter is required to log error messages.
|
* This adapter is required to log error messages.
|
||||||
*
|
*
|
||||||
|
@ -61,16 +61,23 @@ export function setupWebWorker(): void {
|
|||||||
*/
|
*/
|
||||||
@NgModule({
|
@NgModule({
|
||||||
providers: [
|
providers: [
|
||||||
BROWSER_SANITIZATION_PROVIDERS, Serializer, {provide: DOCUMENT, useValue: null},
|
BROWSER_SANITIZATION_PROVIDERS,
|
||||||
|
Serializer,
|
||||||
|
{provide: DOCUMENT, useValue: null},
|
||||||
{provide: ClientMessageBrokerFactory, useClass: ClientMessageBrokerFactory_},
|
{provide: ClientMessageBrokerFactory, useClass: ClientMessageBrokerFactory_},
|
||||||
{provide: ServiceMessageBrokerFactory, useClass: ServiceMessageBrokerFactory_},
|
{provide: ServiceMessageBrokerFactory, useClass: ServiceMessageBrokerFactory_},
|
||||||
WebWorkerRootRenderer, {provide: RootRenderer, useExisting: WebWorkerRootRenderer},
|
WebWorkerRootRenderer,
|
||||||
{provide: ON_WEB_WORKER, useValue: true}, RenderStore,
|
{provide: RootRenderer, useExisting: WebWorkerRootRenderer},
|
||||||
|
{provide: ON_WEB_WORKER, useValue: true},
|
||||||
|
RenderStore,
|
||||||
{provide: ErrorHandler, useFactory: errorHandler, deps: []},
|
{provide: ErrorHandler, useFactory: errorHandler, deps: []},
|
||||||
{provide: MessageBus, useFactory: createMessageBus, deps: [NgZone]},
|
{provide: MessageBus, useFactory: createMessageBus, deps: [NgZone]},
|
||||||
{provide: APP_INITIALIZER, useValue: setupWebWorker, multi: true}
|
{provide: APP_INITIALIZER, useValue: setupWebWorker, multi: true},
|
||||||
],
|
],
|
||||||
exports: [CommonModule, ApplicationModule]
|
exports: [
|
||||||
|
CommonModule,
|
||||||
|
ApplicationModule,
|
||||||
|
]
|
||||||
})
|
})
|
||||||
export class WorkerAppModule {
|
export class WorkerAppModule {
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,7 @@ export const _WORKER_UI_PLATFORM_PROVIDERS: Provider[] = [
|
|||||||
multi: true,
|
multi: true,
|
||||||
deps: [Injector]
|
deps: [Injector]
|
||||||
},
|
},
|
||||||
{provide: MessageBus, useFactory: messageBusFactory, deps: [WebWorkerInstance]}
|
{provide: MessageBus, useFactory: messageBusFactory, deps: [WebWorkerInstance]},
|
||||||
];
|
];
|
||||||
|
|
||||||
function initializeGenericWorkerRenderer(injector: Injector) {
|
function initializeGenericWorkerRenderer(injector: Injector) {
|
||||||
@ -155,8 +155,5 @@ function spawnWebWorker(uri: string, instance: WebWorkerInstance): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function _resolveDefaultAnimationDriver(): AnimationDriver {
|
function _resolveDefaultAnimationDriver(): AnimationDriver {
|
||||||
if (getDOM().supportsWebAnimation()) {
|
return getDOM().supportsWebAnimation() ? new WebAnimationsDriver() : AnimationDriver.NOOP;
|
||||||
return new WebAnimationsDriver();
|
|
||||||
}
|
|
||||||
return AnimationDriver.NOOP;
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user