1082815dcSEvan Bacon"use strict";
2082815dcSEvan Bacon
3082815dcSEvan BaconObject.defineProperty(exports, "__esModule", {
4082815dcSEvan Bacon  value: true
5082815dcSEvan Bacon});
6082815dcSEvan Baconexports.createBuildGradlePropsConfigPlugin = createBuildGradlePropsConfigPlugin;
7082815dcSEvan Baconexports.updateAndroidBuildPropertiesFromConfig = updateAndroidBuildPropertiesFromConfig;
8082815dcSEvan Baconexports.updateAndroidBuildProperty = updateAndroidBuildProperty;
9082815dcSEvan Baconexports.withJsEngineGradleProps = void 0;
10082815dcSEvan Baconfunction _androidPlugins() {
11082815dcSEvan Bacon  const data = require("../plugins/android-plugins");
12082815dcSEvan Bacon  _androidPlugins = function () {
13082815dcSEvan Bacon    return data;
14082815dcSEvan Bacon  };
15082815dcSEvan Bacon  return data;
16082815dcSEvan Bacon}
17082815dcSEvan Bacon/**
18082815dcSEvan Bacon * Creates a `withGradleProperties` config-plugin based on given config to property mapping rules.
19082815dcSEvan Bacon *
20082815dcSEvan Bacon * The factory supports two modes from generic type inference
21082815dcSEvan Bacon * ```ts
22082815dcSEvan Bacon * // config-plugin without `props`, it will implicitly use the expo config as source config.
23082815dcSEvan Bacon * createBuildGradlePropsConfigPlugin<ExpoConfig>(): ConfigPlugin<void>;
24082815dcSEvan Bacon *
25082815dcSEvan Bacon * // config-plugin with a parameter `props: CustomType`, it will use the `props` as source config.
26082815dcSEvan Bacon * createBuildGradlePropsConfigPlugin<CustomType>(): ConfigPlugin<CustomType>;
27082815dcSEvan Bacon * ```
28082815dcSEvan Bacon *
29082815dcSEvan Bacon * @param configToPropertyRules config to property mapping rules
30082815dcSEvan Bacon * @param name the config plugin name
31082815dcSEvan Bacon */
32082815dcSEvan Baconfunction createBuildGradlePropsConfigPlugin(configToPropertyRules, name) {
33082815dcSEvan Bacon  const withUnknown = (config, sourceConfig) => (0, _androidPlugins().withGradleProperties)(config, config => {
34082815dcSEvan Bacon    config.modResults = updateAndroidBuildPropertiesFromConfig(sourceConfig !== null && sourceConfig !== void 0 ? sourceConfig : config, config.modResults, configToPropertyRules);
35082815dcSEvan Bacon    return config;
36082815dcSEvan Bacon  });
37082815dcSEvan Bacon  if (name) {
38082815dcSEvan Bacon    Object.defineProperty(withUnknown, 'name', {
39082815dcSEvan Bacon      value: name
40082815dcSEvan Bacon    });
41082815dcSEvan Bacon  }
42082815dcSEvan Bacon  return withUnknown;
43082815dcSEvan Bacon}
44ee216927STomasz Sapeta
45082815dcSEvan Bacon/**
46082815dcSEvan Bacon * A config-plugin to update `android/gradle.properties` from the `jsEngine` in expo config
47082815dcSEvan Bacon */
48082815dcSEvan Baconconst withJsEngineGradleProps = createBuildGradlePropsConfigPlugin([{
49*0e8f799bSKudo Chien  propName: 'hermesEnabled',
50082815dcSEvan Bacon  propValueGetter: config => {
51082815dcSEvan Bacon    var _ref, _config$android$jsEng, _config$android;
52*0e8f799bSKudo Chien    return (((_ref = (_config$android$jsEng = (_config$android = config.android) === null || _config$android === void 0 ? void 0 : _config$android.jsEngine) !== null && _config$android$jsEng !== void 0 ? _config$android$jsEng : config.jsEngine) !== null && _ref !== void 0 ? _ref : 'hermes') === 'hermes').toString();
53082815dcSEvan Bacon  }
54082815dcSEvan Bacon}], 'withJsEngineGradleProps');
55082815dcSEvan Baconexports.withJsEngineGradleProps = withJsEngineGradleProps;
56082815dcSEvan Baconfunction updateAndroidBuildPropertiesFromConfig(config, gradleProperties, configToPropertyRules) {
57082815dcSEvan Bacon  for (const configToProperty of configToPropertyRules) {
58082815dcSEvan Bacon    const value = configToProperty.propValueGetter(config);
59082815dcSEvan Bacon    updateAndroidBuildProperty(gradleProperties, configToProperty.propName, value);
60082815dcSEvan Bacon  }
61082815dcSEvan Bacon  return gradleProperties;
62082815dcSEvan Bacon}
63082815dcSEvan Baconfunction updateAndroidBuildProperty(gradleProperties, name, value, options) {
64082815dcSEvan Bacon  const oldPropIndex = gradleProperties.findIndex(prop => prop.type === 'property' && prop.key === name);
65082815dcSEvan Bacon  if (value) {
66082815dcSEvan Bacon    // found the matched value, add or merge new property
67082815dcSEvan Bacon    const newProp = {
68082815dcSEvan Bacon      type: 'property',
69082815dcSEvan Bacon      key: name,
70082815dcSEvan Bacon      value
71082815dcSEvan Bacon    };
72082815dcSEvan Bacon    if (oldPropIndex >= 0) {
73082815dcSEvan Bacon      gradleProperties[oldPropIndex] = newProp;
74082815dcSEvan Bacon    } else {
75082815dcSEvan Bacon      gradleProperties.push(newProp);
76082815dcSEvan Bacon    }
77082815dcSEvan Bacon  } else if (options !== null && options !== void 0 && options.removePropWhenValueIsNull && oldPropIndex >= 0) {
78082815dcSEvan Bacon    gradleProperties.splice(oldPropIndex, 1);
79082815dcSEvan Bacon  }
80082815dcSEvan Bacon  return gradleProperties;
81082815dcSEvan Bacon}
82082815dcSEvan Bacon//# sourceMappingURL=BuildProperties.js.map