1{"version":3,"file":"Updates.js","names":["CREATE_MANIFEST_IOS_PATH","Config","withUpdates","config","expoUsername","withExpoPlist","projectRoot","modRequest","expoUpdatesPackageVersion","getExpoUpdatesPackageVersion","modResults","setUpdatesConfig","expoPlist","username","newExpoPlist","ENABLED","getUpdatesEnabled","CHECK_ON_LAUNCH","getUpdatesCheckOnLaunch","LAUNCH_WAIT_MS","getUpdatesTimeout","updateUrl","getUpdateUrl","UPDATE_URL","codeSigningCertificate","getUpdatesCodeSigningCertificate","CODE_SIGNING_CERTIFICATE","codeSigningMetadata","getUpdatesCodeSigningMetadata","CODE_SIGNING_METADATA","setVersionsConfig","runtimeVersion","getRuntimeVersionNullable","RUNTIME_VERSION","Error","sdkVersion","getSDKVersion","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","EXUpdatesCodeSigningCertificate","EXUpdatesCodeSigningMetadata","isPlistVersionConfigurationSynced","expectedRuntimeVersion","expectedSdkVersion","currentRuntimeVersion","currentSdkVersion"],"sources":["../../src/ios/Updates.ts"],"sourcesContent":["import * as path from 'path';\nimport resolveFrom from 'resolve-from';\nimport xcode from 'xcode';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withExpoPlist } from '../plugins/ios-plugins';\nimport {\n ExpoConfigUpdates,\n getExpoUpdatesPackageVersion,\n getRuntimeVersionNullable,\n getSDKVersion,\n getUpdatesCheckOnLaunch,\n getUpdatesCodeSigningCertificate,\n getUpdatesCodeSigningMetadata,\n getUpdatesEnabled,\n getUpdatesTimeout,\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 CODE_SIGNING_CERTIFICATE = 'EXUpdatesCodeSigningCertificate',\n CODE_SIGNING_METADATA = 'EXUpdatesCodeSigningMetadata',\n}\n\nexport const withUpdates: ConfigPlugin<{ expoUsername: string | null }> = (\n config,\n { expoUsername }\n) => {\n return withExpoPlist(config, (config) => {\n const projectRoot = config.modRequest.projectRoot;\n const expoUpdatesPackageVersion = getExpoUpdatesPackageVersion(projectRoot);\n config.modResults = setUpdatesConfig(\n projectRoot,\n config,\n config.modResults,\n expoUsername,\n expoUpdatesPackageVersion\n );\n return config;\n });\n};\n\nexport function setUpdatesConfig(\n projectRoot: string,\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 const codeSigningCertificate = getUpdatesCodeSigningCertificate(projectRoot, config);\n if (codeSigningCertificate) {\n newExpoPlist[Config.CODE_SIGNING_CERTIFICATE] = codeSigningCertificate;\n } else {\n delete newExpoPlist[Config.CODE_SIGNING_CERTIFICATE];\n }\n\n const codeSigningMetadata = getUpdatesCodeSigningMetadata(config);\n if (codeSigningMetadata) {\n newExpoPlist[Config.CODE_SIGNING_METADATA] = codeSigningMetadata;\n } else {\n delete newExpoPlist[Config.CODE_SIGNING_METADATA];\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 projectRoot: string,\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 getUpdatesCodeSigningCertificate(projectRoot, config) ===\n expoPlist.EXUpdatesCodeSigningCertificate &&\n getUpdatesCodeSigningMetadata(config) === expoPlist.EXUpdatesCodeSigningMetadata &&\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"],"mappings":"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"}