UNPKG

angular2

Version:

Angular 2 - a web framework for modern web apps

180 lines 7.64 kB
'use strict';var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { if (typeof Reflect === "object" && typeof Reflect.decorate === "function") return Reflect.decorate(decorators, target, key, desc); switch (arguments.length) { case 2: return decorators.reduceRight(function(o, d) { return (d && d(o)) || o; }, target); case 3: return decorators.reduceRight(function(o, d) { return (d && d(target, key)), void 0; }, void 0); case 4: return decorators.reduceRight(function(o, d) { return (d && d(target, key, o)) || o; }, desc); } }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var message_bus_1 = require("angular2/src/web_workers/shared/message_bus"); var lang_1 = require("angular2/src/facade/lang"); var async_1 = require("angular2/src/facade/async"); var collection_1 = require("angular2/src/facade/collection"); var serializer_1 = require("angular2/src/web_workers/shared/serializer"); var di_1 = require("angular2/src/core/di"); var lang_2 = require("angular2/src/facade/lang"); var lang_3 = require("angular2/src/facade/lang"); exports.Type = lang_3.Type; var ClientMessageBrokerFactory = (function () { function ClientMessageBrokerFactory() { } return ClientMessageBrokerFactory; })(); exports.ClientMessageBrokerFactory = ClientMessageBrokerFactory; var ClientMessageBrokerFactory_ = (function (_super) { __extends(ClientMessageBrokerFactory_, _super); function ClientMessageBrokerFactory_(_messageBus, _serializer) { _super.call(this); this._messageBus = _messageBus; this._serializer = _serializer; } /** * Initializes the given channel and attaches a new {@link ClientMessageBroker} to it. */ ClientMessageBrokerFactory_.prototype.createMessageBroker = function (channel, runInZone) { if (runInZone === void 0) { runInZone = true; } this._messageBus.initChannel(channel, runInZone); return new ClientMessageBroker_(this._messageBus, this._serializer, channel); }; ClientMessageBrokerFactory_ = __decorate([ di_1.Injectable(), __metadata('design:paramtypes', [message_bus_1.MessageBus, serializer_1.Serializer]) ], ClientMessageBrokerFactory_); return ClientMessageBrokerFactory_; })(ClientMessageBrokerFactory); exports.ClientMessageBrokerFactory_ = ClientMessageBrokerFactory_; var ClientMessageBroker = (function () { function ClientMessageBroker() { } return ClientMessageBroker; })(); exports.ClientMessageBroker = ClientMessageBroker; var ClientMessageBroker_ = (function (_super) { __extends(ClientMessageBroker_, _super); function ClientMessageBroker_(messageBus, _serializer, channel) { var _this = this; _super.call(this); this.channel = channel; this._pending = new Map(); this._sink = messageBus.to(channel); this._serializer = _serializer; var source = messageBus.from(channel); async_1.ObservableWrapper.subscribe(source, function (message) { return _this._handleMessage(message); }); } ClientMessageBroker_.prototype._generateMessageId = function (name) { var time = lang_1.stringify(lang_1.DateWrapper.toMillis(lang_1.DateWrapper.now())); var iteration = 0; var id = name + time + lang_1.stringify(iteration); while (lang_1.isPresent(this._pending[id])) { id = "" + name + time + iteration; iteration++; } return id; }; ClientMessageBroker_.prototype.runOnService = function (args, returnType) { var _this = this; var fnArgs = []; if (lang_1.isPresent(args.args)) { args.args.forEach(function (argument) { if (argument.type != null) { fnArgs.push(_this._serializer.serialize(argument.value, argument.type)); } else { fnArgs.push(argument.value); } }); } var promise; var id = null; if (returnType != null) { var completer = async_1.PromiseWrapper.completer(); id = this._generateMessageId(args.method); this._pending.set(id, completer); async_1.PromiseWrapper.catchError(completer.promise, function (err, stack) { lang_1.print(err); completer.reject(err, stack); }); promise = async_1.PromiseWrapper.then(completer.promise, function (value) { if (_this._serializer == null) { return value; } else { return _this._serializer.deserialize(value, returnType); } }); } else { promise = null; } // TODO(jteplitz602): Create a class for these messages so we don't keep using StringMap #3685 var message = { 'method': args.method, 'args': fnArgs }; if (id != null) { message['id'] = id; } async_1.ObservableWrapper.callNext(this._sink, message); return promise; }; ClientMessageBroker_.prototype._handleMessage = function (message) { var data = new MessageData(message); // TODO(jteplitz602): replace these strings with messaging constants #3685 if (lang_2.StringWrapper.equals(data.type, "result") || lang_2.StringWrapper.equals(data.type, "error")) { var id = data.id; if (this._pending.has(id)) { if (lang_2.StringWrapper.equals(data.type, "result")) { this._pending.get(id).resolve(data.value); } else { this._pending.get(id).reject(data.value, null); } this._pending.delete(id); } } }; return ClientMessageBroker_; })(ClientMessageBroker); exports.ClientMessageBroker_ = ClientMessageBroker_; var MessageData = (function () { function MessageData(data) { this.type = collection_1.StringMapWrapper.get(data, "type"); this.id = this._getValueIfPresent(data, "id"); this.value = this._getValueIfPresent(data, "value"); } /** * Returns the value from the StringMap if present. Otherwise returns null * @internal */ MessageData.prototype._getValueIfPresent = function (data, key) { if (collection_1.StringMapWrapper.contains(data, key)) { return collection_1.StringMapWrapper.get(data, key); } else { return null; } }; return MessageData; })(); var FnArg = (function () { function FnArg(value, type) { this.value = value; this.type = type; } return FnArg; })(); exports.FnArg = FnArg; var UiArguments = (function () { function UiArguments(method, args) { this.method = method; this.args = args; } return UiArguments; })(); exports.UiArguments = UiArguments; //# sourceMappingURL=client_message_broker.js.map