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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"}