You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
221 lines
10 KiB
221 lines
10 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.Config = void 0;
|
|
exports.areVersionsSynced = areVersionsSynced;
|
|
exports.ensureBuildGradleContainsConfigurationScript = ensureBuildGradleContainsConfigurationScript;
|
|
exports.formatApplyLineForBuildGradle = formatApplyLineForBuildGradle;
|
|
exports.isBuildGradleConfigured = isBuildGradleConfigured;
|
|
exports.isMainApplicationMetaDataSet = isMainApplicationMetaDataSet;
|
|
exports.isMainApplicationMetaDataSynced = isMainApplicationMetaDataSynced;
|
|
exports.setUpdatesConfig = setUpdatesConfig;
|
|
exports.setVersionsConfig = setVersionsConfig;
|
|
exports.withUpdates = void 0;
|
|
|
|
function _path() {
|
|
const data = _interopRequireDefault(require("path"));
|
|
|
|
_path = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _resolveFrom() {
|
|
const data = _interopRequireDefault(require("resolve-from"));
|
|
|
|
_resolveFrom = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _androidPlugins() {
|
|
const data = require("../plugins/android-plugins");
|
|
|
|
_androidPlugins = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _Updates() {
|
|
const data = require("../utils/Updates");
|
|
|
|
_Updates = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _Manifest() {
|
|
const data = require("./Manifest");
|
|
|
|
_Manifest = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
const CREATE_MANIFEST_ANDROID_PATH = 'expo-updates/scripts/create-manifest-android.gradle';
|
|
let Config;
|
|
exports.Config = Config;
|
|
|
|
(function (Config) {
|
|
Config["ENABLED"] = "expo.modules.updates.ENABLED";
|
|
Config["CHECK_ON_LAUNCH"] = "expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH";
|
|
Config["LAUNCH_WAIT_MS"] = "expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS";
|
|
Config["SDK_VERSION"] = "expo.modules.updates.EXPO_SDK_VERSION";
|
|
Config["RUNTIME_VERSION"] = "expo.modules.updates.EXPO_RUNTIME_VERSION";
|
|
Config["UPDATE_URL"] = "expo.modules.updates.EXPO_UPDATE_URL";
|
|
Config["RELEASE_CHANNEL"] = "expo.modules.updates.EXPO_RELEASE_CHANNEL";
|
|
Config["UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY"] = "expo.modules.updates.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY";
|
|
Config["CODE_SIGNING_CERTIFICATE"] = "expo.modules.updates.CODE_SIGNING_CERTIFICATE";
|
|
Config["CODE_SIGNING_METADATA"] = "expo.modules.updates.CODE_SIGNING_METADATA";
|
|
})(Config || (exports.Config = Config = {}));
|
|
|
|
const withUpdates = (config, {
|
|
expoUsername
|
|
}) => {
|
|
return (0, _androidPlugins().withAndroidManifest)(config, config => {
|
|
const projectRoot = config.modRequest.projectRoot;
|
|
const expoUpdatesPackageVersion = (0, _Updates().getExpoUpdatesPackageVersion)(projectRoot);
|
|
config.modResults = setUpdatesConfig(projectRoot, config, config.modResults, expoUsername, expoUpdatesPackageVersion);
|
|
return config;
|
|
});
|
|
};
|
|
|
|
exports.withUpdates = withUpdates;
|
|
|
|
function setUpdatesConfig(projectRoot, config, androidManifest, username, expoUpdatesPackageVersion) {
|
|
const mainApplication = (0, _Manifest().getMainApplicationOrThrow)(androidManifest);
|
|
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.ENABLED, String((0, _Updates().getUpdatesEnabled)(config)));
|
|
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.CHECK_ON_LAUNCH, (0, _Updates().getUpdatesCheckOnLaunch)(config, expoUpdatesPackageVersion));
|
|
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.LAUNCH_WAIT_MS, String((0, _Updates().getUpdatesTimeout)(config)));
|
|
const updateUrl = (0, _Updates().getUpdateUrl)(config, username);
|
|
|
|
if (updateUrl) {
|
|
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.UPDATE_URL, updateUrl);
|
|
} else {
|
|
(0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.UPDATE_URL);
|
|
}
|
|
|
|
const codeSigningCertificate = (0, _Updates().getUpdatesCodeSigningCertificate)(projectRoot, config);
|
|
|
|
if (codeSigningCertificate) {
|
|
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.CODE_SIGNING_CERTIFICATE, codeSigningCertificate);
|
|
} else {
|
|
(0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.CODE_SIGNING_CERTIFICATE);
|
|
}
|
|
|
|
const codeSigningMetadata = (0, _Updates().getUpdatesCodeSigningMetadataStringified)(config);
|
|
|
|
if (codeSigningMetadata) {
|
|
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.CODE_SIGNING_METADATA, codeSigningMetadata);
|
|
} else {
|
|
(0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.CODE_SIGNING_METADATA);
|
|
}
|
|
|
|
return setVersionsConfig(config, androidManifest);
|
|
}
|
|
|
|
function setVersionsConfig(config, androidManifest) {
|
|
const mainApplication = (0, _Manifest().getMainApplicationOrThrow)(androidManifest);
|
|
const runtimeVersion = (0, _Updates().getRuntimeVersionNullable)(config, 'android');
|
|
|
|
if (!runtimeVersion && (0, _Manifest().findMetaDataItem)(mainApplication, Config.RUNTIME_VERSION) > -1) {
|
|
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.');
|
|
}
|
|
|
|
const sdkVersion = (0, _Updates().getSDKVersion)(config);
|
|
|
|
if (runtimeVersion) {
|
|
(0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.SDK_VERSION);
|
|
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.RUNTIME_VERSION, runtimeVersion);
|
|
} else if (sdkVersion) {
|
|
/**
|
|
* runtime version maybe null in projects using classic updates. In that
|
|
* case we use SDK version
|
|
*/
|
|
(0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.RUNTIME_VERSION);
|
|
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.SDK_VERSION, sdkVersion);
|
|
} else {
|
|
(0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.RUNTIME_VERSION);
|
|
(0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.SDK_VERSION);
|
|
}
|
|
|
|
return androidManifest;
|
|
}
|
|
|
|
function ensureBuildGradleContainsConfigurationScript(projectRoot, buildGradleContents) {
|
|
if (!isBuildGradleConfigured(projectRoot, buildGradleContents)) {
|
|
let cleanedUpBuildGradleContents;
|
|
const isBuildGradleMisconfigured = buildGradleContents.split('\n').some(line => line.includes(CREATE_MANIFEST_ANDROID_PATH));
|
|
|
|
if (isBuildGradleMisconfigured) {
|
|
cleanedUpBuildGradleContents = buildGradleContents.replace(new RegExp(`(\n// Integration with Expo updates)?\n.*${CREATE_MANIFEST_ANDROID_PATH}.*\n`), '');
|
|
} else {
|
|
cleanedUpBuildGradleContents = buildGradleContents;
|
|
}
|
|
|
|
const gradleScriptApply = formatApplyLineForBuildGradle(projectRoot);
|
|
return `${cleanedUpBuildGradleContents}\n// Integration with Expo updates\n${gradleScriptApply}\n`;
|
|
} else {
|
|
return buildGradleContents;
|
|
}
|
|
}
|
|
|
|
function formatApplyLineForBuildGradle(projectRoot) {
|
|
const updatesGradleScriptPath = _resolveFrom().default.silent(projectRoot, CREATE_MANIFEST_ANDROID_PATH);
|
|
|
|
if (!updatesGradleScriptPath) {
|
|
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.");
|
|
}
|
|
|
|
const relativePath = _path().default.relative(_path().default.join(projectRoot, 'android', 'app'), updatesGradleScriptPath);
|
|
|
|
const posixPath = process.platform === 'win32' ? relativePath.replace(/\\/g, '/') : relativePath;
|
|
return `apply from: "${posixPath}"`;
|
|
}
|
|
|
|
function isBuildGradleConfigured(projectRoot, buildGradleContents) {
|
|
const androidBuildScript = formatApplyLineForBuildGradle(projectRoot);
|
|
return buildGradleContents.replace(/\r\n/g, '\n').split('\n') // Check for both single and double quotes
|
|
.some(line => line === androidBuildScript || line === androidBuildScript.replace(/"/g, "'"));
|
|
}
|
|
|
|
function isMainApplicationMetaDataSet(androidManifest) {
|
|
const updateUrl = (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.UPDATE_URL);
|
|
const runtimeVersion = (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.RUNTIME_VERSION);
|
|
const sdkVersion = (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.SDK_VERSION);
|
|
return Boolean(updateUrl && (sdkVersion || runtimeVersion));
|
|
}
|
|
|
|
function isMainApplicationMetaDataSynced(projectRoot, config, androidManifest, username) {
|
|
return (0, _Updates().getUpdateUrl)(config, username) === (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) && areVersionsSynced(config, androidManifest);
|
|
}
|
|
|
|
function areVersionsSynced(config, androidManifest) {
|
|
const expectedRuntimeVersion = (0, _Updates().getRuntimeVersionNullable)(config, 'android');
|
|
const expectedSdkVersion = (0, _Updates().getSDKVersion)(config);
|
|
const currentRuntimeVersion = (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.RUNTIME_VERSION);
|
|
const currentSdkVersion = (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.SDK_VERSION);
|
|
|
|
if (expectedRuntimeVersion !== null) {
|
|
return currentRuntimeVersion === expectedRuntimeVersion && currentSdkVersion === null;
|
|
} else if (expectedSdkVersion !== null) {
|
|
return currentSdkVersion === expectedSdkVersion && currentRuntimeVersion === null;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
//# sourceMappingURL=Updates.js.map
|