1{"version":3,"file":"ios-plugins.js","names":["createInfoPlistPlugin","action","name","withUnknown","config","withInfoPlist","modResults","Object","defineProperty","value","createInfoPlistPluginWithPropertyGuard","settings","existingProperty","expoPropertyGetter","get","expoConfigProperty","modRawConfig","ios","infoPlist","infoPlistProperty","undefined","addWarningIOS","createEntitlementsPlugin","withEntitlementsPlist","withAppDelegate","withMod","platform","mod","entitlements","withExpoPlist","withXcodeProject","withPodfileProperties"],"sources":["../../src/plugins/ios-plugins.ts"],"sourcesContent":["import type { ExpoConfig } from '@expo/config-types';\nimport type { JSONObject } from '@expo/json-file';\nimport type { XcodeProject } from 'xcode';\n\nimport type { ConfigPlugin, Mod } from '../Plugin.types';\nimport type { ExpoPlist, InfoPlist } from '../ios/IosConfig.types';\nimport type { AppDelegateProjectFile } from '../ios/Paths';\nimport { get } from '../utils/obj';\nimport { addWarningIOS } from '../utils/warnings';\nimport { withMod } from './withMod';\n\ntype MutateInfoPlistAction = (\n  expo: ExpoConfig,\n  infoPlist: InfoPlist\n) => Promise<InfoPlist> | InfoPlist;\n\n/**\n * Helper method for creating mods from existing config functions.\n *\n * @param action\n */\nexport function createInfoPlistPlugin(action: MutateInfoPlistAction, name?: string): ConfigPlugin {\n  const withUnknown: ConfigPlugin = (config) =>\n    withInfoPlist(config, async (config) => {\n      config.modResults = await action(config, config.modResults);\n      return config;\n    });\n  if (name) {\n    Object.defineProperty(withUnknown, 'name', {\n      value: name,\n    });\n  }\n  return withUnknown;\n}\n\nexport function createInfoPlistPluginWithPropertyGuard(\n  action: MutateInfoPlistAction,\n  settings: {\n    infoPlistProperty: string;\n    expoConfigProperty: string;\n    expoPropertyGetter?: (config: ExpoConfig) => string;\n  },\n  name?: string\n): ConfigPlugin {\n  const withUnknown: ConfigPlugin = (config) =>\n    withInfoPlist(config, async (config) => {\n      const existingProperty = settings.expoPropertyGetter\n        ? settings.expoPropertyGetter(config)\n        : get(config, settings.expoConfigProperty);\n      // If the user explicitly sets a value in the infoPlist, we should respect that.\n      if (config.modRawConfig.ios?.infoPlist?.[settings.infoPlistProperty] === undefined) {\n        config.modResults = await action(config, config.modResults);\n      } else if (existingProperty !== undefined) {\n        // Only warn if there is a conflict.\n        addWarningIOS(\n          settings.expoConfigProperty,\n          `\"ios.infoPlist.${settings.infoPlistProperty}\" is set in the config. Ignoring abstract property \"${settings.expoConfigProperty}\": ${existingProperty}`\n        );\n      }\n\n      return config;\n    });\n  if (name) {\n    Object.defineProperty(withUnknown, 'name', {\n      value: name,\n    });\n  }\n  return withUnknown;\n}\n\ntype MutateEntitlementsPlistAction = (expo: ExpoConfig, entitlements: JSONObject) => JSONObject;\n\n/**\n * Helper method for creating mods from existing config functions.\n *\n * @param action\n */\nexport function createEntitlementsPlugin(\n  action: MutateEntitlementsPlistAction,\n  name: string\n): ConfigPlugin {\n  const withUnknown: ConfigPlugin = (config) =>\n    withEntitlementsPlist(config, async (config) => {\n      config.modResults = await action(config, config.modResults);\n      return config;\n    });\n  if (name) {\n    Object.defineProperty(withUnknown, 'name', {\n      value: name,\n    });\n  }\n  return withUnknown;\n}\n\n/**\n * Provides the AppDelegate file for modification.\n *\n * @param config\n * @param action\n */\nexport const withAppDelegate: ConfigPlugin<Mod<AppDelegateProjectFile>> = (config, action) => {\n  return withMod(config, {\n    platform: 'ios',\n    mod: 'appDelegate',\n    action,\n  });\n};\n\n/**\n * Provides the Info.plist file for modification.\n * Keeps the config's expo.ios.infoPlist object in sync with the data.\n *\n * @param config\n * @param action\n */\nexport const withInfoPlist: ConfigPlugin<Mod<InfoPlist>> = (config, action) => {\n  return withMod<InfoPlist>(config, {\n    platform: 'ios',\n    mod: 'infoPlist',\n    async action(config) {\n      config = await action(config);\n      if (!config.ios) {\n        config.ios = {};\n      }\n      config.ios.infoPlist = config.modResults;\n      return config;\n    },\n  });\n};\n\n/**\n * Provides the main .entitlements file for modification.\n * Keeps the config's expo.ios.entitlements object in sync with the data.\n *\n * @param config\n * @param action\n */\nexport const withEntitlementsPlist: ConfigPlugin<Mod<JSONObject>> = (config, action) => {\n  return withMod<JSONObject>(config, {\n    platform: 'ios',\n    mod: 'entitlements',\n    async action(config) {\n      config = await action(config);\n      if (!config.ios) {\n        config.ios = {};\n      }\n      config.ios.entitlements = config.modResults;\n      return config;\n    },\n  });\n};\n\n/**\n * Provides the Expo.plist for modification.\n *\n * @param config\n * @param action\n */\nexport const withExpoPlist: ConfigPlugin<Mod<ExpoPlist>> = (config, action) => {\n  return withMod(config, {\n    platform: 'ios',\n    mod: 'expoPlist',\n    action,\n  });\n};\n\n/**\n * Provides the main .xcodeproj for modification.\n *\n * @param config\n * @param action\n */\nexport const withXcodeProject: ConfigPlugin<Mod<XcodeProject>> = (config, action) => {\n  return withMod(config, {\n    platform: 'ios',\n    mod: 'xcodeproj',\n    action,\n  });\n};\n\n/**\n * Provides the Podfile.properties.json for modification.\n *\n * @param config\n * @param action\n */\nexport const withPodfileProperties: ConfigPlugin<Mod<Record<string, string>>> = (\n  config,\n  action\n) => {\n  return withMod(config, {\n    platform: 'ios',\n    mod: 'podfileProperties',\n    action,\n  });\n};\n"],"mappings":"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"}