| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391 | "use strict";var __extends = (this && this.__extends) || (function () {    var extendStatics = function (d, b) {        extendStatics = Object.setPrototypeOf ||            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };        return extendStatics(d, b);    }    return function (d, b) {        extendStatics(d, b);        function __() { this.constructor = d; }        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());    };})();Object.defineProperty(exports, "__esModule", { value: true });var root_1 = require("../../util/root");var Observable_1 = require("../../Observable");var Subscriber_1 = require("../../Subscriber");var map_1 = require("../../operators/map");function getCORSRequest() {    if (root_1.root.XMLHttpRequest) {        return new root_1.root.XMLHttpRequest();    }    else if (!!root_1.root.XDomainRequest) {        return new root_1.root.XDomainRequest();    }    else {        throw new Error('CORS is not supported by your browser');    }}function getXMLHttpRequest() {    if (root_1.root.XMLHttpRequest) {        return new root_1.root.XMLHttpRequest();    }    else {        var progId = void 0;        try {            var progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];            for (var i = 0; i < 3; i++) {                try {                    progId = progIds[i];                    if (new root_1.root.ActiveXObject(progId)) {                        break;                    }                }                catch (e) {                }            }            return new root_1.root.ActiveXObject(progId);        }        catch (e) {            throw new Error('XMLHttpRequest is not supported by your browser');        }    }}function ajaxGet(url, headers) {    if (headers === void 0) { headers = null; }    return new AjaxObservable({ method: 'GET', url: url, headers: headers });}exports.ajaxGet = ajaxGet;function ajaxPost(url, body, headers) {    return new AjaxObservable({ method: 'POST', url: url, body: body, headers: headers });}exports.ajaxPost = ajaxPost;function ajaxDelete(url, headers) {    return new AjaxObservable({ method: 'DELETE', url: url, headers: headers });}exports.ajaxDelete = ajaxDelete;function ajaxPut(url, body, headers) {    return new AjaxObservable({ method: 'PUT', url: url, body: body, headers: headers });}exports.ajaxPut = ajaxPut;function ajaxPatch(url, body, headers) {    return new AjaxObservable({ method: 'PATCH', url: url, body: body, headers: headers });}exports.ajaxPatch = ajaxPatch;var mapResponse = map_1.map(function (x, index) { return x.response; });function ajaxGetJSON(url, headers) {    return mapResponse(new AjaxObservable({        method: 'GET',        url: url,        responseType: 'json',        headers: headers    }));}exports.ajaxGetJSON = ajaxGetJSON;var AjaxObservable = (function (_super) {    __extends(AjaxObservable, _super);    function AjaxObservable(urlOrRequest) {        var _this = _super.call(this) || this;        var request = {            async: true,            createXHR: function () {                return this.crossDomain ? getCORSRequest() : getXMLHttpRequest();            },            crossDomain: true,            withCredentials: false,            headers: {},            method: 'GET',            responseType: 'json',            timeout: 0        };        if (typeof urlOrRequest === 'string') {            request.url = urlOrRequest;        }        else {            for (var prop in urlOrRequest) {                if (urlOrRequest.hasOwnProperty(prop)) {                    request[prop] = urlOrRequest[prop];                }            }        }        _this.request = request;        return _this;    }    AjaxObservable.prototype._subscribe = function (subscriber) {        return new AjaxSubscriber(subscriber, this.request);    };    AjaxObservable.create = (function () {        var create = function (urlOrRequest) {            return new AjaxObservable(urlOrRequest);        };        create.get = ajaxGet;        create.post = ajaxPost;        create.delete = ajaxDelete;        create.put = ajaxPut;        create.patch = ajaxPatch;        create.getJSON = ajaxGetJSON;        return create;    })();    return AjaxObservable;}(Observable_1.Observable));exports.AjaxObservable = AjaxObservable;var AjaxSubscriber = (function (_super) {    __extends(AjaxSubscriber, _super);    function AjaxSubscriber(destination, request) {        var _this = _super.call(this, destination) || this;        _this.request = request;        _this.done = false;        var headers = request.headers = request.headers || {};        if (!request.crossDomain && !_this.getHeader(headers, 'X-Requested-With')) {            headers['X-Requested-With'] = 'XMLHttpRequest';        }        var contentTypeHeader = _this.getHeader(headers, 'Content-Type');        if (!contentTypeHeader && !(root_1.root.FormData && request.body instanceof root_1.root.FormData) && typeof request.body !== 'undefined') {            headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';        }        request.body = _this.serializeBody(request.body, _this.getHeader(request.headers, 'Content-Type'));        _this.send();        return _this;    }    AjaxSubscriber.prototype.next = function (e) {        this.done = true;        var _a = this, xhr = _a.xhr, request = _a.request, destination = _a.destination;        var result;        try {            result = new AjaxResponse(e, xhr, request);        }        catch (err) {            return destination.error(err);        }        destination.next(result);    };    AjaxSubscriber.prototype.send = function () {        var _a = this, request = _a.request, _b = _a.request, user = _b.user, method = _b.method, url = _b.url, async = _b.async, password = _b.password, headers = _b.headers, body = _b.body;        try {            var xhr = this.xhr = request.createXHR();            this.setupEvents(xhr, request);            if (user) {                xhr.open(method, url, async, user, password);            }            else {                xhr.open(method, url, async);            }            if (async) {                xhr.timeout = request.timeout;                xhr.responseType = request.responseType;            }            if ('withCredentials' in xhr) {                xhr.withCredentials = !!request.withCredentials;            }            this.setHeaders(xhr, headers);            if (body) {                xhr.send(body);            }            else {                xhr.send();            }        }        catch (err) {            this.error(err);        }    };    AjaxSubscriber.prototype.serializeBody = function (body, contentType) {        if (!body || typeof body === 'string') {            return body;        }        else if (root_1.root.FormData && body instanceof root_1.root.FormData) {            return body;        }        if (contentType) {            var splitIndex = contentType.indexOf(';');            if (splitIndex !== -1) {                contentType = contentType.substring(0, splitIndex);            }        }        switch (contentType) {            case 'application/x-www-form-urlencoded':                return Object.keys(body).map(function (key) { return encodeURIComponent(key) + "=" + encodeURIComponent(body[key]); }).join('&');            case 'application/json':                return JSON.stringify(body);            default:                return body;        }    };    AjaxSubscriber.prototype.setHeaders = function (xhr, headers) {        for (var key in headers) {            if (headers.hasOwnProperty(key)) {                xhr.setRequestHeader(key, headers[key]);            }        }    };    AjaxSubscriber.prototype.getHeader = function (headers, headerName) {        for (var key in headers) {            if (key.toLowerCase() === headerName.toLowerCase()) {                return headers[key];            }        }        return undefined;    };    AjaxSubscriber.prototype.setupEvents = function (xhr, request) {        var progressSubscriber = request.progressSubscriber;        function xhrTimeout(e) {            var _a = xhrTimeout, subscriber = _a.subscriber, progressSubscriber = _a.progressSubscriber, request = _a.request;            if (progressSubscriber) {                progressSubscriber.error(e);            }            var error;            try {                error = new exports.AjaxTimeoutError(this, request);            }            catch (err) {                error = err;            }            subscriber.error(error);        }        xhr.ontimeout = xhrTimeout;        xhrTimeout.request = request;        xhrTimeout.subscriber = this;        xhrTimeout.progressSubscriber = progressSubscriber;        if (xhr.upload && 'withCredentials' in xhr) {            if (progressSubscriber) {                var xhrProgress_1;                xhrProgress_1 = function (e) {                    var progressSubscriber = xhrProgress_1.progressSubscriber;                    progressSubscriber.next(e);                };                if (root_1.root.XDomainRequest) {                    xhr.onprogress = xhrProgress_1;                }                else {                    xhr.upload.onprogress = xhrProgress_1;                }                xhrProgress_1.progressSubscriber = progressSubscriber;            }            var xhrError_1;            xhrError_1 = function (e) {                var _a = xhrError_1, progressSubscriber = _a.progressSubscriber, subscriber = _a.subscriber, request = _a.request;                if (progressSubscriber) {                    progressSubscriber.error(e);                }                var error;                try {                    error = new exports.AjaxError('ajax error', this, request);                }                catch (err) {                    error = err;                }                subscriber.error(error);            };            xhr.onerror = xhrError_1;            xhrError_1.request = request;            xhrError_1.subscriber = this;            xhrError_1.progressSubscriber = progressSubscriber;        }        function xhrReadyStateChange(e) {            return;        }        xhr.onreadystatechange = xhrReadyStateChange;        xhrReadyStateChange.subscriber = this;        xhrReadyStateChange.progressSubscriber = progressSubscriber;        xhrReadyStateChange.request = request;        function xhrLoad(e) {            var _a = xhrLoad, subscriber = _a.subscriber, progressSubscriber = _a.progressSubscriber, request = _a.request;            if (this.readyState === 4) {                var status_1 = this.status === 1223 ? 204 : this.status;                var response = (this.responseType === 'text' ? (this.response || this.responseText) : this.response);                if (status_1 === 0) {                    status_1 = response ? 200 : 0;                }                if (status_1 < 400) {                    if (progressSubscriber) {                        progressSubscriber.complete();                    }                    subscriber.next(e);                    subscriber.complete();                }                else {                    if (progressSubscriber) {                        progressSubscriber.error(e);                    }                    var error = void 0;                    try {                        error = new exports.AjaxError('ajax error ' + status_1, this, request);                    }                    catch (err) {                        error = err;                    }                    subscriber.error(error);                }            }        }        xhr.onload = xhrLoad;        xhrLoad.subscriber = this;        xhrLoad.progressSubscriber = progressSubscriber;        xhrLoad.request = request;    };    AjaxSubscriber.prototype.unsubscribe = function () {        var _a = this, done = _a.done, xhr = _a.xhr;        if (!done && xhr && xhr.readyState !== 4 && typeof xhr.abort === 'function') {            xhr.abort();        }        _super.prototype.unsubscribe.call(this);    };    return AjaxSubscriber;}(Subscriber_1.Subscriber));exports.AjaxSubscriber = AjaxSubscriber;var AjaxResponse = (function () {    function AjaxResponse(originalEvent, xhr, request) {        this.originalEvent = originalEvent;        this.xhr = xhr;        this.request = request;        this.status = xhr.status;        this.responseType = xhr.responseType || request.responseType;        this.response = parseXhrResponse(this.responseType, xhr);    }    return AjaxResponse;}());exports.AjaxResponse = AjaxResponse;var AjaxErrorImpl = (function () {    function AjaxErrorImpl(message, xhr, request) {        Error.call(this);        this.message = message;        this.name = 'AjaxError';        this.xhr = xhr;        this.request = request;        this.status = xhr.status;        this.responseType = xhr.responseType || request.responseType;        this.response = parseXhrResponse(this.responseType, xhr);        return this;    }    AjaxErrorImpl.prototype = Object.create(Error.prototype);    return AjaxErrorImpl;})();exports.AjaxError = AjaxErrorImpl;function parseJson(xhr) {    if ('response' in xhr) {        return xhr.responseType ? xhr.response : JSON.parse(xhr.response || xhr.responseText || 'null');    }    else {        return JSON.parse(xhr.responseText || 'null');    }}function parseXhrResponse(responseType, xhr) {    switch (responseType) {        case 'json':            return parseJson(xhr);        case 'xml':            return xhr.responseXML;        case 'text':        default:            return ('response' in xhr) ? xhr.response : xhr.responseText;    }}function AjaxTimeoutErrorImpl(xhr, request) {    exports.AjaxError.call(this, 'ajax timeout', xhr, request);    this.name = 'AjaxTimeoutError';    return this;}exports.AjaxTimeoutError = AjaxTimeoutErrorImpl;//# sourceMappingURL=AjaxObservable.js.map
 |