{
  "version": 3,
  "sources": ["../../../../src/packages/plugin-commands-installation/remove.ts"],
  "sourcesContent": ["import {\n  docsUrl,\n  readDepNameCompletions,\n  readProjectManifest,\n} from '../cli-utils/index.ts';\nimport type { CompletionFunc } from '../command/index.ts';\nimport {\n  FILTERING,\n  OPTIONS,\n  UNIVERSAL_OPTIONS,\n} from '../common-cli-options-help/index.ts';\nimport {\n  type Config,\n  getOptionsFromRootManifest,\n  types as allTypes,\n} from '../config/index.ts';\nimport { PnpmError } from '../error/index.ts';\nimport { arrayOfWorkspacePackagesToMap } from '../get-context/index.ts';\nimport { findWorkspacePackages } from '../workspace.find-packages/index.ts';\nimport { getAllDependenciesFromManifest } from '../manifest-utils/index.ts';\nimport {\n  createOrConnectStoreController,\n  type CreateStoreControllerOptions,\n} from '../store-connection-manager/index.ts';\nimport type { DependenciesField } from '../types/index.ts';\nimport { mutateModulesInSingleProject } from '../core/install/index.ts';\nimport { requireHooks } from '../pnpmfile/index.ts';\nimport pick from 'ramda/src/pick';\nimport without from 'ramda/src/without';\nimport renderHelp from 'render-help';\nimport { getSaveType } from './getSaveType.ts';\nimport { recursive } from './recursive.ts';\nimport { installConfigDeps } from './installConfigDeps.ts';\n\nclass RemoveMissingDepsError extends PnpmError {\n  constructor(opts: {\n    availableDependencies: string[];\n    nonMatchedDependencies: string[];\n    targetDependenciesField?: DependenciesField | undefined;\n  }) {\n    let message = 'Cannot remove ';\n\n    message += `${opts.nonMatchedDependencies.map((dep) => `'${dep}'`).join(', ')}: `;\n\n    if (opts.availableDependencies.length > 0) {\n      message += `no such ${opts.nonMatchedDependencies.length > 1 ? 'dependencies' : 'dependency'} `;\n      message += `found${opts.targetDependenciesField ? ` in '${opts.targetDependenciesField}'` : ''}`;\n      const hint = `Available dependencies: ${opts.availableDependencies.join(', ')}`;\n      super('CANNOT_REMOVE_MISSING_DEPS', message, { hint });\n      return;\n    }\n\n    message += opts.targetDependenciesField\n      ? `project has no '${opts.targetDependenciesField}'`\n      : 'project has no dependencies of any kind';\n\n    super('CANNOT_REMOVE_MISSING_DEPS', message);\n  }\n}\n\nexport function rcOptionsTypes(): Record<string, unknown> {\n  return pick.default(\n    [\n      'cache-dir',\n      'global-dir',\n      'global-pnpmfile',\n      'global',\n      'lockfile-dir',\n      'lockfile-directory',\n      'lockfile-only',\n      'lockfile',\n      'node-linker',\n      'package-import-method',\n      'pnpmfile',\n      'reporter',\n      'save-dev',\n      'save-optional',\n      'save-prod',\n      'shared-workspace-lockfile',\n      'store-dir',\n      'strict-peer-dependencies',\n      'virtual-store-dir',\n    ],\n    allTypes\n  );\n}\n\nexport const cliOptionsTypes = (): Record<string, unknown> => {\n  return {\n    ...rcOptionsTypes(),\n    ...pick.default(['force'], allTypes),\n    recursive: Boolean,\n  };\n};\n\nexport function help(): string {\n  return renderHelp({\n    aliases: ['rm', 'uninstall', 'un'],\n    description:\n      \"Removes packages from `node_modules` and from the project's `package.json`.\",\n    descriptionLists: [\n      {\n        title: 'Options',\n\n        list: [\n          {\n            description:\n              'Remove from every package found in subdirectories \\\nor from every workspace package, when executed inside a workspace. \\\nFor options that may be used with `-r`, see \"pnpm help recursive\"',\n            name: '--recursive',\n            shortAlias: '-r',\n          },\n          {\n            description: 'Remove the dependency only from \"devDependencies\"',\n            name: '--save-dev',\n            shortAlias: '-D',\n          },\n          {\n            description:\n              'Remove the dependency only from \"optionalDependencies\"',\n            name: '--save-optional',\n            shortAlias: '-O',\n          },\n          {\n            description: 'Remove the dependency only from \"dependencies\"',\n            name: '--save-prod',\n            shortAlias: '-P',\n          },\n          OPTIONS.globalDir,\n          ...UNIVERSAL_OPTIONS,\n        ],\n      },\n      FILTERING,\n    ],\n    url: docsUrl('remove'),\n    usages: ['pnpm remove <pkg>[@<version>]...'],\n  });\n}\n\n// Unlike npm, pnpm does not treat \"r\" as an alias of \"remove\".\n// This way we avoid the confusion about whether \"pnpm r\" means remove, run, or recursive.\nexport const commandNames = ['remove', 'uninstall', 'rm', 'un', 'uni'];\n\nexport const completion: CompletionFunc = async (\n  cliOpts: Record<string, unknown>\n): Promise<\n  {\n    name: string;\n  }[]\n> => {\n  return readDepNameCompletions(cliOpts.dir as string);\n};\n\nexport async function handler(\n  opts: CreateStoreControllerOptions &\n    Pick<\n      Config,\n      | 'allProjects'\n      | 'allProjectsGraph'\n      | 'bail'\n      | 'bin'\n      | 'configDependencies'\n      | 'dev'\n      | 'engineStrict'\n      | 'globalPnpmfile'\n      | 'hooks'\n      | 'ignorePnpmfile'\n      | 'linkWorkspacePackages'\n      | 'lockfileDir'\n      | 'optional'\n      | 'pnpmfile'\n      | 'production'\n      | 'rawLocalConfig'\n      | 'registries'\n      | 'rootProjectManifest'\n      | 'rootProjectManifestDir'\n      | 'saveDev'\n      | 'saveOptional'\n      | 'saveProd'\n      | 'selectedProjectsGraph'\n      | 'workspaceDir'\n      | 'workspacePackagePatterns'\n      | 'sharedWorkspaceLockfile'\n    > & {\n      recursive?: boolean | undefined;\n    },\n  params: string[]\n): Promise<void> {\n  if (params.length === 0) {\n    throw new PnpmError(\n      'MUST_REMOVE_SOMETHING',\n      'At least one dependency name should be specified for removal'\n    );\n  }\n\n  const include = {\n    dependencies: opts.production !== false,\n    devDependencies: opts.dev !== false,\n    optionalDependencies: opts.optional !== false,\n  };\n\n  let store = await createOrConnectStoreController(opts);\n\n  if (opts.configDependencies) {\n    await installConfigDeps(opts.configDependencies, {\n      registries: opts.registries,\n      rootDir: opts.lockfileDir, // ?? opts.rootProjectManifestDir,\n      store: store.ctrl,\n    });\n  }\n\n  if (opts.ignorePnpmfile !== true) {\n    opts.hooks = requireHooks(opts.lockfileDir, opts); //  ?? opts.dir\n\n    if (opts.hooks.fetchers != null || opts.hooks.importPackage != null) {\n      store = await createOrConnectStoreController(opts);\n    }\n  }\n\n  if (\n    opts.recursive === true &&\n    opts.allProjects != null &&\n    opts.selectedProjectsGraph != null &&\n    typeof opts.workspaceDir === 'string'\n  ) {\n    await recursive(\n      opts.allProjects,\n      params,\n      {\n        ...opts,\n        allProjectsGraph: opts.allProjectsGraph,\n        include,\n        selectedProjectsGraph: opts.selectedProjectsGraph,\n        storeControllerAndDir: store,\n        workspaceDir: opts.workspaceDir,\n      },\n      'remove'\n    );\n    return;\n  }\n\n  const removeOpts = Object.assign(opts, {\n    ...getOptionsFromRootManifest(\n      opts.rootProjectManifestDir,\n      opts.rootProjectManifest\n    ),\n    linkWorkspacePackagesDepth:\n      opts.linkWorkspacePackages === 'deep'\n        ? Number.POSITIVE_INFINITY\n        : opts.linkWorkspacePackages\n          ? 0\n          : -1,\n    storeController: store.ctrl,\n    storeDir: store.dir,\n    include,\n    update: false,\n    engineStrict: false,\n    force: false,\n    lockfileDir: '',\n    nodeVersion: '',\n    pnpmfile: '',\n    rawLocalConfig: false,\n    registry: '',\n    rootProjectManifest: undefined,\n    rootProjectManifestDir: '',\n    ignoreScripts: false,\n    savePeer: false,\n    saveOptional: opts.saveOptional ?? false,\n    saveProd: opts.saveProd ?? false,\n    saveDev: opts.saveDev ?? false,\n    saveExact: false,\n    hooks: {},\n    resolutionMode: 'workspace',\n    unsafePerm: false,\n    userAgent: '',\n    resolveSymlinksInInjectedDirs: false,\n    ignorePnpmfile: false,\n    allowedDeprecatedVersions: {},\n    packageExtensions: {},\n    packageManager: { name: '', version: '' },\n    peerDependencyRules: 'ignore',\n    preferConcurrentVersions: false,\n    preferWorkspaceProtocol: false,\n    rawConfig: {},\n    ignoredOptionalDependencies: [],\n    allowNonAppliedPatches: false,\n    overrides: {},\n  });\n\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-expect-error\n  removeOpts.workspacePackages =\n    typeof opts.workspaceDir === 'string'\n      ? arrayOfWorkspacePackagesToMap(\n          await findWorkspacePackages(opts.workspaceDir, {\n            ...opts,\n            patterns: opts.workspacePackagePatterns,\n          })\n        )\n      : undefined;\n\n  const targetDependenciesField = getSaveType({\n    ...opts,\n    savePeer: false,\n    saveDev: opts.saveDev ?? false,\n    saveOptional: opts.saveOptional ?? false,\n    saveProd: opts.saveProd ?? false,\n  });\n\n  const { manifest: currentManifest, writeProjectManifest } =\n    await readProjectManifest(opts.dir, opts);\n\n  const availableDependencies = Object.keys(\n    targetDependenciesField === undefined\n      ? getAllDependenciesFromManifest(currentManifest)\n      : (currentManifest[targetDependenciesField] ?? {})\n  );\n\n  const nonMatchedDependencies = without.default(availableDependencies, params);\n\n  if (nonMatchedDependencies.length !== 0) {\n    throw new RemoveMissingDepsError({\n      availableDependencies,\n      nonMatchedDependencies,\n      targetDependenciesField,\n    });\n  }\n\n  const mutationResult = await mutateModulesInSingleProject(\n    {\n      binsDir: opts.bin,\n      dependencyNames: params,\n      manifest: currentManifest,\n      mutation: 'uninstallSome',\n      rootDir: opts.dir,\n      targetDependenciesField,\n    },\n    removeOpts\n  );\n\n  const m = mutationResult.updatedProject?.manifest;\n\n  if (typeof m === 'undefined') {\n    console.warn('No manifest to write');\n\n    return;\n  }\n\n  await writeProjectManifest(m);\n}\n"],
  "mappings": "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",
  "names": []
}
