Add JavaScriptEngine abstraction to extensions-lib (#8155)

This allows us to swap out the implementation in the future and on different platforms
without major changes to the extensions themselves.

(cherry picked from commit 7be6863910)

# Conflicts:
#	core/build.gradle.kts
This commit is contained in:
arkon
2022-10-08 09:45:06 -04:00
committed by Jobobby04
parent 48b9135056
commit 896bc3253e
4 changed files with 32 additions and 10 deletions
@@ -0,0 +1,26 @@
package eu.kanade.tachiyomi.network
import android.content.Context
import app.cash.quickjs.QuickJs
import eu.kanade.tachiyomi.util.lang.withIOContext
/**
* Util for evaluating JavaScript in sources.
*/
class JavaScriptEngine(context: Context) {
/**
* Evaluate arbitrary JavaScript code and get the result as a primtive type
* (e.g., String, Int).
*
* @since extensions-lib 1.4
* @param script JavaScript to execute.
* @return Result of JavaScript code as a primitive type.
*/
@Suppress("UNUSED")
suspend fun <T> evaluate(script: String): T = withIOContext {
QuickJs.create().use {
it.evaluate(script) as T
}
}
}