1{"version":3,"file":"Bitcode.js","names":["withBitcode","config","withXcodeProject","modResults","setBitcodeWithConfig","project","withCustomBitcode","bitcode","setBitcode","getBitcode","ios","isDefaultBehavior","targetName","undefined","isBitcodeEnabled","configs","Object","entries","pbxXCBuildConfigurationSection","filter","isNotComment","hasConfiguration","find","configuration","name","addBuildProperty","names","Set","map","sort","addWarningIOS","join"],"sources":["../../src/ios/Bitcode.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport { XcodeProject } from 'xcode';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withXcodeProject } from '../plugins/ios-plugins';\nimport { addWarningIOS } from '../utils/warnings';\nimport { isNotComment } from './utils/Xcodeproj';\n\ntype Bitcode = NonNullable<ExpoConfig['ios']>['bitcode'];\n\n/**\n * Plugin to set a bitcode preference for the Xcode project\n * based on the project's Expo config `ios.bitcode` value.\n */\nexport const withBitcode: ConfigPlugin = (config) => {\n  return withXcodeProject(config, async (config) => {\n    config.modResults = await setBitcodeWithConfig(config, {\n      project: config.modResults,\n    });\n    return config;\n  });\n};\n\n/**\n * Plugin to set a custom bitcode preference for the Xcode project.\n * Does not read from the Expo config `ios.bitcode`.\n *\n * @param bitcode custom bitcode setting.\n */\nexport const withCustomBitcode: ConfigPlugin<Bitcode> = (config, bitcode) => {\n  return withXcodeProject(config, async (config) => {\n    config.modResults = await setBitcode(bitcode, {\n      project: config.modResults,\n    });\n    return config;\n  });\n};\n\n/**\n * Get the bitcode preference from the Expo config.\n */\nexport function getBitcode(config: Pick<ExpoConfig, 'ios'>): Bitcode {\n  return config.ios?.bitcode;\n}\n\n/**\n * Enable or disable the `ENABLE_BITCODE` property of the project configurations.\n */\nexport function setBitcodeWithConfig(\n  config: Pick<ExpoConfig, 'ios'>,\n  { project }: { project: XcodeProject }\n): XcodeProject {\n  const bitcode = getBitcode(config);\n  return setBitcode(bitcode, { project });\n}\n\n/**\n * Enable or disable the `ENABLE_BITCODE` property.\n */\nexport function setBitcode(bitcode: Bitcode, { project }: { project: XcodeProject }): XcodeProject {\n  const isDefaultBehavior = bitcode == null;\n  // If the value is undefined, then do nothing.\n  if (isDefaultBehavior) {\n    return project;\n  }\n\n  const targetName = typeof bitcode === 'string' ? bitcode : undefined;\n  const isBitcodeEnabled = !!bitcode;\n  if (targetName) {\n    // Assert if missing\n    const configs = Object.entries(project.pbxXCBuildConfigurationSection()).filter(isNotComment);\n    const hasConfiguration = configs.find(([, configuration]) => configuration.name === targetName);\n    if (hasConfiguration) {\n      // If targetName is defined then disable bitcode everywhere.\n      project.addBuildProperty('ENABLE_BITCODE', 'NO');\n    } else {\n      const names = [\n        // Remove duplicates, wrap in double quotes, and sort alphabetically.\n        ...new Set(configs.map(([, configuration]) => `\"${configuration.name}\"`)),\n      ].sort();\n      addWarningIOS(\n        'ios.bitcode',\n        `No configuration named \"${targetName}\". Expected one of: ${names.join(', ')}.`\n      );\n    }\n  }\n\n  project.addBuildProperty('ENABLE_BITCODE', isBitcodeEnabled ? 'YES' : 'NO', targetName);\n\n  return project;\n}\n"],"mappings":";;;;;;;;;;AAIA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAIA;AACA;AACA;AACA;AACO,MAAMA,WAAyB,GAAIC,MAAD,IAAY;EACnD,OAAO,IAAAC,8BAAA,EAAiBD,MAAjB,EAAyB,MAAOA,MAAP,IAAkB;IAChDA,MAAM,CAACE,UAAP,GAAoB,MAAMC,oBAAoB,CAACH,MAAD,EAAS;MACrDI,OAAO,EAAEJ,MAAM,CAACE;IADqC,CAAT,CAA9C;IAGA,OAAOF,MAAP;EACD,CALM,CAAP;AAMD,CAPM;AASP;AACA;AACA;AACA;AACA;AACA;;;;;AACO,MAAMK,iBAAwC,GAAG,CAACL,MAAD,EAASM,OAAT,KAAqB;EAC3E,OAAO,IAAAL,8BAAA,EAAiBD,MAAjB,EAAyB,MAAOA,MAAP,IAAkB;IAChDA,MAAM,CAACE,UAAP,GAAoB,MAAMK,UAAU,CAACD,OAAD,EAAU;MAC5CF,OAAO,EAAEJ,MAAM,CAACE;IAD4B,CAAV,CAApC;IAGA,OAAOF,MAAP;EACD,CALM,CAAP;AAMD,CAPM;AASP;AACA;AACA;;;;;AACO,SAASQ,UAAT,CAAoBR,MAApB,EAA8D;EAAA;;EACnE,sBAAOA,MAAM,CAACS,GAAd,gDAAO,YAAYH,OAAnB;AACD;AAED;AACA;AACA;;;AACO,SAASH,oBAAT,CACLH,MADK,EAEL;EAAEI;AAAF,CAFK,EAGS;EACd,MAAME,OAAO,GAAGE,UAAU,CAACR,MAAD,CAA1B;EACA,OAAOO,UAAU,CAACD,OAAD,EAAU;IAAEF;EAAF,CAAV,CAAjB;AACD;AAED;AACA;AACA;;;AACO,SAASG,UAAT,CAAoBD,OAApB,EAAsC;EAAEF;AAAF,CAAtC,EAA4F;EACjG,MAAMM,iBAAiB,GAAGJ,OAAO,IAAI,IAArC,CADiG,CAEjG;;EACA,IAAII,iBAAJ,EAAuB;IACrB,OAAON,OAAP;EACD;;EAED,MAAMO,UAAU,GAAG,OAAOL,OAAP,KAAmB,QAAnB,GAA8BA,OAA9B,GAAwCM,SAA3D;EACA,MAAMC,gBAAgB,GAAG,CAAC,CAACP,OAA3B;;EACA,IAAIK,UAAJ,EAAgB;IACd;IACA,MAAMG,OAAO,GAAGC,MAAM,CAACC,OAAP,CAAeZ,OAAO,CAACa,8BAAR,EAAf,EAAyDC,MAAzD,CAAgEC,yBAAhE,CAAhB;IACA,MAAMC,gBAAgB,GAAGN,OAAO,CAACO,IAAR,CAAa,CAAC,GAAGC,aAAH,CAAD,KAAuBA,aAAa,CAACC,IAAd,KAAuBZ,UAA3D,CAAzB;;IACA,IAAIS,gBAAJ,EAAsB;MACpB;MACAhB,OAAO,CAACoB,gBAAR,CAAyB,gBAAzB,EAA2C,IAA3C;IACD,CAHD,MAGO;MACL,MAAMC,KAAK,GAAG,CACZ;MACA,GAAG,IAAIC,GAAJ,CAAQZ,OAAO,CAACa,GAAR,CAAY,CAAC,GAAGL,aAAH,CAAD,KAAwB,IAAGA,aAAa,CAACC,IAAK,GAA1D,CAAR,CAFS,EAGZK,IAHY,EAAd;MAIA,IAAAC,yBAAA,EACE,aADF,EAEG,2BAA0BlB,UAAW,uBAAsBc,KAAK,CAACK,IAAN,CAAW,IAAX,CAAiB,GAF/E;IAID;EACF;;EAED1B,OAAO,CAACoB,gBAAR,CAAyB,gBAAzB,EAA2CX,gBAAgB,GAAG,KAAH,GAAW,IAAtE,EAA4EF,UAA5E;EAEA,OAAOP,OAAP;AACD"}