{
  "version": 3,
  "sources": ["../../../../src/packages/plugin-commands-env/envList.ts"],
  "sourcesContent": ["import { promises as fs, existsSync } from 'node:fs';\nimport path from 'node:path';\nimport { createFetchFromRegistry } from '../fetch/index.ts';\nimport { PnpmError } from '../error/index.ts';\nimport { resolveNodeVersions } from '../node.resolver/index.ts';\nimport semver from 'semver';\nimport { getNodeMirror } from './getNodeMirror.ts';\nimport { getNodeVersionsBaseDir, type NvmNodeCommandOptions } from './node.ts';\nimport { parseEnvSpecifier } from './parseEnvSpecifier.ts';\nimport {\n  getNodeExecPathAndTargetDir,\n  getNodeExecPathInNodeDir,\n} from './utils.ts';\n\nexport async function envList(\n  opts: NvmNodeCommandOptions,\n  params: string[]\n): Promise<string> {\n  if (opts.remote === true) {\n    const nodeVersionList = await listRemoteVersions(opts, params[0]);\n    // Make the newest version located in the end of output\n    return nodeVersionList.reverse().join('\\n');\n  }\n\n  const { currentVersion, versions } = await listLocalVersions(opts);\n\n  return versions\n    .map(\n      (nodeVersion) =>\n        `${nodeVersion === currentVersion ? '*' : ' '} ${nodeVersion}`\n    )\n    .join('\\n');\n}\n\ntype LocalVersions = {\n  currentVersion: string | undefined;\n  versions: string[];\n};\n\nasync function listLocalVersions(\n  opts: NvmNodeCommandOptions\n): Promise<LocalVersions> {\n  const nodeBaseDir = getNodeVersionsBaseDir(opts.pnpmHomeDir);\n  if (!existsSync(nodeBaseDir)) {\n    throw new PnpmError(\n      'ENV_NO_NODE_DIRECTORY',\n      `Couldn't find Node.js directory in ${nodeBaseDir}`\n    );\n  }\n  const { nodeLink } = await getNodeExecPathAndTargetDir(opts.pnpmHomeDir);\n  const nodeVersionDirs = await fs.readdir(nodeBaseDir);\n  let currentVersion: string | undefined;\n  const versions: string[] = [];\n  for (const nodeVersion of nodeVersionDirs) {\n    const nodeVersionDir = path.join(nodeBaseDir, nodeVersion);\n    const nodeExec = getNodeExecPathInNodeDir(nodeVersionDir);\n    if (nodeLink?.startsWith(nodeVersionDir) === true) {\n      currentVersion = nodeVersion;\n    }\n    if (semver.valid(nodeVersion) != null && existsSync(nodeExec)) {\n      versions.push(nodeVersion);\n    }\n  }\n\n  return { currentVersion, versions };\n}\n\nasync function listRemoteVersions(\n  opts: NvmNodeCommandOptions,\n  versionSpec?: string\n): Promise<string[]> {\n  const fetch = createFetchFromRegistry(opts);\n\n  const { releaseChannel, versionSpecifier } = parseEnvSpecifier(\n    versionSpec ?? ''\n  );\n\n  const nodeMirrorBaseUrl = getNodeMirror(opts.rawConfig, releaseChannel);\n\n  const nodeVersionList = await resolveNodeVersions(\n    fetch,\n    versionSpecifier,\n    nodeMirrorBaseUrl\n  );\n\n  return nodeVersionList;\n}\n"],
  "mappings": "AAAA,SAAS,YAAY,IAAI,kBAAkB;AAC3C,OAAO,UAAU;AACjB,SAAS,+BAA+B;AACxC,SAAS,iBAAiB;AAC1B,SAAS,2BAA2B;AACpC,OAAO,YAAY;AACnB,SAAS,qBAAqB;AAC9B,SAAS,8BAA0D;AACnE,SAAS,yBAAyB;AAClC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP,eAAsB,QACpB,MACA,QACiB;AACjB,MAAI,KAAK,WAAW,MAAM;AACxB,UAAM,kBAAkB,MAAM,mBAAmB,MAAM,OAAO,CAAC,CAAC;AAEhE,WAAO,gBAAgB,QAAQ,EAAE,KAAK,IAAI;AAAA,EAC5C;AAEA,QAAM,EAAE,gBAAgB,SAAS,IAAI,MAAM,kBAAkB,IAAI;AAEjE,SAAO,SACJ;AAAA,IACC,CAAC,gBACC,GAAG,gBAAgB,iBAAiB,MAAM,GAAG,IAAI,WAAW;AAAA,EAChE,EACC,KAAK,IAAI;AACd;AAOA,eAAe,kBACb,MACwB;AACxB,QAAM,cAAc,uBAAuB,KAAK,WAAW;AAC3D,MAAI,CAAC,WAAW,WAAW,GAAG;AAC5B,UAAM,IAAI;AAAA,MACR;AAAA,MACA,sCAAsC,WAAW;AAAA,IACnD;AAAA,EACF;AACA,QAAM,EAAE,SAAS,IAAI,MAAM,4BAA4B,KAAK,WAAW;AACvE,QAAM,kBAAkB,MAAM,GAAG,QAAQ,WAAW;AACpD,MAAI;AACJ,QAAM,WAAqB,CAAC;AAC5B,aAAW,eAAe,iBAAiB;AACzC,UAAM,iBAAiB,KAAK,KAAK,aAAa,WAAW;AACzD,UAAM,WAAW,yBAAyB,cAAc;AACxD,QAAI,UAAU,WAAW,cAAc,MAAM,MAAM;AACjD,uBAAiB;AAAA,IACnB;AACA,QAAI,OAAO,MAAM,WAAW,KAAK,QAAQ,WAAW,QAAQ,GAAG;AAC7D,eAAS,KAAK,WAAW;AAAA,IAC3B;AAAA,EACF;AAEA,SAAO,EAAE,gBAAgB,SAAS;AACpC;AAEA,eAAe,mBACb,MACA,aACmB;AACnB,QAAM,QAAQ,wBAAwB,IAAI;AAE1C,QAAM,EAAE,gBAAgB,iBAAiB,IAAI;AAAA,IAC3C,eAAe;AAAA,EACjB;AAEA,QAAM,oBAAoB,cAAc,KAAK,WAAW,cAAc;AAEtE,QAAM,kBAAkB,MAAM;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AACT;",
  "names": []
}
