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