diff --git a/package.json b/package.json index 8c77984c..1102eca0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "keycloakify", - "version": "10.0.0-rc.128", + "version": "10.0.0-rc.131", "description": "Create Keycloak themes using React", "repository": { "type": "git", diff --git a/src/bin/tools/fetchProxyOptions.ts b/src/bin/tools/fetchProxyOptions.ts index c4e0d90c..e6f8f497 100644 --- a/src/bin/tools/fetchProxyOptions.ts +++ b/src/bin/tools/fetchProxyOptions.ts @@ -1,6 +1,7 @@ import { type FetchOptions } from "make-fetch-happen"; import * as child_process from "child_process"; import * as fs from "fs"; +import { exclude } from "tsafe/exclude"; export type ProxyFetchOptions = Pick< FetchOptions, @@ -23,12 +24,32 @@ export function getProxyFetchOptions(params: { .split("\n") .filter(line => !line.startsWith(";")) .map(line => line.trim()) - .map(line => line.split("=", 2) as [string, string]) + .map(line => { + const [key, value] = line.split("="); + if (key === undefined) { + return undefined; + } + if (value === undefined) { + return undefined; + } + return [key.trim(), value.trim()] as const; + }) + .filter(exclude(undefined)) + .filter(([key]) => key !== "") + .map(([key, value]) => { + if (value.startsWith('"') && value.endsWith('"')) { + return [key, value.slice(1, -1)] as const; + } + + if (value === "true" || value === "false") { + return [key, value] as const; + } + + return undefined; + }) + .filter(exclude(undefined)) .reduce( - ( - cfg: Record, - [key, value]: [string, string] - ) => + (cfg: Record, [key, value]) => key in cfg ? { ...cfg, [key]: [...ensureArray(cfg[key]), value] } : { ...cfg, [key]: value }, @@ -37,18 +58,18 @@ export function getProxyFetchOptions(params: { })(); const proxy = ensureSingleOrNone(cfg["https-proxy"] ?? cfg["proxy"]); + const noProxy = cfg["noproxy"] ?? cfg["no-proxy"]; - function maybeBoolean(arg0: string | undefined) { - return typeof arg0 === "undefined" ? undefined : Boolean(arg0); - } + const strictSSL = ensureSingleOrNone(cfg["strict-ssl"]) === "true"; - const strictSSL = maybeBoolean(ensureSingleOrNone(cfg["strict-ssl"])); const cert = cfg["cert"]; + const ca = ensureArray(cfg["ca"] ?? cfg["ca[]"]); + const cafile = ensureSingleOrNone(cfg["cafile"]); - if (typeof cafile !== "undefined" && cafile !== "null") { + if (cafile !== undefined) { ca.push( ...(() => { const cafileContent = fs.readFileSync(cafile).toString("utf8"); @@ -82,7 +103,7 @@ export function getProxyFetchOptions(params: { } function ensureArray(arg0: T | T[]) { - return Array.isArray(arg0) ? arg0 : typeof arg0 === "undefined" ? [] : [arg0]; + return Array.isArray(arg0) ? arg0 : arg0 === undefined ? [] : [arg0]; } function ensureSingleOrNone(arg0: T | T[]) {