{"version":3,"file":"envUtil.js","sourceRoot":"","sources":["../src/envUtil.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from \"path\"\nimport { isEmptyOrSpaces } from \"./stringUtil\"\nimport { log } from \"./log\"\nimport { exists } from \"./fs\"\nimport { stat } from \"fs/promises\"\n\nexport function resolveEnvShellValue(envVarName: string): string | null {\n  const rawValue = process.env[envVarName]\n  if (isEmptyOrSpaces(rawValue)) {\n    return null\n  }\n  const trimmed = rawValue.trim()\n  // On Windows, backslash is the native path separator and must not be rejected\n  const shellUnsafeChars = process.platform === \"win32\" ? /[;&|`$<>\"']/ : /[;&|`$<>\"'\\\\]/\n  if (shellUnsafeChars.test(trimmed)) {\n    throw new Error(`${envVarName} contains shell-unsafe characters: ${trimmed}`)\n  }\n  return trimmed\n}\n\nexport async function resolveEnvToolsetPath(envVarKey: string, expectedType: \"directory\" | \"file\"): Promise<string | null> {\n  const value = resolveEnvShellValue(envVarKey)\n  if (value == null) {\n    return null\n  }\n  if (!path.isAbsolute(value)) {\n    throw new Error(`${envVarKey} must be an absolute path: ${value}`)\n  }\n  const p = path.resolve(value)\n  if (!(await exists(p))) {\n    throw new Error(`${envVarKey} path does not exist: ${p}`)\n  }\n  const targetStat = await stat(p)\n  const targetType = targetStat.isDirectory() ? \"directory\" : targetStat.isFile() ? \"file\" : \"unknown\"\n  if (targetType !== expectedType) {\n    throw new Error(`${envVarKey} path must be a ${expectedType}, but got ${targetType}: ${p}`)\n  }\n  log.info({ [envVarKey]: p }, `resolved ${envVarKey} from environment variable`)\n  return p\n}\n\nconst LOCALHOST_HOSTNAMES = new Set([\"localhost\", \"127.0.0.1\", \"[::1]\"])\n\nexport function parseValidEnvVarUrl(envVarName: string, allowHttp: boolean = false): string | null {\n  const url = process.env[envVarName]?.trim()\n  if (url == null || url === \"\") {\n    return null\n  }\n  let parsed: URL\n  try {\n    parsed = new URL(url)\n  } catch {\n    throw new Error(`${envVarName} is not a valid URL: ${url}`)\n  }\n  if (parsed.protocol !== \"https:\") {\n    // Always permit plain HTTP to loopback addresses (local dev / air-gapped CI mirrors\n    // running on the build machine itself).  For any other host, require opt-in.\n    const isLocalhost = parsed.protocol === \"http:\" && LOCALHOST_HOSTNAMES.has(parsed.hostname)\n    if (!isLocalhost && !allowHttp) {\n      throw new Error(`${envVarName} must use https:// (got ${parsed.protocol}). For non-localhost HTTP mirrors set ELECTRON_BUILDER_BINARIES_ALLOW_HTTP=true`)\n    }\n  }\n  return url\n}\n"]}