{
  "version": 3,
  "sources": ["../../../../src/packages/plugin-commands-env/envUse.ts"],
  "sourcesContent": ["import { promises as fs } from 'node:fs';\nimport util from 'node:util';\nimport gfs from 'graceful-fs';\nimport path from 'node:path';\nimport { PnpmError } from '../error/index.ts';\nimport cmdShim from '@zkochan/cmd-shim';\nimport isWindows from 'is-windows';\nimport symlinkDir from 'symlink-dir';\nimport type { NvmNodeCommandOptions } from './node.ts';\nimport {\n  CURRENT_NODE_DIRNAME,\n  getNodeExecPathInBinDir,\n  getNodeExecPathInNodeDir,\n} from './utils.ts';\nimport { downloadNodeVersion } from './downloadNodeVersion.ts';\n\nexport async function envUse(\n  opts: NvmNodeCommandOptions,\n  params: string[]\n): Promise<string> {\n  if (opts.global !== true) {\n    throw new PnpmError(\n      'NOT_IMPLEMENTED_YET',\n      '\"pnpm env use <version>\" can only be used with the \"--global\" option currently'\n    );\n  }\n\n  const nodeInfo = await downloadNodeVersion(opts, params[0] ?? '');\n\n  if (!nodeInfo) {\n    throw new PnpmError(\n      'COULD_NOT_RESOLVE_NODEJS',\n      `Couldn't find Node.js version matching ${params[0]}`\n    );\n  }\n\n  const { nodeDir, nodeVersion } = nodeInfo;\n\n  const src = getNodeExecPathInNodeDir(nodeDir);\n\n  const dest = getNodeExecPathInBinDir(opts.bin);\n\n  await symlinkDir(nodeDir, path.join(opts.pnpmHomeDir, CURRENT_NODE_DIRNAME));\n\n  try {\n    gfs.unlinkSync(dest);\n  } catch (err: unknown) {\n    if (\n      !(util.types.isNativeError(err) && 'code' in err && err.code === 'ENOENT')\n    ) {\n      throw err;\n    }\n  }\n\n  await symlinkOrHardLink(src, dest);\n\n  try {\n    let npmDir = nodeDir;\n\n    if (process.platform !== 'win32') {\n      npmDir = path.join(npmDir, 'lib');\n    }\n\n    npmDir = path.join(npmDir, 'node_modules/npm');\n\n    if (typeof opts.configDir === 'string') {\n      // We want the global npm settings to persist when Node.js or/and npm is changed to a different version,\n      // so we tell npm to read the global config from centralized place that is outside of npm's directory.\n      await fs.writeFile(\n        path.join(npmDir, 'npmrc'),\n        `globalconfig=${path.join(opts.configDir, 'npmrc')}`,\n        'utf-8'\n      );\n    }\n\n    const npmBinDir = path.join(npmDir, 'bin');\n\n    const cmdShimOpts = { createPwshFile: false };\n\n    await cmdShim(\n      path.join(npmBinDir, 'npm-cli.js'),\n      path.join(opts.bin, 'npm'),\n      cmdShimOpts\n    );\n\n    await cmdShim(\n      path.join(npmBinDir, 'npx-cli.js'),\n      path.join(opts.bin, 'npx'),\n      cmdShimOpts\n    );\n  } catch {\n    // ignore\n  }\n\n  return `Node.js ${nodeVersion as string} was activated ${dest} -> ${src}`;\n}\n\n// On Windows, symlinks only work with developer mode enabled\n// or with admin permissions. So it is better to use hard links on Windows.\nasync function symlinkOrHardLink(\n  existingPath: string,\n  newPath: string\n): Promise<void> {\n  if (isWindows()) {\n    return fs.link(existingPath, newPath);\n  }\n  return fs.symlink(existingPath, newPath, 'file');\n}\n"],
  "mappings": "AAAA,SAAS,YAAY,UAAU;AAC/B,OAAO,UAAU;AACjB,OAAO,SAAS;AAChB,OAAO,UAAU;AACjB,SAAS,iBAAiB;AAC1B,OAAO,aAAa;AACpB,OAAO,eAAe;AACtB,OAAO,gBAAgB;AAEvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,2BAA2B;AAEpC,eAAsB,OACpB,MACA,QACiB;AACjB,MAAI,KAAK,WAAW,MAAM;AACxB,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,WAAW,MAAM,oBAAoB,MAAM,OAAO,CAAC,KAAK,EAAE;AAEhE,MAAI,CAAC,UAAU;AACb,UAAM,IAAI;AAAA,MACR;AAAA,MACA,0CAA0C,OAAO,CAAC,CAAC;AAAA,IACrD;AAAA,EACF;AAEA,QAAM,EAAE,SAAS,YAAY,IAAI;AAEjC,QAAM,MAAM,yBAAyB,OAAO;AAE5C,QAAM,OAAO,wBAAwB,KAAK,GAAG;AAE7C,QAAM,WAAW,SAAS,KAAK,KAAK,KAAK,aAAa,oBAAoB,CAAC;AAE3E,MAAI;AACF,QAAI,WAAW,IAAI;AAAA,EACrB,SAAS,KAAc;AACrB,QACE,EAAE,KAAK,MAAM,cAAc,GAAG,KAAK,UAAU,OAAO,IAAI,SAAS,WACjE;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAEA,QAAM,kBAAkB,KAAK,IAAI;AAEjC,MAAI;AACF,QAAI,SAAS;AAEb,QAAI,QAAQ,aAAa,SAAS;AAChC,eAAS,KAAK,KAAK,QAAQ,KAAK;AAAA,IAClC;AAEA,aAAS,KAAK,KAAK,QAAQ,kBAAkB;AAE7C,QAAI,OAAO,KAAK,cAAc,UAAU;AAGtC,YAAM,GAAG;AAAA,QACP,KAAK,KAAK,QAAQ,OAAO;AAAA,QACzB,gBAAgB,KAAK,KAAK,KAAK,WAAW,OAAO,CAAC;AAAA,QAClD;AAAA,MACF;AAAA,IACF;AAEA,UAAM,YAAY,KAAK,KAAK,QAAQ,KAAK;AAEzC,UAAM,cAAc,EAAE,gBAAgB,MAAM;AAE5C,UAAM;AAAA,MACJ,KAAK,KAAK,WAAW,YAAY;AAAA,MACjC,KAAK,KAAK,KAAK,KAAK,KAAK;AAAA,MACzB;AAAA,IACF;AAEA,UAAM;AAAA,MACJ,KAAK,KAAK,WAAW,YAAY;AAAA,MACjC,KAAK,KAAK,KAAK,KAAK,KAAK;AAAA,MACzB;AAAA,IACF;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,SAAO,WAAW,WAAqB,kBAAkB,IAAI,OAAO,GAAG;AACzE;AAIA,eAAe,kBACb,cACA,SACe;AACf,MAAI,UAAU,GAAG;AACf,WAAO,GAAG,KAAK,cAAc,OAAO;AAAA,EACtC;AACA,SAAO,GAAG,QAAQ,cAAc,SAAS,MAAM;AACjD;",
  "names": []
}
