{
  "version": 3,
  "sources": ["../../../../src/packages/hooks.read-package-hook/createPackageExtender.ts"],
  "sourcesContent": ["import type {\n  PackageManifest,\n  PackageExtension,\n  ReadPackageHook,\n} from '../types/index.ts';\nimport { parseWantedDependency } from '../parse-wanted-dependency/index.ts';\nimport semver from 'semver';\n\ntype PackageExtensionMatch = {\n  packageExtension: PackageExtension;\n  range?: string | undefined;\n};\n\ntype ExtensionsByPkgName = Map<string, PackageExtensionMatch[]>;\n\nexport function createPackageExtender(\n  packageExtensions: Record<string, PackageExtension>\n): ReadPackageHook {\n  const extensionsByPkgName: ExtensionsByPkgName = new Map();\n\n  for (const selector in packageExtensions) {\n    const packageExtension = packageExtensions[selector];\n\n    if (typeof packageExtension === 'undefined') {\n      continue;\n    }\n\n    const { alias, pref } = parseWantedDependency(selector);\n\n    if (typeof alias === 'undefined') {\n      continue;\n    }\n\n    if (extensionsByPkgName.has(alias) !== true) {\n      extensionsByPkgName.set(alias, []);\n    }\n\n    extensionsByPkgName.get(alias)?.push({ packageExtension, range: pref });\n  }\n\n  return extendPkgHook.bind(null, extensionsByPkgName) as ReadPackageHook;\n}\n\nfunction extendPkgHook(\n  extensionsByPkgName: ExtensionsByPkgName,\n  manifest: PackageManifest\n): PackageManifest {\n  const extensions = extensionsByPkgName.get(manifest.name);\n\n  if (extensions == null) {\n    return manifest;\n  }\n\n  extendPkg(manifest, extensions);\n\n  return manifest;\n}\n\nfunction extendPkg(\n  manifest: PackageManifest,\n  extensions: PackageExtensionMatch[]\n): void {\n  for (const { range, packageExtension } of extensions) {\n    if (range != null && !semver.satisfies(manifest.version, range)) {\n      continue;\n    }\n\n    for (const field of [\n      'dependencies',\n      'optionalDependencies',\n      'peerDependencies',\n      'peerDependenciesMeta',\n    ] as const) {\n      if (!packageExtension[field]) {\n        continue;\n      }\n\n      manifest[field] = {\n        ...packageExtension[field],\n        ...manifest[field],\n      } as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n    }\n  }\n}\n"],
  "mappings": "AAKA,SAAS,6BAA6B;AACtC,OAAO,YAAY;AASZ,SAAS,sBACd,mBACiB;AACjB,QAAM,sBAA2C,oBAAI,IAAI;AAEzD,aAAW,YAAY,mBAAmB;AACxC,UAAM,mBAAmB,kBAAkB,QAAQ;AAEnD,QAAI,OAAO,qBAAqB,aAAa;AAC3C;AAAA,IACF;AAEA,UAAM,EAAE,OAAO,KAAK,IAAI,sBAAsB,QAAQ;AAEtD,QAAI,OAAO,UAAU,aAAa;AAChC;AAAA,IACF;AAEA,QAAI,oBAAoB,IAAI,KAAK,MAAM,MAAM;AAC3C,0BAAoB,IAAI,OAAO,CAAC,CAAC;AAAA,IACnC;AAEA,wBAAoB,IAAI,KAAK,GAAG,KAAK,EAAE,kBAAkB,OAAO,KAAK,CAAC;AAAA,EACxE;AAEA,SAAO,cAAc,KAAK,MAAM,mBAAmB;AACrD;AAEA,SAAS,cACP,qBACA,UACiB;AACjB,QAAM,aAAa,oBAAoB,IAAI,SAAS,IAAI;AAExD,MAAI,cAAc,MAAM;AACtB,WAAO;AAAA,EACT;AAEA,YAAU,UAAU,UAAU;AAE9B,SAAO;AACT;AAEA,SAAS,UACP,UACA,YACM;AACN,aAAW,EAAE,OAAO,iBAAiB,KAAK,YAAY;AACpD,QAAI,SAAS,QAAQ,CAAC,OAAO,UAAU,SAAS,SAAS,KAAK,GAAG;AAC/D;AAAA,IACF;AAEA,eAAW,SAAS;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAAY;AACV,UAAI,CAAC,iBAAiB,KAAK,GAAG;AAC5B;AAAA,MACF;AAEA,eAAS,KAAK,IAAI;AAAA,QAChB,GAAG,iBAAiB,KAAK;AAAA,QACzB,GAAG,SAAS,KAAK;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AACF;",
  "names": []
}
