import { normalizeProxyUrl } from "../net/proxy.ts"; export interface FetchContentParams { url?: unknown; urls?: unknown; mode?: unknown; proxy?: unknown; } export interface NormalizedFetchContentParams { urlList: string[]; options: { mode?: "readable" | "raw"; proxy?: string; }; } export function normalizeFetchContentParams(params: FetchContentParams): NormalizedFetchContentParams { const urls = Array.isArray(params.urls) ? params.urls.flatMap(normalizeUrl) : []; const urlList = [...new Set(urls.length > 0 ? urls : normalizeUrl(params.url))]; const mode = normalizeMode(params.mode); const proxy = normalizeProxy(params.proxy); return { urlList, options: { ...(mode ? { mode } : {}), ...(proxy !== undefined ? { proxy } : {}), }, }; } function normalizeUrl(value: unknown): string[] { if (typeof value !== "string") return []; const url = value.trim(); return url ? [url] : []; } function normalizeMode(value: unknown): "readable" | "raw" | undefined { if (value === undefined) return undefined; if (value === "readable" || value === "raw") return value; throw new Error('mode must be "readable" or "raw"'); } function normalizeProxy(value: unknown): string | undefined { if (value === undefined || value === false) return undefined; if (value === null) throw new Error("proxy must be an HTTP(S) proxy URL string"); return normalizeProxyUrl(value, "proxy") ?? ""; }