{
  "version": 3,
  "sources": ["../../../../src/packages/node.fetcher/index.ts"],
  "sourcesContent": ["import fs from 'node:fs';\nimport path from 'node:path';\nimport { PnpmError } from '../error/index.ts';\nimport type {\n  FetchFromRegistry,\n  RetryTimeoutOptions,\n} from '../fetching-types/index.ts';\nimport { pickFetcher } from '../pick-fetcher/index.ts';\nimport { createCafsStore } from '../create-cafs-store/index.ts';\nimport { createTarballFetcher } from '../tarball-fetcher/index.ts';\nimport AdmZip from 'adm-zip';\nimport renameOverwrite from 'rename-overwrite';\nimport { temporaryDirectory } from 'tempy';\nimport { isNonGlibcLinux } from 'detect-libc';\nimport { getNodeTarball } from './getNodeTarball.ts';\n\nexport type FetchNodeOptions = {\n  storeDir: string;\n  fetchTimeout?: number | undefined;\n  nodeMirrorBaseUrl?: string | undefined;\n  retry?: RetryTimeoutOptions | undefined;\n};\n\nexport async function fetchNode(\n  fetch: FetchFromRegistry,\n  version: string,\n  targetDir: string,\n  opts: FetchNodeOptions\n): Promise<void> {\n  if (await isNonGlibcLinux()) {\n    throw new PnpmError(\n      'MUSL',\n      'The current system uses the \"MUSL\" C standard library. Node.js currently has prebuilt artifacts only for the \"glibc\" libc, so we can install Node.js only for glibc'\n    );\n  }\n\n  const nodeMirrorBaseUrl =\n    opts.nodeMirrorBaseUrl ?? 'https://nodejs.org/download/release/';\n\n  const { tarball, pkgName } = getNodeTarball(\n    version,\n    nodeMirrorBaseUrl,\n    process.platform,\n    process.arch\n  );\n\n  if (tarball.endsWith('.zip')) {\n    await downloadAndUnpackZip(fetch, tarball, targetDir, pkgName);\n    return;\n  }\n\n  const getAuthHeader = (): string | undefined => {\n    return;\n  };\n\n  const fetchers = createTarballFetcher(fetch, getAuthHeader, {\n    retry: opts.retry,\n    timeout: opts.fetchTimeout,\n    // These are not needed for fetching Node.js\n    rawConfig: {},\n    unsafePerm: false,\n  });\n\n  const cafs = createCafsStore(opts.storeDir);\n\n  const fetchTarball = pickFetcher(fetchers, { tarball });\n\n  const { filesIndex } = await fetchTarball(\n    cafs,\n    // TODO: fix any\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    { tarball } as any,\n    {\n      // TODO: change the name or don't save an index file for node.js tarballs\n      filesIndexFile: path.join(opts.storeDir, encodeURIComponent(tarball)),\n      lockfileDir: process.cwd(),\n      pkg: {},\n    }\n  );\n\n  cafs.importPackage(targetDir, {\n    filesResponse: {\n      unprocessed: false,\n      filesIndex: filesIndex as Record<string, string>,\n      resolvedFrom: 'remote',\n      requiresBuild: false,\n    },\n    force: true,\n  });\n}\n\nasync function downloadAndUnpackZip(\n  fetchFromRegistry: FetchFromRegistry,\n  zipUrl: string,\n  targetDir: string,\n  pkgName: string\n): Promise<void> {\n  const response = await fetchFromRegistry(zipUrl);\n\n  const tmp = path.join(temporaryDirectory(), 'pnpm.zip');\n\n  const dest = fs.createWriteStream(tmp);\n\n  await new Promise((resolve, reject): void => {\n    response.body\n      ?.pipe(dest)\n      .on('error', reject)\n      .on('close', (): void => {\n        resolve(undefined);\n      });\n  });\n\n  const zip = new AdmZip(tmp);\n\n  const nodeDir = path.dirname(targetDir);\n\n  zip.extractAllTo(nodeDir, true);\n\n  await renameOverwrite(path.join(nodeDir, pkgName), targetDir);\n\n  await fs.promises.unlink(tmp);\n}\n"],
  "mappings": "AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,iBAAiB;AAK1B,SAAS,mBAAmB;AAC5B,SAAS,uBAAuB;AAChC,SAAS,4BAA4B;AACrC,OAAO,YAAY;AACnB,OAAO,qBAAqB;AAC5B,SAAS,0BAA0B;AACnC,SAAS,uBAAuB;AAChC,SAAS,sBAAsB;AAS/B,eAAsB,UACpB,OACA,SACA,WACA,MACe;AACf,MAAI,MAAM,gBAAgB,GAAG;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,oBACJ,KAAK,qBAAqB;AAE5B,QAAM,EAAE,SAAS,QAAQ,IAAI;AAAA,IAC3B;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAEA,MAAI,QAAQ,SAAS,MAAM,GAAG;AAC5B,UAAM,qBAAqB,OAAO,SAAS,WAAW,OAAO;AAC7D;AAAA,EACF;AAEA,QAAM,gBAAgB,MAA0B;AAC9C;AAAA,EACF;AAEA,QAAM,WAAW,qBAAqB,OAAO,eAAe;AAAA,IAC1D,OAAO,KAAK;AAAA,IACZ,SAAS,KAAK;AAAA;AAAA,IAEd,WAAW,CAAC;AAAA,IACZ,YAAY;AAAA,EACd,CAAC;AAED,QAAM,OAAO,gBAAgB,KAAK,QAAQ;AAE1C,QAAM,eAAe,YAAY,UAAU,EAAE,QAAQ,CAAC;AAEtD,QAAM,EAAE,WAAW,IAAI,MAAM;AAAA,IAC3B;AAAA;AAAA;AAAA,IAGA,EAAE,QAAQ;AAAA,IACV;AAAA;AAAA,MAEE,gBAAgB,KAAK,KAAK,KAAK,UAAU,mBAAmB,OAAO,CAAC;AAAA,MACpE,aAAa,QAAQ,IAAI;AAAA,MACzB,KAAK,CAAC;AAAA,IACR;AAAA,EACF;AAEA,OAAK,cAAc,WAAW;AAAA,IAC5B,eAAe;AAAA,MACb,aAAa;AAAA,MACb;AAAA,MACA,cAAc;AAAA,MACd,eAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,EACT,CAAC;AACH;AAEA,eAAe,qBACb,mBACA,QACA,WACA,SACe;AACf,QAAM,WAAW,MAAM,kBAAkB,MAAM;AAE/C,QAAM,MAAM,KAAK,KAAK,mBAAmB,GAAG,UAAU;AAEtD,QAAM,OAAO,GAAG,kBAAkB,GAAG;AAErC,QAAM,IAAI,QAAQ,CAAC,SAAS,WAAiB;AAC3C,aAAS,MACL,KAAK,IAAI,EACV,GAAG,SAAS,MAAM,EAClB,GAAG,SAAS,MAAY;AACvB,cAAQ,MAAS;AAAA,IACnB,CAAC;AAAA,EACL,CAAC;AAED,QAAM,MAAM,IAAI,OAAO,GAAG;AAE1B,QAAM,UAAU,KAAK,QAAQ,SAAS;AAEtC,MAAI,aAAa,SAAS,IAAI;AAE9B,QAAM,gBAAgB,KAAK,KAAK,SAAS,OAAO,GAAG,SAAS;AAE5D,QAAM,GAAG,SAAS,OAAO,GAAG;AAC9B;",
  "names": []
}
