{"version":3,"file":"pnpm.mjs","names":[],"sources":["../../../src/packagers/pnpm.ts"],"sourcesContent":["import { Predicate } from 'effect';\nimport { isEmpty, reduce, replace, split, startsWith } from 'ramda';\n\nimport type { JSONObject } from '../types';\nimport { SpawnError, spawnProcess } from '../utils';\nimport type { Packager } from './packager';\n\n/**\n * pnpm packager.\n */\nexport class Pnpm implements Packager {\n  get lockfileName() {\n    return 'pnpm-lock.yaml';\n  }\n\n  get copyPackageSectionNames() {\n    return [];\n  }\n\n  get mustCopyModules() {\n    return false;\n  }\n\n  async getProdDependencies(cwd: string, depth?: number) {\n    // Get first level dependency graph\n    const command = /^win/.test(process.platform) ? 'pnpm.cmd' : 'pnpm';\n    const args = [\n      'ls',\n      '--prod', // Only prod dependencies\n      '--json',\n      depth ? `--depth=${depth}` : null,\n    ].filter(Predicate.isString);\n\n    // If we need to ignore some errors add them here\n    const ignoredPnpmErrors: Array<{\n      npmError: string;\n      log: boolean;\n    }> = [];\n\n    try {\n      const processOutput = await spawnProcess(command, args, { cwd });\n      const depJson = processOutput.stdout;\n\n      return JSON.parse(depJson)[0];\n    } catch (err) {\n      if (err instanceof SpawnError) {\n        // Only exit with an error if we have critical npm errors for 2nd level inside\n        const errors = split('\\n', err.stderr);\n        const failed = reduce(\n          (acc, error) => {\n            if (acc) {\n              return true;\n            }\n\n            return (\n              !isEmpty(error) &&\n              !ignoredPnpmErrors.some((ignoredError) => startsWith(`npm ERR! ${ignoredError.npmError}`, error))\n            );\n          },\n          false,\n          errors\n        );\n\n        if (!failed && !isEmpty(err.stdout)) {\n          return { stdout: err.stdout };\n        }\n      }\n\n      throw err;\n    }\n  }\n\n  /**\n   * We should not be modifying 'pnpm-lock.yaml'\n   * because this file should be treated as internal to pnpm.\n   */\n  rebaseLockfile(pathToPackageRoot: string, lockfile: JSONObject) {\n    if (lockfile.version) {\n      // eslint-disable-next-line no-param-reassign\n      lockfile.version = this._rebaseFileReferences(pathToPackageRoot, lockfile.version);\n    }\n\n    if (lockfile.dependencies) {\n      for (const lockedDependency in lockfile.dependencies) {\n        this.rebaseLockfile(pathToPackageRoot, lockedDependency);\n      }\n    }\n\n    return lockfile;\n  }\n\n  async install(cwd: string, extraArgs: Array<string>) {\n    const command = /^win/.test(process.platform) ? 'pnpm.cmd' : 'pnpm';\n\n    const args = ['install', '--no-frozen-lockfile', ...extraArgs];\n\n    await spawnProcess(command, args, { cwd });\n  }\n\n  async prune(cwd: string) {\n    const command = /^win/.test(process.platform) ? 'pnpm.cmd' : 'pnpm';\n    const args = ['prune'];\n\n    await spawnProcess(command, args, { cwd });\n  }\n\n  async runScripts(cwd: string, scriptNames: string[]) {\n    const command = /^win/.test(process.platform) ? 'pnpm.cmd' : 'pnpm';\n\n    await Promise.all(\n      scriptNames.map((scriptName) => {\n        const args = ['run', scriptName];\n\n        return spawnProcess(command, args, { cwd });\n      })\n    );\n  }\n\n  private _rebaseFileReferences(pathToPackageRoot: string, moduleVersion: string) {\n    if (/^file:[^/]{2}/.test(moduleVersion)) {\n      const filePath = replace(/^file:/, '', moduleVersion);\n\n      return replace(/\\\\/g, '/', `file:${pathToPackageRoot}/${filePath}`);\n    }\n\n    return moduleVersion;\n  }\n}\n"],"mappings":";;;;;;;;aAIoD;CAMvC,OAAb,MAAsC;EACpC,IAAI,eAAe;AACjB,UAAO;;EAGT,IAAI,0BAA0B;AAC5B,UAAO,EAAE;;EAGX,IAAI,kBAAkB;AACpB,UAAO;;EAGT,MAAM,oBAAoB,KAAa,OAAgB;GAErD,MAAM,UAAU,OAAO,KAAK,QAAQ,SAAS,GAAG,aAAa;GAC7D,MAAM,OAAO;IACX;IACA;IACA;IACA,QAAQ,WAAW,UAAU;IAC9B,CAAC,OAAO,UAAU,SAAS;GAG5B,MAAM,oBAGD,EAAE;AAEP,OAAI;IAEF,MAAM,WADgB,MAAM,aAAa,SAAS,MAAM,EAAE,KAAK,CAAC,EAClC;AAE9B,WAAO,KAAK,MAAM,QAAQ,CAAC;YACpB,KAAK;AACZ,QAAI,eAAe,YAkBjB;SAAI,CAfW,QACZ,KAAK,UAAU;AACd,UAAI,IACF,QAAO;AAGT,aACE,CAAC,QAAQ,MAAM,IACf,CAAC,kBAAkB,MAAM,iBAAiB,WAAW,YAAY,aAAa,YAAY,MAAM,CAAC;QAGrG,OAZa,MAAM,MAAM,IAAI,OAAO,CAcrC,IAEc,CAAC,QAAQ,IAAI,OAAO,CACjC,QAAO,EAAE,QAAQ,IAAI,QAAQ;;AAIjC,UAAM;;;;;;;EAQV,eAAe,mBAA2B,UAAsB;AAC9D,OAAI,SAAS,QAEX,UAAS,UAAU,KAAK,sBAAsB,mBAAmB,SAAS,QAAQ;AAGpF,OAAI,SAAS,aACX,MAAK,MAAM,oBAAoB,SAAS,aACtC,MAAK,eAAe,mBAAmB,iBAAiB;AAI5D,UAAO;;EAGT,MAAM,QAAQ,KAAa,WAA0B;AAKnD,SAAM,aAJU,OAAO,KAAK,QAAQ,SAAS,GAAG,aAAa,QAEhD;IAAC;IAAW;IAAwB,GAAG;IAAU,EAE5B,EAAE,KAAK,CAAC;;EAG5C,MAAM,MAAM,KAAa;AAIvB,SAAM,aAHU,OAAO,KAAK,QAAQ,SAAS,GAAG,aAAa,QAChD,CAAC,QAAQ,EAEY,EAAE,KAAK,CAAC;;EAG5C,MAAM,WAAW,KAAa,aAAuB;GACnD,MAAM,UAAU,OAAO,KAAK,QAAQ,SAAS,GAAG,aAAa;AAE7D,SAAM,QAAQ,IACZ,YAAY,KAAK,eAAe;AAG9B,WAAO,aAAa,SAFP,CAAC,OAAO,WAAW,EAEG,EAAE,KAAK,CAAC;KAC3C,CACH;;EAGH,AAAQ,sBAAsB,mBAA2B,eAAuB;AAC9E,OAAI,gBAAgB,KAAK,cAAc,CAGrC,QAAO,QAAQ,OAAO,KAAK,QAAQ,kBAAkB,GAFpC,QAAQ,UAAU,IAAI,cAAc,GAEc;AAGrE,UAAO"}