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