UNPKG

@typed/http

Version:

HTTP requests for node and browsers

28 lines 976 B
import { Disposable } from '@typed/disposable'; import { Left, Right } from '@typed/either'; import { Resume } from '@typed/env'; import { isValidStatus } from './isValidStatus'; export function* http(url, options = {}) { return yield ({ http }) => Resume.create((f) => { let hasLoaded = false; const ifNotLoaded = (f) => (...args) => { if (!hasLoaded) { hasLoaded = true; return f(...args); } return Disposable.None; }; return http(url, options, { success: ifNotLoaded((response) => f(handleSuccess(response))), failure: ifNotLoaded((error) => f(Left.of(error))), }); }); } function handleSuccess(response) { if (isValidStatus(response)) { return Right.of(response); } const errorMessage = response.responseText || response.statusText; return Left.of(new Error(errorMessage)); } //# sourceMappingURL=http.js.map