1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142 | 1
1
53
1
48
48
10
10
48
1
1
1
1
1
1
1
53
53
53
53
1
3
1
3
1
48
48
48
48
48
48
230
48
38
38
31
7
48
1
48
1
48
2
48
48
47
1
46
47
48
48
48
8
6
8
4
48
48
58
48
1
1
| System.register(['core-js', './http-response-message', 'aurelia-path'], function (_export) {
'use strict';
var core, HttpResponseMessage, join, buildQueryString, RequestMessageProcessor;
function _classCallCheck(instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
function buildFullUrl(message) {
var url = join(message.baseUrl, message.url),
qs;
if (message.params) {
qs = buildQueryString(message.params);
url = qs ? '' + url + '?' + qs : url;
}
message.fullUrl = url;
}
return {
setters: [function (_coreJs) {
core = _coreJs['default'];
}, function (_httpResponseMessage) {
HttpResponseMessage = _httpResponseMessage.HttpResponseMessage;
}, function (_aureliaPath) {
join = _aureliaPath.join;
buildQueryString = _aureliaPath.buildQueryString;
}],
execute: function () {
RequestMessageProcessor = (function () {
function RequestMessageProcessor(xhrType, transformers) {
_classCallCheck(this, RequestMessageProcessor);
this.XHRType = xhrType;
this.transformers = transformers;
this.isAborted = false;
}
RequestMessageProcessor.prototype.abort = function abort() {
// The logic here is if the xhr object is not set then there is nothing to abort so the intent was carried out
// Also test if the XHR is UNSENT - if not, it will be aborted in the process() phase
if (this.xhr && this.xhr.readyState !== XMLHttpRequest.UNSENT) {
this.xhr.abort();
}
this.isAborted = true;
};
RequestMessageProcessor.prototype.process = function process(client, message) {
var _this = this;
var promise = new Promise(function (resolve, reject) {
var xhr = _this.xhr = new _this.XHRType(),
transformers = _this.transformers,
i,
ii;
buildFullUrl(message);
xhr.open(message.method, message.fullUrl, true);
for (i = 0, ii = transformers.length; i < ii; ++i) {
transformers[i](client, _this, message, xhr);
}
xhr.onload = function (e) {
var response = new HttpResponseMessage(message, xhr, message.responseType, message.reviver);
if (response.isSuccess) {
resolve(response);
} else {
reject(response);
}
};
xhr.ontimeout = function (e) {
reject(new HttpResponseMessage(message, {
response: e,
status: xhr.status,
statusText: xhr.statusText
}, 'timeout'));
};
xhr.onerror = function (e) {
reject(new HttpResponseMessage(message, {
response: e,
status: xhr.status,
statusText: xhr.statusText
}, 'error'));
};
xhr.onabort = function (e) {
reject(new HttpResponseMessage(message, {
response: e,
status: xhr.status,
statusText: xhr.statusText
}, 'abort'));
};
});
return Promise.resolve(message).then(function (message) {
var processRequest = function processRequest() {
if (_this.isAborted) {
// Some interceptors can delay sending of XHR, so when abort is called
// before XHR is actually sent we abort() instead send()
_this.xhr.abort();
} else {
_this.xhr.send(message.content);
}
return promise;
};
// [ onFullfilled, onReject ] pairs
var chain = [[processRequest, undefined]];
// Apply interceptors chain from the message.interceptors
var interceptors = message.interceptors || [];
interceptors.forEach(function (interceptor) {
if (interceptor.request || interceptor.requestError) {
chain.unshift([interceptor.request ? interceptor.request.bind(interceptor) : undefined, interceptor.requestError ? interceptor.requestError.bind(interceptor) : undefined]);
}
if (interceptor.response || interceptor.responseError) {
chain.push([interceptor.response ? interceptor.response.bind(interceptor) : undefined, interceptor.responseError ? interceptor.responseError.bind(interceptor) : undefined]);
}
});
var interceptorsPromise = Promise.resolve(message);
while (chain.length) {
interceptorsPromise = interceptorsPromise.then.apply(interceptorsPromise, chain.shift());
}
return interceptorsPromise;
});
};
return RequestMessageProcessor;
})();
_export('RequestMessageProcessor', RequestMessageProcessor);
}
};
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL2h0dHAtY2xpZW50L3NyYy9yZXF1ZXN0LW1lc3NhZ2UtcHJvY2Vzc29yLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozt5REFnQmEsdUJBQXVCOzs7O0FBWnBDLFdBQVMsWUFBWSxDQUFDLE9BQU8sRUFBQztBQUM1QixRQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ3hDLEVBQUUsQ0FBQzs7QUFFUCxRQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUM7QUFDaEIsUUFBRSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QyxTQUFHLEdBQUcsRUFBRSxRQUFNLEdBQUcsU0FBSSxFQUFFLEdBQUssR0FBRyxDQUFDO0tBQ2pDOztBQUVELFdBQU8sQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0dBQ3ZCOzs7Ozs7aURBYk8sbUJBQW1COzswQkFDbkIsSUFBSTtzQ0FBRSxnQkFBZ0I7OztBQWNqQiw2QkFBdUI7QUFDdkIsaUJBREEsdUJBQXVCLENBQ3RCLE9BQU8sRUFBRSxZQUFZLEVBQUM7Z0NBRHZCLHVCQUF1Qjs7QUFFaEMsY0FBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDdkIsY0FBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDakMsY0FBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDeEI7O0FBTFUsK0JBQXVCLFdBT2xDLEtBQUssR0FBQSxpQkFBRTs7O0FBR0wsY0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxLQUFLLGNBQWMsQ0FBQyxNQUFNLEVBQUM7QUFDM0QsZ0JBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7V0FDbEI7QUFDRCxjQUFJLENB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YmVyZ0VmZmVjdC9Eb2N1bWVudHMvR2l0SHViL1RoZSBEdXJhbmRhbCBQcm9qZWN0L2F1cmVsaWEvaHR0cC1jbGllbnQvc3JjL3JlcXVlc3QtbWVzc2FnZS1wcm9jZXNzb3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29yZSBmcm9tICdjb3JlLWpzJztcbmltcG9ydCB7SHR0cFJlc3BvbnNlTWVzc2FnZX0gZnJvbSAnLi9odHRwLXJlc3BvbnNlLW1lc3NhZ2UnO1xuaW1wb3J0IHtqb2luLCBidWlsZFF1ZXJ5U3RyaW5nfSBmcm9tICdhdXJlbGlhLXBhdGgnO1xuXG5mdW5jdGlvbiBidWlsZEZ1bGxVcmwobWVzc2FnZSl7XG4gIHZhciB1cmwgPSBqb2luKG1lc3NhZ2UuYmFzZVVybCwgbWVzc2FnZS51cmwpLFxuICAgICAgcXM7XG5cbiAgaWYobWVzc2FnZS5wYXJhbXMpe1xuICAgIHFzID0gYnVpbGRRdWVyeVN0cmluZyhtZXNzYWdlLnBhcmFtcyk7XG4gICAgdXJsID0gcXMgPyBgJHt1cmx9PyR7cXN9YCA6IHVybDtcbiAgfVxuXG4gIG1lc3NhZ2UuZnVsbFVybCA9IHVybDtcbn1cblxuZXhwb3J0IGNsYXNzIFJlcXVlc3RNZXNzYWdlUHJvY2Vzc29yIHtcbiAgY29uc3RydWN0b3IoeGhyVHlwZSwgdHJhbnNmb3JtZXJzKXtcbiAgICB0aGlzLlhIUlR5cGUgPSB4aHJUeXBlO1xuICAgIHRoaXMudHJhbnNmb3JtZXJzID0gdHJhbnNmb3JtZXJzO1xuICAgIHRoaXMuaXNBYm9ydGVkID0gZmFsc2U7XG4gIH1cblxuICBhYm9ydCgpe1xuICAgIC8vIFRoZSBsb2dpYyBoZXJlIGlzIGlmIHRoZSB4aHIgb2JqZWN0IGlzIG5vdCBzZXQgdGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGFib3J0IHNvIHRoZSBpbnRlbnQgd2FzIGNhcnJpZWQgb3V0XG4gICAgLy8gQWxzbyB0ZXN0IGlmIHRoZSBYSFIgaXMgVU5TRU5UIC0gaWYgbm90LCBpdCB3aWxsIGJlIGFib3J0ZWQgaW4gdGhlIHByb2Nlc3MoKSBwaGFzZVxuICAgIGlmKHRoaXMueGhyICYmIHRoaXMueGhyLnJlYWR5U3RhdGUgIT09IFhNTEh0dHBSZXF1ZXN0LlVOU0VOVCl7XG4gICAgICB0aGlzLnhoci5hYm9ydCgpO1xuICAgIH1cbiAgICB0aGlzLmlzQWJvcnRlZCA9IHRydWU7XG4gIH1cblxuICBwcm9jZXNzKGNsaWVudCwgbWVzc2FnZSkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IHRoaXMuWEhSVHlwZSgpLFxuICAgICAgICB0cmFuc2Zvcm1lcnMgPSB0aGlzLnRyYW5zZm9ybWVycyxcbiAgICAgICAgaSwgaWk7XG5cbiAgICAgIGJ1aWxkRnVsbFVybChtZXNzYWdlKTtcbiAgICAgIHhoci5vcGVuKG1lc3NhZ2UubWV0aG9kLCBtZXNzYWdlLmZ1bGxVcmwsIHRydWUpO1xuXG4gICAgICBmb3IgKGkgPSAwLCBpaSA9IHRyYW5zZm9ybWVycy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIHRyYW5zZm9ybWVyc1tpXShjbGllbnQsIHRoaXMsIG1lc3NhZ2UsIHhocik7XG4gICAgICB9XG5cbiAgICAgIHhoci5vbmxvYWQgPSAoZSkgPT4ge1xuICAgICAgICB2YXIgcmVzcG9uc2UgPSBuZXcgSHR0cFJlc3BvbnNlTWVzc2FnZShtZXNzYWdlLCB4aHIsIG1lc3NhZ2UucmVzcG9uc2VUeXBlLCBtZXNzYWdlLnJldml2ZXIpO1xuICAgICAgICBpZiAocmVzcG9uc2UuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgeGhyLm9udGltZW91dCA9IChlKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgSHR0cFJlc3BvbnNlTWVzc2FnZShtZXNzYWdlLCB7XG4gICAgICAgICAgcmVzcG9uc2U6IGUsXG4gICAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0XG4gICAgICAgIH0sICd0aW1lb3V0JykpO1xuICAgICAgfTtcblxuICAgICAgeGhyLm9uZXJyb3IgPSAoZSkgPT4ge1xuICAgICAgICByZWplY3QobmV3IEh0dHBSZXNwb25zZU1lc3NhZ2UobWVzc2FnZSwge1xuICAgICAgICAgIHJlc3BvbnNlOiBlLFxuICAgICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dFxuICAgICAgICB9LCAnZXJyb3InKSk7XG4gICAgICB9O1xuXG4gICAgICB4aHIub25hYm9ydCA9IChlKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgSHR0cFJlc3BvbnNlTWVzc2FnZShtZXNzYWdlLCB7XG4gICAgICAgICAgcmVzcG9uc2U6IGUsXG4gICAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0XG4gICAgICAgIH0sICdhYm9ydCcpKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1lc3NhZ2UpXG4gICAgICAudGhlbigobWVzc2FnZSkgPT4ge1xuICAgICAgICB2YXIgcHJvY2Vzc1JlcXVlc3QgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNBYm9ydGVkKSB7XG4gICAgICAgICAgICAvLyBTb21lIGludGVyY2VwdG9ycyBjYW4gZGVsYXkgc2VuZGluZyBvZiBYSFIsIHNvIHdoZW4gYWJvcnQgaXMgY2FsbGVkXG4gICAgICAgICAgICAvLyBiZWZvcmUgWEhSIGlzIGFjdHVhbGx5IHNlbnQgd2UgYWJvcnQoKSBpbnN0ZWFkIHNlbmQoKVxuICAgICAgICAgICAgdGhpcy54aHIuYWJvcnQoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIuc2VuZChtZXNzYWdlLmNvbnRlbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFsgb25GdWxsZmlsbGVkLCBvblJlamVjdCBdIHBhaXJzXG4gICAgICAgIHZhciBjaGFpbiA9IFtbcHJvY2Vzc1JlcXVlc3QsIHVuZGVmaW5lZF1dO1xuICAgICAgICAvLyBBcHBseSBpbnRlcmNlcHRvcnMgY2hhaW4gZnJvbSB0aGUgbWVzc2FnZS5pbnRlcmNlcHRvcnNcbiAgICAgICAgdmFyIGludGVyY2VwdG9ycyA9IG1lc3NhZ2UuaW50ZXJjZXB0b3JzIHx8IFtdO1xuICAgICAgICBpbnRlcmNlcHRvcnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJjZXB0b3IpIHtcbiAgICAgICAgICBpZiAoaW50ZXJjZXB0b3IucmVxdWVzdCB8fCBpbnRlcmNlcHRvci5yZXF1ZXN0RXJyb3IpIHtcbiAgICAgICAgICAgIGNoYWluLnVuc2hpZnQoW1xuICAgICAgICAgICAgICBpbnRlcmNlcHRvci5yZXF1ZXN0ID8gaW50ZXJjZXB0b3IucmVxdWVzdC5iaW5kKGludGVyY2VwdG9yKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgaW50ZXJjZXB0b3IucmVxdWVzdEVycm9yID8gaW50ZXJjZXB0b3IucmVxdWVzdEVycm9yLmJpbmQoaW50ZXJjZXB0b3IpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaW50ZXJjZXB0b3IucmVzcG9uc2UgfHwgaW50ZXJjZXB0b3IucmVzcG9uc2VFcnJvcikge1xuICAgICAgICAgICAgY2hhaW4ucHVzaChbXG4gICAgICAgICAgICAgIGludGVyY2VwdG9yLnJlc3BvbnNlID8gaW50ZXJjZXB0b3IucmVzcG9uc2UuYmluZChpbnRlcmNlcHRvcikgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGludGVyY2VwdG9yLnJlc3BvbnNlRXJyb3IgPyBpbnRlcmNlcHRvci5yZXNwb25zZUVycm9yLmJpbmQoaW50ZXJjZXB0b3IpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBpbnRlcmNlcHRvcnNQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKG1lc3NhZ2UpO1xuXG4gICAgICAgIHdoaWxlIChjaGFpbi5sZW5ndGgpIHtcbiAgICAgICAgICBpbnRlcmNlcHRvcnNQcm9taXNlID0gaW50ZXJjZXB0b3JzUHJvbWlzZS50aGVuKC4uLmNoYWluLnNoaWZ0KCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGludGVyY2VwdG9yc1Byb21pc2U7XG4gICAgICB9KTtcbiAgfVxufVxuIl19 |