"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.getName = getName;
exports.setDisplayName = setDisplayName;
exports.setName = setName;
exports.setProductName = setProductName;
exports.withProductName = exports.withName = exports.withDisplayName = void 0;

function _iosPlugins() {
  const data = require("../plugins/ios-plugins");

  _iosPlugins = function () {
    return data;
  };

  return data;
}

function _Target() {
  const data = require("./Target");

  _Target = function () {
    return data;
  };

  return data;
}

function _Xcodeproj() {
  const data = require("./utils/Xcodeproj");

  _Xcodeproj = function () {
    return data;
  };

  return data;
}

const withDisplayName = (0, _iosPlugins().createInfoPlistPlugin)(setDisplayName, 'withDisplayName');
exports.withDisplayName = withDisplayName;
const withName = (0, _iosPlugins().createInfoPlistPlugin)(setName, 'withName');
/** Set the PRODUCT_NAME variable in the xcproj file based on the app.json name property. */

exports.withName = withName;

const withProductName = config => {
  return (0, _iosPlugins().withXcodeProject)(config, config => {
    config.modResults = setProductName(config, config.modResults);
    return config;
  });
};

exports.withProductName = withProductName;

function getName(config) {
  return typeof config.name === 'string' ? config.name : null;
}
/**
 * CFBundleDisplayName is used for most things: the name on the home screen, in
 * notifications, and others.
 */


function setDisplayName(configOrName, {
  CFBundleDisplayName,
  ...infoPlist
}) {
  let name = null;

  if (typeof configOrName === 'string') {
    name = configOrName;
  } else {
    name = getName(configOrName);
  }

  if (!name) {
    return infoPlist;
  }

  return { ...infoPlist,
    CFBundleDisplayName: name
  };
}
/**
 * CFBundleName is recommended to be 16 chars or less and is used in lists, eg:
 * sometimes on the App Store
 */


function setName(config, {
  CFBundleName,
  ...infoPlist
}) {
  const name = getName(config);

  if (!name) {
    return infoPlist;
  }

  return { ...infoPlist,
    CFBundleName: name
  };
}

function setProductName(config, project) {
  var _getName;

  const name = (0, _Xcodeproj().sanitizedName)((_getName = getName(config)) !== null && _getName !== void 0 ? _getName : '');

  if (!name) {
    return project;
  }

  const quotedName = ensureQuotes(name);
  const [, nativeTarget] = (0, _Target().findFirstNativeTarget)(project);
  (0, _Xcodeproj().getBuildConfigurationsForListId)(project, nativeTarget.buildConfigurationList).forEach(([, item]) => {
    item.buildSettings.PRODUCT_NAME = quotedName;
  });
  return project;
}

const ensureQuotes = value => {
  if (!value.match(/^['"]/)) {
    return `"${value}"`;
  }

  return value;
};
//# sourceMappingURL=Name.js.map