package expo.modules.updates.manifest import expo.modules.updates.UpdatesConfiguration import expo.modules.manifests.core.BareManifest import expo.modules.manifests.core.LegacyManifest import expo.modules.manifests.core.NewManifest import org.json.JSONException import org.json.JSONObject /** * Utility methods for parsing a JSON manifest using the correct [UpdateManifest] implementation. */ object ManifestFactory { private val TAG = ManifestFactory::class.java.simpleName @Throws(Exception::class) fun getManifest(manifestJson: JSONObject, responseHeaderData: ResponseHeaderData, extensions: JSONObject?, configuration: UpdatesConfiguration?): UpdateManifest { return when (val expoProtocolVersion = responseHeaderData.protocolVersion) { null -> { LegacyUpdateManifest.fromLegacyManifest(LegacyManifest(manifestJson), configuration!!) } 0, 1 -> { NewUpdateManifest.fromNewManifest(NewManifest(manifestJson), extensions, configuration!!) } else -> { throw Exception("Unsupported expo-protocol-version: $expoProtocolVersion") } } } @Throws(JSONException::class) fun getEmbeddedManifest(manifestJson: JSONObject, configuration: UpdatesConfiguration?): UpdateManifest { return if (manifestJson.has("releaseId")) { LegacyUpdateManifest.fromLegacyManifest(LegacyManifest(manifestJson), configuration!!) } else { BareUpdateManifest.fromBareManifest(BareManifest(manifestJson), configuration!!) } } }