@typed/http
Version:
HTTP requests for node and browsers
70 lines • 2.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createJsonResponse = exports.createHttpResponse = exports.createFailedResponse = exports.createSuccessfulResponse = exports.createTestHttpEnv = void 0;
const disposable_1 = require("@typed/disposable");
const either_1 = require("@typed/either");
const logic_1 = require("@typed/logic");
/**
* Create a test-friendly http environment
* @param testHttp :: (url -> HttpOptions -> Either Error HttpResponse)
* @param timer :: Timer
*/
function createTestHttpEnv(testHttp) {
const responses = [];
function http(url, options, callbacks) {
const { success, failure } = callbacks;
function getResponse() {
const disposable = disposable_1.Disposable.lazy();
function onResponse(response) {
responses.push(response);
if (either_1.isLeft(response)) {
return disposable.addDisposable(failure(either_1.fromLeft(response)));
}
disposable.addDisposable(success(either_1.fromRight(response)));
}
const response = testHttp(url, options);
if (logic_1.isPromiseLike(response)) {
response.then(onResponse);
}
else {
onResponse(response);
}
return disposable;
}
return getResponse();
}
return {
http,
getResponses: () => responses.slice(),
};
}
exports.createTestHttpEnv = createTestHttpEnv;
function createSuccessfulResponse(options = {}) {
return either_1.Right.of(createHttpResponse(options));
}
exports.createSuccessfulResponse = createSuccessfulResponse;
function createFailedResponse(error) {
return either_1.Left.of(error);
}
exports.createFailedResponse = createFailedResponse;
function createHttpResponse(options = {}) {
const response = {
status: 200,
statusText: 'OK',
responseText: '',
headers: {},
...options,
};
return response;
}
exports.createHttpResponse = createHttpResponse;
function createJsonResponse(jsonReadyValue, options = {}) {
const responseText = JSON.stringify(jsonReadyValue);
return createHttpResponse({
...options,
headers: { 'Content-Type': 'application/json', ...options.headers },
responseText,
});
}
exports.createJsonResponse = createJsonResponse;
//# sourceMappingURL=createTestHttpEnv.js.map