{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullish, safeStringifyJson, isValidKey, isSensitiveFieldName, hashSensitiveValue } from \"builder-util-runtime\"\nimport * as chalk from \"chalk\"\nimport { ChildProcess, execFile, ExecFileOptions, SpawnOptions } from \"child_process\"\nimport { spawn as _spawn } from \"cross-spawn\"\nimport _debug from \"debug\"\nimport { dump } from \"js-yaml\"\nimport * as path from \"path\"\nimport { install as installSourceMap } from \"source-map-support\"\nimport { debug, log } from \"./log\"\nimport { exists } from \"./fs\"\nimport { mkdir } from \"fs-extra\"\nimport { isEmptyOrSpaces } from \"./stringUtil\"\n\nif (process.env.JEST_WORKER_ID == null) {\n  installSourceMap()\n}\n\nexport { isEmptyOrSpaces } from \"./stringUtil\"\nexport { safeStringifyJson, retry } from \"builder-util-runtime\"\nexport { TmpDir } from \"temp-file\"\nexport * from \"./arch\"\nexport { Arch, archFromString, ArchType, defaultArchFromString, getArchCliNames, getArchSuffix, toLinuxArchString } from \"./arch\"\nexport { AsyncTaskManager } from \"./asyncTaskManager\"\nexport { DebugLogger } from \"./DebugLogger\"\nexport * from \"./log\"\nexport { buildGotProxyAgent, httpExecutor, NodeHttpExecutor } from \"./nodeHttpExecutor\"\nexport * from \"./promise\"\nexport * from \"./envUtil\"\nexport { parseValidEnvVarUrl } from \"./envUtil\"\n\nexport { asArray, deepAssign, isValidKey } from \"builder-util-runtime\"\nexport * from \"./fs\"\n\nexport { generateKsuid } from \"./ksuid\"\nexport { loadCscLink, decodeCscLinkBase64, resolveCscLinkPath } from \"./cscLink\"\n\nexport const debug7z = _debug(\"electron-builder:7z\")\n\nexport function serializeToYaml(object: any, skipInvalid = false, noRefs = false) {\n  return dump(object, {\n    lineWidth: 8000,\n    skipInvalid,\n    noRefs,\n  })\n}\n\nexport function removePassword(input: string): string {\n  // Sensitive parameter stems — any of `-`, `--`, or `/` prefix is accepted for all stems.\n  // `pass:` is intentionally absent; the dedicated pass: handler below covers it without double-processing.\n  const sensitiveStems = [\"accessKey\", \"secretKey\", \"privateToken\", \"apiKey\", \"passphrase\", \"password\", \"secret\", \"token\", \"String\", \"pass\", \"p\"]\n  const stemAlt = sensitiveStems.map(s => s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")).join(\"|\")\n  // (?:--?|/) matches -, --, or / prefix. Longest stems listed first to minimise backtracking.\n  // (?<!\\S) / (?=[\\s\"']|$) word-boundary guards prevent matching -path, -StringLength, etc.\n  const flagPattern = new RegExp(`(?<!\\\\S)((?:--?|/)(?:${stemAlt}))(?=[\\\\s\"']|$)\\\\s*(?:([\"'])(.*?)\\\\2|([^\\\\s]+))`, \"gi\")\n\n  input = input.replace(flagPattern, (_match, prefix, quote, quotedVal, unquotedVal) => {\n    const value = quotedVal ?? unquotedVal\n\n    if (prefix.trim().toLowerCase() === \"/p\" && value.startsWith(\"\\\\\\\\Mac\\\\Host\\\\\")) {\n      return `${prefix} ${quote ?? \"\"}${value}${quote ?? \"\"}`\n    }\n\n    return `${prefix} ${quote ?? \"\"}${hashSensitiveValue(value)}${quote ?? \"\"}`\n  })\n\n  // pass:value — colon acts as separator; handles both pass:secret (no space) and pass: secret (space)\n  // Quoted phrases (pass:'a b c' or pass:\"a b c\") are captured in full so the whole phrase is hashed.\n  input = input.replace(/(?<!\\S)pass:\\s*(?:([\"'])(.*?)\\1|([^\\s]+))/gi, (_match, quote, quotedVal, unquotedVal) => {\n    const value = quotedVal ?? unquotedVal\n    return quote ? `pass:${quote}${hashSensitiveValue(value)}${quote}` : `pass:${hashSensitiveValue(value)}`\n  })\n\n  // /b … /c block format\n  return input.replace(/(\\/b\\s+)(.*?)(\\s+\\/c)/g, (_match, p1, p2, p3) => {\n    return `${p1}${hashSensitiveValue(p2)}${p3}`\n  })\n}\n\nconst SENSITIVE_ENV_KEY_RE = /KEY|TOKEN|SECRET|PASSWORD|PASS|CREDENTIAL|CSC/i\n\n/**\n * Returns a copy of the environment with sensitive keys removed.\n * Use this when building the environment for child processes that do not\n * need signing credentials, tokens, or passwords (e.g. package managers).\n */\nexport function stripSensitiveEnvVars(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv {\n  const out: NodeJS.ProcessEnv = {}\n  for (const [k, v] of Object.entries(env)) {\n    if (isValidKey(k) && !isSensitiveFieldName(k) && !SENSITIVE_ENV_KEY_RE.test(k)) {\n      out[k] = v\n    }\n  }\n  return out\n}\n\nexport function filterSensitiveEnv(env: Record<string, string | undefined>): Record<string, string | undefined> {\n  const out: Record<string, string | undefined> = {}\n  for (const [k, v] of Object.entries(env)) {\n    out[k] = (isSensitiveFieldName(k) || SENSITIVE_ENV_KEY_RE.test(k)) && v != null ? hashSensitiveValue(v) : v\n  }\n  return out\n}\n\nfunction getProcessEnv(env: Record<string, string | undefined> | Nullish): NodeJS.ProcessEnv | undefined {\n  // Windows: passing a filtered env to execFile drops critical system vars (PATH, SYSTEMROOT, TEMP)\n  // that many tools require. Credential stripping is therefore not applied on Windows.\n  if (process.platform === \"win32\") {\n    return env == null ? undefined : env\n  }\n\n  // When no explicit env is provided, strip credential env vars so child processes\n  // (package managers, signing tools, etc.) don't inherit secrets they don't need.\n  const finalEnv = {\n    ...(env == null ? stripSensitiveEnvVars(process.env) : env),\n  }\n\n  // without LC_CTYPE dpkg can returns encoded unicode symbols\n  // set LC_CTYPE to avoid crash https://github.com/electron-userland/electron-builder/issues/503 Even \"en_DE.UTF-8\" leads to error.\n  const locale = process.platform === \"linux\" ? process.env.LANG || \"C.UTF-8\" : \"en_US.UTF-8\"\n  finalEnv.LANG = locale\n  finalEnv.LC_CTYPE = locale\n  finalEnv.LC_ALL = locale\n  return finalEnv\n}\n\nexport function exec(file: string, args?: Array<string> | null, options?: ExecFileOptions, isLogOutIfDebug = true): Promise<string> {\n  if (log.isDebugEnabled) {\n    const logFields: any = {\n      file,\n      args: args == null ? \"\" : removePassword(args.join(\" \")),\n    }\n    if (options != null) {\n      if (options.cwd != null) {\n        logFields.cwd = options.cwd\n      }\n\n      if (options.env != null) {\n        const diffEnv = { ...options.env }\n        for (const name of Object.keys(process.env)) {\n          if (process.env[name] === options.env[name]) {\n            delete diffEnv[name]\n          }\n        }\n        logFields.env = safeStringifyJson(filterSensitiveEnv(diffEnv))\n      }\n    }\n\n    log.debug(logFields, \"executing\")\n  }\n\n  return new Promise<string>((resolve, reject) => {\n    execFile(\n      file,\n      args,\n      {\n        ...options,\n        maxBuffer: 1000 * 1024 * 1024,\n        env: getProcessEnv(options == null ? null : options.env), // codeql[js/shell-command-injection-from-environment] - env filtered via getProcessEnv/stripSensitiveEnvVars; execFile array args (no shell)\n      },\n      (error, stdout, stderr) => {\n        if (error == null) {\n          if (isLogOutIfDebug && log.isDebugEnabled) {\n            const logFields: any = {\n              file,\n            }\n            if (stdout.length > 0) {\n              logFields.stdout = stdout\n            }\n            if (stderr.length > 0) {\n              logFields.stderr = stderr\n            }\n\n            log.debug(logFields, \"executed\")\n          }\n          resolve(stdout.toString())\n        } else {\n          let message = chalk.red(removePassword(`Exit code: ${(error as any).code}. ${error.message}`))\n          if (stdout.length !== 0) {\n            if (file.endsWith(\"wine\")) {\n              stdout = stdout.toString()\n            }\n            message += `\\n${chalk.yellow(removePassword(stdout.toString()))}`\n          }\n          if (stderr.length !== 0) {\n            if (file.endsWith(\"wine\")) {\n              stderr = stderr.toString()\n            }\n            message += `\\n${chalk.red(removePassword(stderr.toString()))}`\n          }\n\n          // TODO: switch to ECMA Script 2026 Error class with `cause` property to return stack trace\n          reject(new ExecError(file, (error as any).code, message, \"\", `${error.code || ExecError.code}`))\n        }\n      }\n    )\n  })\n}\n\nexport interface ExtraSpawnOptions {\n  isPipeInput?: boolean\n}\n\nfunction logSpawn(command: string, args: Array<string>, options: SpawnOptions) {\n  // use general debug.enabled to log spawn, because it doesn't produce a lot of output (the only line), but important in any case\n  if (!log.isDebugEnabled) {\n    return\n  }\n\n  const argsString = removePassword(args.join(\" \"))\n  const logFields: any = {\n    command: command + \" \" + (command === \"docker\" ? argsString : removePassword(argsString)),\n  }\n  if (options != null && options.cwd != null) {\n    logFields.cwd = options.cwd\n  }\n  log.debug(logFields, \"spawning\")\n}\n\nexport function doSpawn(command: string, args: Array<string>, options?: SpawnOptions, extraOptions?: ExtraSpawnOptions): ChildProcess {\n  if (options == null) {\n    options = {}\n  }\n\n  options.env = getProcessEnv(options.env)\n\n  if (options.stdio == null) {\n    const isDebugEnabled = debug.enabled\n    // do not ignore stdout/stderr if not debug, because in this case we will read into buffer and print on error\n    options.stdio = [extraOptions != null && extraOptions.isPipeInput ? \"pipe\" : \"ignore\", isDebugEnabled ? \"inherit\" : \"pipe\", isDebugEnabled ? \"inherit\" : \"pipe\"] as any\n  }\n\n  logSpawn(command, args, options)\n  try {\n    return _spawn(command, args, options)\n  } catch (e: any) {\n    throw new Error(`Cannot spawn ${command}: ${e.stack || e}`)\n  }\n}\n\nexport function spawnAndWrite(command: string, args: Array<string>, data: string, options?: SpawnOptions) {\n  const childProcess = doSpawn(command, args, options, { isPipeInput: true })\n  const timeout = setTimeout(() => childProcess.kill(), 4 * 60 * 1000)\n  return new Promise<any>((resolve, reject) => {\n    handleProcess(\n      \"close\",\n      childProcess,\n      command,\n      () => {\n        try {\n          clearTimeout(timeout)\n        } finally {\n          resolve(undefined)\n        }\n      },\n      error => {\n        try {\n          clearTimeout(timeout)\n        } finally {\n          reject(error)\n        }\n      }\n    )\n\n    childProcess.stdin!.end(data)\n  })\n}\n\nexport function spawnAndWriteWithOutput(command: string, args: Array<string>, data: string, options?: SpawnOptions): Promise<{ stdout: string; stderr: string }> {\n  const childProcess = doSpawn(command, args, { ...options, stdio: [\"pipe\", \"pipe\", \"pipe\"] as any })\n  const isDebugEnabled = debug.enabled\n\n  return new Promise((resolve, reject) => {\n    let stdout = \"\"\n    let stderr = \"\"\n    let timedOut = false\n\n    const timeout = setTimeout(\n      () => {\n        timedOut = true\n        childProcess.kill()\n      },\n      4 * 60 * 1000\n    )\n\n    childProcess.on(\"error\", (err: Error) => {\n      clearTimeout(timeout)\n      reject(err)\n    })\n\n    childProcess.stdout!.on(\"data\", (chunk: Buffer) => {\n      stdout += chunk.toString()\n      if (isDebugEnabled) {\n        process.stdout.write(chunk)\n      }\n    })\n\n    childProcess.stderr!.on(\"data\", (chunk: Buffer) => {\n      stderr += chunk.toString()\n      if (isDebugEnabled) {\n        process.stderr.write(chunk)\n      }\n    })\n\n    childProcess.stdin!.end(data)\n\n    childProcess.once(\"close\", (code: number) => {\n      clearTimeout(timeout)\n      if (timedOut) {\n        reject(new Error(`${command} timed out after 4 minutes`))\n      } else if (code === 0) {\n        resolve({ stdout, stderr })\n      } else {\n        reject(new ExecError(command, code ?? -1, stdout, stderr))\n      }\n    })\n  })\n}\n\nexport function spawn(command: string, args?: Array<string> | null, options?: SpawnOptions, extraOptions?: ExtraSpawnOptions): Promise<any> {\n  return new Promise<any>((resolve, reject) => {\n    handleProcess(\"close\", doSpawn(command, args || [], options, extraOptions), command, resolve, reject)\n  })\n}\n\nfunction handleProcess(event: string, childProcess: ChildProcess, command: string, resolve: ((value?: any) => void) | null, reject: (reason?: any) => void) {\n  childProcess.on(\"error\", reject)\n\n  let out = \"\"\n  if (childProcess.stdout != null) {\n    childProcess.stdout.on(\"data\", (data: string) => {\n      out += data\n    })\n  }\n\n  let errorOut = \"\"\n  if (childProcess.stderr != null) {\n    childProcess.stderr.on(\"data\", (data: string) => {\n      errorOut += data\n    })\n  }\n\n  childProcess.once(event, (code: number) => {\n    if (log.isDebugEnabled) {\n      const fields: any = {\n        command: path.basename(command),\n        code,\n        pid: childProcess.pid,\n      }\n      if (out.length > 0) {\n        fields.out = out\n      }\n      log.debug(fields, \"exited\")\n    }\n\n    if (code === 0) {\n      if (resolve != null) {\n        resolve(out)\n      }\n    } else {\n      reject(new ExecError(command, code, out, errorOut))\n    }\n  })\n}\n\nfunction formatOut(text: string, title: string) {\n  return text.length === 0 ? \"\" : `\\n${title}:\\n${text}`\n}\n\nexport class ExecError extends Error {\n  alreadyLogged = false\n\n  static code = \"ERR_ELECTRON_BUILDER_CANNOT_EXECUTE\"\n\n  constructor(\n    command: string,\n    readonly exitCode: number,\n    out: string,\n    errorOut: string,\n    code = ExecError.code\n  ) {\n    super(`${command} process failed ${code}${formatOut(String(exitCode), \"Exit code\")}${formatOut(out, \"Output\")}${formatOut(errorOut, \"Error output\")}`)\n    ;(this as NodeJS.ErrnoException).code = code\n  }\n}\n\nexport function use<T, R>(value: T | Nullish, task: (value: T) => R): R | null {\n  return value == null ? null : task(value)\n}\n\nexport function isTokenCharValid(token: string) {\n  return /^[.\\w/=+-]+$/.test(token)\n}\n\nexport async function getUserDefinedCacheDir() {\n  let cacheEnv = process.env.ELECTRON_BUILDER_CACHE\n  if (!isEmptyOrSpaces(cacheEnv)) {\n    cacheEnv = path.resolve(cacheEnv)\n    if (!(await exists(cacheEnv))) {\n      await mkdir(cacheEnv)\n    }\n    return cacheEnv\n  }\n  return undefined\n}\n\nexport function addValue<K, T>(map: Map<K, Array<T>>, key: K, value: T) {\n  const list = map.get(key)\n  if (list == null) {\n    map.set(key, [value])\n  } else if (!list.includes(value)) {\n    list.push(value)\n  }\n}\n\nexport function isArrayEqualRegardlessOfSort(a: Array<string>, b: Array<string>) {\n  a = a.slice()\n  b = b.slice()\n  a.sort()\n  b.sort()\n  return a.length === b.length && a.every((value, index) => value === b[index])\n}\n\n/**\n * Recursively removes all undefined and null values from an object\n */\nexport function removeNullish<T>(obj: T): T {\n  if (obj === null || typeof obj !== \"object\") {\n    return obj\n  }\n\n  if (Array.isArray(obj)) {\n    return obj.map(removeNullish) as T\n  }\n\n  const result: Record<string, any> = {}\n  for (const [key, value] of Object.entries(obj)) {\n    if (value != null) {\n      result[key] = removeNullish(value)\n    }\n  }\n  return result as T\n}\n\nexport function replaceDefault(inList: Array<string> | Nullish, defaultList: Array<string>): Array<string> {\n  if (inList == null || (inList.length === 1 && inList[0] === \"default\")) {\n    return defaultList\n  }\n\n  const index = inList.indexOf(\"default\")\n  if (index >= 0) {\n    const list = inList.slice(0, index)\n    list.push(...defaultList)\n    if (index !== inList.length - 1) {\n      list.push(...inList.slice(index + 1))\n    }\n    inList = list\n  }\n  return inList\n}\n\nexport function getPlatformIconFileName(value: string | Nullish, isMac: boolean) {\n  if (value === undefined) {\n    return undefined\n  }\n  if (value === null) {\n    return null\n  }\n\n  if (!value.includes(\".\")) {\n    return `${value}.${isMac ? \"icns\" : \"ico\"}`\n  }\n\n  return value.replace(isMac ? \".ico\" : \".icns\", isMac ? \".icns\" : \".ico\")\n}\n\nexport function isPullRequest() {\n  // TRAVIS_PULL_REQUEST is set to the pull request number if the current job is a pull request build, or false if it’s not.\n  function isSet(value: string | undefined) {\n    // value can be or null, or empty string\n    return value && value !== \"false\"\n  }\n\n  return (\n    isSet(process.env.TRAVIS_PULL_REQUEST) ||\n    isSet(process.env.CIRCLE_PULL_REQUEST) ||\n    isSet(process.env.BITRISE_PULL_REQUEST) ||\n    isSet(process.env.APPVEYOR_PULL_REQUEST_NUMBER) ||\n    isSet(process.env.GITHUB_BASE_REF)\n  )\n}\n\nexport function isEnvTrue(value: string | Nullish) {\n  if (value != null) {\n    value = value.trim()\n  }\n  return value === \"true\" || value === \"\" || value === \"1\"\n}\n\nexport class InvalidConfigurationError extends Error {\n  constructor(message: string, code = \"ERR_ELECTRON_BUILDER_INVALID_CONFIGURATION\") {\n    super(message)\n    ;(this as NodeJS.ErrnoException).code = code\n  }\n}\n\n/**\n * Resolves a user-supplied path to an absolute form and validates it.\n *\n * Always rejects paths containing null bytes or newlines (C-level argument\n * injection risk even with array-form execFile).\n *\n * When `base` is provided, also enforces containment: the resolved path must\n * start with the resolved `base` directory.  This `startsWith`-based check is\n * the pattern that CodeQL's path-injection analysis recognises as a sanitizer,\n * clearing the taint on the returned value for interprocedural analysis.\n */\nexport function sanitizeDirPath(p: string, base?: string): string {\n  if (isEmptyOrSpaces(p)) {\n    throw new InvalidConfigurationError(\"Directory path must be a non-empty string\")\n  }\n  if (p.includes(\"\\0\") || p.includes(\"\\n\") || p.includes(\"\\r\")) {\n    throw new InvalidConfigurationError(`Directory path contains illegal characters: \"${p}\"`)\n  }\n\n  const resolved = path.resolve(p)\n\n  if (base != null) {\n    const resolvedBase = path.resolve(base)\n    if (resolved !== resolvedBase && !resolved.startsWith(resolvedBase + path.sep)) {\n      throw new InvalidConfigurationError(`Path \"${p}\" must be within \"${base}\"`)\n    }\n  }\n  return resolved\n}\n\n/**\n * Validates a path and returns the complete 7-Zip `-o<dir>` switch token.\n *\n * Input is first normalized via `sanitizeDirPath` (absolute resolution + null/newline\n * rejection), then validated for 7za switch-token safety.\n *\n * Allowlist rejects:\n *   - empty string (7za would receive bare `-o`, which fails)\n *   - leading `-`  (7za would misparse the token as a new switch)\n *   - control chars 0x00–0x1F and DEL 0x7F (C-level truncation/control risk)\n */\nexport function to7zaOutputSwitch(p: string): string {\n  const safePath = sanitizeDirPath(p)\n  // eslint-disable-next-line no-control-regex\n  if (!/^[^\\x00-\\x1F\\x7F-][^\\x00-\\x1F\\x7F]*$/.test(safePath)) {\n    throw new InvalidConfigurationError(`7za output path is empty, starts with \"-\", or contains control characters: \"${p}\"`)\n  }\n  return \"-o\" + safePath\n}\n"]}