diff --git a/orx-olive/build.gradle b/orx-olive/build.gradle
index 566a9de4..64043e6a 100644
--- a/orx-olive/build.gradle
+++ b/orx-olive/build.gradle
@@ -1,4 +1,17 @@
dependencies {
compile project(":orx-file-watcher")
+
+ // -- JSR 223, old style script loader
compile "org.jetbrains.kotlin:kotlin-scripting-jsr223:$kotlinVersion"
+
+ compile "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion"
+ compile "org.jetbrains.kotlin:kotlin-scripting-jvm-host-embeddable:$kotlinVersion"
+ compile "org.jetbrains.kotlin:kotlin-scripting-common:$kotlinVersion"
+ compile "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:$kotlinVersion"
+ compile "org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlinVersion"
+ compile "org.jetbrains.kotlin:kotlin-compiler:$kotlinVersion"
+// compile "org.jetbrains.kotlin:kotlin-script-util:$kotlinVersion"
+// compile "org.jetbrains.kotlin:kotlin-main-kts:$kotlinVersion"
+ // compile "org.jetbrains.kotlin:kotlin-scripting-dependencies:$kotlinVersion"
+
}
\ No newline at end of file
diff --git a/orx-olive/src/main/kotlin/Olive.kt b/orx-olive/src/main/kotlin/Olive.kt
index a39eb50d..6645ca92 100644
--- a/orx-olive/src/main/kotlin/Olive.kt
+++ b/orx-olive/src/main/kotlin/Olive.kt
@@ -98,7 +98,7 @@ class Olive
(val resources: Resources? = null) : Extension {
try {
val futureFunc = GlobalScope.async {
val start = System.currentTimeMillis()
- val f = loadFromScript
Unit>(it)
+ val f = loadFromScriptKSH Unit>(it)
val end = System.currentTimeMillis()
logger.info { "loading script took ${end - start}ms" }
f
diff --git a/orx-olive/src/main/kotlin/ScriptObjectLoaderKSH.kt b/orx-olive/src/main/kotlin/ScriptObjectLoaderKSH.kt
new file mode 100644
index 00000000..796f776c
--- /dev/null
+++ b/orx-olive/src/main/kotlin/ScriptObjectLoaderKSH.kt
@@ -0,0 +1,34 @@
+package org.openrndr.extra.olive
+
+import java.io.File
+import kotlin.script.experimental.api.*
+import kotlin.script.experimental.host.BasicScriptingHost
+import kotlin.script.experimental.host.toScriptSource
+import kotlin.script.experimental.jvm.dependenciesFromCurrentContext
+import kotlin.script.experimental.jvm.jvm
+import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost
+import kotlin.script.experimental.jvmhost.createJvmCompilationConfigurationFromTemplate
+import kotlin.script.templates.standard.SimpleScriptTemplate
+
+internal fun evalScriptWithConfiguration(
+ script: String,
+ host: BasicScriptingHost = BasicJvmScriptingHost(),
+ body: ScriptCompilationConfiguration.Builder.() -> Unit = {}
+): ResultWithDiagnostics {
+ val compilationConfiguration = createJvmCompilationConfigurationFromTemplate(body = body)
+ return host.eval(script.toScriptSource(), compilationConfiguration, null)
+}
+
+fun loadFromScriptKSH(
+ script: File,
+ host: BasicScriptingHost = BasicJvmScriptingHost(),
+ body: ScriptCompilationConfiguration.Builder.() -> Unit = {
+
+ jvm {
+ dependenciesFromCurrentContext(wholeClasspath = true)
+ }
+
+ }
+): T = (evalScriptWithConfiguration(script.readText(), host, body).valueOrThrow().returnValue as ResultValue.Value).value as T
+
+