{
  "version": 3,
  "sources": ["../../../../src/packages/plugin-commands-deploy/deploy.ts"],
  "sourcesContent": ["import fs from 'node:fs';\nimport path from 'node:path';\nimport { docsUrl } from '../cli-utils/index.ts';\nimport { fetchFromDir } from '../directory-fetcher/index.ts';\nimport { createIndexedPkgImporter } from '../fs.indexed-pkg-importer/index.ts';\nimport { isEmptyDirOrNothing } from '../fs.is-empty-dir-or-nothing/index.ts';\nimport { install } from '../plugin-commands-installation/index.ts';\nimport { FILTERING } from '../common-cli-options-help/index.ts';\nimport { PnpmError } from '../error/index.ts';\nimport rimraf from '@zkochan/rimraf';\nimport renderHelp from 'render-help';\nimport { deployHook } from './deployHook.ts';\nimport { logger } from '../logger/index.ts';\nimport type { ModulesDir } from '../types/index.ts';\n\nexport const shorthands = install.shorthands;\n\nexport function rcOptionsTypes(): Record<string, unknown> {\n  return install.rcOptionsTypes();\n}\n\nexport function cliOptionsTypes(): Record<string, unknown> {\n  return install.cliOptionsTypes();\n}\n\nexport const commandNames = ['deploy'];\n\nexport function help(): string {\n  return renderHelp({\n    description: 'Experimental! Deploy a package from a workspace',\n    url: docsUrl('deploy'),\n    usages: ['pnpm --filter=<deployed project name> deploy <target directory>'],\n    descriptionLists: [\n      {\n        title: 'Options',\n        list: [\n          {\n            description: \"Packages in `devDependencies` won't be installed\",\n            name: '--prod',\n            shortAlias: '-P',\n          },\n          {\n            description:\n              'Only `devDependencies` are installed regardless of the `NODE_ENV`',\n            name: '--dev',\n            shortAlias: '-D',\n          },\n          {\n            description: '`optionalDependencies` are not installed',\n            name: '--no-optional',\n          },\n        ],\n      },\n      FILTERING,\n    ],\n  });\n}\n\nexport async function handler(\n  opts: install.InstallCommandOptions,\n  params: string[]\n): Promise<void> {\n  if (typeof opts.workspaceDir === 'undefined') {\n    throw new PnpmError(\n      'CANNOT_DEPLOY',\n      'A deploy is only possible from inside a workspace'\n    );\n  }\n\n  const selectedDirs = Object.keys(opts.selectedProjectsGraph ?? {});\n\n  if (selectedDirs.length === 0) {\n    throw new PnpmError(\n      'NOTHING_TO_DEPLOY',\n      'No project was selected for deployment'\n    );\n  }\n\n  if (selectedDirs.length > 1) {\n    throw new PnpmError(\n      'CANNOT_DEPLOY_MANY',\n      'Cannot deploy more than 1 project'\n    );\n  }\n\n  if (params.length !== 1) {\n    throw new PnpmError(\n      'INVALID_DEPLOY_TARGET',\n      'This command requires one parameter'\n    );\n  }\n\n  const deployedDir = selectedDirs[0];\n\n  if (typeof deployedDir === 'undefined') {\n    throw new PnpmError(\n      'INVALID_DEPLOY_TARGET',\n      'This command requires one parameter'\n    );\n  }\n\n  const deployDirParam = params[0];\n\n  if (typeof deployDirParam === 'undefined') {\n    throw new PnpmError(\n      'INVALID_DEPLOY_TARGET',\n      'This command requires one parameter'\n    );\n  }\n\n  const deployDir = path.isAbsolute(deployDirParam)\n    ? deployDirParam\n    : path.join(opts.dir, deployDirParam);\n\n  if (!isEmptyDirOrNothing(deployDir)) {\n    if (opts.force !== true) {\n      throw new PnpmError(\n        'DEPLOY_DIR_NOT_EMPTY',\n        `Deploy path ${deployDir} is not empty`\n      );\n    }\n\n    logger.warn({\n      message: 'using --force, deleting deploy path',\n      prefix: deployDir,\n    });\n  }\n\n  await rimraf(deployDir);\n\n  await fs.promises.mkdir(deployDir, { recursive: true });\n\n  const includeOnlyPackageFiles = opts.deployAllFiles !== true;\n\n  await copyProject(deployedDir, deployDir, { includeOnlyPackageFiles });\n\n  await install.handler({\n    ...opts,\n    confirmModulesPurge: false,\n    // Deploy doesn't work with dedupePeerDependents=true currently as for deploy\n    // we need to select a single project for install, while dedupePeerDependents\n    // doesn't work with filters right now.\n    // Related issue: https://github.com/pnpm/pnpm/issues/6858\n    dedupePeerDependents: false,\n    depth: Number.POSITIVE_INFINITY,\n    hooks: {\n      ...opts.hooks,\n      readPackage: [...(opts.hooks?.readPackage ?? []), deployHook],\n    },\n    frozenLockfile: false,\n    preferFrozenLockfile: false,\n    saveLockfile: false,\n    virtualStoreDir: path.join(deployDir, 'node_modules', '.pnpm'),\n    modulesDir: path.relative(\n      deployedDir,\n      path.join(deployDir, 'node_modules')\n    ) as ModulesDir,\n    rawLocalConfig: {\n      ...opts.rawLocalConfig,\n      // This is a workaround to prevent frozen install in CI envs.\n      'frozen-lockfile': false,\n    },\n    includeOnlyPackageFiles,\n  });\n}\n\nasync function copyProject(\n  src: string,\n  dest: string,\n  opts: { includeOnlyPackageFiles: boolean }\n): Promise<void> {\n  const { filesIndex } = await fetchFromDir(src, opts);\n\n  const importPkg = createIndexedPkgImporter('clone-or-copy');\n\n  importPkg(dest, {\n    filesMap: filesIndex,\n    force: true,\n    resolvedFrom: 'local-dir',\n  });\n}\n"],
  "mappings": "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",
  "names": []
}
