{
  "version": 3,
  "sources": ["../../../../src/packages/plugin-commands-patching/patchRemove.ts"],
  "sourcesContent": ["import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { docsUrl } from '../cli-utils/index.ts';\nimport { install } from '../plugin-commands-installation/index.ts';\nimport { type Config, types as allTypes } from '../config/index.ts';\nimport { tryReadProjectManifest } from '../read-project-manifest/index.ts';\nimport { PnpmError } from '../error/index.ts';\nimport type { ProjectManifest, ProjectRootDir } from '../types/index.ts';\nimport renderHelp from 'render-help';\nimport { prompt } from 'enquirer';\nimport pick from 'ramda/src/pick';\n\nexport function rcOptionsTypes(): Record<string, unknown> {\n  return pick.default([], allTypes);\n}\n\nexport function cliOptionsTypes(): Record<string, unknown> {\n  return { ...rcOptionsTypes() };\n}\n\nexport const commandNames = ['patch-remove'];\n\nexport function help(): string {\n  return renderHelp({\n    description: 'Remove existing patch files',\n    url: docsUrl('patch-remove'),\n    usages: ['pnpm patch-remove [pkg...]'],\n  });\n}\n\nexport type PatchRemoveCommandOptions = install.InstallCommandOptions &\n  Pick<Config, 'dir' | 'lockfileDir' | 'patchesDir' | 'rootProjectManifest'>;\n\nexport async function handler(\n  opts: PatchRemoveCommandOptions,\n  params: string[]\n): Promise<void> {\n  let patchesToRemove = params;\n\n  const lockfileDir = ((opts.lockfileDir ?? opts.dir) ||\n    process.cwd()) as ProjectRootDir;\n\n  const { writeProjectManifest, manifest } =\n    await tryReadProjectManifest(lockfileDir);\n\n  const rootProjectManifest: ProjectManifest | null =\n    opts.rootProjectManifest ?? manifest;\n\n  if (rootProjectManifest === null) {\n    throw new PnpmError(\n      'MISSING_PROJECT_MANIFEST',\n      'Project manifest not found'\n    );\n  }\n\n  const patchedDependencies =\n    'pnpm' in rootProjectManifest &&\n    typeof rootProjectManifest === 'object' &&\n    typeof rootProjectManifest.pnpm === 'object' &&\n    'patchedDependencies' in rootProjectManifest.pnpm\n      ? rootProjectManifest.pnpm.patchedDependencies\n      : undefined;\n\n  if (!params.length) {\n    const allPatches = Object.keys(patchedDependencies ?? {});\n\n    if (allPatches.length) {\n      ({ patches: patchesToRemove } = await prompt<{\n        patches: string[];\n      }>({\n        type: 'multiselect',\n        name: 'patches',\n        message: 'Select the patch to be removed',\n        choices: allPatches,\n        validate: (value: string): true | string => {\n          return value.length === 0 ? 'Select at least one option.' : true;\n        },\n      }));\n    }\n  }\n\n  if (!patchesToRemove.length) {\n    throw new PnpmError(\n      'NO_PATCHES_TO_REMOVE',\n      'There are no patches that need to be removed'\n    );\n  }\n\n  const patchesDirs = new Set<string>();\n\n  await Promise.all(\n    patchesToRemove.map(async (patch): Promise<void> => {\n      if (Object.prototype.hasOwnProperty.call(patchedDependencies, patch)) {\n        const dep = patchedDependencies?.[patch];\n\n        if (typeof dep !== 'string') {\n          return;\n        }\n\n        const patchFile = path.join(lockfileDir, dep);\n\n        patchesDirs.add(path.dirname(patchFile));\n\n        await fs.rm(patchFile, { force: true });\n\n        delete rootProjectManifest.pnpm?.patchedDependencies?.[patch];\n\n        if (\n          !Object.keys(rootProjectManifest.pnpm?.patchedDependencies ?? {})\n            .length\n        ) {\n          // biome-ignore lint/performance/noDelete: <explanation>\n          delete rootProjectManifest.pnpm?.patchedDependencies;\n\n          if (!Object.keys(rootProjectManifest.pnpm ?? {}).length) {\n            // biome-ignore lint/performance/noDelete: <explanation>\n            delete rootProjectManifest.pnpm;\n          }\n        }\n      }\n    })\n  );\n\n  await Promise.all(\n    Array.from(patchesDirs).map(async (dir: string): Promise<void> => {\n      try {\n        const files = await fs.readdir(dir);\n\n        if (!files.length) {\n          await fs.rmdir(dir);\n        }\n      } catch {}\n    })\n  );\n\n  await writeProjectManifest(rootProjectManifest);\n\n  if (opts.selectedProjectsGraph?.[lockfileDir]) {\n    opts.selectedProjectsGraph[lockfileDir].package.manifest =\n      rootProjectManifest;\n  }\n\n  if (opts.allProjectsGraph?.[lockfileDir]?.package.manifest) {\n    opts.allProjectsGraph[lockfileDir].package.manifest = rootProjectManifest;\n  }\n\n  return install.handler(opts);\n}\n"],
  "mappings": "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",
  "names": []
}
