@typed/http
Version:
HTTP requests for node and browsers
32 lines • 1.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.http = void 0;
const disposable_1 = require("@typed/disposable");
const either_1 = require("@typed/either");
const env_1 = require("@typed/env");
const isValidStatus_1 = require("./isValidStatus");
function* http(url, options = {}) {
return yield ({ http }) => env_1.Resume.create((f) => {
let hasLoaded = false;
const ifNotLoaded = (f) => (...args) => {
if (!hasLoaded) {
hasLoaded = true;
return f(...args);
}
return disposable_1.Disposable.None;
};
return http(url, options, {
success: ifNotLoaded((response) => f(handleSuccess(response))),
failure: ifNotLoaded((error) => f(either_1.Left.of(error))),
});
});
}
exports.http = http;
function handleSuccess(response) {
if (isValidStatus_1.isValidStatus(response)) {
return either_1.Right.of(response);
}
const errorMessage = response.responseText || response.statusText;
return either_1.Left.of(new Error(errorMessage));
}
//# sourceMappingURL=http.js.map