1082815dcSEvan Bacon"use strict";
2082815dcSEvan Bacon
3082815dcSEvan BaconObject.defineProperty(exports, "__esModule", {
4082815dcSEvan Bacon  value: true
5082815dcSEvan Bacon});
6082815dcSEvan Baconexports.Config = void 0;
7*f0d67e12SMateus Craveiroexports.applyRuntimeVersionFromConfigAsync = applyRuntimeVersionFromConfigAsync;
8*f0d67e12SMateus Craveiroexports.areVersionsSyncedAsync = areVersionsSyncedAsync;
9082815dcSEvan Baconexports.ensureBuildGradleContainsConfigurationScript = ensureBuildGradleContainsConfigurationScript;
10082815dcSEvan Baconexports.formatApplyLineForBuildGradle = formatApplyLineForBuildGradle;
11082815dcSEvan Baconexports.isBuildGradleConfigured = isBuildGradleConfigured;
12082815dcSEvan Baconexports.isMainApplicationMetaDataSet = isMainApplicationMetaDataSet;
13*f0d67e12SMateus Craveiroexports.isMainApplicationMetaDataSyncedAsync = isMainApplicationMetaDataSyncedAsync;
14*f0d67e12SMateus Craveiroexports.setUpdatesConfigAsync = setUpdatesConfigAsync;
15*f0d67e12SMateus Craveiroexports.setVersionsConfigAsync = setVersionsConfigAsync;
16082815dcSEvan Baconexports.withUpdates = void 0;
17082815dcSEvan Baconfunction _path() {
18082815dcSEvan Bacon  const data = _interopRequireDefault(require("path"));
19082815dcSEvan Bacon  _path = function () {
20082815dcSEvan Bacon    return data;
21082815dcSEvan Bacon  };
22082815dcSEvan Bacon  return data;
23082815dcSEvan Bacon}
24082815dcSEvan Baconfunction _resolveFrom() {
25082815dcSEvan Bacon  const data = _interopRequireDefault(require("resolve-from"));
26082815dcSEvan Bacon  _resolveFrom = function () {
27082815dcSEvan Bacon    return data;
28082815dcSEvan Bacon  };
29082815dcSEvan Bacon  return data;
30082815dcSEvan Bacon}
31082815dcSEvan Baconfunction _Manifest() {
32082815dcSEvan Bacon  const data = require("./Manifest");
33082815dcSEvan Bacon  _Manifest = function () {
34082815dcSEvan Bacon    return data;
35082815dcSEvan Bacon  };
36082815dcSEvan Bacon  return data;
37082815dcSEvan Bacon}
38166385e2SDouglas Lowderfunction _Resources() {
39166385e2SDouglas Lowder  const data = require("./Resources");
40166385e2SDouglas Lowder  _Resources = function () {
41166385e2SDouglas Lowder    return data;
42166385e2SDouglas Lowder  };
43166385e2SDouglas Lowder  return data;
44166385e2SDouglas Lowder}
45166385e2SDouglas Lowderfunction _Strings() {
46166385e2SDouglas Lowder  const data = require("./Strings");
47166385e2SDouglas Lowder  _Strings = function () {
48166385e2SDouglas Lowder    return data;
49166385e2SDouglas Lowder  };
50166385e2SDouglas Lowder  return data;
51166385e2SDouglas Lowder}
528a424bebSJames Idefunction _androidPlugins() {
538a424bebSJames Ide  const data = require("../plugins/android-plugins");
548a424bebSJames Ide  _androidPlugins = function () {
558a424bebSJames Ide    return data;
568a424bebSJames Ide  };
578a424bebSJames Ide  return data;
588a424bebSJames Ide}
598a424bebSJames Idefunction _withPlugins() {
608a424bebSJames Ide  const data = require("../plugins/withPlugins");
618a424bebSJames Ide  _withPlugins = function () {
628a424bebSJames Ide    return data;
638a424bebSJames Ide  };
648a424bebSJames Ide  return data;
658a424bebSJames Ide}
668a424bebSJames Idefunction _Updates() {
678a424bebSJames Ide  const data = require("../utils/Updates");
688a424bebSJames Ide  _Updates = function () {
698a424bebSJames Ide    return data;
708a424bebSJames Ide  };
718a424bebSJames Ide  return data;
728a424bebSJames Ide}
73082815dcSEvan Baconfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
74082815dcSEvan Baconconst CREATE_MANIFEST_ANDROID_PATH = 'expo-updates/scripts/create-manifest-android.gradle';
75ae9cd511SWill Schurmanlet Config; // when making changes to this config plugin, ensure the same changes are also made in eas-cli and build-tools
768010f0caSEvan Bacon// Also ensure the docs are up-to-date: https://docs.expo.dev/bare/installing-updates/
77082815dcSEvan Baconexports.Config = Config;
78082815dcSEvan Bacon(function (Config) {
79082815dcSEvan Bacon  Config["ENABLED"] = "expo.modules.updates.ENABLED";
80082815dcSEvan Bacon  Config["CHECK_ON_LAUNCH"] = "expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH";
81082815dcSEvan Bacon  Config["LAUNCH_WAIT_MS"] = "expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS";
82082815dcSEvan Bacon  Config["SDK_VERSION"] = "expo.modules.updates.EXPO_SDK_VERSION";
83082815dcSEvan Bacon  Config["RUNTIME_VERSION"] = "expo.modules.updates.EXPO_RUNTIME_VERSION";
84082815dcSEvan Bacon  Config["UPDATE_URL"] = "expo.modules.updates.EXPO_UPDATE_URL";
85082815dcSEvan Bacon  Config["RELEASE_CHANNEL"] = "expo.modules.updates.EXPO_RELEASE_CHANNEL";
86082815dcSEvan Bacon  Config["UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY"] = "expo.modules.updates.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY";
87082815dcSEvan Bacon  Config["CODE_SIGNING_CERTIFICATE"] = "expo.modules.updates.CODE_SIGNING_CERTIFICATE";
88082815dcSEvan Bacon  Config["CODE_SIGNING_METADATA"] = "expo.modules.updates.CODE_SIGNING_METADATA";
89082815dcSEvan Bacon})(Config || (exports.Config = Config = {}));
9082ade864SWill Schurmanconst withUpdates = config => {
9182ade864SWill Schurman  return (0, _withPlugins().withPlugins)(config, [withUpdatesManifest, withRuntimeVersionResource]);
92166385e2SDouglas Lowder};
93166385e2SDouglas Lowderexports.withUpdates = withUpdates;
9482ade864SWill Schurmanconst withUpdatesManifest = config => {
95*f0d67e12SMateus Craveiro  return (0, _androidPlugins().withAndroidManifest)(config, async config => {
96082815dcSEvan Bacon    const projectRoot = config.modRequest.projectRoot;
97082815dcSEvan Bacon    const expoUpdatesPackageVersion = (0, _Updates().getExpoUpdatesPackageVersion)(projectRoot);
98*f0d67e12SMateus Craveiro    config.modResults = await setUpdatesConfigAsync(projectRoot, config, config.modResults, expoUpdatesPackageVersion);
99082815dcSEvan Bacon    return config;
100082815dcSEvan Bacon  });
101082815dcSEvan Bacon};
102*f0d67e12SMateus Craveiroconst withRuntimeVersionResource = (0, _androidPlugins().createStringsXmlPlugin)(applyRuntimeVersionFromConfigAsync, 'withRuntimeVersionResource');
103*f0d67e12SMateus Craveiroasync function applyRuntimeVersionFromConfigAsync(config, stringsJSON) {
104*f0d67e12SMateus Craveiro  const projectRoot = config.modRequest.projectRoot;
105*f0d67e12SMateus Craveiro  const runtimeVersion = await (0, _Updates().getRuntimeVersionNullableAsync)(projectRoot, config, 'android');
106166385e2SDouglas Lowder  if (runtimeVersion) {
107166385e2SDouglas Lowder    return (0, _Strings().setStringItem)([(0, _Resources().buildResourceItem)({
108166385e2SDouglas Lowder      name: 'expo_runtime_version',
109166385e2SDouglas Lowder      value: runtimeVersion
110166385e2SDouglas Lowder    })], stringsJSON);
111166385e2SDouglas Lowder  }
112166385e2SDouglas Lowder  return (0, _Strings().removeStringItem)('expo_runtime_version', stringsJSON);
113166385e2SDouglas Lowder}
114*f0d67e12SMateus Craveiroasync function setUpdatesConfigAsync(projectRoot, config, androidManifest, expoUpdatesPackageVersion) {
115082815dcSEvan Bacon  const mainApplication = (0, _Manifest().getMainApplicationOrThrow)(androidManifest);
11682ade864SWill Schurman  (0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.ENABLED, String((0, _Updates().getUpdatesEnabled)(config)));
117082815dcSEvan Bacon  (0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.CHECK_ON_LAUNCH, (0, _Updates().getUpdatesCheckOnLaunch)(config, expoUpdatesPackageVersion));
118082815dcSEvan Bacon  (0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.LAUNCH_WAIT_MS, String((0, _Updates().getUpdatesTimeout)(config)));
11982ade864SWill Schurman  const updateUrl = (0, _Updates().getUpdateUrl)(config);
120082815dcSEvan Bacon  if (updateUrl) {
121082815dcSEvan Bacon    (0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.UPDATE_URL, updateUrl);
122082815dcSEvan Bacon  } else {
123082815dcSEvan Bacon    (0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.UPDATE_URL);
124082815dcSEvan Bacon  }
125082815dcSEvan Bacon  const codeSigningCertificate = (0, _Updates().getUpdatesCodeSigningCertificate)(projectRoot, config);
126082815dcSEvan Bacon  if (codeSigningCertificate) {
127082815dcSEvan Bacon    (0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.CODE_SIGNING_CERTIFICATE, codeSigningCertificate);
128082815dcSEvan Bacon  } else {
129082815dcSEvan Bacon    (0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.CODE_SIGNING_CERTIFICATE);
130082815dcSEvan Bacon  }
131082815dcSEvan Bacon  const codeSigningMetadata = (0, _Updates().getUpdatesCodeSigningMetadataStringified)(config);
132082815dcSEvan Bacon  if (codeSigningMetadata) {
133082815dcSEvan Bacon    (0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.CODE_SIGNING_METADATA, codeSigningMetadata);
134082815dcSEvan Bacon  } else {
135082815dcSEvan Bacon    (0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.CODE_SIGNING_METADATA);
136082815dcSEvan Bacon  }
13709bd1012SUmberto Ghio  const requestHeaders = (0, _Updates().getUpdatesRequestHeadersStringified)(config);
13809bd1012SUmberto Ghio  if (requestHeaders) {
13909bd1012SUmberto Ghio    (0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY, requestHeaders);
14009bd1012SUmberto Ghio  } else {
14109bd1012SUmberto Ghio    (0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY);
14209bd1012SUmberto Ghio  }
143*f0d67e12SMateus Craveiro  return await setVersionsConfigAsync(projectRoot, config, androidManifest);
144082815dcSEvan Bacon}
145*f0d67e12SMateus Craveiroasync function setVersionsConfigAsync(projectRoot, config, androidManifest) {
146082815dcSEvan Bacon  const mainApplication = (0, _Manifest().getMainApplicationOrThrow)(androidManifest);
147*f0d67e12SMateus Craveiro  const runtimeVersion = await (0, _Updates().getRuntimeVersionNullableAsync)(projectRoot, config, 'android');
148082815dcSEvan Bacon  if (!runtimeVersion && (0, _Manifest().findMetaDataItem)(mainApplication, Config.RUNTIME_VERSION) > -1) {
149082815dcSEvan Bacon    throw new Error('A runtime version is set in your AndroidManifest.xml, but is missing from your app.json/app.config.js. Please either set runtimeVersion in your app.json/app.config.js or remove expo.modules.updates.EXPO_RUNTIME_VERSION from your AndroidManifest.xml.');
150082815dcSEvan Bacon  }
151082815dcSEvan Bacon  const sdkVersion = (0, _Updates().getSDKVersion)(config);
152082815dcSEvan Bacon  if (runtimeVersion) {
153082815dcSEvan Bacon    (0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.SDK_VERSION);
154166385e2SDouglas Lowder    (0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.RUNTIME_VERSION, '@string/expo_runtime_version');
155082815dcSEvan Bacon  } else if (sdkVersion) {
156082815dcSEvan Bacon    /**
157082815dcSEvan Bacon     * runtime version maybe null in projects using classic updates. In that
158082815dcSEvan Bacon     * case we use SDK version
159082815dcSEvan Bacon     */
160082815dcSEvan Bacon    (0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.RUNTIME_VERSION);
161082815dcSEvan Bacon    (0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.SDK_VERSION, sdkVersion);
162082815dcSEvan Bacon  } else {
163082815dcSEvan Bacon    (0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.RUNTIME_VERSION);
164082815dcSEvan Bacon    (0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.SDK_VERSION);
165082815dcSEvan Bacon  }
166082815dcSEvan Bacon  return androidManifest;
167082815dcSEvan Bacon}
168082815dcSEvan Baconfunction ensureBuildGradleContainsConfigurationScript(projectRoot, buildGradleContents) {
169082815dcSEvan Bacon  if (!isBuildGradleConfigured(projectRoot, buildGradleContents)) {
170082815dcSEvan Bacon    let cleanedUpBuildGradleContents;
171082815dcSEvan Bacon    const isBuildGradleMisconfigured = buildGradleContents.split('\n').some(line => line.includes(CREATE_MANIFEST_ANDROID_PATH));
172082815dcSEvan Bacon    if (isBuildGradleMisconfigured) {
173082815dcSEvan Bacon      cleanedUpBuildGradleContents = buildGradleContents.replace(new RegExp(`(\n// Integration with Expo updates)?\n.*${CREATE_MANIFEST_ANDROID_PATH}.*\n`), '');
174082815dcSEvan Bacon    } else {
175082815dcSEvan Bacon      cleanedUpBuildGradleContents = buildGradleContents;
176082815dcSEvan Bacon    }
177082815dcSEvan Bacon    const gradleScriptApply = formatApplyLineForBuildGradle(projectRoot);
178082815dcSEvan Bacon    return `${cleanedUpBuildGradleContents}\n// Integration with Expo updates\n${gradleScriptApply}\n`;
179082815dcSEvan Bacon  } else {
180082815dcSEvan Bacon    return buildGradleContents;
181082815dcSEvan Bacon  }
182082815dcSEvan Bacon}
183082815dcSEvan Baconfunction formatApplyLineForBuildGradle(projectRoot) {
184082815dcSEvan Bacon  const updatesGradleScriptPath = _resolveFrom().default.silent(projectRoot, CREATE_MANIFEST_ANDROID_PATH);
185082815dcSEvan Bacon  if (!updatesGradleScriptPath) {
186082815dcSEvan Bacon    throw new Error("Could not find the build script for Android. This could happen in case of outdated 'node_modules'. Run 'npm install' to make sure that it's up-to-date.");
187082815dcSEvan Bacon  }
188082815dcSEvan Bacon  const relativePath = _path().default.relative(_path().default.join(projectRoot, 'android', 'app'), updatesGradleScriptPath);
189082815dcSEvan Bacon  const posixPath = process.platform === 'win32' ? relativePath.replace(/\\/g, '/') : relativePath;
190082815dcSEvan Bacon  return `apply from: "${posixPath}"`;
191082815dcSEvan Bacon}
192082815dcSEvan Baconfunction isBuildGradleConfigured(projectRoot, buildGradleContents) {
193082815dcSEvan Bacon  const androidBuildScript = formatApplyLineForBuildGradle(projectRoot);
194ee216927STomasz Sapeta  return buildGradleContents.replace(/\r\n/g, '\n').split('\n')
195ee216927STomasz Sapeta  // Check for both single and double quotes
196082815dcSEvan Bacon  .some(line => line === androidBuildScript || line === androidBuildScript.replace(/"/g, "'"));
197082815dcSEvan Bacon}
198082815dcSEvan Baconfunction isMainApplicationMetaDataSet(androidManifest) {
199082815dcSEvan Bacon  const updateUrl = (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.UPDATE_URL);
200082815dcSEvan Bacon  const runtimeVersion = (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.RUNTIME_VERSION);
201082815dcSEvan Bacon  const sdkVersion = (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.SDK_VERSION);
202082815dcSEvan Bacon  return Boolean(updateUrl && (sdkVersion || runtimeVersion));
203082815dcSEvan Bacon}
204*f0d67e12SMateus Craveiroasync function isMainApplicationMetaDataSyncedAsync(projectRoot, config, androidManifest) {
205*f0d67e12SMateus Craveiro  return (0, _Updates().getUpdateUrl)(config) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.UPDATE_URL) && String((0, _Updates().getUpdatesEnabled)(config)) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.ENABLED) && String((0, _Updates().getUpdatesTimeout)(config)) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.LAUNCH_WAIT_MS) && (0, _Updates().getUpdatesCheckOnLaunch)(config) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.CHECK_ON_LAUNCH) && (0, _Updates().getUpdatesCodeSigningCertificate)(projectRoot, config) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.CODE_SIGNING_CERTIFICATE) && (0, _Updates().getUpdatesCodeSigningMetadataStringified)(config) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.CODE_SIGNING_METADATA) && (await areVersionsSyncedAsync(projectRoot, config, androidManifest));
206082815dcSEvan Bacon}
207*f0d67e12SMateus Craveiroasync function areVersionsSyncedAsync(projectRoot, config, androidManifest) {
208*f0d67e12SMateus Craveiro  const expectedRuntimeVersion = await (0, _Updates().getRuntimeVersionNullableAsync)(projectRoot, config, 'android');
209082815dcSEvan Bacon  const expectedSdkVersion = (0, _Updates().getSDKVersion)(config);
210082815dcSEvan Bacon  const currentRuntimeVersion = (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.RUNTIME_VERSION);
211082815dcSEvan Bacon  const currentSdkVersion = (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.SDK_VERSION);
212082815dcSEvan Bacon  if (expectedRuntimeVersion !== null) {
213082815dcSEvan Bacon    return currentRuntimeVersion === expectedRuntimeVersion && currentSdkVersion === null;
214082815dcSEvan Bacon  } else if (expectedSdkVersion !== null) {
215082815dcSEvan Bacon    return currentSdkVersion === expectedSdkVersion && currentRuntimeVersion === null;
216082815dcSEvan Bacon  } else {
217082815dcSEvan Bacon    return true;
218082815dcSEvan Bacon  }
219082815dcSEvan Bacon}
220082815dcSEvan Bacon//# sourceMappingURL=Updates.js.map