{
  "version": 3,
  "sources": ["../../../../src/packages/package-is-installable/checkPlatform.ts"],
  "sourcesContent": ["import { PnpmError } from '../error/index.ts';\nimport type { SupportedArchitectures } from '../types/index.ts';\nimport { familySync as getLibcFamilySync } from 'detect-libc';\n\nconst currentLibc = getLibcFamilySync() ?? 'unknown';\n\nexport class UnsupportedPlatformError extends PnpmError {\n  wanted: WantedPlatform;\n  current: Platform;\n\n  constructor(packageId: string, wanted: WantedPlatform, current: Platform) {\n    super(\n      'UNSUPPORTED_PLATFORM',\n      `Unsupported platform for ${packageId}: wanted ${JSON.stringify(wanted)} (current: ${JSON.stringify(current)})`\n    );\n    this.wanted = wanted;\n    this.current = current;\n  }\n}\n\nexport function checkPlatform(\n  packageId: string,\n  wantedPlatform: WantedPlatform,\n  supportedArchitectures?: SupportedArchitectures\n): UnsupportedPlatformError | null {\n  const current = {\n    os: dedupeCurrent(\n      process.platform,\n      supportedArchitectures?.os ?? ['current']\n    ),\n    cpu: dedupeCurrent(\n      process.arch,\n      supportedArchitectures?.cpu ?? ['current']\n    ),\n    libc: dedupeCurrent(\n      currentLibc,\n      supportedArchitectures?.libc ?? ['current']\n    ),\n  };\n\n  const { platform, arch } = process;\n  let osOk = true;\n  let cpuOk = true;\n  let libcOk = true;\n\n  if (typeof wantedPlatform.os !== 'undefined') {\n    osOk = checkList(current.os, wantedPlatform.os);\n  }\n  if (typeof wantedPlatform.cpu !== 'undefined') {\n    cpuOk = checkList(current.cpu, wantedPlatform.cpu);\n  }\n  if (typeof wantedPlatform.libc !== 'undefined' && currentLibc !== 'unknown') {\n    libcOk = checkList(current.libc, wantedPlatform.libc);\n  }\n\n  if (!osOk || !cpuOk || !libcOk) {\n    return new UnsupportedPlatformError(packageId, wantedPlatform, {\n      os: platform,\n      cpu: arch,\n      libc: currentLibc,\n    });\n  }\n\n  return null;\n}\n\nexport interface Platform {\n  cpu: string | string[];\n  os: string | string[];\n  libc: string | string[];\n}\n\nexport type WantedPlatform = Partial<Platform>;\n\nfunction checkList(value: string | string[], list: string | string[]): boolean {\n  let tmp: string | undefined;\n  let match = false;\n  let blc = 0;\n\n  let newList = list;\n\n  if (typeof newList === 'string') {\n    newList = [newList];\n  }\n\n  newList = newList.filter((value) => typeof value === 'string');\n\n  if (newList.length === 1 && newList[0] === 'any') {\n    return true;\n  }\n\n  const values = Array.isArray(value) ? value : [value];\n\n  for (const value of values) {\n    for (let i = 0; i < newList.length; ++i) {\n      tmp = newList[i];\n\n      if (typeof tmp !== 'string') {\n        continue;\n      }\n\n      if (tmp[0] === '!') {\n        tmp = tmp.slice(1);\n        if (tmp === value) {\n          return false;\n        }\n        ++blc;\n      } else {\n        match = match || tmp === value;\n      }\n    }\n  }\n\n  return match || blc === list.length;\n}\n\nfunction dedupeCurrent(current: string, supported: string[]): string[] {\n  return supported.map((supported) => {\n    return supported === 'current' ? current : supported;\n  });\n}\n"],
  "mappings": "AAAA,SAAS,iBAAiB;AAE1B,SAAS,cAAc,yBAAyB;AAEhD,MAAM,cAAc,kBAAkB,KAAK;AAEpC,MAAM,iCAAiC,UAAU;AAAA,EACtD;AAAA,EACA;AAAA,EAEA,YAAY,WAAmB,QAAwB,SAAmB;AACxE;AAAA,MACE;AAAA,MACA,4BAA4B,SAAS,YAAY,KAAK,UAAU,MAAM,CAAC,cAAc,KAAK,UAAU,OAAO,CAAC;AAAA,IAC9G;AACA,SAAK,SAAS;AACd,SAAK,UAAU;AAAA,EACjB;AACF;AAEO,SAAS,cACd,WACA,gBACA,wBACiC;AACjC,QAAM,UAAU;AAAA,IACd,IAAI;AAAA,MACF,QAAQ;AAAA,MACR,wBAAwB,MAAM,CAAC,SAAS;AAAA,IAC1C;AAAA,IACA,KAAK;AAAA,MACH,QAAQ;AAAA,MACR,wBAAwB,OAAO,CAAC,SAAS;AAAA,IAC3C;AAAA,IACA,MAAM;AAAA,MACJ;AAAA,MACA,wBAAwB,QAAQ,CAAC,SAAS;AAAA,IAC5C;AAAA,EACF;AAEA,QAAM,EAAE,UAAU,KAAK,IAAI;AAC3B,MAAI,OAAO;AACX,MAAI,QAAQ;AACZ,MAAI,SAAS;AAEb,MAAI,OAAO,eAAe,OAAO,aAAa;AAC5C,WAAO,UAAU,QAAQ,IAAI,eAAe,EAAE;AAAA,EAChD;AACA,MAAI,OAAO,eAAe,QAAQ,aAAa;AAC7C,YAAQ,UAAU,QAAQ,KAAK,eAAe,GAAG;AAAA,EACnD;AACA,MAAI,OAAO,eAAe,SAAS,eAAe,gBAAgB,WAAW;AAC3E,aAAS,UAAU,QAAQ,MAAM,eAAe,IAAI;AAAA,EACtD;AAEA,MAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ;AAC9B,WAAO,IAAI,yBAAyB,WAAW,gBAAgB;AAAA,MAC7D,IAAI;AAAA,MACJ,KAAK;AAAA,MACL,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAUA,SAAS,UAAU,OAA0B,MAAkC;AAC7E,MAAI;AACJ,MAAI,QAAQ;AACZ,MAAI,MAAM;AAEV,MAAI,UAAU;AAEd,MAAI,OAAO,YAAY,UAAU;AAC/B,cAAU,CAAC,OAAO;AAAA,EACpB;AAEA,YAAU,QAAQ,OAAO,CAACA,WAAU,OAAOA,WAAU,QAAQ;AAE7D,MAAI,QAAQ,WAAW,KAAK,QAAQ,CAAC,MAAM,OAAO;AAChD,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAEpD,aAAWA,UAAS,QAAQ;AAC1B,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACvC,YAAM,QAAQ,CAAC;AAEf,UAAI,OAAO,QAAQ,UAAU;AAC3B;AAAA,MACF;AAEA,UAAI,IAAI,CAAC,MAAM,KAAK;AAClB,cAAM,IAAI,MAAM,CAAC;AACjB,YAAI,QAAQA,QAAO;AACjB,iBAAO;AAAA,QACT;AACA,UAAE;AAAA,MACJ,OAAO;AACL,gBAAQ,SAAS,QAAQA;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAEA,SAAO,SAAS,QAAQ,KAAK;AAC/B;AAEA,SAAS,cAAc,SAAiB,WAA+B;AACrE,SAAO,UAAU,IAAI,CAACC,eAAc;AAClC,WAAOA,eAAc,YAAY,UAAUA;AAAA,EAC7C,CAAC;AACH;",
  "names": ["value", "supported"]
}
