Skip to content

Commit 70bb64e

Browse files
authored
Merge pull request #1 from Instancify/feat/extra-script
feat: added support for Script#addExtraScript
2 parents 170e802 + 67e4316 commit 70bb64e

File tree

4 files changed

+40
-13
lines changed

4 files changed

+40
-13
lines changed

build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ plugins {
55
}
66

77
group = "com.instancify.scriptify.kts"
8-
version = "1.0.0-SNAPSHOT"
8+
version = "1.0.1-SNAPSHOT"
99

1010
repositories {
1111
mavenCentral()
1212
maven("https://repo.instancify.app/snapshots")
1313
}
1414

1515
dependencies {
16-
compileOnlyApi("com.instancify.scriptify:core:1.4.2-SNAPSHOT")
16+
compileOnlyApi("com.instancify.scriptify:core:1.4.4-SNAPSHOT")
1717
compileOnlyApi("org.jetbrains.kotlin:kotlin-scripting-common:2.2.10")
1818
compileOnlyApi("org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.10")
1919
compileOnlyApi("org.jetbrains.kotlin:kotlin-scripting-jvm-host:2.2.10")

src/main/kotlin/com/instancify/scriptify/kts/script/KtsScript.kt

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class KtsScript : Script<EvaluationResult?> {
2424
private val securityManager: ScriptSecurityManager = StandardSecurityManager()
2525
private var functionManager: ScriptFunctionManager = StandardFunctionManager()
2626
private var constantManager: ScriptConstantManager = StandardConstantManager()
27+
private val extraScript = mutableListOf<String>()
2728

2829
override fun getSecurityManager() = securityManager
2930

@@ -39,18 +40,27 @@ class KtsScript : Script<EvaluationResult?> {
3940
this.constantManager = constantManager
4041
}
4142

43+
override fun addExtraScript(script: String) {
44+
extraScript.add(script)
45+
}
46+
4247
@Throws(ScriptException::class)
4348
override fun eval(script: String): EvaluationResult? {
4449
val host = BasicJvmScriptingHost()
4550
val bridge = KtsBridge(this)
4651

47-
val source = StringScriptSource(KtsPreludeBuilder.build(this, script))
52+
val source = StringScriptSource(KtsPreludeBuilder.build(this, buildString {
53+
// Building full script including extra script code
54+
for (extra in extraScript) {
55+
append("$extra\n")
56+
}
57+
append(script)
58+
}))
59+
4860
val result = host.eval(
4961
source,
5062
KtsScriptCompilationConfiguration(securityManager),
51-
KtsScriptEvaluationConfiguration.with {
52-
providedProperties(mapOf("__bridge__" to bridge))
53-
}
63+
KtsScriptEvaluationConfiguration(bridge)
5464
)
5565

5666
if (result is ResultWithDiagnostics.Success) {
@@ -71,5 +81,4 @@ class KtsScript : Script<EvaluationResult?> {
7181
}
7282
return null
7383
}
74-
7584
}

src/main/kotlin/com/instancify/scriptify/kts/script/bridge/KtsPreludeBuilder.kt

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,22 @@ object KtsPreludeBuilder {
1616
fun build(script: KtsScript, scriptCode: String): String {
1717
val sb = StringBuilder()
1818

19+
// split the script into lines (package, imports, code)
20+
val lines = scriptCode.lines()
21+
val packageLine = lines.firstOrNull { it.trim().startsWith("package ") }
22+
val imports = lines.filter { it.trim().startsWith("import ") }
23+
val body = lines.filterNot { it.trim().startsWith("import ") || it.trim().startsWith("package ") }
24+
25+
packageLine?.let {
26+
sb.append(it).append("\n\n")
27+
}
28+
29+
imports.forEach { sb.append(it).append("\n") }
30+
if (imports.isNotEmpty()) {
31+
sb.append("\n")
32+
}
33+
34+
// adding constants
1935
for (constant in script.constantManager.constants.values) {
2036
val name = constant.name
2137
val type = constant.value?.let {
@@ -26,6 +42,7 @@ object KtsPreludeBuilder {
2642

2743
sb.append("\n")
2844

45+
// adding functions
2946
for (definition in script.functionManager.functions.values) {
3047
val name = definition.function.name
3148
for (executor in definition.executors) {
@@ -36,8 +53,9 @@ object KtsPreludeBuilder {
3653
}
3754
}
3855

56+
// adding other script code
3957
sb.append("\n\n")
40-
sb.append(scriptCode)
58+
body.forEach { sb.append(it).append("\n") }
4159

4260
return sb.toString()
4361
}
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.instancify.scriptify.kts.script.configuration
22

3+
import com.instancify.scriptify.kts.script.bridge.KtsBridge
34
import kotlin.script.experimental.api.ScriptEvaluationConfiguration
5+
import kotlin.script.experimental.api.providedProperties
46

5-
object KtsScriptEvaluationConfiguration : ScriptEvaluationConfiguration({
6-
7-
}) {
8-
private fun readResolve(): Any = KtsScriptEvaluationConfiguration
9-
}
7+
class KtsScriptEvaluationConfiguration(bridge: KtsBridge) : ScriptEvaluationConfiguration({
8+
providedProperties(mapOf("__bridge__" to bridge))
9+
})

0 commit comments

Comments
 (0)