{
  "version": 3,
  "sources": ["../../../../src/packages/plugin-commands-env/envRemove.ts"],
  "sourcesContent": ["import util from 'node:util';\nimport assert from 'node:assert';\nimport { PnpmError } from '../error/index.ts';\nimport { globalInfo, logger } from '../logger/index.ts';\nimport { removeBin } from '../remove-bins/index.ts';\nimport rimraf from '@zkochan/rimraf';\nimport { existsSync } from 'node:fs';\nimport path from 'node:path';\nimport { getNodeVersion } from './downloadNodeVersion.ts';\nimport { getNodeVersionsBaseDir, type NvmNodeCommandOptions } from './node.ts';\nimport { getNodeExecPathAndTargetDir } from './utils.ts';\n\nexport async function envRemove(\n  opts: NvmNodeCommandOptions,\n  params: string[]\n): Promise<{ exitCode: number }> {\n  if (opts.global !== true) {\n    throw new PnpmError(\n      'NOT_IMPLEMENTED_YET',\n      '\"pnpm env remove <version>\" can only be used with the \"--global\" option currently'\n    );\n  }\n\n  let failed = false;\n\n  for (const version of params) {\n    const err = await removeNodeVersion(opts, version);\n\n    if (err) {\n      logger.error(err);\n      failed = true;\n    }\n  }\n\n  return { exitCode: failed ? 1 : 0 };\n}\n\nasync function removeNodeVersion(\n  opts: NvmNodeCommandOptions,\n  version: string\n): Promise<Error | undefined> {\n  const { nodeVersion } = await getNodeVersion(opts, version);\n\n  const nodeDir = getNodeVersionsBaseDir(opts.pnpmHomeDir);\n\n  if (typeof nodeVersion !== 'string' || nodeVersion === '') {\n    return new PnpmError(\n      'COULD_NOT_RESOLVE_NODEJS',\n      `Couldn't find Node.js version matching ${version}`\n    );\n  }\n\n  const versionDir = path.resolve(nodeDir, nodeVersion);\n\n  if (!existsSync(versionDir)) {\n    return new PnpmError(\n      'ENV_NO_NODE_DIRECTORY',\n      `Couldn't find Node.js directory in ${versionDir}`\n    );\n  }\n\n  const { nodePath, nodeLink } = await getNodeExecPathAndTargetDir(\n    opts.pnpmHomeDir\n  );\n\n  if (nodeLink?.includes(versionDir) === true) {\n    globalInfo(\n      `Node.js ${nodeVersion as string} was detected as the default one, removing ...`\n    );\n\n    const npmPath = path.resolve(opts.pnpmHomeDir, 'npm');\n\n    const npxPath = path.resolve(opts.pnpmHomeDir, 'npx');\n\n    try {\n      await Promise.all([\n        removeBin(nodePath),\n        removeBin(npmPath),\n        removeBin(npxPath),\n      ]);\n    } catch (err: unknown) {\n      assert(util.types.isNativeError(err));\n\n      if (!('code' in err && err.code === 'ENOENT')) return err;\n    }\n  }\n\n  await rimraf(versionDir);\n\n  globalInfo(`Node.js ${nodeVersion as string} was removed ${versionDir}`);\n\n  return;\n}\n"],
  "mappings": "AAAA,OAAO,UAAU;AACjB,OAAO,YAAY;AACnB,SAAS,iBAAiB;AAC1B,SAAS,YAAY,cAAc;AACnC,SAAS,iBAAiB;AAC1B,OAAO,YAAY;AACnB,SAAS,kBAAkB;AAC3B,OAAO,UAAU;AACjB,SAAS,sBAAsB;AAC/B,SAAS,8BAA0D;AACnE,SAAS,mCAAmC;AAE5C,eAAsB,UACpB,MACA,QAC+B;AAC/B,MAAI,KAAK,WAAW,MAAM;AACxB,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS;AAEb,aAAW,WAAW,QAAQ;AAC5B,UAAM,MAAM,MAAM,kBAAkB,MAAM,OAAO;AAEjD,QAAI,KAAK;AACP,aAAO,MAAM,GAAG;AAChB,eAAS;AAAA,IACX;AAAA,EACF;AAEA,SAAO,EAAE,UAAU,SAAS,IAAI,EAAE;AACpC;AAEA,eAAe,kBACb,MACA,SAC4B;AAC5B,QAAM,EAAE,YAAY,IAAI,MAAM,eAAe,MAAM,OAAO;AAE1D,QAAM,UAAU,uBAAuB,KAAK,WAAW;AAEvD,MAAI,OAAO,gBAAgB,YAAY,gBAAgB,IAAI;AACzD,WAAO,IAAI;AAAA,MACT;AAAA,MACA,0CAA0C,OAAO;AAAA,IACnD;AAAA,EACF;AAEA,QAAM,aAAa,KAAK,QAAQ,SAAS,WAAW;AAEpD,MAAI,CAAC,WAAW,UAAU,GAAG;AAC3B,WAAO,IAAI;AAAA,MACT;AAAA,MACA,sCAAsC,UAAU;AAAA,IAClD;AAAA,EACF;AAEA,QAAM,EAAE,UAAU,SAAS,IAAI,MAAM;AAAA,IACnC,KAAK;AAAA,EACP;AAEA,MAAI,UAAU,SAAS,UAAU,MAAM,MAAM;AAC3C;AAAA,MACE,WAAW,WAAqB;AAAA,IAClC;AAEA,UAAM,UAAU,KAAK,QAAQ,KAAK,aAAa,KAAK;AAEpD,UAAM,UAAU,KAAK,QAAQ,KAAK,aAAa,KAAK;AAEpD,QAAI;AACF,YAAM,QAAQ,IAAI;AAAA,QAChB,UAAU,QAAQ;AAAA,QAClB,UAAU,OAAO;AAAA,QACjB,UAAU,OAAO;AAAA,MACnB,CAAC;AAAA,IACH,SAAS,KAAc;AACrB,aAAO,KAAK,MAAM,cAAc,GAAG,CAAC;AAEpC,UAAI,EAAE,UAAU,OAAO,IAAI,SAAS,UAAW,QAAO;AAAA,IACxD;AAAA,EACF;AAEA,QAAM,OAAO,UAAU;AAEvB,aAAW,WAAW,WAAqB,gBAAgB,UAAU,EAAE;AAEvE;AACF;",
  "names": []
}
