{
  "version": 3,
  "sources": ["../../../../src/packages/modules-cleaner/removeDirectDependency.ts"],
  "sourcesContent": ["import path from 'node:path';\nimport { promises as fs } from 'node:fs';\nimport { rootLogger } from '../core-loggers/index.ts';\nimport { removeBin, removeBinsOfDependency } from '../remove-bins/index.ts';\nimport type {\n  DependenciesField,\n  GlobalPkgDir,\n  LockFileDir,\n  ModulesDir,\n  ProjectRootDir,\n  ProjectRootDirRealPath,\n  WorkspaceDir,\n} from '../types/index.ts';\nimport rimraf from '@zkochan/rimraf';\n\nexport async function removeDirectDependency(\n  dependency: {\n    dependenciesField?: DependenciesField | undefined;\n    name: string;\n  },\n  opts: {\n    binsDir: string;\n    dryRun?: boolean | undefined;\n    modulesDir: ModulesDir;\n    muteLogs?: boolean | undefined;\n    rootDir:\n      | ProjectRootDir\n      | ProjectRootDirRealPath\n      | GlobalPkgDir\n      | WorkspaceDir\n      | LockFileDir;\n  }\n): Promise<void> {\n  const dependencyDir = path.join(opts.modulesDir, dependency.name);\n\n  const results = await Promise.all([\n    removeBinsOfDependency(dependencyDir, opts),\n    opts.dryRun !== true && (removeBin(dependencyDir) as any), // eslint-disable-line @typescript-eslint/no-explicit-any\n  ]);\n\n  await removeIfEmpty(opts.binsDir);\n\n  const uninstalledPkg = results[0];\n\n  if (opts.muteLogs !== true) {\n    rootLogger.debug({\n      prefix: opts.rootDir,\n      removed: {\n        dependencyType:\n          dependency.dependenciesField === 'devDependencies'\n            ? 'dev'\n            : dependency.dependenciesField === 'optionalDependencies'\n              ? 'optional'\n              : dependency.dependenciesField === 'dependencies'\n                ? 'prod'\n                : undefined,\n        name: dependency.name,\n        version: uninstalledPkg?.version,\n      },\n    });\n  }\n}\n\nexport async function removeIfEmpty(dir: string): Promise<void> {\n  if (await dirIsEmpty(dir)) {\n    await rimraf(dir);\n  }\n}\n\nasync function dirIsEmpty(dir: string): Promise<boolean> {\n  try {\n    const fileNames = await fs.readdir(dir);\n\n    return fileNames.length === 0;\n  } catch {\n    return false;\n  }\n}\n"],
  "mappings": "AAAA,OAAO,UAAU;AACjB,SAAS,YAAY,UAAU;AAC/B,SAAS,kBAAkB;AAC3B,SAAS,WAAW,8BAA8B;AAUlD,OAAO,YAAY;AAEnB,eAAsB,uBACpB,YAIA,MAYe;AACf,QAAM,gBAAgB,KAAK,KAAK,KAAK,YAAY,WAAW,IAAI;AAEhE,QAAM,UAAU,MAAM,QAAQ,IAAI;AAAA,IAChC,uBAAuB,eAAe,IAAI;AAAA,IAC1C,KAAK,WAAW,QAAS,UAAU,aAAa;AAAA;AAAA,EAClD,CAAC;AAED,QAAM,cAAc,KAAK,OAAO;AAEhC,QAAM,iBAAiB,QAAQ,CAAC;AAEhC,MAAI,KAAK,aAAa,MAAM;AAC1B,eAAW,MAAM;AAAA,MACf,QAAQ,KAAK;AAAA,MACb,SAAS;AAAA,QACP,gBACE,WAAW,sBAAsB,oBAC7B,QACA,WAAW,sBAAsB,yBAC/B,aACA,WAAW,sBAAsB,iBAC/B,SACA;AAAA,QACV,MAAM,WAAW;AAAA,QACjB,SAAS,gBAAgB;AAAA,MAC3B;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,eAAsB,cAAc,KAA4B;AAC9D,MAAI,MAAM,WAAW,GAAG,GAAG;AACzB,UAAM,OAAO,GAAG;AAAA,EAClB;AACF;AAEA,eAAe,WAAW,KAA+B;AACvD,MAAI;AACF,UAAM,YAAY,MAAM,GAAG,QAAQ,GAAG;AAEtC,WAAO,UAAU,WAAW;AAAA,EAC9B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;",
  "names": []
}
