1{"version":3,"file":"Updates.js","names":["getExpoUpdatesPackageVersion","projectRoot","expoUpdatesPackageJsonPath","resolveFrom","silent","fs","existsSync","packageJson","JSON","parse","readFileSync","version","getUpdateUrl","config","username","updates","url","user","owner","slug","getAppVersion","getNativeVersion","platform","IOSConfig","Version","getVersion","buildNumber","getBuildNumber","versionCode","AndroidConfig","getVersionCode","Error","withRuntimeVersion","ios","runtimeVersion","getRuntimeVersion","android","getRuntimeVersionNullable","e","boolish","console","log","policy","sdkVersion","getRuntimeVersionForSDKVersion","stringify","getSDKVersion","getUpdatesEnabled","enabled","getUpdatesTimeout","fallbackToCacheTimeout","getUpdatesCheckOnLaunch","expoUpdatesPackageVersion","checkAutomatically","semver","gte","getUpdatesCodeSigningCertificate","codeSigningCertificatePath","codeSigningCertificate","undefined","finalPath","path","join","getUpdatesCodeSigningMetadata","codeSigningMetadata","getUpdatesCodeSigningMetadataStringified","metadata","getUpdatesRequestHeaders","requestHeaders","getUpdatesRequestHeadersStringified"],"sources":["../../src/utils/Updates.ts"],"sourcesContent":["import { Android, ExpoConfig, IOS } from '@expo/config-types';\nimport { getRuntimeVersionForSDKVersion } from '@expo/sdk-runtime-versions';\nimport fs from 'fs';\nimport { boolish } from 'getenv';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\nimport semver from 'semver';\n\nimport { AndroidConfig, IOSConfig } from '..';\n\nexport type ExpoConfigUpdates = Pick<\n  ExpoConfig,\n  'sdkVersion' | 'owner' | 'runtimeVersion' | 'updates' | 'slug'\n>;\n\nexport function getExpoUpdatesPackageVersion(projectRoot: string): string | null {\n  const expoUpdatesPackageJsonPath = resolveFrom.silent(projectRoot, 'expo-updates/package.json');\n  if (!expoUpdatesPackageJsonPath || !fs.existsSync(expoUpdatesPackageJsonPath)) {\n    return null;\n  }\n  const packageJson = JSON.parse(fs.readFileSync(expoUpdatesPackageJsonPath, 'utf8'));\n  return packageJson.version;\n}\n\nexport function getUpdateUrl(\n  config: Pick<ExpoConfigUpdates, 'owner' | 'slug' | 'updates'>,\n  username: string | null\n): string | null {\n  if (config.updates?.url) {\n    return config.updates?.url;\n  }\n\n  const user = typeof config.owner === 'string' ? config.owner : username;\n  if (!user) {\n    return null;\n  }\n  return `https://exp.host/@${user}/${config.slug}`;\n}\n\nexport function getAppVersion(config: Pick<ExpoConfig, 'version'>): string {\n  return config.version ?? '1.0.0';\n}\n\nexport function getNativeVersion(\n  config: Pick<ExpoConfig, 'version'> & {\n    android?: Pick<Android, 'versionCode'>;\n    ios?: Pick<IOS, 'buildNumber'>;\n  },\n  platform: 'android' | 'ios'\n): string {\n  const version = IOSConfig.Version.getVersion(config);\n  switch (platform) {\n    case 'ios': {\n      const buildNumber = IOSConfig.Version.getBuildNumber(config);\n      return `${version}(${buildNumber})`;\n    }\n    case 'android': {\n      const versionCode = AndroidConfig.Version.getVersionCode(config);\n      return `${version}(${versionCode})`;\n    }\n    default: {\n      throw new Error(\n        `\"${platform}\" is not a supported platform. Choose either \"ios\" or \"android\".`\n      );\n    }\n  }\n}\n\n/**\n * Compute runtime version policies.\n * @return an expoConfig with only string valued platform specific runtime versions.\n */\nexport const withRuntimeVersion: (config: ExpoConfig) => ExpoConfig = (config) => {\n  if (config.ios?.runtimeVersion || config.runtimeVersion) {\n    const runtimeVersion = getRuntimeVersion(config, 'ios');\n    if (runtimeVersion) {\n      config.ios = {\n        ...config.ios,\n        runtimeVersion,\n      };\n    }\n  }\n  if (config.android?.runtimeVersion || config.runtimeVersion) {\n    const runtimeVersion = getRuntimeVersion(config, 'android');\n    if (runtimeVersion) {\n      config.android = {\n        ...config.android,\n        runtimeVersion,\n      };\n    }\n  }\n  delete config.runtimeVersion;\n  return config;\n};\n\nexport function getRuntimeVersionNullable(\n  ...[config, platform]: Parameters<typeof getRuntimeVersion>\n): string | null {\n  try {\n    return getRuntimeVersion(config, platform);\n  } catch (e) {\n    if (boolish('EXPO_DEBUG', false)) {\n      console.log(e);\n    }\n    return null;\n  }\n}\n\nexport function getRuntimeVersion(\n  config: Pick<ExpoConfig, 'version' | 'runtimeVersion' | 'sdkVersion'> & {\n    android?: Pick<Android, 'versionCode' | 'runtimeVersion'>;\n    ios?: Pick<IOS, 'buildNumber' | 'runtimeVersion'>;\n  },\n  platform: 'android' | 'ios'\n): string | null {\n  const runtimeVersion = config[platform]?.runtimeVersion ?? config.runtimeVersion;\n  if (!runtimeVersion) {\n    return null;\n  }\n\n  if (typeof runtimeVersion === 'string') {\n    return runtimeVersion;\n  } else if (runtimeVersion.policy === 'appVersion') {\n    return getAppVersion(config);\n  } else if (runtimeVersion.policy === 'nativeVersion') {\n    return getNativeVersion(config, platform);\n  } else if (runtimeVersion.policy === 'sdkVersion') {\n    if (!config.sdkVersion) {\n      throw new Error(\"An SDK version must be defined when using the 'sdkVersion' runtime policy.\");\n    }\n    return getRuntimeVersionForSDKVersion(config.sdkVersion);\n  }\n\n  throw new Error(\n    `\"${\n      typeof runtimeVersion === 'object' ? JSON.stringify(runtimeVersion) : runtimeVersion\n    }\" is not a valid runtime version. getRuntimeVersion only supports a string, \"sdkVersion\", \"appVersion\", or \"nativeVersion\" policy.`\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 getUpdatesCodeSigningCertificate(\n  projectRoot: string,\n  config: Pick<ExpoConfigUpdates, 'updates'>\n): string | undefined {\n  const codeSigningCertificatePath = config.updates?.codeSigningCertificate;\n  if (!codeSigningCertificatePath) {\n    return undefined;\n  }\n\n  const finalPath = path.join(projectRoot, codeSigningCertificatePath);\n  if (!fs.existsSync(finalPath)) {\n    throw new Error(`File not found at \\`updates.codeSigningCertificate\\` path: ${finalPath}`);\n  }\n\n  return fs.readFileSync(finalPath, 'utf8');\n}\n\nexport function getUpdatesCodeSigningMetadata(\n  config: Pick<ExpoConfigUpdates, 'updates'>\n): NonNullable<ExpoConfigUpdates['updates']>['codeSigningMetadata'] {\n  return config.updates?.codeSigningMetadata;\n}\n\nexport function getUpdatesCodeSigningMetadataStringified(\n  config: Pick<ExpoConfigUpdates, 'updates'>\n): string | undefined {\n  const metadata = getUpdatesCodeSigningMetadata(config);\n  if (!metadata) {\n    return undefined;\n  }\n\n  return JSON.stringify(metadata);\n}\n\nexport function getUpdatesRequestHeaders(\n  config: Pick<ExpoConfigUpdates, 'updates'>\n): NonNullable<ExpoConfigUpdates['updates']>['requestHeaders'] {\n  return config.updates?.requestHeaders;\n}\n\nexport function getUpdatesRequestHeadersStringified(\n  config: Pick<ExpoConfigUpdates, 'updates'>\n): string | undefined {\n  const metadata = getUpdatesRequestHeaders(config);\n  if (!metadata) {\n    return undefined;\n  }\n\n  return JSON.stringify(metadata);\n}\n"],"mappings":"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"}