@expo/config-plugins 4.0.14 → 4.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/android/Updates.js
CHANGED
|
@@ -159,6 +159,11 @@ function setUpdatesConfig(config, androidManifest, username, expoUpdatesPackageV
|
|
|
159
159
|
function setVersionsConfig(config, androidManifest) {
|
|
160
160
|
const mainApplication = (0, _Manifest().getMainApplicationOrThrow)(androidManifest);
|
|
161
161
|
const runtimeVersion = (0, _Updates().getRuntimeVersionNullable)(config, 'android');
|
|
162
|
+
|
|
163
|
+
if (!runtimeVersion && (0, _Manifest().findMetaDataItem)(mainApplication, Config.RUNTIME_VERSION) > -1) {
|
|
164
|
+
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.');
|
|
165
|
+
}
|
|
166
|
+
|
|
162
167
|
const sdkVersion = getSDKVersion(config);
|
|
163
168
|
|
|
164
169
|
if (runtimeVersion) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/android/Updates.ts"],"names":["CREATE_MANIFEST_ANDROID_PATH","Config","withUpdates","config","expoUsername","expoUpdatesPackageVersion","modRequest","projectRoot","modResults","setUpdatesConfig","getSDKVersion","sdkVersion","getUpdatesEnabled","updates","enabled","getUpdatesTimeout","fallbackToCacheTimeout","getUpdatesCheckOnLaunch","checkAutomatically","semver","gte","androidManifest","username","mainApplication","ENABLED","String","CHECK_ON_LAUNCH","LAUNCH_WAIT_MS","updateUrl","UPDATE_URL","setVersionsConfig","runtimeVersion","SDK_VERSION","RUNTIME_VERSION","ensureBuildGradleContainsConfigurationScript","buildGradleContents","isBuildGradleConfigured","cleanedUpBuildGradleContents","isBuildGradleMisconfigured","split","some","line","includes","replace","RegExp","gradleScriptApply","formatApplyLineForBuildGradle","updatesGradleScriptPath","resolveFrom","silent","Error","relativePath","path","relative","join","posixPath","process","platform","androidBuildScript","isMainApplicationMetaDataSet","Boolean","isMainApplicationMetaDataSynced","areVersionsSynced","expectedRuntimeVersion","expectedSdkVersion","currentRuntimeVersion","currentSdkVersion"],"mappings":"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","sourcesContent":["import path from 'path';\nimport resolveFrom from 'resolve-from';\nimport semver from 'semver';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAndroidManifest } from '../plugins/android-plugins';\nimport {\n ExpoConfigUpdates,\n getExpoUpdatesPackageVersion,\n getRuntimeVersionNullable,\n getUpdateUrl,\n} from '../utils/Updates';\nimport {\n addMetaDataItemToMainApplication,\n AndroidManifest,\n getMainApplicationMetaDataValue,\n getMainApplicationOrThrow,\n removeMetaDataItemFromMainApplication,\n} from './Manifest';\n\nconst CREATE_MANIFEST_ANDROID_PATH = 'expo-updates/scripts/create-manifest-android.gradle';\n\nexport enum Config {\n ENABLED = 'expo.modules.updates.ENABLED',\n CHECK_ON_LAUNCH = 'expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH',\n LAUNCH_WAIT_MS = 'expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS',\n SDK_VERSION = 'expo.modules.updates.EXPO_SDK_VERSION',\n RUNTIME_VERSION = 'expo.modules.updates.EXPO_RUNTIME_VERSION',\n UPDATE_URL = 'expo.modules.updates.EXPO_UPDATE_URL',\n RELEASE_CHANNEL = 'expo.modules.updates.EXPO_RELEASE_CHANNEL',\n UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY = 'expo.modules.updates.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY',\n}\n\nexport const withUpdates: ConfigPlugin<{ expoUsername: string | null }> = (\n config,\n { expoUsername }\n) => {\n return withAndroidManifest(config, config => {\n const expoUpdatesPackageVersion = getExpoUpdatesPackageVersion(config.modRequest.projectRoot);\n config.modResults = setUpdatesConfig(\n config,\n config.modResults,\n expoUsername,\n expoUpdatesPackageVersion\n );\n return config;\n });\n};\n\nexport function getSDKVersion(config: Pick<ExpoConfigUpdates, 'sdkVersion'>): string | null {\n return typeof config.sdkVersion === 'string' ? config.sdkVersion : null;\n}\n\nexport function getUpdatesEnabled(config: Pick<ExpoConfigUpdates, 'updates'>): boolean {\n return config.updates?.enabled !== false;\n}\n\nexport function getUpdatesTimeout(config: Pick<ExpoConfigUpdates, 'updates'>): number {\n return config.updates?.fallbackToCacheTimeout ?? 0;\n}\n\nexport function getUpdatesCheckOnLaunch(\n config: Pick<ExpoConfigUpdates, 'updates'>,\n expoUpdatesPackageVersion?: string | null\n): 'NEVER' | 'ERROR_RECOVERY_ONLY' | 'ALWAYS' {\n if (config.updates?.checkAutomatically === 'ON_ERROR_RECOVERY') {\n // native 'ERROR_RECOVERY_ONLY' option was only introduced in 0.11.x\n if (expoUpdatesPackageVersion && semver.gte(expoUpdatesPackageVersion, '0.11.0')) {\n return 'ERROR_RECOVERY_ONLY';\n }\n return 'NEVER';\n } else if (config.updates?.checkAutomatically === 'ON_LOAD') {\n return 'ALWAYS';\n }\n return 'ALWAYS';\n}\n\nexport function setUpdatesConfig(\n config: ExpoConfigUpdates,\n androidManifest: AndroidManifest,\n username: string | null,\n expoUpdatesPackageVersion?: string | null\n): AndroidManifest {\n const mainApplication = getMainApplicationOrThrow(androidManifest);\n\n addMetaDataItemToMainApplication(\n mainApplication,\n Config.ENABLED,\n String(getUpdatesEnabled(config))\n );\n addMetaDataItemToMainApplication(\n mainApplication,\n Config.CHECK_ON_LAUNCH,\n getUpdatesCheckOnLaunch(config, expoUpdatesPackageVersion)\n );\n addMetaDataItemToMainApplication(\n mainApplication,\n Config.LAUNCH_WAIT_MS,\n String(getUpdatesTimeout(config))\n );\n\n const updateUrl = getUpdateUrl(config, username);\n if (updateUrl) {\n addMetaDataItemToMainApplication(mainApplication, Config.UPDATE_URL, updateUrl);\n } else {\n removeMetaDataItemFromMainApplication(mainApplication, Config.UPDATE_URL);\n }\n\n return setVersionsConfig(config, androidManifest);\n}\n\nexport function setVersionsConfig(\n config: Pick<ExpoConfigUpdates, 'sdkVersion' | 'runtimeVersion'>,\n androidManifest: AndroidManifest\n): AndroidManifest {\n const mainApplication = getMainApplicationOrThrow(androidManifest);\n\n const runtimeVersion = getRuntimeVersionNullable(config, 'android');\n const sdkVersion = getSDKVersion(config);\n if (runtimeVersion) {\n removeMetaDataItemFromMainApplication(mainApplication, Config.SDK_VERSION);\n addMetaDataItemToMainApplication(mainApplication, Config.RUNTIME_VERSION, runtimeVersion);\n } else if (sdkVersion) {\n /**\n * runtime version maybe null in projects using classic updates. In that\n * case we use SDK version\n */\n removeMetaDataItemFromMainApplication(mainApplication, Config.RUNTIME_VERSION);\n addMetaDataItemToMainApplication(mainApplication, Config.SDK_VERSION, sdkVersion);\n } else {\n removeMetaDataItemFromMainApplication(mainApplication, Config.RUNTIME_VERSION);\n removeMetaDataItemFromMainApplication(mainApplication, Config.SDK_VERSION);\n }\n\n return androidManifest;\n}\nexport function ensureBuildGradleContainsConfigurationScript(\n projectRoot: string,\n buildGradleContents: string\n): string {\n if (!isBuildGradleConfigured(projectRoot, buildGradleContents)) {\n let cleanedUpBuildGradleContents;\n\n const isBuildGradleMisconfigured = buildGradleContents\n .split('\\n')\n .some(line => line.includes(CREATE_MANIFEST_ANDROID_PATH));\n if (isBuildGradleMisconfigured) {\n cleanedUpBuildGradleContents = buildGradleContents.replace(\n new RegExp(`(\\n// Integration with Expo updates)?\\n.*${CREATE_MANIFEST_ANDROID_PATH}.*\\n`),\n ''\n );\n } else {\n cleanedUpBuildGradleContents = buildGradleContents;\n }\n\n const gradleScriptApply = formatApplyLineForBuildGradle(projectRoot);\n return `${cleanedUpBuildGradleContents}\\n// Integration with Expo updates\\n${gradleScriptApply}\\n`;\n } else {\n return buildGradleContents;\n }\n}\n\nexport function formatApplyLineForBuildGradle(projectRoot: string): string {\n const updatesGradleScriptPath = resolveFrom.silent(projectRoot, CREATE_MANIFEST_ANDROID_PATH);\n\n if (!updatesGradleScriptPath) {\n throw new Error(\n \"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.\"\n );\n }\n\n const relativePath = path.relative(\n path.join(projectRoot, 'android', 'app'),\n updatesGradleScriptPath\n );\n const posixPath = process.platform === 'win32' ? relativePath.replace(/\\\\/g, '/') : relativePath;\n\n return `apply from: \"${posixPath}\"`;\n}\n\nexport function isBuildGradleConfigured(projectRoot: string, buildGradleContents: string): boolean {\n const androidBuildScript = formatApplyLineForBuildGradle(projectRoot);\n\n return (\n buildGradleContents\n .replace(/\\r\\n/g, '\\n')\n .split('\\n')\n // Check for both single and double quotes\n .some(line => line === androidBuildScript || line === androidBuildScript.replace(/\"/g, \"'\"))\n );\n}\n\nexport function isMainApplicationMetaDataSet(androidManifest: AndroidManifest): boolean {\n const updateUrl = getMainApplicationMetaDataValue(androidManifest, Config.UPDATE_URL);\n const runtimeVersion = getMainApplicationMetaDataValue(androidManifest, Config.RUNTIME_VERSION);\n const sdkVersion = getMainApplicationMetaDataValue(androidManifest, Config.SDK_VERSION);\n\n return Boolean(updateUrl && (sdkVersion || runtimeVersion));\n}\n\nexport function isMainApplicationMetaDataSynced(\n config: ExpoConfigUpdates,\n androidManifest: AndroidManifest,\n username: string | null\n): boolean {\n return (\n getUpdateUrl(config, username) ===\n getMainApplicationMetaDataValue(androidManifest, Config.UPDATE_URL) &&\n String(getUpdatesEnabled(config)) ===\n getMainApplicationMetaDataValue(androidManifest, Config.ENABLED) &&\n String(getUpdatesTimeout(config)) ===\n getMainApplicationMetaDataValue(androidManifest, Config.LAUNCH_WAIT_MS) &&\n getUpdatesCheckOnLaunch(config) ===\n getMainApplicationMetaDataValue(androidManifest, Config.CHECK_ON_LAUNCH) &&\n areVersionsSynced(config, androidManifest)\n );\n}\n\nexport function areVersionsSynced(\n config: Pick<ExpoConfigUpdates, 'runtimeVersion' | 'sdkVersion'>,\n androidManifest: AndroidManifest\n): boolean {\n const expectedRuntimeVersion = getRuntimeVersionNullable(config, 'android');\n const expectedSdkVersion = getSDKVersion(config);\n\n const currentRuntimeVersion = getMainApplicationMetaDataValue(\n androidManifest,\n Config.RUNTIME_VERSION\n );\n const currentSdkVersion = getMainApplicationMetaDataValue(androidManifest, Config.SDK_VERSION);\n\n if (expectedRuntimeVersion !== null) {\n return currentRuntimeVersion === expectedRuntimeVersion && currentSdkVersion === null;\n } else if (expectedSdkVersion !== null) {\n return currentSdkVersion === expectedSdkVersion && currentRuntimeVersion === null;\n } else {\n return true;\n }\n}\n"],"file":"Updates.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/android/Updates.ts"],"names":["CREATE_MANIFEST_ANDROID_PATH","Config","withUpdates","config","expoUsername","expoUpdatesPackageVersion","modRequest","projectRoot","modResults","setUpdatesConfig","getSDKVersion","sdkVersion","getUpdatesEnabled","updates","enabled","getUpdatesTimeout","fallbackToCacheTimeout","getUpdatesCheckOnLaunch","checkAutomatically","semver","gte","androidManifest","username","mainApplication","ENABLED","String","CHECK_ON_LAUNCH","LAUNCH_WAIT_MS","updateUrl","UPDATE_URL","setVersionsConfig","runtimeVersion","RUNTIME_VERSION","Error","SDK_VERSION","ensureBuildGradleContainsConfigurationScript","buildGradleContents","isBuildGradleConfigured","cleanedUpBuildGradleContents","isBuildGradleMisconfigured","split","some","line","includes","replace","RegExp","gradleScriptApply","formatApplyLineForBuildGradle","updatesGradleScriptPath","resolveFrom","silent","relativePath","path","relative","join","posixPath","process","platform","androidBuildScript","isMainApplicationMetaDataSet","Boolean","isMainApplicationMetaDataSynced","areVersionsSynced","expectedRuntimeVersion","expectedSdkVersion","currentRuntimeVersion","currentSdkVersion"],"mappings":"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","sourcesContent":["import path from 'path';\nimport resolveFrom from 'resolve-from';\nimport semver from 'semver';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAndroidManifest } from '../plugins/android-plugins';\nimport {\n ExpoConfigUpdates,\n getExpoUpdatesPackageVersion,\n getRuntimeVersionNullable,\n getUpdateUrl,\n} from '../utils/Updates';\nimport {\n addMetaDataItemToMainApplication,\n AndroidManifest,\n findMetaDataItem,\n getMainApplicationMetaDataValue,\n getMainApplicationOrThrow,\n removeMetaDataItemFromMainApplication,\n} from './Manifest';\n\nconst CREATE_MANIFEST_ANDROID_PATH = 'expo-updates/scripts/create-manifest-android.gradle';\n\nexport enum Config {\n ENABLED = 'expo.modules.updates.ENABLED',\n CHECK_ON_LAUNCH = 'expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH',\n LAUNCH_WAIT_MS = 'expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS',\n SDK_VERSION = 'expo.modules.updates.EXPO_SDK_VERSION',\n RUNTIME_VERSION = 'expo.modules.updates.EXPO_RUNTIME_VERSION',\n UPDATE_URL = 'expo.modules.updates.EXPO_UPDATE_URL',\n RELEASE_CHANNEL = 'expo.modules.updates.EXPO_RELEASE_CHANNEL',\n UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY = 'expo.modules.updates.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY',\n}\n\nexport const withUpdates: ConfigPlugin<{ expoUsername: string | null }> = (\n config,\n { expoUsername }\n) => {\n return withAndroidManifest(config, config => {\n const expoUpdatesPackageVersion = getExpoUpdatesPackageVersion(config.modRequest.projectRoot);\n config.modResults = setUpdatesConfig(\n config,\n config.modResults,\n expoUsername,\n expoUpdatesPackageVersion\n );\n return config;\n });\n};\n\nexport function getSDKVersion(config: Pick<ExpoConfigUpdates, 'sdkVersion'>): string | null {\n return typeof config.sdkVersion === 'string' ? config.sdkVersion : null;\n}\n\nexport function getUpdatesEnabled(config: Pick<ExpoConfigUpdates, 'updates'>): boolean {\n return config.updates?.enabled !== false;\n}\n\nexport function getUpdatesTimeout(config: Pick<ExpoConfigUpdates, 'updates'>): number {\n return config.updates?.fallbackToCacheTimeout ?? 0;\n}\n\nexport function getUpdatesCheckOnLaunch(\n config: Pick<ExpoConfigUpdates, 'updates'>,\n expoUpdatesPackageVersion?: string | null\n): 'NEVER' | 'ERROR_RECOVERY_ONLY' | 'ALWAYS' {\n if (config.updates?.checkAutomatically === 'ON_ERROR_RECOVERY') {\n // native 'ERROR_RECOVERY_ONLY' option was only introduced in 0.11.x\n if (expoUpdatesPackageVersion && semver.gte(expoUpdatesPackageVersion, '0.11.0')) {\n return 'ERROR_RECOVERY_ONLY';\n }\n return 'NEVER';\n } else if (config.updates?.checkAutomatically === 'ON_LOAD') {\n return 'ALWAYS';\n }\n return 'ALWAYS';\n}\n\nexport function setUpdatesConfig(\n config: ExpoConfigUpdates,\n androidManifest: AndroidManifest,\n username: string | null,\n expoUpdatesPackageVersion?: string | null\n): AndroidManifest {\n const mainApplication = getMainApplicationOrThrow(androidManifest);\n\n addMetaDataItemToMainApplication(\n mainApplication,\n Config.ENABLED,\n String(getUpdatesEnabled(config))\n );\n addMetaDataItemToMainApplication(\n mainApplication,\n Config.CHECK_ON_LAUNCH,\n getUpdatesCheckOnLaunch(config, expoUpdatesPackageVersion)\n );\n addMetaDataItemToMainApplication(\n mainApplication,\n Config.LAUNCH_WAIT_MS,\n String(getUpdatesTimeout(config))\n );\n\n const updateUrl = getUpdateUrl(config, username);\n if (updateUrl) {\n addMetaDataItemToMainApplication(mainApplication, Config.UPDATE_URL, updateUrl);\n } else {\n removeMetaDataItemFromMainApplication(mainApplication, Config.UPDATE_URL);\n }\n\n return setVersionsConfig(config, androidManifest);\n}\n\nexport function setVersionsConfig(\n config: Pick<ExpoConfigUpdates, 'sdkVersion' | 'runtimeVersion'>,\n androidManifest: AndroidManifest\n): AndroidManifest {\n const mainApplication = getMainApplicationOrThrow(androidManifest);\n\n const runtimeVersion = getRuntimeVersionNullable(config, 'android');\n if (!runtimeVersion && findMetaDataItem(mainApplication, Config.RUNTIME_VERSION) > -1) {\n throw new Error(\n '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.'\n );\n }\n const sdkVersion = getSDKVersion(config);\n if (runtimeVersion) {\n removeMetaDataItemFromMainApplication(mainApplication, Config.SDK_VERSION);\n addMetaDataItemToMainApplication(mainApplication, Config.RUNTIME_VERSION, runtimeVersion);\n } else if (sdkVersion) {\n /**\n * runtime version maybe null in projects using classic updates. In that\n * case we use SDK version\n */\n removeMetaDataItemFromMainApplication(mainApplication, Config.RUNTIME_VERSION);\n addMetaDataItemToMainApplication(mainApplication, Config.SDK_VERSION, sdkVersion);\n } else {\n removeMetaDataItemFromMainApplication(mainApplication, Config.RUNTIME_VERSION);\n removeMetaDataItemFromMainApplication(mainApplication, Config.SDK_VERSION);\n }\n\n return androidManifest;\n}\nexport function ensureBuildGradleContainsConfigurationScript(\n projectRoot: string,\n buildGradleContents: string\n): string {\n if (!isBuildGradleConfigured(projectRoot, buildGradleContents)) {\n let cleanedUpBuildGradleContents;\n\n const isBuildGradleMisconfigured = buildGradleContents\n .split('\\n')\n .some(line => line.includes(CREATE_MANIFEST_ANDROID_PATH));\n if (isBuildGradleMisconfigured) {\n cleanedUpBuildGradleContents = buildGradleContents.replace(\n new RegExp(`(\\n// Integration with Expo updates)?\\n.*${CREATE_MANIFEST_ANDROID_PATH}.*\\n`),\n ''\n );\n } else {\n cleanedUpBuildGradleContents = buildGradleContents;\n }\n\n const gradleScriptApply = formatApplyLineForBuildGradle(projectRoot);\n return `${cleanedUpBuildGradleContents}\\n// Integration with Expo updates\\n${gradleScriptApply}\\n`;\n } else {\n return buildGradleContents;\n }\n}\n\nexport function formatApplyLineForBuildGradle(projectRoot: string): string {\n const updatesGradleScriptPath = resolveFrom.silent(projectRoot, CREATE_MANIFEST_ANDROID_PATH);\n\n if (!updatesGradleScriptPath) {\n throw new Error(\n \"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.\"\n );\n }\n\n const relativePath = path.relative(\n path.join(projectRoot, 'android', 'app'),\n updatesGradleScriptPath\n );\n const posixPath = process.platform === 'win32' ? relativePath.replace(/\\\\/g, '/') : relativePath;\n\n return `apply from: \"${posixPath}\"`;\n}\n\nexport function isBuildGradleConfigured(projectRoot: string, buildGradleContents: string): boolean {\n const androidBuildScript = formatApplyLineForBuildGradle(projectRoot);\n\n return (\n buildGradleContents\n .replace(/\\r\\n/g, '\\n')\n .split('\\n')\n // Check for both single and double quotes\n .some(line => line === androidBuildScript || line === androidBuildScript.replace(/\"/g, \"'\"))\n );\n}\n\nexport function isMainApplicationMetaDataSet(androidManifest: AndroidManifest): boolean {\n const updateUrl = getMainApplicationMetaDataValue(androidManifest, Config.UPDATE_URL);\n const runtimeVersion = getMainApplicationMetaDataValue(androidManifest, Config.RUNTIME_VERSION);\n const sdkVersion = getMainApplicationMetaDataValue(androidManifest, Config.SDK_VERSION);\n\n return Boolean(updateUrl && (sdkVersion || runtimeVersion));\n}\n\nexport function isMainApplicationMetaDataSynced(\n config: ExpoConfigUpdates,\n androidManifest: AndroidManifest,\n username: string | null\n): boolean {\n return (\n getUpdateUrl(config, username) ===\n getMainApplicationMetaDataValue(androidManifest, Config.UPDATE_URL) &&\n String(getUpdatesEnabled(config)) ===\n getMainApplicationMetaDataValue(androidManifest, Config.ENABLED) &&\n String(getUpdatesTimeout(config)) ===\n getMainApplicationMetaDataValue(androidManifest, Config.LAUNCH_WAIT_MS) &&\n getUpdatesCheckOnLaunch(config) ===\n getMainApplicationMetaDataValue(androidManifest, Config.CHECK_ON_LAUNCH) &&\n areVersionsSynced(config, androidManifest)\n );\n}\n\nexport function areVersionsSynced(\n config: Pick<ExpoConfigUpdates, 'runtimeVersion' | 'sdkVersion'>,\n androidManifest: AndroidManifest\n): boolean {\n const expectedRuntimeVersion = getRuntimeVersionNullable(config, 'android');\n const expectedSdkVersion = getSDKVersion(config);\n\n const currentRuntimeVersion = getMainApplicationMetaDataValue(\n androidManifest,\n Config.RUNTIME_VERSION\n );\n const currentSdkVersion = getMainApplicationMetaDataValue(androidManifest, Config.SDK_VERSION);\n\n if (expectedRuntimeVersion !== null) {\n return currentRuntimeVersion === expectedRuntimeVersion && currentSdkVersion === null;\n } else if (expectedSdkVersion !== null) {\n return currentSdkVersion === expectedSdkVersion && currentRuntimeVersion === null;\n } else {\n return true;\n }\n}\n"],"file":"Updates.js"}
|
package/build/ios/Updates.js
CHANGED
|
@@ -155,6 +155,11 @@ function setVersionsConfig(config, expoPlist) {
|
|
|
155
155
|
const newExpoPlist = { ...expoPlist
|
|
156
156
|
};
|
|
157
157
|
const runtimeVersion = (0, _Updates().getRuntimeVersionNullable)(config, 'ios');
|
|
158
|
+
|
|
159
|
+
if (!runtimeVersion && expoPlist[Config.RUNTIME_VERSION]) {
|
|
160
|
+
throw new Error('A runtime version is set in your Expo.plist, but is missing from your app.json/app.config.js. Please either set runtimeVersion in your app.json/app.config.js or remove EXUpdatesRuntimeVersion from your Expo.plist.');
|
|
161
|
+
}
|
|
162
|
+
|
|
158
163
|
const sdkVersion = getSDKVersion(config);
|
|
159
164
|
|
|
160
165
|
if (runtimeVersion) {
|
package/build/ios/Updates.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ios/Updates.ts"],"names":["CREATE_MANIFEST_IOS_PATH","Config","getSDKVersion","config","sdkVersion","getUpdatesEnabled","updates","enabled","getUpdatesTimeout","fallbackToCacheTimeout","getUpdatesCheckOnLaunch","expoUpdatesPackageVersion","checkAutomatically","semver","gte","withUpdates","expoUsername","modRequest","projectRoot","modResults","setUpdatesConfig","expoPlist","username","newExpoPlist","ENABLED","CHECK_ON_LAUNCH","LAUNCH_WAIT_MS","updateUrl","UPDATE_URL","setVersionsConfig","runtimeVersion","SDK_VERSION","RUNTIME_VERSION","formatConfigurationScriptPath","buildScriptPath","resolveFrom","silent","Error","relativePath","path","relative","join","process","platform","replace","getBundleReactNativePhase","project","shellScriptBuildPhase","hash","objects","PBXShellScriptBuildPhase","bundleReactNative","Object","values","find","buildPhase","name","ensureBundleReactNativePhaseContainsConfigurationScript","buildPhaseShellScriptPath","isShellScriptBuildPhaseConfigured","shellScript","includes","RegExp","isPlistConfigurationSet","Boolean","EXUpdatesURL","EXUpdatesSDKVersion","EXUpdatesRuntimeVersion","isPlistConfigurationSynced","EXUpdatesEnabled","EXUpdatesLaunchWaitMs","EXUpdatesCheckOnLaunch","isPlistVersionConfigurationSynced","expectedRuntimeVersion","expectedSdkVersion","currentRuntimeVersion","currentSdkVersion"],"mappings":"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","sourcesContent":["import * as path from 'path';\nimport resolveFrom from 'resolve-from';\nimport semver from 'semver';\nimport xcode from 'xcode';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withExpoPlist } from '../plugins/ios-plugins';\nimport {\n ExpoConfigUpdates,\n getExpoUpdatesPackageVersion,\n getRuntimeVersionNullable,\n getUpdateUrl,\n} from '../utils/Updates';\nimport { ExpoPlist } from './IosConfig.types';\n\nconst CREATE_MANIFEST_IOS_PATH = 'expo-updates/scripts/create-manifest-ios.sh';\n\nexport enum Config {\n ENABLED = 'EXUpdatesEnabled',\n CHECK_ON_LAUNCH = 'EXUpdatesCheckOnLaunch',\n LAUNCH_WAIT_MS = 'EXUpdatesLaunchWaitMs',\n RUNTIME_VERSION = 'EXUpdatesRuntimeVersion',\n SDK_VERSION = 'EXUpdatesSDKVersion',\n UPDATE_URL = 'EXUpdatesURL',\n RELEASE_CHANNEL = 'EXUpdatesReleaseChannel',\n UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY = 'EXUpdatesRequestHeaders',\n}\n\nexport function getSDKVersion(config: Pick<ExpoConfigUpdates, 'sdkVersion'>): string | null {\n return typeof config.sdkVersion === 'string' ? config.sdkVersion : null;\n}\n\nexport function getUpdatesEnabled(config: Pick<ExpoConfigUpdates, 'updates'>): boolean {\n return config.updates?.enabled !== false;\n}\n\nexport function getUpdatesTimeout(config: Pick<ExpoConfigUpdates, 'updates'>) {\n return config.updates?.fallbackToCacheTimeout ?? 0;\n}\n\nexport function getUpdatesCheckOnLaunch(\n config: Pick<ExpoConfigUpdates, 'updates'>,\n expoUpdatesPackageVersion?: string | null\n): 'NEVER' | 'ERROR_RECOVERY_ONLY' | 'ALWAYS' {\n if (config.updates?.checkAutomatically === 'ON_ERROR_RECOVERY') {\n // native 'ERROR_RECOVERY_ONLY' option was only introduced in 0.11.x\n if (expoUpdatesPackageVersion && semver.gte(expoUpdatesPackageVersion, '0.11.0')) {\n return 'ERROR_RECOVERY_ONLY';\n }\n return 'NEVER';\n } else if (config.updates?.checkAutomatically === 'ON_LOAD') {\n return 'ALWAYS';\n }\n return 'ALWAYS';\n}\n\nexport const withUpdates: ConfigPlugin<{ expoUsername: string | null }> = (\n config,\n { expoUsername }\n) => {\n return withExpoPlist(config, config => {\n const expoUpdatesPackageVersion = getExpoUpdatesPackageVersion(config.modRequest.projectRoot);\n config.modResults = setUpdatesConfig(\n config,\n config.modResults,\n expoUsername,\n expoUpdatesPackageVersion\n );\n return config;\n });\n};\n\nexport function setUpdatesConfig(\n config: ExpoConfigUpdates,\n expoPlist: ExpoPlist,\n username: string | null,\n expoUpdatesPackageVersion?: string | null\n): ExpoPlist {\n const newExpoPlist = {\n ...expoPlist,\n [Config.ENABLED]: getUpdatesEnabled(config),\n [Config.CHECK_ON_LAUNCH]: getUpdatesCheckOnLaunch(config, expoUpdatesPackageVersion),\n [Config.LAUNCH_WAIT_MS]: getUpdatesTimeout(config),\n };\n\n const updateUrl = getUpdateUrl(config, username);\n if (updateUrl) {\n newExpoPlist[Config.UPDATE_URL] = updateUrl;\n } else {\n delete newExpoPlist[Config.UPDATE_URL];\n }\n\n return setVersionsConfig(config, newExpoPlist);\n}\n\nexport function setVersionsConfig(config: ExpoConfigUpdates, expoPlist: ExpoPlist): ExpoPlist {\n const newExpoPlist = { ...expoPlist };\n\n const runtimeVersion = getRuntimeVersionNullable(config, 'ios');\n const sdkVersion = getSDKVersion(config);\n if (runtimeVersion) {\n delete newExpoPlist[Config.SDK_VERSION];\n newExpoPlist[Config.RUNTIME_VERSION] = runtimeVersion;\n } else if (sdkVersion) {\n /**\n * runtime version maybe null in projects using classic updates. In that\n * case we use SDK version\n */\n delete newExpoPlist[Config.RUNTIME_VERSION];\n newExpoPlist[Config.SDK_VERSION] = sdkVersion;\n } else {\n delete newExpoPlist[Config.SDK_VERSION];\n delete newExpoPlist[Config.RUNTIME_VERSION];\n }\n\n return newExpoPlist;\n}\n\nfunction formatConfigurationScriptPath(projectRoot: string): string {\n const buildScriptPath = resolveFrom.silent(projectRoot, CREATE_MANIFEST_IOS_PATH);\n\n if (!buildScriptPath) {\n throw new Error(\n \"Could not find the build script for iOS. This could happen in case of outdated 'node_modules'. Run 'npm install' to make sure that it's up-to-date.\"\n );\n }\n\n const relativePath = path.relative(path.join(projectRoot, 'ios'), buildScriptPath);\n return process.platform === 'win32' ? relativePath.replace(/\\\\/g, '/') : relativePath;\n}\n\ninterface ShellScriptBuildPhase {\n isa: 'PBXShellScriptBuildPhase';\n name: string;\n shellScript: string;\n [key: string]: any;\n}\n\nexport function getBundleReactNativePhase(project: xcode.XcodeProject): ShellScriptBuildPhase {\n const shellScriptBuildPhase = project.hash.project.objects.PBXShellScriptBuildPhase as Record<\n string,\n ShellScriptBuildPhase\n >;\n const bundleReactNative = Object.values(shellScriptBuildPhase).find(\n buildPhase => buildPhase.name === '\"Bundle React Native code and images\"'\n );\n\n if (!bundleReactNative) {\n throw new Error(`Couldn't find a build phase \"Bundle React Native code and images\"`);\n }\n\n return bundleReactNative;\n}\n\nexport function ensureBundleReactNativePhaseContainsConfigurationScript(\n projectRoot: string,\n project: xcode.XcodeProject\n): xcode.XcodeProject {\n const bundleReactNative = getBundleReactNativePhase(project);\n const buildPhaseShellScriptPath = formatConfigurationScriptPath(projectRoot);\n\n if (!isShellScriptBuildPhaseConfigured(projectRoot, project)) {\n // check if there's already another path to create-manifest-ios.sh\n // this might be the case for monorepos\n if (bundleReactNative.shellScript.includes(CREATE_MANIFEST_IOS_PATH)) {\n bundleReactNative.shellScript = bundleReactNative.shellScript.replace(\n new RegExp(`(\\\\\\\\n)(\\\\.\\\\.)+/node_modules/${CREATE_MANIFEST_IOS_PATH}`),\n ''\n );\n }\n bundleReactNative.shellScript = `${bundleReactNative.shellScript.replace(\n /\"$/,\n ''\n )}${buildPhaseShellScriptPath}\\\\n\"`;\n }\n return project;\n}\n\nexport function isShellScriptBuildPhaseConfigured(\n projectRoot: string,\n project: xcode.XcodeProject\n): boolean {\n const bundleReactNative = getBundleReactNativePhase(project);\n const buildPhaseShellScriptPath = formatConfigurationScriptPath(projectRoot);\n return bundleReactNative.shellScript.includes(buildPhaseShellScriptPath);\n}\n\nexport function isPlistConfigurationSet(expoPlist: ExpoPlist): boolean {\n return Boolean(\n expoPlist.EXUpdatesURL && (expoPlist.EXUpdatesSDKVersion || expoPlist.EXUpdatesRuntimeVersion)\n );\n}\n\nexport function isPlistConfigurationSynced(\n config: ExpoConfigUpdates,\n expoPlist: ExpoPlist,\n username: string | null\n): boolean {\n return (\n getUpdateUrl(config, username) === expoPlist.EXUpdatesURL &&\n getUpdatesEnabled(config) === expoPlist.EXUpdatesEnabled &&\n getUpdatesTimeout(config) === expoPlist.EXUpdatesLaunchWaitMs &&\n getUpdatesCheckOnLaunch(config) === expoPlist.EXUpdatesCheckOnLaunch &&\n isPlistVersionConfigurationSynced(config, expoPlist)\n );\n}\n\nexport function isPlistVersionConfigurationSynced(\n config: Pick<ExpoConfigUpdates, 'sdkVersion' | 'runtimeVersion'>,\n expoPlist: ExpoPlist\n): boolean {\n const expectedRuntimeVersion = getRuntimeVersionNullable(config, 'ios');\n const expectedSdkVersion = getSDKVersion(config);\n\n const currentRuntimeVersion = expoPlist.EXUpdatesRuntimeVersion ?? null;\n const currentSdkVersion = expoPlist.EXUpdatesSDKVersion ?? null;\n\n if (expectedRuntimeVersion !== null) {\n return currentRuntimeVersion === expectedRuntimeVersion && currentSdkVersion === null;\n } else if (expectedSdkVersion !== null) {\n return currentSdkVersion === expectedSdkVersion && currentRuntimeVersion === null;\n } else {\n return true;\n }\n}\n"],"file":"Updates.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/ios/Updates.ts"],"names":["CREATE_MANIFEST_IOS_PATH","Config","getSDKVersion","config","sdkVersion","getUpdatesEnabled","updates","enabled","getUpdatesTimeout","fallbackToCacheTimeout","getUpdatesCheckOnLaunch","expoUpdatesPackageVersion","checkAutomatically","semver","gte","withUpdates","expoUsername","modRequest","projectRoot","modResults","setUpdatesConfig","expoPlist","username","newExpoPlist","ENABLED","CHECK_ON_LAUNCH","LAUNCH_WAIT_MS","updateUrl","UPDATE_URL","setVersionsConfig","runtimeVersion","RUNTIME_VERSION","Error","SDK_VERSION","formatConfigurationScriptPath","buildScriptPath","resolveFrom","silent","relativePath","path","relative","join","process","platform","replace","getBundleReactNativePhase","project","shellScriptBuildPhase","hash","objects","PBXShellScriptBuildPhase","bundleReactNative","Object","values","find","buildPhase","name","ensureBundleReactNativePhaseContainsConfigurationScript","buildPhaseShellScriptPath","isShellScriptBuildPhaseConfigured","shellScript","includes","RegExp","isPlistConfigurationSet","Boolean","EXUpdatesURL","EXUpdatesSDKVersion","EXUpdatesRuntimeVersion","isPlistConfigurationSynced","EXUpdatesEnabled","EXUpdatesLaunchWaitMs","EXUpdatesCheckOnLaunch","isPlistVersionConfigurationSynced","expectedRuntimeVersion","expectedSdkVersion","currentRuntimeVersion","currentSdkVersion"],"mappings":"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","sourcesContent":["import * as path from 'path';\nimport resolveFrom from 'resolve-from';\nimport semver from 'semver';\nimport xcode from 'xcode';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withExpoPlist } from '../plugins/ios-plugins';\nimport {\n ExpoConfigUpdates,\n getExpoUpdatesPackageVersion,\n getRuntimeVersionNullable,\n getUpdateUrl,\n} from '../utils/Updates';\nimport { ExpoPlist } from './IosConfig.types';\n\nconst CREATE_MANIFEST_IOS_PATH = 'expo-updates/scripts/create-manifest-ios.sh';\n\nexport enum Config {\n ENABLED = 'EXUpdatesEnabled',\n CHECK_ON_LAUNCH = 'EXUpdatesCheckOnLaunch',\n LAUNCH_WAIT_MS = 'EXUpdatesLaunchWaitMs',\n RUNTIME_VERSION = 'EXUpdatesRuntimeVersion',\n SDK_VERSION = 'EXUpdatesSDKVersion',\n UPDATE_URL = 'EXUpdatesURL',\n RELEASE_CHANNEL = 'EXUpdatesReleaseChannel',\n UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY = 'EXUpdatesRequestHeaders',\n}\n\nexport function getSDKVersion(config: Pick<ExpoConfigUpdates, 'sdkVersion'>): string | null {\n return typeof config.sdkVersion === 'string' ? config.sdkVersion : null;\n}\n\nexport function getUpdatesEnabled(config: Pick<ExpoConfigUpdates, 'updates'>): boolean {\n return config.updates?.enabled !== false;\n}\n\nexport function getUpdatesTimeout(config: Pick<ExpoConfigUpdates, 'updates'>) {\n return config.updates?.fallbackToCacheTimeout ?? 0;\n}\n\nexport function getUpdatesCheckOnLaunch(\n config: Pick<ExpoConfigUpdates, 'updates'>,\n expoUpdatesPackageVersion?: string | null\n): 'NEVER' | 'ERROR_RECOVERY_ONLY' | 'ALWAYS' {\n if (config.updates?.checkAutomatically === 'ON_ERROR_RECOVERY') {\n // native 'ERROR_RECOVERY_ONLY' option was only introduced in 0.11.x\n if (expoUpdatesPackageVersion && semver.gte(expoUpdatesPackageVersion, '0.11.0')) {\n return 'ERROR_RECOVERY_ONLY';\n }\n return 'NEVER';\n } else if (config.updates?.checkAutomatically === 'ON_LOAD') {\n return 'ALWAYS';\n }\n return 'ALWAYS';\n}\n\nexport const withUpdates: ConfigPlugin<{ expoUsername: string | null }> = (\n config,\n { expoUsername }\n) => {\n return withExpoPlist(config, config => {\n const expoUpdatesPackageVersion = getExpoUpdatesPackageVersion(config.modRequest.projectRoot);\n config.modResults = setUpdatesConfig(\n config,\n config.modResults,\n expoUsername,\n expoUpdatesPackageVersion\n );\n return config;\n });\n};\n\nexport function setUpdatesConfig(\n config: ExpoConfigUpdates,\n expoPlist: ExpoPlist,\n username: string | null,\n expoUpdatesPackageVersion?: string | null\n): ExpoPlist {\n const newExpoPlist = {\n ...expoPlist,\n [Config.ENABLED]: getUpdatesEnabled(config),\n [Config.CHECK_ON_LAUNCH]: getUpdatesCheckOnLaunch(config, expoUpdatesPackageVersion),\n [Config.LAUNCH_WAIT_MS]: getUpdatesTimeout(config),\n };\n\n const updateUrl = getUpdateUrl(config, username);\n if (updateUrl) {\n newExpoPlist[Config.UPDATE_URL] = updateUrl;\n } else {\n delete newExpoPlist[Config.UPDATE_URL];\n }\n\n return setVersionsConfig(config, newExpoPlist);\n}\n\nexport function setVersionsConfig(config: ExpoConfigUpdates, expoPlist: ExpoPlist): ExpoPlist {\n const newExpoPlist = { ...expoPlist };\n\n const runtimeVersion = getRuntimeVersionNullable(config, 'ios');\n if (!runtimeVersion && expoPlist[Config.RUNTIME_VERSION]) {\n throw new Error(\n 'A runtime version is set in your Expo.plist, but is missing from your app.json/app.config.js. Please either set runtimeVersion in your app.json/app.config.js or remove EXUpdatesRuntimeVersion from your Expo.plist.'\n );\n }\n const sdkVersion = getSDKVersion(config);\n if (runtimeVersion) {\n delete newExpoPlist[Config.SDK_VERSION];\n newExpoPlist[Config.RUNTIME_VERSION] = runtimeVersion;\n } else if (sdkVersion) {\n /**\n * runtime version maybe null in projects using classic updates. In that\n * case we use SDK version\n */\n delete newExpoPlist[Config.RUNTIME_VERSION];\n newExpoPlist[Config.SDK_VERSION] = sdkVersion;\n } else {\n delete newExpoPlist[Config.SDK_VERSION];\n delete newExpoPlist[Config.RUNTIME_VERSION];\n }\n\n return newExpoPlist;\n}\n\nfunction formatConfigurationScriptPath(projectRoot: string): string {\n const buildScriptPath = resolveFrom.silent(projectRoot, CREATE_MANIFEST_IOS_PATH);\n\n if (!buildScriptPath) {\n throw new Error(\n \"Could not find the build script for iOS. This could happen in case of outdated 'node_modules'. Run 'npm install' to make sure that it's up-to-date.\"\n );\n }\n\n const relativePath = path.relative(path.join(projectRoot, 'ios'), buildScriptPath);\n return process.platform === 'win32' ? relativePath.replace(/\\\\/g, '/') : relativePath;\n}\n\ninterface ShellScriptBuildPhase {\n isa: 'PBXShellScriptBuildPhase';\n name: string;\n shellScript: string;\n [key: string]: any;\n}\n\nexport function getBundleReactNativePhase(project: xcode.XcodeProject): ShellScriptBuildPhase {\n const shellScriptBuildPhase = project.hash.project.objects.PBXShellScriptBuildPhase as Record<\n string,\n ShellScriptBuildPhase\n >;\n const bundleReactNative = Object.values(shellScriptBuildPhase).find(\n buildPhase => buildPhase.name === '\"Bundle React Native code and images\"'\n );\n\n if (!bundleReactNative) {\n throw new Error(`Couldn't find a build phase \"Bundle React Native code and images\"`);\n }\n\n return bundleReactNative;\n}\n\nexport function ensureBundleReactNativePhaseContainsConfigurationScript(\n projectRoot: string,\n project: xcode.XcodeProject\n): xcode.XcodeProject {\n const bundleReactNative = getBundleReactNativePhase(project);\n const buildPhaseShellScriptPath = formatConfigurationScriptPath(projectRoot);\n\n if (!isShellScriptBuildPhaseConfigured(projectRoot, project)) {\n // check if there's already another path to create-manifest-ios.sh\n // this might be the case for monorepos\n if (bundleReactNative.shellScript.includes(CREATE_MANIFEST_IOS_PATH)) {\n bundleReactNative.shellScript = bundleReactNative.shellScript.replace(\n new RegExp(`(\\\\\\\\n)(\\\\.\\\\.)+/node_modules/${CREATE_MANIFEST_IOS_PATH}`),\n ''\n );\n }\n bundleReactNative.shellScript = `${bundleReactNative.shellScript.replace(\n /\"$/,\n ''\n )}${buildPhaseShellScriptPath}\\\\n\"`;\n }\n return project;\n}\n\nexport function isShellScriptBuildPhaseConfigured(\n projectRoot: string,\n project: xcode.XcodeProject\n): boolean {\n const bundleReactNative = getBundleReactNativePhase(project);\n const buildPhaseShellScriptPath = formatConfigurationScriptPath(projectRoot);\n return bundleReactNative.shellScript.includes(buildPhaseShellScriptPath);\n}\n\nexport function isPlistConfigurationSet(expoPlist: ExpoPlist): boolean {\n return Boolean(\n expoPlist.EXUpdatesURL && (expoPlist.EXUpdatesSDKVersion || expoPlist.EXUpdatesRuntimeVersion)\n );\n}\n\nexport function isPlistConfigurationSynced(\n config: ExpoConfigUpdates,\n expoPlist: ExpoPlist,\n username: string | null\n): boolean {\n return (\n getUpdateUrl(config, username) === expoPlist.EXUpdatesURL &&\n getUpdatesEnabled(config) === expoPlist.EXUpdatesEnabled &&\n getUpdatesTimeout(config) === expoPlist.EXUpdatesLaunchWaitMs &&\n getUpdatesCheckOnLaunch(config) === expoPlist.EXUpdatesCheckOnLaunch &&\n isPlistVersionConfigurationSynced(config, expoPlist)\n );\n}\n\nexport function isPlistVersionConfigurationSynced(\n config: Pick<ExpoConfigUpdates, 'sdkVersion' | 'runtimeVersion'>,\n expoPlist: ExpoPlist\n): boolean {\n const expectedRuntimeVersion = getRuntimeVersionNullable(config, 'ios');\n const expectedSdkVersion = getSDKVersion(config);\n\n const currentRuntimeVersion = expoPlist.EXUpdatesRuntimeVersion ?? null;\n const currentSdkVersion = expoPlist.EXUpdatesSDKVersion ?? null;\n\n if (expectedRuntimeVersion !== null) {\n return currentRuntimeVersion === expectedRuntimeVersion && currentSdkVersion === null;\n } else if (expectedSdkVersion !== null) {\n return currentSdkVersion === expectedSdkVersion && currentRuntimeVersion === null;\n } else {\n return true;\n }\n}\n"],"file":"Updates.js"}
|