@platform/http
Version:
Tools for working with HTTP.
98 lines (97 loc) • 4.25 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var common_1 = require("../common");
exports.fetcher = function (args) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var timer, uid, url, method, data, fire, mode, headers, modifications, modify, before, respond, payload, _a, response, elapsed, ok, status_1, fetched, response, elapsed, ok, status_2;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
timer = common_1.time.timer();
uid = "req:" + common_1.id.shortid();
url = args.url, method = args.method, data = args.data, fire = args.fire, mode = args.mode, headers = args.headers;
modifications = {
headers: args.headers || {},
data: undefined,
respond: undefined,
};
modify = {
header: function (key, value) {
before.isModified = true;
var headers = modifications.headers || {};
if (value) {
headers[key] = value;
}
else {
delete headers[key];
}
modifications.headers = headers;
},
headers: {
merge: function (input) {
before.isModified = true;
modifications.headers = common_1.value.deleteEmpty(tslib_1.__assign(tslib_1.__assign({}, modifications.headers), input));
},
replace: function (input) {
before.isModified = true;
modifications.headers = common_1.value.deleteEmpty(input);
},
},
};
before = {
uid: uid,
method: method,
url: url,
data: data,
headers: headers,
isModified: false,
modify: modify,
respond: function (input) {
modifications.respond = input;
},
};
fire({ type: 'HTTP/before', payload: before });
if (!modifications.respond) return [3, 5];
respond = modifications.respond;
if (!(typeof respond === 'function')) return [3, 2];
return [4, respond()];
case 1:
_a = _b.sent();
return [3, 3];
case 2:
_a = respond;
_b.label = 3;
case 3:
payload = _a;
return [4, common_1.util.response.fromPayload(payload, modifications)];
case 4:
response = _b.sent();
elapsed = timer.elapsed;
ok = response.ok, status_1 = response.status;
fire({
type: 'HTTP/after',
payload: { uid: uid, method: method, url: url, ok: ok, status: status_1, response: response, elapsed: elapsed },
});
return [2, response];
case 5: return [4, args.fetch({
url: url,
mode: mode,
method: method,
headers: modifications.headers || headers,
data: data,
})];
case 6:
fetched = _b.sent();
return [4, common_1.util.response.fromFetch(fetched)];
case 7:
response = _b.sent();
elapsed = timer.elapsed;
ok = response.ok, status_2 = response.status;
fire({
type: 'HTTP/after',
payload: { uid: uid, method: method, url: url, ok: ok, status: status_2, response: response, elapsed: elapsed },
});
return [2, response];
}
});
}); };