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; } |