Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 4x 4x 1x 1x 7x 7x 7x 7x 1x 1x 3x 3x 3x 3x 1x 1x 1x 1x 4x 4x 4x 4x 4x 2x 4x 4x 2x 4x 4x 4x | import { Maybe, MaybeAsync } from "purify-ts";
import undici, {
HeadersInit,
ProxyAgent,
RequestInfo,
RequestInit,
} from "undici";
import fs from "node:fs";
export function parseUrl(url: string) {
return Maybe.encase(() => new URL(url));
}
export function fetchUrl(url: RequestInfo, init: RequestInit) {
return MaybeAsync(() => undici.fetch(url, init)).filter(
response => response.ok,
);
}
export function fetchJson(url: RequestInfo, init: RequestInit) {
return fetchUrl(url, init).chain(response =>
MaybeAsync(() => response.json()),
);
}
export function downloadFile(
url: RequestInfo,
init: RequestInit,
filepath: string,
) {
return fetchUrl(url, init)
.chain(response => MaybeAsync.liftMaybe(Maybe.fromNullable(response.body)))
.chain(body => MaybeAsync(() => fs.promises.writeFile(filepath, body)))
.map(() => filepath);
}
export function buildRequestInit(
proxyUrl: Maybe<URL>,
headers: Maybe<HeadersInit>,
) {
const init: RequestInit = {};
proxyUrl.ifJust(proxyUrl => {
init.dispatcher = new ProxyAgent(proxyUrl.toString());
});
headers.ifJust(headers => {
init.headers = headers;
});
return init;
}
|