From 17ccc7e8ec1f2e63520d5ca1de90d1c34388f860 Mon Sep 17 00:00:00 2001 From: MEFRREEX Date: Sat, 17 Jan 2026 17:08:01 +0400 Subject: [PATCH] feat: change branding --- LICENSE | 2 +- README.md | 22 ++-- build.gradle.kts | 8 +- script-ts-swc-graalvm/build.gradle.kts | 2 +- .../ts/swc/graalvm/script/TsScript.java | 45 ++++--- script-ts-swc-rhino/build.gradle.kts | 2 +- .../ts/swc/rhino/script/TsScript.java | 106 ----------------- .../ts/swc/rhino/script/TsScript.java | 112 ++++++++++++++++++ 8 files changed, 156 insertions(+), 143 deletions(-) rename script-ts-swc-graalvm/src/main/java/{com/instancify => org/densy}/scriptify/ts/swc/graalvm/script/TsScript.java (71%) delete mode 100644 script-ts-swc-rhino/src/main/java/com/instancify/scriptify/ts/swc/rhino/script/TsScript.java create mode 100644 script-ts-swc-rhino/src/main/java/org/densy/scriptify/ts/swc/rhino/script/TsScript.java diff --git a/LICENSE b/LICENSE index 5e3e905..65fa24d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2025 Instancify +Copyright (c) 2026 Densy Development Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 61cb8f0..1eccc2e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Scriptify TypeScript -Adds TypeScript support to Scriptify. Uses ready-made implementations of [script-js-graalvm](https://github.com/Instancify/Scriptify/tree/master/script-js-graalvm) and [script-js-rhino](https://github.com/Instancify/Scriptify/tree/master/script-js-rhino), and transcompiles TypeScript using [swc4j](https://github.com/caoccao/swc4j) for evaluation. +Adds TypeScript support to Scriptify. Uses ready-made implementations of [script-js-graalvm](https://github.com/DensyDev/Scriptify/tree/master/script-js-graalvm) and [script-js-rhino](https://github.com/DensyDev/Scriptify/tree/master/script-js-rhino), and transcompiles TypeScript using [swc4j](https://github.com/caoccao/swc4j) for evaluation. ## TAKE NOTE > [!WARNING] @@ -20,12 +20,12 @@ List of all dependencies: **https://github.com/caoccao/swc4j?tab=readme-ov-file#dependency** ## Maven -Adding repo: +Adding repository: ```xml - instancify-repository-snapshots - https://repo.instancify.app/snapshots + densy-repository-snapshots + https://repo.densy.org/snapshots ``` @@ -33,7 +33,7 @@ Adding repo: For adding a library for GraalVM (SWC): ```xml - com.instancify.scriptify.ts + org.densy.scriptify.ts script-ts-swc-graalvm 1.0.0-SNAPSHOT @@ -42,27 +42,27 @@ For adding a library for GraalVM (SWC): For adding a library for Rhino (SWC): ```xml - com.instancify.scriptify.ts + org.densy.scriptify.ts script-ts-swc-rhino 1.0.0-SNAPSHOT ``` ## Gradle -Adding repo: +Adding repository: ```groovy maven { - name "instancifyRepositorySnapshots" - url "https://repo.instancify.app/snapshots" + name "densyRepositorySnapshots" + url "https://repo.densy.org/snapshots" } ``` For adding a library for GraalVM (SWC): ```groovy -implementation "com.instancify.scriptify.ts:script-ts-swc-graalvm:1.0.0-SNAPSHOT" +implementation "org.densy.scriptify.ts:script-ts-swc-graalvm:1.0.0-SNAPSHOT" ``` For adding a library for Rhino (SWC): ```groovy -implementation "com.instancify.scriptify.ts:script-ts-swc-rhino:1.0.0-SNAPSHOT" +implementation "org.densy.scriptify.ts:script-ts-swc-rhino:1.0.0-SNAPSHOT" ``` \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index de430c6..a98580f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ java { } allprojects { - group = "com.instancify.scriptify.ts" + group = "org.densy.scriptify.ts" version = "1.0.0-SNAPSHOT" } @@ -23,7 +23,7 @@ subprojects { repositories { mavenCentral() - maven("https://repo.instancify.app/snapshots") + maven("https://repo.densy.org/snapshots") } publishing { @@ -37,8 +37,8 @@ subprojects { } repositories { maven { - name = "instancify" - url = uri("https://repo.instancify.app/snapshots") + name = "densy" + url = uri("https://repo.densy.org/snapshots") credentials { username = System.getenv("MAVEN_USERNAME") password = System.getenv("MAVEN_PASSWORD") diff --git a/script-ts-swc-graalvm/build.gradle.kts b/script-ts-swc-graalvm/build.gradle.kts index 735cd7b..f119036 100644 --- a/script-ts-swc-graalvm/build.gradle.kts +++ b/script-ts-swc-graalvm/build.gradle.kts @@ -7,6 +7,6 @@ repositories { } dependencies { - api("com.instancify.scriptify:script-js-graalvm:1.4.4-SNAPSHOT") + api("org.densy.scriptify:script-js-graalvm:1.5.0-SNAPSHOT") api("com.caoccao.javet:swc4j:1.6.0") } \ No newline at end of file diff --git a/script-ts-swc-graalvm/src/main/java/com/instancify/scriptify/ts/swc/graalvm/script/TsScript.java b/script-ts-swc-graalvm/src/main/java/org/densy/scriptify/ts/swc/graalvm/script/TsScript.java similarity index 71% rename from script-ts-swc-graalvm/src/main/java/com/instancify/scriptify/ts/swc/graalvm/script/TsScript.java rename to script-ts-swc-graalvm/src/main/java/org/densy/scriptify/ts/swc/graalvm/script/TsScript.java index 4d0620c..877262c 100644 --- a/script-ts-swc-graalvm/src/main/java/com/instancify/scriptify/ts/swc/graalvm/script/TsScript.java +++ b/script-ts-swc-graalvm/src/main/java/org/densy/scriptify/ts/swc/graalvm/script/TsScript.java @@ -1,22 +1,24 @@ -package com.instancify.scriptify.ts.swc.graalvm.script; +package org.densy.scriptify.ts.swc.graalvm.script; import com.caoccao.javet.swc4j.Swc4j; import com.caoccao.javet.swc4j.enums.Swc4jMediaType; import com.caoccao.javet.swc4j.options.Swc4jTranspileOptions; import com.caoccao.javet.swc4j.outputs.Swc4jTranspileOutput; -import com.instancify.scriptify.api.exception.ScriptException; -import com.instancify.scriptify.api.script.Script; -import com.instancify.scriptify.api.script.ScriptObject; -import com.instancify.scriptify.api.script.constant.ScriptConstant; -import com.instancify.scriptify.api.script.constant.ScriptConstantManager; -import com.instancify.scriptify.api.script.function.ScriptFunctionManager; -import com.instancify.scriptify.api.script.function.definition.ScriptFunctionDefinition; -import com.instancify.scriptify.api.script.security.ScriptSecurityManager; -import com.instancify.scriptify.core.script.constant.StandardConstantManager; -import com.instancify.scriptify.core.script.function.StandardFunctionManager; -import com.instancify.scriptify.core.script.security.StandardSecurityManager; -import com.instancify.scriptify.js.graalvm.script.JsFunction; -import com.instancify.scriptify.js.graalvm.script.JsSecurityClassAccessor; +import org.densy.scriptify.api.exception.ScriptException; +import org.densy.scriptify.api.script.CompiledScript; +import org.densy.scriptify.api.script.Script; +import org.densy.scriptify.api.script.ScriptObject; +import org.densy.scriptify.api.script.constant.ScriptConstant; +import org.densy.scriptify.api.script.constant.ScriptConstantManager; +import org.densy.scriptify.api.script.function.ScriptFunctionManager; +import org.densy.scriptify.api.script.function.definition.ScriptFunctionDefinition; +import org.densy.scriptify.api.script.security.ScriptSecurityManager; +import org.densy.scriptify.core.script.constant.StandardConstantManager; +import org.densy.scriptify.core.script.function.StandardFunctionManager; +import org.densy.scriptify.core.script.security.StandardSecurityManager; +import org.densy.scriptify.js.graalvm.script.JsCompiledScript; +import org.densy.scriptify.js.graalvm.script.JsFunction; +import org.densy.scriptify.js.graalvm.script.JsSecurityClassAccessor; import org.graalvm.polyglot.Context; import org.graalvm.polyglot.HostAccess; import org.graalvm.polyglot.Value; @@ -31,6 +33,7 @@ public class TsScript implements Script { private ScriptFunctionManager functionManager = new StandardFunctionManager(); private ScriptConstantManager constantManager = new StandardConstantManager(); private final List extraScript = new ArrayList<>(); + private final Swc4j swc = new Swc4j(); @Override public ScriptConstantManager getConstantManager() { @@ -63,7 +66,7 @@ public void addExtraScript(String script) { } @Override - public Value eval(String script) throws ScriptException { + public CompiledScript compile(String script) throws ScriptException { Context.Builder builder = Context.newBuilder("js") .allowHostAccess(HostAccess.newBuilder(HostAccess.ALL) // Mapping for the ScriptObject class required @@ -105,14 +108,18 @@ public Value eval(String script) throws ScriptException { try { // Transpile TypeScript to JavaScript and evaluate it - Swc4j swc = new Swc4j(); Swc4jTranspileOptions options = new Swc4jTranspileOptions().setMediaType(Swc4jMediaType.TypeScript); Swc4jTranspileOutput output = swc.transpile(fullScript.toString(), options); - return context.eval("js", output.getCode()); + return new JsCompiledScript(context, context.eval("js", output.getCode())); } catch (Exception e) { throw new ScriptException(e); - } finally { - context.close(); + } + } + + @Override + public Value evalOneShot(String script) throws ScriptException { + try (CompiledScript compiled = compile(script)) { + return compiled.get(); } } } diff --git a/script-ts-swc-rhino/build.gradle.kts b/script-ts-swc-rhino/build.gradle.kts index c481bc3..5bed478 100644 --- a/script-ts-swc-rhino/build.gradle.kts +++ b/script-ts-swc-rhino/build.gradle.kts @@ -7,6 +7,6 @@ repositories { } dependencies { - api("com.instancify.scriptify:script-js-rhino:1.4.4-SNAPSHOT") + api("org.densy.scriptify:script-js-rhino:1.5.0-SNAPSHOT") api("com.caoccao.javet:swc4j:1.6.0") } \ No newline at end of file diff --git a/script-ts-swc-rhino/src/main/java/com/instancify/scriptify/ts/swc/rhino/script/TsScript.java b/script-ts-swc-rhino/src/main/java/com/instancify/scriptify/ts/swc/rhino/script/TsScript.java deleted file mode 100644 index b7855b3..0000000 --- a/script-ts-swc-rhino/src/main/java/com/instancify/scriptify/ts/swc/rhino/script/TsScript.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.instancify.scriptify.ts.swc.rhino.script; - -import com.caoccao.javet.swc4j.Swc4j; -import com.caoccao.javet.swc4j.enums.Swc4jMediaType; -import com.caoccao.javet.swc4j.options.Swc4jTranspileOptions; -import com.caoccao.javet.swc4j.outputs.Swc4jTranspileOutput; -import com.instancify.scriptify.api.exception.ScriptException; -import com.instancify.scriptify.api.script.Script; -import com.instancify.scriptify.api.script.constant.ScriptConstant; -import com.instancify.scriptify.api.script.constant.ScriptConstantManager; -import com.instancify.scriptify.api.script.function.ScriptFunctionManager; -import com.instancify.scriptify.api.script.function.definition.ScriptFunctionDefinition; -import com.instancify.scriptify.api.script.security.ScriptSecurityManager; -import com.instancify.scriptify.core.script.constant.StandardConstantManager; -import com.instancify.scriptify.core.script.function.StandardFunctionManager; -import com.instancify.scriptify.core.script.security.StandardSecurityManager; -import com.instancify.scriptify.js.rhino.script.JsFunction; -import com.instancify.scriptify.js.rhino.script.JsSecurityClassAccessor; -import com.instancify.scriptify.js.rhino.script.JsWrapFactory; -import org.mozilla.javascript.Context; -import org.mozilla.javascript.ScriptableObject; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -public class TsScript implements Script { - - private final Context context = Context.enter(); - private final ScriptSecurityManager securityManager = new StandardSecurityManager(); - private ScriptFunctionManager functionManager = new StandardFunctionManager(); - private ScriptConstantManager constantManager = new StandardConstantManager(); - private final List extraScript = new ArrayList<>(); - - public TsScript() { - context.setWrapFactory(new JsWrapFactory()); - } - - @Override - public ScriptSecurityManager getSecurityManager() { - return securityManager; - } - - @Override - public ScriptFunctionManager getFunctionManager() { - return functionManager; - } - - @Override - public void setFunctionManager(ScriptFunctionManager functionManager) { - this.functionManager = Objects.requireNonNull(functionManager, "functionManager cannot be null"); - } - - @Override - public ScriptConstantManager getConstantManager() { - return constantManager; - } - - @Override - public void setConstantManager(ScriptConstantManager constantManager) { - this.constantManager = Objects.requireNonNull(constantManager, "constantManager cannot be null"); - } - - @Override - public void addExtraScript(String script) { - this.extraScript.add(script); - } - - @Override - public Object eval(String script) throws ScriptException { - ScriptableObject scope = context.initStandardObjects(); - - // If security mode is enabled, search all exclusions - // and add the classes that were excluded to JsSecurityClassAccessor - if (securityManager.getSecurityMode()) { - context.setClassShutter(new JsSecurityClassAccessor(securityManager.getExcludes())); - } - - for (ScriptFunctionDefinition definition : functionManager.getFunctions().values()) { - scope.put(definition.getFunction().getName(), scope, new JsFunction(this, definition)); - } - - for (ScriptConstant constant : constantManager.getConstants().values()) { - ScriptableObject.putConstProperty(scope, constant.getName(), constant.getValue()); - } - - // Building full script including extra script code - StringBuilder fullScript = new StringBuilder(); - for (String extra : extraScript) { - fullScript.append(extra).append("\n"); - } - fullScript.append(script); - - try { - // Transpile TypeScript to JavaScript and evaluate it - Swc4j swc = new Swc4j(); - Swc4jTranspileOptions options = new Swc4jTranspileOptions().setMediaType(Swc4jMediaType.TypeScript); - Swc4jTranspileOutput output = swc.transpile(fullScript.toString(), options); - return context.evaluateString(scope, output.getCode(), null, 1, null); - } catch (Exception e) { - throw new ScriptException(e); - } finally { - context.close(); - } - } -} diff --git a/script-ts-swc-rhino/src/main/java/org/densy/scriptify/ts/swc/rhino/script/TsScript.java b/script-ts-swc-rhino/src/main/java/org/densy/scriptify/ts/swc/rhino/script/TsScript.java new file mode 100644 index 0000000..65c7420 --- /dev/null +++ b/script-ts-swc-rhino/src/main/java/org/densy/scriptify/ts/swc/rhino/script/TsScript.java @@ -0,0 +1,112 @@ +package org.densy.scriptify.ts.swc.rhino.script; + +import com.caoccao.javet.swc4j.Swc4j; +import com.caoccao.javet.swc4j.enums.Swc4jMediaType; +import com.caoccao.javet.swc4j.options.Swc4jTranspileOptions; +import com.caoccao.javet.swc4j.outputs.Swc4jTranspileOutput; +import org.densy.scriptify.api.exception.ScriptException; +import org.densy.scriptify.api.script.CompiledScript; +import org.densy.scriptify.api.script.Script; +import org.densy.scriptify.api.script.constant.ScriptConstant; +import org.densy.scriptify.api.script.constant.ScriptConstantManager; +import org.densy.scriptify.api.script.function.ScriptFunctionManager; +import org.densy.scriptify.api.script.function.definition.ScriptFunctionDefinition; +import org.densy.scriptify.api.script.security.ScriptSecurityManager; +import org.densy.scriptify.core.script.constant.StandardConstantManager; +import org.densy.scriptify.core.script.function.StandardFunctionManager; +import org.densy.scriptify.core.script.security.StandardSecurityManager; +import org.densy.scriptify.js.rhino.script.JsCompiledScript; +import org.densy.scriptify.js.rhino.script.JsFunction; +import org.densy.scriptify.js.rhino.script.JsSecurityClassAccessor; +import org.densy.scriptify.js.rhino.script.JsWrapFactory; +import org.mozilla.javascript.Context; +import org.mozilla.javascript.ScriptableObject; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class TsScript implements Script { + + private final ScriptSecurityManager securityManager = new StandardSecurityManager(); + private ScriptFunctionManager functionManager = new StandardFunctionManager(); + private ScriptConstantManager constantManager = new StandardConstantManager(); + private final List extraScript = new ArrayList<>(); + private final Swc4j swc = new Swc4j(); + + @Override + public ScriptSecurityManager getSecurityManager() { + return securityManager; + } + + @Override + public ScriptFunctionManager getFunctionManager() { + return functionManager; + } + + @Override + public void setFunctionManager(ScriptFunctionManager functionManager) { + this.functionManager = Objects.requireNonNull(functionManager, "functionManager cannot be null"); + } + + @Override + public ScriptConstantManager getConstantManager() { + return constantManager; + } + + @Override + public void setConstantManager(ScriptConstantManager constantManager) { + this.constantManager = Objects.requireNonNull(constantManager, "constantManager cannot be null"); + } + + @Override + public void addExtraScript(String script) { + this.extraScript.add(script); + } + + @Override + public CompiledScript compile(String script) throws ScriptException { + try { + Context context = Context.enter(); + context.setWrapFactory(new JsWrapFactory()); + + ScriptableObject scope = context.initStandardObjects(); + + // If security mode is enabled, search all exclusions + // and add the classes that were excluded to JsSecurityClassAccessor + if (securityManager.getSecurityMode()) { + context.setClassShutter(new JsSecurityClassAccessor(securityManager.getExcludes())); + } + + for (ScriptFunctionDefinition definition : functionManager.getFunctions().values()) { + scope.put(definition.getFunction().getName(), scope, new JsFunction(this, definition)); + } + + for (ScriptConstant constant : constantManager.getConstants().values()) { + ScriptableObject.putConstProperty(scope, constant.getName(), constant.getValue()); + } + + // Building full script including extra script code + StringBuilder fullScript = new StringBuilder(); + for (String extra : extraScript) { + fullScript.append(extra).append("\n"); + } + fullScript.append(script); + + // Transpile TypeScript to JavaScript and evaluate it + Swc4jTranspileOptions options = new Swc4jTranspileOptions().setMediaType(Swc4jMediaType.TypeScript); + Swc4jTranspileOutput output = swc.transpile(fullScript.toString(), options); + var compiled = context.compileString(output.getCode(), "script", 1, null); + return new JsCompiledScript(context, scope, compiled); + } catch (Exception e) { + throw new ScriptException(e); + } + } + + @Override + public Object evalOneShot(String script) throws ScriptException { + try (CompiledScript compiled = compile(script)) { + return compiled.get(); + } + } +}