{
  "version": 3,
  "sources": ["../../../../src/packages/config/getOptionsFromRootManifest.ts"],
  "sourcesContent": ["import path from 'node:path';\nimport { PnpmError } from '../error/index.ts';\nimport type {\n  SupportedArchitectures,\n  AllowedDeprecatedVersions,\n  PackageExtension,\n  PeerDependencyRules,\n  ProjectManifest,\n  PnpmSettings,\n  LockFileDir,\n  ProjectRootDir,\n  ProjectRootDirRealPath,\n  GlobalPkgDir,\n  WorkspaceDir,\n} from '../types/index.ts';\nimport mapValues from 'ramda/src/map';\nimport pick from 'ramda/src/pick';\n\nexport type OptionsFromRootManifest = {\n  allowedDeprecatedVersions?: AllowedDeprecatedVersions | undefined;\n  allowNonAppliedPatches?: boolean | undefined;\n  overrides?: Record<string, string> | undefined;\n  neverBuiltDependencies?: string[] | undefined;\n  onlyBuiltDependencies?: string[] | undefined;\n  onlyBuiltDependenciesFile?: string | undefined;\n  ignoredBuiltDependencies?: string[] | undefined;\n  packageExtensions?: Record<string, PackageExtension> | undefined;\n  ignoredOptionalDependencies?: string[] | undefined;\n  patchedDependencies?: Record<string, string> | undefined;\n  peerDependencyRules?: PeerDependencyRules | undefined;\n  supportedArchitectures?: SupportedArchitectures | undefined;\n} & Pick<PnpmSettings, 'configDependencies'>;\n\nexport function getOptionsFromRootManifest(\n  manifestDir:\n    | LockFileDir\n    | ProjectRootDir\n    | ProjectRootDirRealPath\n    | GlobalPkgDir\n    | WorkspaceDir,\n  manifest?: ProjectManifest | undefined\n): OptionsFromRootManifest {\n  const settings: OptionsFromRootManifest = getOptionsFromPnpmSettings(\n    manifestDir,\n    {\n      ...pick.default(\n        [\n          'allowNonAppliedPatches',\n          'allowedDeprecatedVersions',\n          'configDependencies',\n          'ignoredBuiltDependencies',\n          'ignoredOptionalDependencies',\n          'neverBuiltDependencies',\n          'onlyBuiltDependencies',\n          'onlyBuiltDependenciesFile',\n          'overrides',\n          'packageExtensions',\n          'patchedDependencies',\n          'peerDependencyRules',\n          'supportedArchitectures',\n        ],\n        manifest?.pnpm ?? {}\n      ),\n      // We read Yarn's resolutions field for compatibility\n      // but we really replace the version specs to any other version spec, not only to exact versions,\n      // so we cannot call it resolutions\n      overrides: {\n        ...manifest?.resolutions,\n        ...manifest?.pnpm?.overrides,\n      },\n    },\n    manifest\n  );\n\n  return settings;\n}\n\nexport function getOptionsFromPnpmSettings(\n  manifestDir: string,\n  pnpmSettings: PnpmSettings,\n  manifest?: ProjectManifest | undefined\n): OptionsFromRootManifest {\n  const settings: OptionsFromRootManifest = { ...pnpmSettings };\n  if (settings.overrides) {\n    if (Object.keys(settings.overrides).length === 0) {\n      // biome-ignore lint/performance/noDelete: <explanation>\n      delete settings.overrides;\n    } else if (manifest) {\n      settings.overrides = mapValues.default(\n        createVersionReferencesReplacer(manifest),\n        settings.overrides\n      );\n    }\n  }\n\n  if (typeof pnpmSettings.onlyBuiltDependenciesFile === 'string') {\n    settings.onlyBuiltDependenciesFile = path.join(\n      manifestDir,\n      pnpmSettings.onlyBuiltDependenciesFile\n    );\n  }\n\n  if (pnpmSettings.patchedDependencies) {\n    settings.patchedDependencies = { ...pnpmSettings.patchedDependencies };\n\n    for (const [dep, patchFile] of Object.entries(\n      pnpmSettings.patchedDependencies\n    )) {\n      if (path.isAbsolute(patchFile)) continue;\n      settings.patchedDependencies[dep] = path.join(manifestDir, patchFile);\n    }\n  }\n  return settings;\n}\n\nfunction createVersionReferencesReplacer(\n  manifest: ProjectManifest\n): (spec: string) => string {\n  const allDeps = {\n    ...manifest.devDependencies,\n    ...manifest.dependencies,\n    ...manifest.optionalDependencies,\n  };\n  return replaceVersionReferences.bind(null, allDeps);\n}\n\nfunction replaceVersionReferences(\n  dep: Record<string, string>,\n  spec: string\n): string {\n  if (!(spec[0] === '$')) return spec;\n  const dependencyName = spec.slice(1);\n  const newSpec = dep[dependencyName];\n  if (typeof newSpec === 'string') {\n    return newSpec;\n  }\n\n  throw new PnpmError(\n    'CANNOT_RESOLVE_OVERRIDE_VERSION',\n    `Cannot resolve version ${spec} in overrides. The direct dependencies don't have dependency \"${dependencyName}\".`\n  );\n}\n"],
  "mappings": "AAAA,OAAO,UAAU;AACjB,SAAS,iBAAiB;AAc1B,OAAO,eAAe;AACtB,OAAO,UAAU;AAiBV,SAAS,2BACd,aAMA,UACyB;AACzB,QAAM,WAAoC;AAAA,IACxC;AAAA,IACA;AAAA,MACE,GAAG,KAAK;AAAA,QACN;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,UAAU,QAAQ,CAAC;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA,MAIA,WAAW;AAAA,QACT,GAAG,UAAU;AAAA,QACb,GAAG,UAAU,MAAM;AAAA,MACrB;AAAA,IACF;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,2BACd,aACA,cACA,UACyB;AACzB,QAAM,WAAoC,EAAE,GAAG,aAAa;AAC5D,MAAI,SAAS,WAAW;AACtB,QAAI,OAAO,KAAK,SAAS,SAAS,EAAE,WAAW,GAAG;AAEhD,aAAO,SAAS;AAAA,IAClB,WAAW,UAAU;AACnB,eAAS,YAAY,UAAU;AAAA,QAC7B,gCAAgC,QAAQ;AAAA,QACxC,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,aAAa,8BAA8B,UAAU;AAC9D,aAAS,4BAA4B,KAAK;AAAA,MACxC;AAAA,MACA,aAAa;AAAA,IACf;AAAA,EACF;AAEA,MAAI,aAAa,qBAAqB;AACpC,aAAS,sBAAsB,EAAE,GAAG,aAAa,oBAAoB;AAErE,eAAW,CAAC,KAAK,SAAS,KAAK,OAAO;AAAA,MACpC,aAAa;AAAA,IACf,GAAG;AACD,UAAI,KAAK,WAAW,SAAS,EAAG;AAChC,eAAS,oBAAoB,GAAG,IAAI,KAAK,KAAK,aAAa,SAAS;AAAA,IACtE;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,gCACP,UAC0B;AAC1B,QAAM,UAAU;AAAA,IACd,GAAG,SAAS;AAAA,IACZ,GAAG,SAAS;AAAA,IACZ,GAAG,SAAS;AAAA,EACd;AACA,SAAO,yBAAyB,KAAK,MAAM,OAAO;AACpD;AAEA,SAAS,yBACP,KACA,MACQ;AACR,MAAI,EAAE,KAAK,CAAC,MAAM,KAAM,QAAO;AAC/B,QAAM,iBAAiB,KAAK,MAAM,CAAC;AACnC,QAAM,UAAU,IAAI,cAAc;AAClC,MAAI,OAAO,YAAY,UAAU;AAC/B,WAAO;AAAA,EACT;AAEA,QAAM,IAAI;AAAA,IACR;AAAA,IACA,0BAA0B,IAAI,iEAAiE,cAAc;AAAA,EAC/G;AACF;",
  "names": []
}
