{
  "version": 3,
  "sources": ["../../../../src/packages/plugin-commands-patching/patchCommit.ts"],
  "sourcesContent": ["import fs from 'node:fs';\nimport path from 'node:path';\nimport process from 'node:process';\nimport { docsUrl } from '../cli-utils/index.ts';\nimport { type Config, types as allTypes } from '../config/index.ts';\nimport { createShortHash } from '../crypto.hash/index.ts';\nimport { PnpmError } from '../error/index.ts';\nimport { packlist } from '../fs.packlist/index.ts';\nimport { globalWarn } from '../logger/index.ts';\nimport { install } from '../plugin-commands-installation/index.ts';\nimport { readPackageJsonFromDir } from '../read-package-json/index.ts';\nimport { tryReadProjectManifest } from '../read-project-manifest/index.ts';\nimport { getStorePath } from '../store-path/index.ts';\nimport type { ProjectManifest, ProjectRootDir } from '../types/index.ts';\nimport { glob } from 'tinyglobby';\nimport normalizePath from 'normalize-path';\nimport pick from 'ramda/src/pick';\nimport equals from 'ramda/src/equals';\nimport execa from 'safe-execa';\nimport escapeStringRegexp from 'escape-string-regexp';\nimport makeEmptyDir from 'make-empty-dir';\nimport renderHelp from 'render-help';\nimport { type WritePackageOptions, writePackage } from './writePackage.ts';\nimport {\n  type ParseWantedDependencyResult,\n  parseWantedDependency,\n} from '../parse-wanted-dependency/index.ts';\nimport {\n  type GetPatchedDependencyOptions,\n  getVersionsFromLockfile,\n} from './getPatchedDependency.ts';\nimport { readEditDirState } from './stateFile.ts';\n\nexport const rcOptionsTypes = cliOptionsTypes;\n\nexport function cliOptionsTypes(): Record<string, unknown> {\n  return pick.default(['patches-dir'], allTypes);\n}\n\nexport const commandNames = ['patch-commit'];\n\nexport function help(): string {\n  return renderHelp({\n    description: 'Generate a patch out of a directory',\n    descriptionLists: [\n      {\n        title: 'Options',\n        list: [\n          {\n            description:\n              'The generated patch file will be saved to this directory',\n            name: '--patches-dir',\n          },\n        ],\n      },\n    ],\n    url: docsUrl('patch-commit'),\n    usages: ['pnpm patch-commit <patchDir>'],\n  });\n}\n\ntype PatchCommitCommandOptions = install.InstallCommandOptions &\n  Pick<Config, 'patchesDir' | 'rootProjectManifest' | 'rootProjectManifestDir'>;\n\nexport async function handler(\n  opts: PatchCommitCommandOptions,\n  params: string[]\n  // biome-ignore lint/suspicious/noConfusingVoidType: <explanation>\n): Promise<string | void> {\n  const userDir = params[0];\n\n  if (typeof userDir !== 'string') {\n    throw new PnpmError('MISSING_ARG', 'Missing argument <patchDir>');\n  }\n\n  const lockfileDir = ((opts.lockfileDir ?? opts.dir) ||\n    process.cwd()) as ProjectRootDir;\n\n  const patchesDirName = normalizePath(\n    path.normalize(opts.patchesDir ?? 'patches')\n  );\n\n  const patchesDir = path.join(lockfileDir, patchesDirName);\n\n  const patchedPkgManifest = await readPackageJsonFromDir(userDir);\n\n  const editDir = path.resolve(opts.dir, userDir);\n\n  const stateValue = readEditDirState({\n    editDir,\n    modulesDir: path.join(opts.dir, opts.modulesDir ?? 'node_modules'),\n  });\n\n  if (!stateValue) {\n    throw new PnpmError(\n      'INVALID_PATCH_DIR',\n      `${userDir} is not a valid patch directory`,\n      {\n        hint: 'A valid patch directory should be created by `pnpm patch`',\n      }\n    );\n  }\n\n  const { applyToAll } = stateValue;\n\n  const nameAndVersion = `${patchedPkgManifest.name}@${patchedPkgManifest.version}`;\n\n  const patchKey = applyToAll ? patchedPkgManifest.name : nameAndVersion;\n\n  let gitTarballUrl: string | undefined;\n\n  if (!applyToAll) {\n    gitTarballUrl = await getGitTarballUrlFromLockfile(\n      {\n        alias: patchedPkgManifest.name,\n        pref: patchedPkgManifest.version,\n      },\n      {\n        lockfileDir,\n        modulesDir: opts.modulesDir,\n        virtualStoreDir: opts.virtualStoreDir,\n      }\n    );\n  }\n\n  const patchedPkg = parseWantedDependency(\n    typeof gitTarballUrl === 'string'\n      ? `${patchedPkgManifest.name}@${gitTarballUrl}`\n      : nameAndVersion\n  );\n\n  const patchedPkgDir = await preparePkgFilesForDiff(userDir);\n\n  const patchContent = await getPatchContent(\n    {\n      patchedPkg,\n      patchedPkgDir,\n      tmpName: createShortHash(editDir),\n    },\n    opts\n  );\n\n  if (patchedPkgDir !== userDir) {\n    fs.rmSync(patchedPkgDir, { recursive: true });\n  }\n\n  if (!patchContent.length) {\n    return `No changes were found to the following directory: ${userDir}`;\n  }\n\n  await fs.promises.mkdir(patchesDir, { recursive: true });\n\n  const patchFileName = patchKey.replace('/', '__');\n\n  await fs.promises.writeFile(\n    path.join(patchesDir, `${patchFileName}.patch`),\n    patchContent,\n    'utf8'\n  );\n\n  const { writeProjectManifest, manifest } =\n    await tryReadProjectManifest(lockfileDir);\n\n  const rootProjectManifest: ProjectManifest =\n    (opts.sharedWorkspaceLockfile === true\n      ? (opts.rootProjectManifest ?? manifest)\n      : manifest) ?? ({} as ProjectManifest);\n\n  if (!('pnpm' in rootProjectManifest)) {\n    (rootProjectManifest as ProjectManifest).pnpm = {\n      patchedDependencies: {},\n    };\n  } else if (\n    typeof rootProjectManifest.pnpm === 'object' &&\n    'patchedDependencies' in rootProjectManifest.pnpm\n  ) {\n    rootProjectManifest.pnpm.patchedDependencies = {};\n  }\n\n  const pd = rootProjectManifest.pnpm?.patchedDependencies;\n\n  if (typeof pd !== 'undefined') {\n    pd[patchKey] = `${patchesDirName}/${patchFileName}.patch`;\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({\n    ...opts,\n    patchedDependencies: rootProjectManifest.pnpm?.patchedDependencies,\n    rootProjectManifest,\n    rawLocalConfig: {\n      ...opts.rawLocalConfig,\n      'frozen-lockfile': false,\n    },\n  });\n}\n\ntype GetPatchContentContext = {\n  patchedPkg: ParseWantedDependencyResult;\n  patchedPkgDir: string;\n  tmpName: string;\n};\n\ntype GetPatchContentOptions = Pick<\n  PatchCommitCommandOptions,\n  'dir' | 'pnpmHomeDir' | 'storeDir'\n> &\n  WritePackageOptions;\n\nasync function getPatchContent(\n  ctx: GetPatchContentContext,\n  opts: GetPatchContentOptions\n): Promise<string> {\n  const storeDir = await getStorePath({\n    pkgRoot: opts.dir,\n    storePath: opts.storeDir,\n    pnpmHomeDir: opts.pnpmHomeDir,\n  });\n\n  const srcDir = path.join(storeDir, 'tmp', 'patch-commit', ctx.tmpName);\n\n  await writePackage(ctx.patchedPkg, srcDir, opts);\n\n  const patchContent = await diffFolders(srcDir, ctx.patchedPkgDir);\n\n  try {\n    fs.rmSync(srcDir, { recursive: true });\n  } catch (error) {\n    globalWarn(\n      `Failed to clean up temporary directory at ${srcDir} with error: ${String(error)}`\n    );\n  }\n  return patchContent;\n}\n\nasync function diffFolders(folderA: string, folderB: string): Promise<string> {\n  const folderAN = folderA.replace(/\\\\/g, '/');\n\n  const folderBN = folderB.replace(/\\\\/g, '/');\n\n  let stdout!: string;\n\n  let stderr!: string;\n\n  try {\n    const result = await execa.default(\n      'git',\n      [\n        '-c',\n        'core.safecrlf=false',\n        'diff',\n        '--src-prefix=a/',\n        '--dst-prefix=b/',\n        '--ignore-cr-at-eol',\n        '--irreversible-delete',\n        '--full-index',\n        '--no-index',\n        '--text',\n        '--no-ext-diff',\n        folderAN,\n        folderBN,\n      ],\n      {\n        cwd: process.cwd(),\n        env: {\n          ...process.env,\n          // #region Predictable output\n          // These variables aim to ignore the global git config so we get predictable output\n          // https://git-scm.com/docs/git#Documentation/git.txt-codeGITCONFIGNOSYSTEMcode\n          GIT_CONFIG_NOSYSTEM: '1',\n          HOME: '',\n          XDG_CONFIG_HOME: '',\n          USERPROFILE: '',\n          // #endregion\n        },\n        stripFinalNewline: false,\n      }\n    );\n\n    stdout = result.stdout;\n\n    stderr = result.stderr;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  } catch (err: any) {\n    stdout = err.stdout;\n\n    stderr = err.stderr;\n  }\n\n  // we cannot rely on exit code, because --no-index implies --exit-code\n  // i.e. git diff will exit with 1 if there were differences\n  if (stderr.length > 0)\n    throw new Error(\n      `Unable to diff directories. Make sure you have a recent version of 'git' available in PATH.\\nThe following error was reported by 'git':\\n${stderr}`\n    );\n\n  return stdout\n    .replace(\n      new RegExp(\n        `(a|b)(${escapeStringRegexp(`/${removeTrailingAndLeadingSlash(folderAN)}/`)})`,\n        'g'\n      ),\n      '$1/'\n    )\n    .replace(\n      new RegExp(\n        `(a|b)${escapeStringRegexp(`/${removeTrailingAndLeadingSlash(folderBN)}/`)}`,\n        'g'\n      ),\n      '$1/'\n    )\n    .replace(new RegExp(escapeStringRegexp(`${folderAN}/`), 'g'), '')\n    .replace(new RegExp(escapeStringRegexp(`${folderBN}/`), 'g'), '')\n    .replace(/\\n\\\\ No newline at end of file\\n$/, '\\n')\n    .replace(\n      /^diff --git a\\/.*\\.DS_Store b\\/.*\\.DS_Store[\\S\\s]+?(?=^diff --git)/gm,\n      ''\n    )\n    .replace(/^diff --git a\\/.*\\.DS_Store b\\/.*\\.DS_Store[\\S\\s]*$/gm, '');\n}\n\nfunction removeTrailingAndLeadingSlash(p: string): string {\n  if (p[0] === '/' || p.endsWith('/')) {\n    return p.replace(/^\\/|\\/$/g, '');\n  }\n  return p;\n}\n\n/**\n * Link files from the source directory to a new temporary directory,\n * but only if not all files in the source directory should be included in the package.\n * If all files should be included, return the original source directory without creating any links.\n * This is required in order for the diff to not include files that are not part of the package.\n */\nasync function preparePkgFilesForDiff(src: string): Promise<string> {\n  const files = Array.from(\n    new Set((await packlist(src)).map((f) => path.join(f)))\n  );\n\n  // If there are no extra files in the source directories, then there is no reason\n  // to copy.\n  if (await areAllFilesInPkg(files, src)) {\n    return src;\n  }\n\n  const dest = `${src}_tmp`;\n\n  await makeEmptyDir(dest);\n\n  await Promise.all(\n    files.map(async (file: string): Promise<void> => {\n      const srcFile = path.join(src, file);\n      const destFile = path.join(dest, file);\n      const destDir = path.dirname(destFile);\n      await fs.promises.mkdir(destDir, { recursive: true });\n      await fs.promises.link(srcFile, destFile);\n    })\n  );\n\n  return dest;\n}\n\nasync function areAllFilesInPkg(\n  files: string[],\n  basePath: string\n): Promise<boolean> {\n  const allFiles = await glob('**', {\n    cwd: basePath,\n    expandDirectories: false,\n  });\n\n  return equals.default(allFiles.sort(), files.sort());\n}\n\nasync function getGitTarballUrlFromLockfile(\n  dep: ParseWantedDependencyResult,\n  opts: GetPatchedDependencyOptions\n): Promise<string | undefined> {\n  const { preferredVersions } = await getVersionsFromLockfile(dep, opts);\n\n  return preferredVersions[0]?.gitTarballUrl;\n}\n"],
  "mappings": "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",
  "names": []
}
