1 package expo.modules.updates.manifest 2 3 import expo.modules.updates.UpdatesConfiguration 4 import expo.modules.manifests.core.BareManifest 5 import expo.modules.manifests.core.LegacyManifest 6 import expo.modules.manifests.core.NewManifest 7 import org.json.JSONException 8 import org.json.JSONObject 9 10 /** 11 * Utility methods for parsing a JSON manifest using the correct [UpdateManifest] implementation. 12 */ 13 object ManifestFactory { 14 private val TAG = ManifestFactory::class.java.simpleName 15 16 @Throws(Exception::class) getManifestnull17 fun getManifest(manifestJson: JSONObject, responseHeaderData: ResponseHeaderData, extensions: JSONObject?, configuration: UpdatesConfiguration?): UpdateManifest { 18 return when (val expoProtocolVersion = responseHeaderData.protocolVersion) { 19 null -> { 20 LegacyUpdateManifest.fromLegacyManifest(LegacyManifest(manifestJson), configuration!!) 21 } 22 0, 1 -> { 23 NewUpdateManifest.fromNewManifest(NewManifest(manifestJson), extensions, configuration!!) 24 } 25 else -> { 26 throw Exception("Unsupported expo-protocol-version: $expoProtocolVersion") 27 } 28 } 29 } 30 31 @Throws(JSONException::class) getEmbeddedManifestnull32 fun getEmbeddedManifest(manifestJson: JSONObject, configuration: UpdatesConfiguration?): UpdateManifest { 33 return if (manifestJson.has("releaseId")) { 34 LegacyUpdateManifest.fromLegacyManifest(LegacyManifest(manifestJson), configuration!!) 35 } else { 36 BareUpdateManifest.fromBareManifest(BareManifest(manifestJson), configuration!!) 37 } 38 } 39 } 40