{
  "version": 3,
  "sources": ["../../../../src/packages/tools.plugin-commands-self-updater/installPnpmToTools.ts"],
  "sourcesContent": ["import fs from 'node:fs';\nimport path from 'node:path';\nimport { getCurrentPackageName } from '../cli-meta/index.ts';\nimport { runPnpmCli } from '../exec.pnpm-cli-runner/index.ts';\nimport { getToolDirPath } from '../tools.path/index.ts';\nimport { sync as rimraf } from '@zkochan/rimraf';\nimport { fastPathTemp as pathTemp } from 'path-temp';\nimport renameOverwrite from 'rename-overwrite';\nimport type { SelfUpdateCommandOptions } from './selfUpdate.ts';\n\nexport interface InstallPnpmToToolsResult {\n  binDir: string;\n  baseDir: string;\n  alreadyExisted: boolean;\n}\n\nexport async function installPnpmToTools(\n  pnpmVersion: string,\n  opts: SelfUpdateCommandOptions\n): Promise<InstallPnpmToToolsResult> {\n  const currentPkgName = getCurrentPackageName();\n\n  const dir = getToolDirPath({\n    pnpmHomeDir: opts.pnpmHomeDir,\n    tool: {\n      name: currentPkgName,\n      version: pnpmVersion,\n    },\n  });\n\n  const binDir = path.join(dir, 'bin');\n\n  const alreadyExisted = fs.existsSync(binDir);\n\n  if (alreadyExisted) {\n    return {\n      alreadyExisted,\n      baseDir: dir,\n      binDir,\n    };\n  }\n\n  const stage = pathTemp(dir);\n\n  fs.mkdirSync(stage, { recursive: true });\n\n  fs.writeFileSync(path.join(stage, 'package.json'), '{}');\n\n  try {\n    // The reason we don't just run add.handler is that at this point we might have settings from local config files\n    // that we don't want to use while installing the pnpm CLI.\n    runPnpmCli(\n      [\n        'add',\n        `${currentPkgName}@${pnpmVersion}`,\n        '--loglevel=error',\n        '--allow-build=@pnpm/exe',\n        // We want to avoid symlinks because of the rename step,\n        // which breaks the junctions on Windows.\n        '--config.node-linker=hoisted',\n        `--config.bin=${path.join(stage, 'bin')}`,\n      ],\n      { cwd: stage }\n    );\n    renameOverwrite.sync(stage, dir);\n  } catch (err: unknown) {\n    try {\n      rimraf(stage);\n    } catch {} // eslint-disable-line:no-empty\n    throw err;\n  }\n  return {\n    alreadyExisted,\n    baseDir: dir,\n    binDir,\n  };\n}\n"],
  "mappings": "AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,6BAA6B;AACtC,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAC/B,SAAS,QAAQ,cAAc;AAC/B,SAAS,gBAAgB,gBAAgB;AACzC,OAAO,qBAAqB;AAS5B,eAAsB,mBACpB,aACA,MACmC;AACnC,QAAM,iBAAiB,sBAAsB;AAE7C,QAAM,MAAM,eAAe;AAAA,IACzB,aAAa,KAAK;AAAA,IAClB,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF,CAAC;AAED,QAAM,SAAS,KAAK,KAAK,KAAK,KAAK;AAEnC,QAAM,iBAAiB,GAAG,WAAW,MAAM;AAE3C,MAAI,gBAAgB;AAClB,WAAO;AAAA,MACL;AAAA,MACA,SAAS;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,QAAM,QAAQ,SAAS,GAAG;AAE1B,KAAG,UAAU,OAAO,EAAE,WAAW,KAAK,CAAC;AAEvC,KAAG,cAAc,KAAK,KAAK,OAAO,cAAc,GAAG,IAAI;AAEvD,MAAI;AAGF;AAAA,MACE;AAAA,QACE;AAAA,QACA,GAAG,cAAc,IAAI,WAAW;AAAA,QAChC;AAAA,QACA;AAAA;AAAA;AAAA,QAGA;AAAA,QACA,gBAAgB,KAAK,KAAK,OAAO,KAAK,CAAC;AAAA,MACzC;AAAA,MACA,EAAE,KAAK,MAAM;AAAA,IACf;AACA,oBAAgB,KAAK,OAAO,GAAG;AAAA,EACjC,SAAS,KAAc;AACrB,QAAI;AACF,aAAO,KAAK;AAAA,IACd,QAAQ;AAAA,IAAC;AACT,UAAM;AAAA,EACR;AACA,SAAO;AAAA,IACL;AAAA,IACA,SAAS;AAAA,IACT;AAAA,EACF;AACF;",
  "names": []
}
