{
  "version": 3,
  "sources": ["../../../../src/packages/plugin-commands-script-runners/dlx.ts"],
  "sourcesContent": ["import fs, { type Stats } from 'node:fs';\nimport path from 'node:path';\nimport util from 'node:util';\nimport { docsUrl } from '../cli-utils/index.ts';\nimport { createResolver } from '../client/index.ts';\nimport { parseWantedDependency } from '../parse-wanted-dependency/index.ts';\nimport { OUTPUT_OPTIONS } from '../common-cli-options-help/index.ts';\nimport { type Config, types } from '../config/index.ts';\nimport { createHexHash } from '../crypto.hash/index.ts';\nimport { PnpmError } from '../error/index.ts';\nimport { add } from '../plugin-commands-installation/index.ts';\nimport { readPackageJsonFromDir } from '../read-package-json/index.ts';\nimport {\n  getBinsFromPackageManifest,\n  type Command,\n} from '../package-bins/index.ts';\nimport { pickRegistryForPackage } from '../pick-registry-for-package/index.ts';\nimport type {\n  LockFileDir,\n  PnpmSettings,\n  ProjectRootDirRealPath,\n} from '../types/index.ts';\nimport * as execa from 'execa';\nimport pick from 'ramda/src/pick';\nimport renderHelp from 'render-help';\nimport symlinkDir from 'symlink-dir';\nimport { makeEnv } from './makeEnv.ts';\nimport type { AddCommandOptions } from '../plugin-commands-installation/add.ts';\n\nexport const skipPackageManagerCheck = true;\n\nexport const commandNames = ['dlx'];\n\nexport const shorthands: Record<string, string> = {\n  c: '--shell-mode',\n};\n\nexport function rcOptionsTypes(): Record<string, unknown> {\n  return {\n    ...pick.default(['use-node-version'], types),\n    'shell-mode': Boolean,\n  };\n}\n\nexport const cliOptionsTypes = (): Record<string, unknown> => ({\n  ...rcOptionsTypes(),\n  package: [String, Array],\n  'allow-build': [String, Array],\n});\n\nexport function help(): string {\n  return renderHelp({\n    description: 'Run a package in a temporary environment.',\n    descriptionLists: [\n      {\n        title: 'Options',\n        list: [\n          {\n            description: 'The package to install before running the command',\n            name: '--package',\n          },\n          {\n            description:\n              'A list of package names that are allowed to run postinstall scripts during installation',\n            name: '--allow-build',\n          },\n          {\n            description:\n              'Runs the script inside of a shell. Uses /bin/sh on UNIX and \\\\cmd.exe on Windows.',\n            name: '--shell-mode',\n            shortAlias: '-c',\n          },\n        ],\n      },\n      OUTPUT_OPTIONS,\n    ],\n    url: docsUrl('dlx'),\n    usages: ['pnpm dlx <command> [args...]'],\n  });\n}\n\nexport type DlxCommandOptions = {\n  package?: string[] | undefined;\n  shellMode?: boolean | undefined;\n  allowBuild?: string[] | undefined;\n} & Pick<\n  Config,\n  | 'extraBinPaths'\n  | 'registries'\n  | 'reporter'\n  | 'userAgent'\n  | 'cacheDir'\n  | 'dlxCacheMaxAge'\n  | 'useNodeVersion'\n  | 'symlink'\n> &\n  AddCommandOptions &\n  PnpmSettings;\n\nexport async function handler(\n  opts: DlxCommandOptions,\n  [command, ...args]: string[]\n): Promise<{ exitCode: number }> {\n  const pkgs = (opts.package ?? [command]).filter(Boolean);\n\n  const { resolve } = createResolver({\n    ...opts,\n    authConfig: opts.rawConfig,\n  });\n\n  const resolvedPkgAliases: string[] = [];\n\n  const resolvedPkgs = await Promise.all(\n    pkgs.map(async (pkg) => {\n      const { alias, pref } = parseWantedDependency(pkg); // || {};\n\n      if (typeof alias === 'undefined' || typeof pref === 'undefined') {\n        return pkg;\n      }\n\n      resolvedPkgAliases.push(alias);\n\n      const resolved = await resolve(\n        { alias, pref },\n        {\n          lockfileDir: opts.lockfileDir ?? opts.dir,\n          preferredVersions: {},\n          projectDir: opts.dir,\n          registry: pickRegistryForPackage(opts.registries, alias, pref),\n        }\n      );\n\n      return resolved.id;\n    })\n  );\n\n  const { cacheLink, cacheExists, cachedDir } = findCache(resolvedPkgs, {\n    dlxCacheMaxAge: opts.dlxCacheMaxAge,\n    cacheDir: opts.cacheDir,\n    registries: opts.registries,\n    allowBuild: opts.allowBuild ?? [],\n  });\n\n  if (!cacheExists) {\n    fs.mkdirSync(cachedDir, { recursive: true });\n\n    await add.handler(\n      {\n        ...opts,\n        bin: path.join(cachedDir, 'node_modules', '.bin'),\n        dir: cachedDir as ProjectRootDirRealPath,\n        lockfileDir: cachedDir as LockFileDir,\n        onlyBuiltDependencies: [\n          ...resolvedPkgAliases,\n          ...(opts.allowBuild ?? []),\n        ],\n        saveProd: true, // dlx will be looking for the package in the \"dependencies\" field!\n        saveDev: false,\n        saveOptional: false,\n        savePeer: false,\n        symlink: true,\n        workspaceDir: undefined,\n      },\n      resolvedPkgs\n    );\n\n    try {\n      await symlinkDir(cachedDir, cacheLink, { overwrite: true });\n    } catch (error) {\n      // EBUSY means that there is another dlx process running in parallel that has acquired the cache link first.\n      // Similarly, EEXIST means that another dlx process has created the cache link before this process.\n      // The link created by the other process is just as up-to-date as the link the current process was attempting\n      // to create. Therefore, instead of re-attempting to create the current link again, it is just as good to let\n      // the other link stay. The current process should yield.\n      if (\n        !util.types.isNativeError(error) ||\n        !('code' in error) ||\n        (error.code !== 'EBUSY' && error.code !== 'EEXIST')\n      ) {\n        throw error;\n      }\n    }\n  }\n\n  const modulesDir = path.join(cachedDir, 'node_modules');\n\n  const binsDir = path.join(modulesDir, '.bin');\n\n  const env = makeEnv({\n    userAgent: opts.userAgent,\n    prependPaths: [binsDir, ...opts.extraBinPaths],\n  });\n\n  const binName = opts.package\n    ? command\n    : await getBinName(modulesDir, await getPkgName(cachedDir));\n\n  if (typeof binName !== 'string') {\n    throw new PnpmError('DLX_NO_BIN', `No binary found for ${command}`);\n  }\n\n  try {\n    await execa.execa(binName, args, {\n      cwd: process.cwd(),\n      env,\n      stdio: 'inherit',\n      shell: opts.shellMode ?? false,\n    });\n  } catch (err: unknown) {\n    if (\n      util.types.isNativeError(err) &&\n      'exitCode' in err &&\n      err.exitCode != null\n    ) {\n      return {\n        exitCode: err.exitCode as number,\n      };\n    }\n\n    throw err;\n  }\n\n  return { exitCode: 0 };\n}\n\nasync function getPkgName(pkgDir: string): Promise<string> {\n  const manifest = await readPackageJsonFromDir(pkgDir);\n\n  const dependencyNames = Object.keys(manifest.dependencies ?? {});\n\n  const dependencyName = dependencyNames[0];\n\n  if (dependencyNames.length === 0 || typeof dependencyName !== 'string') {\n    throw new PnpmError(\n      'DLX_NO_DEP',\n      'dlx was unable to find the installed dependency in \"dependencies\"'\n    );\n  }\n\n  return dependencyName;\n}\n\nasync function getBinName(\n  modulesDir: string,\n  pkgName: string\n): Promise<string> {\n  const pkgDir = path.join(modulesDir, pkgName);\n  const manifest = await readPackageJsonFromDir(pkgDir);\n  const bins = await getBinsFromPackageManifest(manifest, pkgDir);\n  if (bins.length === 0) {\n    throw new PnpmError('DLX_NO_BIN', `No binaries found in ${pkgName}`);\n  }\n\n  const firstBin = bins[0];\n\n  if (bins.length === 1 && typeof firstBin !== 'undefined') {\n    return firstBin.name;\n  }\n\n  if (typeof manifest.name !== 'string') {\n    throw new PnpmError('DLX_NO_NAME', `No name found in ${pkgName}`);\n  }\n\n  const scopelessPkgName = scopeless(manifest.name);\n\n  const defaultBin = bins.find(({ name }: Command): boolean => {\n    return name === scopelessPkgName;\n  });\n\n  if (defaultBin) return defaultBin.name;\n\n  const binNames = bins.map(({ name }: Command): string => {\n    return name;\n  });\n\n  throw new PnpmError(\n    'DLX_MULTIPLE_BINS',\n    `Could not determine executable to run. ${pkgName} has multiple binaries: ${binNames.join(', ')}`,\n    {\n      hint: `Try one of the following:\n${binNames.map((name) => `pnpm --package=${pkgName} dlx ${name}`).join('\\n')}\n`,\n    }\n  );\n}\n\nfunction scopeless(pkgName: string): string {\n  if (pkgName.startsWith('@')) {\n    return pkgName.split('/')[1] ?? pkgName;\n  }\n\n  return pkgName;\n}\n\nfunction findCache(\n  pkgs: string[],\n  opts: {\n    cacheDir: string;\n    dlxCacheMaxAge: number;\n    registries: Record<string, string>;\n    allowBuild: string[];\n  }\n): { cacheLink: string; cacheExists: boolean; cachedDir: string } {\n  const dlxCommandCacheDir = createDlxCommandCacheDir(pkgs, opts);\n\n  const cacheLink = path.join(dlxCommandCacheDir, 'pkg');\n\n  const cachedDir = getValidCacheDir(cacheLink, opts.dlxCacheMaxAge);\n\n  return {\n    cacheLink,\n    cachedDir: cachedDir ?? getPrepareDir(dlxCommandCacheDir),\n    cacheExists: cachedDir != null,\n  };\n}\n\nfunction createDlxCommandCacheDir(\n  pkgs: string[],\n  opts: {\n    registries: Record<string, string>;\n    cacheDir: string;\n    allowBuild: string[];\n  }\n): string {\n  const dlxCacheDir = path.resolve(opts.cacheDir, 'dlx');\n\n  const cacheKey = createCacheKey(pkgs, opts.registries, opts.allowBuild);\n\n  const cachePath = path.join(dlxCacheDir, cacheKey);\n\n  fs.mkdirSync(cachePath, { recursive: true });\n\n  return cachePath;\n}\n\nexport function createCacheKey(\n  pkgs: string[],\n  registries: Record<string, string>,\n  allowBuild?: string[] | undefined\n): string {\n  const sortedPkgs = [...pkgs].sort((a, b) => a.localeCompare(b));\n\n  const sortedRegistries = Object.entries(registries).sort(([k1], [k2]) => {\n    return k1.localeCompare(k2);\n  });\n\n  const args: unknown[] = [sortedPkgs, sortedRegistries];\n\n  if (Array.isArray(allowBuild) && allowBuild.length > 0) {\n    args.push({\n      allowBuild: allowBuild.sort((pkg1, pkg2) => {\n        return pkg1.localeCompare(pkg2);\n      }),\n    });\n  }\n\n  const hashStr = JSON.stringify(args);\n\n  return createHexHash(hashStr);\n}\n\nfunction getValidCacheDir(\n  cacheLink: string,\n  dlxCacheMaxAge: number\n): string | undefined {\n  let stats: Stats;\n\n  let target: string;\n\n  try {\n    stats = fs.lstatSync(cacheLink);\n\n    if (stats.isSymbolicLink()) {\n      target = fs.realpathSync(cacheLink);\n\n      if (!target) {\n        return undefined;\n      }\n    } else {\n      return undefined;\n    }\n  } catch (err) {\n    if (\n      util.types.isNativeError(err) &&\n      'code' in err &&\n      err.code === 'ENOENT'\n    ) {\n      return undefined;\n    }\n\n    throw err;\n  }\n\n  const isValid =\n    stats.mtime.getTime() + dlxCacheMaxAge * 60_000 >= new Date().getTime();\n\n  return isValid ? target : undefined;\n}\n\nfunction getPrepareDir(cachePath: string): string {\n  const name = `${new Date().getTime().toString(16)}-${process.pid.toString(16)}`;\n\n  return path.join(cachePath, name);\n}\n"],
  "mappings": "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",
  "names": []
}
