{
  "version": 3,
  "sources": ["../../../../../src/packages/plugin-commands-installation/update/index.ts"],
  "sourcesContent": ["import {\n  docsUrl,\n  readDepNameCompletions,\n  readProjectManifestOnly,\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 { types as allTypes } from '../../config/index.ts';\nimport { globalInfo } from '../../logger/index.ts';\nimport { createMatcher } from '../../matcher/index.ts';\nimport { outdatedDepsOfProjects } from '../../outdated/index.ts';\nimport { PnpmError } from '../../error/index.ts';\nimport { prepareExecutionEnv } from '../../plugin-commands-env/index.ts';\nimport type {\n  IncludedDependencies,\n  ProjectRootDir,\n} from '../../types/index.ts';\nimport { prompt } from 'enquirer';\nimport chalk from 'chalk';\nimport pick from 'ramda/src/pick';\nimport pluck from 'ramda/src/pluck';\nimport unnest from 'ramda/src/unnest';\nimport renderHelp from 'render-help';\nimport type { InstallCommandOptions } from '../install.ts';\nimport { installDeps } from '../installDeps.ts';\nimport { type ChoiceRow, getUpdateChoices } from './getUpdateChoices.ts';\nimport { parseUpdateParam } from '../recursive.ts';\nimport process from 'node:process';\n\nexport function rcOptionsTypes(): Record<string, unknown> {\n  return pick.default(\n    [\n      'cache-dir',\n      'depth',\n      'dev',\n      'engine-strict',\n      'fetch-retries',\n      'fetch-retry-factor',\n      'fetch-retry-maxtimeout',\n      'fetch-retry-mintimeout',\n      'fetch-timeout',\n      'force',\n      'global-dir',\n      'global-pnpmfile',\n      'global',\n      'https-proxy',\n      'ignore-pnpmfile',\n      'ignore-scripts',\n      'lockfile-dir',\n      'lockfile-directory',\n      'lockfile-only',\n      'lockfile',\n      'lockfile-include-tarball-url',\n      'network-concurrency',\n      'noproxy',\n      'npm-path',\n      'offline',\n      'only',\n      'optional',\n      'package-import-method',\n      'pnpmfile',\n      'prefer-offline',\n      'production',\n      'proxy',\n      'registry',\n      'reporter',\n      'save',\n      'save-exact',\n      'save-prefix',\n      'save-workspace-protocol',\n      'scripts-prepend-node-path',\n      'shamefully-flatten',\n      'shamefully-hoist',\n      'shared-workspace-lockfile',\n      'side-effects-cache-readonly',\n      'side-effects-cache',\n      'store-dir',\n      'unsafe-perm',\n      'use-running-store-server',\n    ],\n    allTypes\n  );\n}\n\nexport function cliOptionsTypes(): Record<string, unknown> {\n  return {\n    ...rcOptionsTypes(),\n    interactive: Boolean,\n    latest: Boolean,\n    recursive: Boolean,\n    workspace: Boolean,\n  };\n}\n\nexport const shorthands: Record<string, string> = {\n  D: '--dev',\n  P: '--production',\n};\n\nexport const commandNames = ['update', 'up', 'upgrade'];\n\nexport const completion: CompletionFunc = async (cliOpts) => {\n  return readDepNameCompletions(cliOpts.dir as string);\n};\n\nexport function help(): string {\n  return renderHelp({\n    aliases: ['up', 'upgrade'],\n    description:\n      'Updates packages to their latest version based on the specified range. You can use \"*\" in package name to update all packages with the same pattern.',\n    descriptionLists: [\n      {\n        title: 'Options',\n\n        list: [\n          {\n            description:\n              'Update in every package found in subdirectories \\\nor 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: 'Update globally installed packages',\n            name: '--global',\n            shortAlias: '-g',\n          },\n          {\n            description:\n              'How deep should levels of dependencies be inspected. Infinity is default. 0 would mean top-level dependencies only',\n            name: '--depth <number>',\n          },\n          {\n            description: 'Ignore version ranges in package.json',\n            name: '--latest',\n            shortAlias: '-L',\n          },\n          {\n            description:\n              'Update packages only in \"dependencies\" and \"optionalDependencies\"',\n            name: '--prod',\n            shortAlias: '-P',\n          },\n          {\n            description: 'Update packages only in \"devDependencies\"',\n            name: '--dev',\n            shortAlias: '-D',\n          },\n          {\n            description: 'Don\\'t update packages in \"optionalDependencies\"',\n            name: '--no-optional',\n          },\n          {\n            description:\n              'Tries to link all packages from the workspace. \\\nVersions are updated to match the versions of packages inside the workspace. \\\nIf specific packages are updated, the command will fail if any of the updated \\\ndependencies is not found inside the workspace',\n            name: '--workspace',\n          },\n          {\n            description:\n              'Show outdated dependencies and select which ones to update',\n            name: '--interactive',\n            shortAlias: '-i',\n          },\n          OPTIONS.globalDir,\n          ...UNIVERSAL_OPTIONS,\n        ],\n      },\n      FILTERING,\n    ],\n    url: docsUrl('update'),\n    usages: ['pnpm update [-g] [<pkg>...]'],\n  });\n}\n\nexport type UpdateCommandOptions = InstallCommandOptions & {\n  interactive?: boolean | undefined;\n  latest?: boolean | undefined;\n};\n\nexport async function handler(\n  opts: UpdateCommandOptions,\n  params: string[] = []\n  // biome-ignore lint/suspicious/noConfusingVoidType: <explanation>\n): Promise<string | void> {\n  if (opts.global === true && opts.rootProjectManifest == null) {\n    return 'No global packages found';\n  }\n\n  if (opts.interactive === true) {\n    return interactiveUpdate(params, opts);\n  }\n\n  return update(params, opts) as Promise<undefined>;\n}\n\nasync function interactiveUpdate(\n  input: string[],\n  opts: UpdateCommandOptions\n  // biome-ignore lint/suspicious/noConfusingVoidType: <explanation>\n): Promise<string | void> {\n  const include = makeIncludeDependenciesFromCLI(opts.cliOptions);\n\n  const projects =\n    opts.selectedProjectsGraph != null\n      ? Object.values(opts.selectedProjectsGraph).map((wsPkg) => wsPkg.package)\n      : [\n          {\n            rootDir: opts.dir as ProjectRootDir,\n            manifest: await readProjectManifestOnly(opts.dir, opts),\n          },\n        ];\n\n  const rootDir = opts.workspaceDir ?? opts.dir;\n\n  const rootProject = projects.find((project) => project.rootDir === rootDir);\n\n  const outdatedPkgsOfProjects = await outdatedDepsOfProjects(projects, input, {\n    ...opts,\n    compatible: opts.latest !== true,\n    ignoreDependencies:\n      rootProject?.manifest.pnpm?.updateConfig?.ignoreDependencies,\n    include,\n    retry: {\n      factor: opts.fetchRetryFactor ?? 2,\n      maxTimeout: opts.fetchRetryMaxtimeout ?? 60_000,\n      minTimeout: opts.fetchRetryMintimeout ?? 10_000,\n      retries: opts.fetchRetries ?? 3,\n    },\n    timeout: opts.fetchTimeout,\n  });\n  const workspacesEnabled =\n    typeof opts.workspaceDir === 'string' && opts.workspaceDir !== '';\n\n  const choices = getUpdateChoices(\n    unnest.default(outdatedPkgsOfProjects),\n    workspacesEnabled\n  );\n\n  if (choices.length === 0) {\n    if (opts.latest === true) {\n      return 'All of your dependencies are already up to date';\n    }\n\n    return 'All of your dependencies are already up to date inside the specified ranges. Use the --latest option to update the ranges in package.json';\n  }\n\n  const { updateDependencies } = (await prompt({\n    choices,\n    footer: '\\nEnter to start updating. Ctrl-c to cancel.',\n    indicator(\n      _state: unknown,\n      choice: {\n        enabled: boolean;\n      }\n    ) {\n      return ` ${choice.enabled === true ? '\u25CF' : '\u25CB'}`;\n    },\n    message: `Choose which packages to update (Press ${chalk.cyan('<space>')} to select, ${chalk.cyan('<a>')} to toggle all, ${chalk.cyan('<i>')} to invert selection)`,\n    name: 'updateDependencies',\n    pointer: '\u276F',\n    result(): boolean {\n      return this.selected;\n    },\n    format(): string {\n      // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n      if (!this.state.submitted || this.state.cancelled) {\n        return '';\n      }\n\n      if (Array.isArray(this.selected)) {\n        return (\n          this.selected\n            // The custom format function is used to filter out \"[dependencies]\" or \"[devDependencies]\" from the output.\n            // https://github.com/enquirer/enquirer/blob/master/lib/prompts/select.js#L98\n            .filter((choice: ChoiceRow) => !/^\\[.+]$/.test(choice.name))\n            .map((choice: ChoiceRow) => this.styles.primary(choice.name))\n            .join(', ')\n        );\n      }\n\n      return this.styles.primary(this.selected.name);\n    },\n    styles: {\n      dark: chalk.reset,\n      em: chalk.bgBlack.whiteBright,\n      success: chalk.reset,\n    },\n    type: 'multiselect',\n    validate(value: string[]) {\n      if (value.length === 0) {\n        return 'You must choose at least one package.';\n      }\n      return true;\n    },\n\n    // For Vim users (related: https://github.com/enquirer/enquirer/pull/163)\n    j() {\n      return this.down();\n    },\n    k() {\n      return this.up();\n    },\n    cancel() {\n      // By default, canceling the prompt via Ctrl+c throws an empty string.\n      // The custom cancel function prevents that behavior.\n      // Otherwise, pnpm CLI would print an error and confuse users.\n      // See related issue: https://github.com/enquirer/enquirer/issues/225\n      globalInfo('Update canceled');\n\n      // eslint-disable-next-line n/no-process-exit\n      process.exit(0);\n    },\n  } as any)) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n  const updatePkgNames = pluck.default(\n    'value',\n    updateDependencies as ChoiceRow[]\n  );\n\n  return update(updatePkgNames, opts);\n}\n\nasync function update(\n  dependencies: string[],\n  opts: UpdateCommandOptions\n): Promise<void> {\n  if (opts.latest === true) {\n    const dependenciesWithTags = dependencies.filter(\n      (name) => parseUpdateParam(name).versionSpec != null\n    );\n\n    if (dependenciesWithTags.length) {\n      throw new PnpmError(\n        'LATEST_WITH_SPEC',\n        `Specs are not allowed to be used with --latest (${dependenciesWithTags.join(', ')})`\n      );\n    }\n  }\n\n  const includeDirect = makeIncludeDependenciesFromCLI(opts.cliOptions);\n\n  const include = {\n    dependencies: opts.rawConfig.production !== false,\n    devDependencies: opts.rawConfig.dev !== false,\n    optionalDependencies: opts.rawConfig.optional !== false,\n  };\n\n  const depth = opts.depth ?? Number.POSITIVE_INFINITY;\n\n  return installDeps(\n    {\n      ...opts,\n      allowNew: false,\n      depth,\n      ignoreCurrentPrefs: false,\n      includeDirect,\n      include,\n      update: true,\n      updateToLatest: opts.latest,\n      updateMatching:\n        dependencies.length > 0 &&\n        dependencies.every((dep) => !dep.substring(1).includes('@')) &&\n        depth > 0 &&\n        opts.latest !== true\n          ? createMatcher(dependencies)\n          : undefined,\n      updatePackageManifest: opts.save !== false,\n      resolutionMode: opts.save === false ? 'highest' : opts.resolutionMode,\n      prepareExecutionEnv: prepareExecutionEnv.bind(null, opts),\n    },\n    dependencies\n  );\n}\n\nfunction makeIncludeDependenciesFromCLI(opts: {\n  production?: boolean;\n  dev?: boolean;\n  optional?: boolean;\n}): IncludedDependencies {\n  return {\n    dependencies:\n      opts.production === true || (opts.dev !== true && opts.optional !== true),\n    devDependencies:\n      opts.dev === true || (opts.production !== true && opts.optional !== true),\n    optionalDependencies:\n      opts.optional === true || (opts.production !== true && opts.dev !== true),\n  };\n}\n"],
  "mappings": "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",
  "names": []
}
