From f1dc1b12a75aa0129e57c32eb0d78b201e4f4860 Mon Sep 17 00:00:00 2001 From: MEFRREEX Date: Sun, 17 Aug 2025 22:07:27 +0400 Subject: [PATCH 1/6] feat: new function executor --- .../ScriptFunctionArgTypeException.java | 1 + .../ScriptFunctionArgsCountException.java | 1 + ...unctionArgumentCountMismatchException.java | 12 ++ ...FunctionArgumentTypeMismatchException.java | 14 +++ .../api/script/function/ScriptFunction.java | 5 +- .../function/ScriptFunctionManager.java | 6 +- .../script/function/annotation/Argument.java | 14 +++ .../script/function/annotation/ExecuteAt.java | 12 ++ .../script/function/annotation/Executor.java | 12 ++ .../ScriptFunctionArgumentDefinition.java | 28 +++++ .../definition/ScriptFunctionDefinition.java | 35 ++++++ .../definition/ScriptFunctionExecutor.java | 41 +++++++ .../function/StandardFunctionManager.java | 62 ++++++----- .../ScriptFunctionArgumentDefinitionImpl.java | 15 +++ .../ScriptFunctionDefinitionImpl.java | 103 ++++++++++++++++++ .../ScriptFunctionExecutorImpl.java | 92 ++++++++++++++++ .../impl/file/ScriptFunctionDeleteFile.java | 32 ++---- .../impl/file/ScriptFunctionExistsFile.java | 25 ++--- .../impl/file/ScriptFunctionListFiles.java | 30 ++--- .../impl/file/ScriptFunctionMoveFile.java | 26 ++--- .../impl/file/ScriptFunctionReadFile.java | 31 ++---- .../impl/file/ScriptFunctionWriteFile.java | 32 +++--- .../impl/util/ScriptFunctionPrint.java | 10 ++ .../scriptify/script/JsFunction.java | 66 +++++++++-- .../instancify/scriptify/script/JsScript.java | 6 +- .../scriptify/script/JsFunction.java | 76 +++++++++++-- .../instancify/scriptify/script/JsScript.java | 6 +- 27 files changed, 624 insertions(+), 169 deletions(-) create mode 100644 api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgumentCountMismatchException.java create mode 100644 api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgumentTypeMismatchException.java create mode 100644 api/src/main/java/com/instancify/scriptify/api/script/function/annotation/Argument.java create mode 100644 api/src/main/java/com/instancify/scriptify/api/script/function/annotation/ExecuteAt.java create mode 100644 api/src/main/java/com/instancify/scriptify/api/script/function/annotation/Executor.java create mode 100644 api/src/main/java/com/instancify/scriptify/api/script/function/definition/ScriptFunctionArgumentDefinition.java create mode 100644 api/src/main/java/com/instancify/scriptify/api/script/function/definition/ScriptFunctionDefinition.java create mode 100644 api/src/main/java/com/instancify/scriptify/api/script/function/definition/ScriptFunctionExecutor.java create mode 100644 core/src/main/java/com/instancify/scriptify/core/script/function/definition/ScriptFunctionArgumentDefinitionImpl.java create mode 100644 core/src/main/java/com/instancify/scriptify/core/script/function/definition/ScriptFunctionDefinitionImpl.java create mode 100644 core/src/main/java/com/instancify/scriptify/core/script/function/definition/ScriptFunctionExecutorImpl.java diff --git a/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgTypeException.java b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgTypeException.java index 2b073e4..fb185d8 100644 --- a/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgTypeException.java +++ b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgTypeException.java @@ -6,6 +6,7 @@ /** * Exception for script function argument type mismatches. */ +@Deprecated public class ScriptFunctionArgTypeException extends ScriptFunctionException { /** diff --git a/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgsCountException.java b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgsCountException.java index a767f6e..8080c95 100644 --- a/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgsCountException.java +++ b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgsCountException.java @@ -3,6 +3,7 @@ /** * Exception for when the count of arguments in a script function call is incorrect. */ +@Deprecated public class ScriptFunctionArgsCountException extends ScriptFunctionException { /** diff --git a/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgumentCountMismatchException.java b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgumentCountMismatchException.java new file mode 100644 index 0000000..d9ceb32 --- /dev/null +++ b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgumentCountMismatchException.java @@ -0,0 +1,12 @@ +package com.instancify.scriptify.api.exception; + +public class ScriptFunctionArgumentCountMismatchException extends ScriptFunctionException { + + public ScriptFunctionArgumentCountMismatchException(String functionName, + int expectedMin, + int expectedMax, + int provided) { + super("Function '" + functionName + "' expects between " + + expectedMin + " and " + expectedMax + " arguments, but got " + provided); + } +} diff --git a/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgumentTypeMismatchException.java b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgumentTypeMismatchException.java new file mode 100644 index 0000000..906f36c --- /dev/null +++ b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgumentTypeMismatchException.java @@ -0,0 +1,14 @@ +package com.instancify.scriptify.api.exception; + +public class ScriptFunctionArgumentTypeMismatchException extends ScriptFunctionException { + + public ScriptFunctionArgumentTypeMismatchException(String functionName, + int index, + Class expected, + Class actual) { + super("Function '" + functionName + "' argument #" + index + + " expected type " + expected.getName() + + " but got " + (actual == null ? "null" : actual.getName())); + } +} + diff --git a/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunction.java b/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunction.java index a6c86b3..b2f3771 100644 --- a/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunction.java +++ b/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunction.java @@ -26,5 +26,8 @@ public interface ScriptFunction { * @return The result of the function execution * @throws ScriptFunctionException If there's an error during invocation */ - @Nullable Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException; + @Deprecated + default @Nullable Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { + return null; + } } diff --git a/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunctionManager.java b/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunctionManager.java index 62cc0f9..e615048 100644 --- a/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunctionManager.java +++ b/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunctionManager.java @@ -1,6 +1,8 @@ package com.instancify.scriptify.api.script.function; +import com.instancify.scriptify.api.script.function.definition.ScriptFunctionDefinition; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.UnmodifiableView; import java.util.Map; @@ -14,7 +16,7 @@ public interface ScriptFunctionManager { * * @return A map where keys are function names and values are ScriptFunction instances */ - Map getFunctions(); + @UnmodifiableView Map getFunctions(); /** * Gets a specific function by its name. @@ -22,7 +24,7 @@ public interface ScriptFunctionManager { * @param name The name of the function to retrieve * @return The ScriptFunction associated with the name, or null if not found */ - default @Nullable ScriptFunction getFunction(String name) { + default @Nullable ScriptFunctionDefinition getFunction(String name) { return this.getFunctions().get(name); } diff --git a/api/src/main/java/com/instancify/scriptify/api/script/function/annotation/Argument.java b/api/src/main/java/com/instancify/scriptify/api/script/function/annotation/Argument.java new file mode 100644 index 0000000..c12d4da --- /dev/null +++ b/api/src/main/java/com/instancify/scriptify/api/script/function/annotation/Argument.java @@ -0,0 +1,14 @@ +package com.instancify.scriptify.api.script.function.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.PARAMETER) +public @interface Argument { + String name(); + + boolean required() default true; +} diff --git a/api/src/main/java/com/instancify/scriptify/api/script/function/annotation/ExecuteAt.java b/api/src/main/java/com/instancify/scriptify/api/script/function/annotation/ExecuteAt.java new file mode 100644 index 0000000..1669483 --- /dev/null +++ b/api/src/main/java/com/instancify/scriptify/api/script/function/annotation/ExecuteAt.java @@ -0,0 +1,12 @@ +package com.instancify.scriptify.api.script.function.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface ExecuteAt { + +} diff --git a/api/src/main/java/com/instancify/scriptify/api/script/function/annotation/Executor.java b/api/src/main/java/com/instancify/scriptify/api/script/function/annotation/Executor.java new file mode 100644 index 0000000..2584113 --- /dev/null +++ b/api/src/main/java/com/instancify/scriptify/api/script/function/annotation/Executor.java @@ -0,0 +1,12 @@ +package com.instancify.scriptify.api.script.function.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.PARAMETER) +public @interface Executor { + +} diff --git a/api/src/main/java/com/instancify/scriptify/api/script/function/definition/ScriptFunctionArgumentDefinition.java b/api/src/main/java/com/instancify/scriptify/api/script/function/definition/ScriptFunctionArgumentDefinition.java new file mode 100644 index 0000000..4c104f4 --- /dev/null +++ b/api/src/main/java/com/instancify/scriptify/api/script/function/definition/ScriptFunctionArgumentDefinition.java @@ -0,0 +1,28 @@ +package com.instancify.scriptify.api.script.function.definition; + +/** + * Represents a single argument in a script function definition. + */ +public interface ScriptFunctionArgumentDefinition { + + /** + * Retrieves the name of this argument. + * + * @return The argument name + */ + String getName(); + + /** + * Indicates whether this argument is required. + * + * @return true if the argument must be provided, false if it is optional + */ + boolean isRequired(); + + /** + * Retrieves the expected Java type of this argument. + * + * @return The argument type + */ + Class getType(); +} diff --git a/api/src/main/java/com/instancify/scriptify/api/script/function/definition/ScriptFunctionDefinition.java b/api/src/main/java/com/instancify/scriptify/api/script/function/definition/ScriptFunctionDefinition.java new file mode 100644 index 0000000..7313db6 --- /dev/null +++ b/api/src/main/java/com/instancify/scriptify/api/script/function/definition/ScriptFunctionDefinition.java @@ -0,0 +1,35 @@ +package com.instancify.scriptify.api.script.function.definition; + +import com.instancify.scriptify.api.script.function.ScriptFunction; + +import java.util.List; + +/** + * Represents the definition of a {@link ScriptFunction}, including + * its available executors parsed from annotated methods. + */ +public interface ScriptFunctionDefinition { + + /** + * Retrieves the underlying script function. + * + * @return The associated {@link ScriptFunction} + */ + ScriptFunction getFunction(); + + /** + * Retrieves all executors available for this function. + * + * @return A list of {@link ScriptFunctionExecutor} instances + */ + List getExecutors(); + + /** + * Finds an executor matching the given argument types. + * + * @param arguments the argument types to match + * @return the matching {@link ScriptFunctionExecutor} + * @throws IllegalArgumentException if you cannot find a matching executor + */ + ScriptFunctionExecutor getExecutor(Class... arguments); +} diff --git a/api/src/main/java/com/instancify/scriptify/api/script/function/definition/ScriptFunctionExecutor.java b/api/src/main/java/com/instancify/scriptify/api/script/function/definition/ScriptFunctionExecutor.java new file mode 100644 index 0000000..a931d64 --- /dev/null +++ b/api/src/main/java/com/instancify/scriptify/api/script/function/definition/ScriptFunctionExecutor.java @@ -0,0 +1,41 @@ +package com.instancify.scriptify.api.script.function.definition; + +import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; + +import java.lang.reflect.Method; +import java.util.List; + +/** + * Represents an executable method of a script function, + * responsible for invoking the annotated logic. + */ +public interface ScriptFunctionExecutor { + + Method getMethod(); + + /** + * Retrieves the argument definitions for this executor. + * + * @return a list of {@link ScriptFunctionArgumentDefinition} + */ + List getArguments(); + + /** + * Checks whether this executor matches the given argument types. + * + * @param types the argument types to match + * @return true if the executor is compatible, false otherwise + */ + boolean matches(Class... types); + + /** + * Executes this function with the given script context and arguments. + * + * @param script The script instance to pass to the executor + * @param args The function arguments + * @return The result of execution + * @throws ScriptFunctionException if execution fails or arguments are invalid + */ + Object execute(Script script, Object... args) throws ScriptFunctionException; +} diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java b/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java index 162c577..8f1ebd0 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java @@ -2,7 +2,8 @@ import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.ScriptFunctionManager; -import com.instancify.scriptify.core.script.function.impl.util.*; +import com.instancify.scriptify.api.script.function.definition.ScriptFunctionDefinition; +import com.instancify.scriptify.core.script.function.definition.ScriptFunctionDefinitionImpl; import com.instancify.scriptify.core.script.function.impl.crypto.ScriptFunctionBase64Decode; import com.instancify.scriptify.core.script.function.impl.crypto.ScriptFunctionBase64Encode; import com.instancify.scriptify.core.script.function.impl.crypto.ScriptFunctionMD5; @@ -11,6 +12,7 @@ import com.instancify.scriptify.core.script.function.impl.os.ScriptFunctionEnv; import com.instancify.scriptify.core.script.function.impl.os.ScriptFunctionExecCommand; import com.instancify.scriptify.core.script.function.impl.random.*; +import com.instancify.scriptify.core.script.function.impl.util.*; import com.instancify.scriptify.core.script.function.impl.zip.ScriptFunctionSmartUnzipFile; import com.instancify.scriptify.core.script.function.impl.zip.ScriptFunctionSmartZipFile; import com.instancify.scriptify.core.script.function.impl.zip.ScriptFunctionUnzipFile; @@ -21,7 +23,7 @@ public class StandardFunctionManager implements ScriptFunctionManager { - private final Map functions = new HashMap<>(); + private final Map functions = new HashMap<>(); public StandardFunctionManager() { this.register(new ScriptFunctionPrint()); @@ -31,43 +33,43 @@ public StandardFunctionManager() { this.register(new ScriptFunctionListFiles()); this.register(new ScriptFunctionReadFile()); this.register(new ScriptFunctionWriteFile()); - this.register(new ScriptFunctionZipFile()); - this.register(new ScriptFunctionUnzipFile()); - this.register(new ScriptFunctionSmartUnzipFile()); - this.register(new ScriptFunctionSmartZipFile()); - this.register(new ScriptFunctionNormalizePath()); - this.register(new ScriptFunctionBase64Encode()); - this.register(new ScriptFunctionBase64Decode()); - this.register(new ScriptFunctionDownloadFromUrl()); - this.register(new ScriptFunctionJoinPath()); - this.register(new ScriptFunctionRandomUUID()); - this.register(new ScriptFunctionRandomInteger()); - this.register(new ScriptFunctionRandomLong()); - this.register(new ScriptFunctionRandomFloat()); - this.register(new ScriptFunctionRandomDouble()); - this.register(new ScriptFunctionMD5()); - this.register(new ScriptFunctionSHA256()); - this.register(new ScriptFunctionExecCommand()); - this.register(new ScriptFunctionEnv()); - this.register(new ScriptFunctionShuffleArray()); - this.register(new ScriptFunctionListOf()); - this.register(new ScriptFunctionSetOf()); - this.register(new ScriptFunctionArrayOf()); - this.register(new ScriptFunctionRegexPattern()); - this.register(new ScriptFunctionRegexMatch()); +// this.register(new ScriptFunctionZipFile()); +// this.register(new ScriptFunctionUnzipFile()); +// this.register(new ScriptFunctionSmartUnzipFile()); +// this.register(new ScriptFunctionSmartZipFile()); +// this.register(new ScriptFunctionNormalizePath()); +// this.register(new ScriptFunctionBase64Encode()); +// this.register(new ScriptFunctionBase64Decode()); +// this.register(new ScriptFunctionDownloadFromUrl()); +// this.register(new ScriptFunctionJoinPath()); +// this.register(new ScriptFunctionRandomUUID()); +// this.register(new ScriptFunctionRandomInteger()); +// this.register(new ScriptFunctionRandomLong()); +// this.register(new ScriptFunctionRandomFloat()); +// this.register(new ScriptFunctionRandomDouble()); +// this.register(new ScriptFunctionMD5()); +// this.register(new ScriptFunctionSHA256()); +// this.register(new ScriptFunctionExecCommand()); +// this.register(new ScriptFunctionEnv()); +// this.register(new ScriptFunctionShuffleArray()); +// this.register(new ScriptFunctionListOf()); +// this.register(new ScriptFunctionSetOf()); +// this.register(new ScriptFunctionArrayOf()); +// this.register(new ScriptFunctionRegexPattern()); +// this.register(new ScriptFunctionRegexMatch()); } @Override - public Map getFunctions() { + public Map getFunctions() { return functions; } @Override public void register(ScriptFunction function) { if (!functions.containsKey(function.getName())) { - functions.put(function.getName(), function); + functions.put(function.getName(), new ScriptFunctionDefinitionImpl(function)); } else { - throw new IllegalStateException("The function with this name already exists"); + throw new IllegalStateException("The function with name '" + function.getName() + "' already exists"); } } @@ -76,7 +78,7 @@ public void remove(String name) { if (functions.containsKey(name)) { functions.remove(name); } else { - throw new IllegalArgumentException("The function with this name does not exist"); + throw new IllegalArgumentException("The function with name '" + name + "' does not exist"); } } } \ No newline at end of file diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/definition/ScriptFunctionArgumentDefinitionImpl.java b/core/src/main/java/com/instancify/scriptify/core/script/function/definition/ScriptFunctionArgumentDefinitionImpl.java new file mode 100644 index 0000000..23fa8cd --- /dev/null +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/definition/ScriptFunctionArgumentDefinitionImpl.java @@ -0,0 +1,15 @@ +package com.instancify.scriptify.core.script.function.definition; + +import com.instancify.scriptify.api.script.function.definition.ScriptFunctionArgumentDefinition; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +@Getter +@AllArgsConstructor +@ToString +public class ScriptFunctionArgumentDefinitionImpl implements ScriptFunctionArgumentDefinition { + private final String name; + private final boolean required; + private final Class type; +} diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/definition/ScriptFunctionDefinitionImpl.java b/core/src/main/java/com/instancify/scriptify/core/script/function/definition/ScriptFunctionDefinitionImpl.java new file mode 100644 index 0000000..82e876f --- /dev/null +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/definition/ScriptFunctionDefinitionImpl.java @@ -0,0 +1,103 @@ +package com.instancify.scriptify.core.script.function.definition; + +import com.instancify.scriptify.api.script.Script; +import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; +import com.instancify.scriptify.api.script.function.annotation.Executor; +import com.instancify.scriptify.api.script.function.definition.ScriptFunctionArgumentDefinition; +import com.instancify.scriptify.api.script.function.definition.ScriptFunctionDefinition; +import com.instancify.scriptify.api.script.function.definition.ScriptFunctionExecutor; + +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class ScriptFunctionDefinitionImpl implements ScriptFunctionDefinition { + + private final ScriptFunction function; + private final List executors = new ArrayList<>(); + + public ScriptFunctionDefinitionImpl(ScriptFunction function) { + this.function = function; + this.parseExecutors(); + } + + private void parseExecutors() { + for (Method method : function.getClass().getDeclaredMethods()) { + if (!method.isAnnotationPresent(ExecuteAt.class)) continue; + + List arguments = new ArrayList<>(); + int executorIndex = -1; + + Parameter[] parameters = method.getParameters(); + for (int i = 0; i < parameters.length; i++) { + Parameter parameter = parameters[i]; + + if (parameter.isAnnotationPresent(Executor.class)) { + if (executorIndex != -1) { + throw new IllegalStateException("Multiple @Executor parameters not allowed"); + } + if (!Script.class.isAssignableFrom(parameter.getType())) { + throw new IllegalStateException("@Executor must be of type Script"); + } + executorIndex = i; + continue; + } + + Argument argAnn = parameter.getAnnotation(Argument.class); + if (argAnn != null) { + arguments.add(new ScriptFunctionArgumentDefinitionImpl( + argAnn.name(), + argAnn.required(), + parameter.getType() + )); + } else { + throw new IllegalStateException("All parameters except @Executor must be annotated with @Argument"); + } + } + + // Checking the order of arguments (required cannot come after optional) + boolean foundOptional = false; + for (ScriptFunctionArgumentDefinition def : arguments) { + if (!def.isRequired()) { + foundOptional = true; + } else if (foundOptional) { + throw new IllegalStateException("Required argument cannot follow an optional argument"); + } + } + + method.setAccessible(true); + executors.add(new ScriptFunctionExecutorImpl(function, method, executorIndex, arguments)); + } + + if (executors.isEmpty()) { + throw new IllegalStateException("No executors defined"); + } + } + + @Override + public ScriptFunction getFunction() { + return function; + } + + @Override + public List getExecutors() { + return executors; + } + + @Override + public ScriptFunctionExecutor getExecutor(Class... arguments) { + for (ScriptFunctionExecutor executor : executors) { + if (executor.matches(arguments)) { + return executor; + } + } + throw new IllegalArgumentException("No matching function for arguments: " + + Arrays.stream(arguments).map(Class::getName).collect(Collectors.joining(", "))); + } + +} diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/definition/ScriptFunctionExecutorImpl.java b/core/src/main/java/com/instancify/scriptify/core/script/function/definition/ScriptFunctionExecutorImpl.java new file mode 100644 index 0000000..1297f0a --- /dev/null +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/definition/ScriptFunctionExecutorImpl.java @@ -0,0 +1,92 @@ +package com.instancify.scriptify.core.script.function.definition; + +import com.instancify.scriptify.api.exception.ScriptFunctionArgumentCountMismatchException; +import com.instancify.scriptify.api.exception.ScriptFunctionArgumentTypeMismatchException; +import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; +import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.definition.ScriptFunctionArgumentDefinition; +import com.instancify.scriptify.api.script.function.definition.ScriptFunctionExecutor; +import lombok.Getter; + +import java.lang.reflect.Method; +import java.util.List; + +@Getter +public class ScriptFunctionExecutorImpl implements ScriptFunctionExecutor { + + private final ScriptFunction owner; + private final Method method; + private final int executorIndex; + private final List arguments; + + public ScriptFunctionExecutorImpl(ScriptFunction owner, Method method, int executorIndex, List arguments) { + this.owner = owner; + this.method = method; + this.executorIndex = executorIndex; + this.arguments = arguments; + } + + @Override + public boolean matches(Class... types) { + if (types.length > arguments.size()) return false; + + for (int i = 0; i < types.length; i++) { + if (!arguments.get(i).getType().isAssignableFrom(types[i])) { + return false; + } + } + + for (int i = types.length; i < arguments.size(); i++) { + if (arguments.get(i).isRequired()) { + return false; + } + } + return true; + } + + @Override + public Object execute(Script script, Object... args) throws ScriptFunctionException { + // Checking the number of arguments + int minArgs = (int) arguments.stream().filter(ScriptFunctionArgumentDefinition::isRequired).count(); + int maxArgs = arguments.size(); + if (args.length < minArgs || args.length > maxArgs) { + throw new ScriptFunctionArgumentCountMismatchException( + owner.getName(), minArgs, maxArgs, args.length + ); + } + + // Checking argument types + for (int i = 0; i < args.length; i++) { + Class expected = arguments.get(i).getType(); + Object actual = args[i]; + if (actual != null && !expected.isAssignableFrom(actual.getClass())) { + throw new ScriptFunctionArgumentTypeMismatchException( + owner.getName(), i, expected, actual.getClass() + ); + } + } + + try { + Object[] finalArgs; + + if (executorIndex >= 0) { + finalArgs = new Object[arguments.size() + 1]; + for (int i = 0, j = 0; i < finalArgs.length; i++) { + if (i == executorIndex) { + finalArgs[i] = script; + } else { + finalArgs[i] = (j < args.length) ? args[j] : null; + j++; + } + } + } else { + finalArgs = args; + } + + return method.invoke(owner, finalArgs); + } catch (Exception e) { + throw new ScriptFunctionException("Failed to execute script function '" + owner.getName() + "'", e); + } + } +} diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDeleteFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDeleteFile.java index 36bd64e..c0c3674 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDeleteFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDeleteFile.java @@ -1,11 +1,10 @@ package com.instancify.scriptify.core.script.function.impl.file; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; +import com.instancify.scriptify.api.script.function.annotation.Executor; import org.jetbrains.annotations.NotNull; import java.io.File; @@ -20,25 +19,14 @@ public class ScriptFunctionDeleteFile implements ScriptFunction { return "deleteFile"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length > 2 || args.length < 1) { - throw new ScriptFunctionArgsCountException(1, args.length); - } - if (!(args[0].getValue() instanceof String filePath)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - - if (args.length == 1) { - return script.getSecurityManager().getFileSystem().getFile(filePath).delete(); - } - - if (!(args[1].getValue() instanceof Boolean recursive)) { - throw new ScriptFunctionArgTypeException(Boolean.class, args[1].getType()); - } - + @ExecuteAt + public Object execute( + @Executor Script script, + @Argument(name = "filePath") String filePath, + @Argument(name = "recursive", required = false) Boolean recursive + ) { File file = script.getSecurityManager().getFileSystem().getFile(filePath); - if (recursive) { + if (recursive != null && recursive) { return deleteDirectoryRecursively(file); } else { return file.delete(); diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionExistsFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionExistsFile.java index 4d81a93..911ac8f 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionExistsFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionExistsFile.java @@ -1,15 +1,13 @@ package com.instancify.scriptify.core.script.function.impl.file; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; +import com.instancify.scriptify.api.script.function.annotation.Executor; import org.jetbrains.annotations.NotNull; import java.nio.file.Files; -import java.nio.file.Path; /** * Represents a function to check the existence of a file @@ -21,16 +19,11 @@ public class ScriptFunctionExistsFile implements ScriptFunction { return "existsFile"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length == 1) { - if (args[0].getValue() instanceof String filePath) { - return Files.exists(script.getSecurityManager().getFileSystem().getPath(filePath)); - } else { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - } else { - throw new ScriptFunctionArgsCountException(1, args.length); - } + @ExecuteAt + public Object execute( + @Executor Script script, + @Argument(name = "filePath") String filePath + ) { + return Files.exists(script.getSecurityManager().getFileSystem().getPath(filePath)); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionListFiles.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionListFiles.java index bc0477c..6bc374a 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionListFiles.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionListFiles.java @@ -1,11 +1,10 @@ package com.instancify.scriptify.core.script.function.impl.file; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; +import com.instancify.scriptify.api.script.function.annotation.Executor; import org.jetbrains.annotations.NotNull; import java.io.File; @@ -22,21 +21,16 @@ public class ScriptFunctionListFiles implements ScriptFunction { return "listFiles"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length == 1) { - if (args[0].getValue() instanceof String filePath) { - File folder = script.getSecurityManager().getFileSystem().getFile(filePath); - if (folder.isDirectory()) { - return Arrays.stream(Objects.requireNonNull(folder.listFiles())).map(File::getAbsolutePath).toList(); - } else { - throw new ScriptFunctionException("File is not a folder"); - } - } else { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } + @ExecuteAt + public Object execute( + @Executor Script script, + @Argument(name = "filePath") String filePath + ) { + File folder = script.getSecurityManager().getFileSystem().getFile(filePath); + if (folder.isDirectory()) { + return Arrays.stream(Objects.requireNonNull(folder.listFiles())).map(File::getAbsolutePath).toList(); } else { - throw new ScriptFunctionArgsCountException(1, args.length); + throw new RuntimeException("File is not a folder"); } } } \ No newline at end of file diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionMoveFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionMoveFile.java index 3a4dc36..d0825ea 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionMoveFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionMoveFile.java @@ -1,11 +1,10 @@ package com.instancify.scriptify.core.script.function.impl.file; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; +import com.instancify.scriptify.api.script.function.annotation.Executor; import org.jetbrains.annotations.NotNull; import java.io.File; @@ -20,19 +19,12 @@ public class ScriptFunctionMoveFile implements ScriptFunction { return "moveFile"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length != 2) { - throw new ScriptFunctionArgsCountException(2, args.length); - } - - if (!(args[0].getValue() instanceof String originalFilePath)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - if (!(args[1].getValue() instanceof String targetFilePath)) { - throw new ScriptFunctionArgTypeException(String.class, args[1].getType()); - } - + @ExecuteAt + public Object execute( + @Executor Script script, + @Argument(name = "original") String originalFilePath, + @Argument(name = "target") String targetFilePath + ) { File fileToMove = script.getSecurityManager().getFileSystem().getFile(originalFilePath); return fileToMove.renameTo(script.getSecurityManager().getFileSystem().getFile(targetFilePath)); } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionReadFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionReadFile.java index abcaa45..05d721f 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionReadFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionReadFile.java @@ -1,16 +1,14 @@ package com.instancify.scriptify.core.script.function.impl.file; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; +import com.instancify.scriptify.api.script.function.annotation.Executor; import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.nio.file.Files; -import java.nio.file.Path; /** * Represents a function to read the contents of a file @@ -22,20 +20,15 @@ public class ScriptFunctionReadFile implements ScriptFunction { return "readFile"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length == 1) { - if (args[0].getValue() instanceof String filePath) { - try { - return Files.readString(script.getSecurityManager().getFileSystem().getPath(filePath)); - } catch (IOException e) { - throw new ScriptFunctionException(e); - } - } else { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - } else { - throw new ScriptFunctionArgsCountException(1, args.length); + @ExecuteAt + public Object execute( + @Executor Script script, + @Argument(name = "filePath") String filePath + ) { + try { + return Files.readString(script.getSecurityManager().getFileSystem().getPath(filePath)); + } catch (IOException e) { + throw new RuntimeException(e); } } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionWriteFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionWriteFile.java index f2f2b60..2f7f254 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionWriteFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionWriteFile.java @@ -1,11 +1,10 @@ package com.instancify.scriptify.core.script.function.impl.file; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; +import com.instancify.scriptify.api.script.function.annotation.Executor; import org.jetbrains.annotations.NotNull; import java.io.IOException; @@ -21,20 +20,17 @@ public class ScriptFunctionWriteFile implements ScriptFunction { return "writeFile"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length == 2) { - if (args[0].getValue() instanceof String filePath && args[1].getValue() instanceof String fileContent) { - try { - return Files.writeString(script.getSecurityManager().getFileSystem().getPath(filePath), fileContent); - } catch (IOException e) { - throw new ScriptFunctionException(e); - } - } else { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - } else { - throw new ScriptFunctionArgsCountException(2, args.length); + @ExecuteAt + public Object execute( + @Executor Script script, + @Argument(name = "filePath") String filePath, + @Argument(name = "fileContent") String fileContent + ) { + try { + return Files.writeString(script.getSecurityManager().getFileSystem().getPath(filePath), fileContent); + } catch (IOException e) { + throw new RuntimeException(e); + } } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionPrint.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionPrint.java index a0ff55c..7c1e2f1 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionPrint.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionPrint.java @@ -2,6 +2,8 @@ import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; import org.jetbrains.annotations.NotNull; @@ -23,4 +25,12 @@ public Object invoke(Script script, ScriptFunctionArgument[] args) { System.out.println(Arrays.stream(args).map(arg -> arg.getValue().toString()).collect(Collectors.joining(" "))); return null; } + + @ExecuteAt + public Object execute( + @Argument(name = "args") Object... args + ) { + System.out.println(Arrays.stream(args).map(Object::toString).collect(Collectors.joining(" "))); + return null; + } } diff --git a/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsFunction.java b/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsFunction.java index f21920e..6323f8f 100644 --- a/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsFunction.java +++ b/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsFunction.java @@ -2,37 +2,87 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; -import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.definition.ScriptFunctionDefinition; +import com.instancify.scriptify.api.script.function.definition.ScriptFunctionExecutor; import org.graalvm.polyglot.Value; import org.graalvm.polyglot.proxy.ProxyExecutable; +import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; public class JsFunction implements ProxyExecutable { private final Script script; - private final ScriptFunction function; + private final ScriptFunctionDefinition definition; - public JsFunction(Script script, ScriptFunction function) { + public JsFunction(Script script, ScriptFunctionDefinition definition) { this.script = script; - this.function = function; + this.definition = definition; } @Override public Object execute(Value... arguments) { - ScriptFunctionArgument[] args = new ScriptFunctionArgument[arguments.length]; + Object[] args = new Object[arguments.length]; for (int i = 0; i < arguments.length; i++) { - args[i] = ScriptFunctionArgument.of(convertValue(arguments[i])); + args[i] = convertValue(arguments[i]); } + try { - return function.invoke(script, args); + ScriptFunctionExecutor executor = findMatchingExecutor(args); + return executor.execute(script, adaptArgsForExecutor(executor, args)); } catch (ScriptFunctionException e) { throw new RuntimeException(e); } } + private ScriptFunctionExecutor findMatchingExecutor(Object[] args) { + for (ScriptFunctionExecutor executor : definition.getExecutors()) { + int paramCount = executor.getArguments().size(); + if (executor.getMethod().isVarArgs()) { + if (args.length >= paramCount - 1) { + return executor; + } + } else { + if (args.length == paramCount) { + return executor; + } + } + } + throw new IllegalArgumentException("No matching executor found for arguments"); + } + + private Object[] adaptArgsForExecutor(ScriptFunctionExecutor executor, Object[] args) { + var method = executor.getMethod(); + var paramTypes = method.getParameterTypes(); + + if (paramTypes.length == 0) { + return new Object[0]; + } + + if (!method.isVarArgs()) { + return args; + } + + var fixedCount = paramTypes.length - 1; + var finalArgs = new Object[paramTypes.length]; + + for (int i = 0; i < fixedCount; i++) { + finalArgs[i] = i < args.length ? args[i] : null; + } + + var varargType = paramTypes[fixedCount].getComponentType(); + var varargCount = Math.max(0, args.length - fixedCount); + var varargArray = Array.newInstance(varargType, varargCount); + + for (int i = 0; i < varargCount; i++) { + Array.set(varargArray, i, args[fixedCount + i]); + } + + finalArgs[fixedCount] = varargArray; + return finalArgs; + } + /** * Converts the Value object to the appropriate Java type. */ diff --git a/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsScript.java b/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsScript.java index a63beb6..a14485d 100644 --- a/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsScript.java +++ b/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsScript.java @@ -5,8 +5,8 @@ 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.ScriptFunction; 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.security.StandardSecurityManager; import org.graalvm.polyglot.Context; @@ -71,8 +71,8 @@ public Value eval(String script) throws ScriptException { Value bindings = context.getBindings("js"); if (functionManager != null) { - for (ScriptFunction function : functionManager.getFunctions().values()) { - bindings.putMember(function.getName(), new JsFunction(this, function)); + for (ScriptFunctionDefinition definition : functionManager.getFunctions().values()) { + bindings.putMember(definition.getFunction().getName(), new JsFunction(this, definition)); } } diff --git a/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsFunction.java b/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsFunction.java index 2fc0c75..d1b1628 100644 --- a/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsFunction.java +++ b/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsFunction.java @@ -1,35 +1,87 @@ package com.instancify.scriptify.script; +import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; -import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.definition.ScriptFunctionDefinition; +import com.instancify.scriptify.api.script.function.definition.ScriptFunctionExecutor; import org.mozilla.javascript.Context; import org.mozilla.javascript.Function; import org.mozilla.javascript.Scriptable; +import java.lang.reflect.Array; +import java.util.Arrays; + public class JsFunction implements Function { - private final Script script; - private final ScriptFunction function; + private final Script script; + private final ScriptFunctionDefinition definition; - public JsFunction(Script script, ScriptFunction function) { + public JsFunction(Script script, ScriptFunctionDefinition definition) { this.script = script; - this.function = function; + this.definition = definition; } @Override public Object call(Context context, Scriptable scriptable, Scriptable scriptable1, Object[] arguments) { - ScriptFunctionArgument[] args = new ScriptFunctionArgument[arguments.length]; - for (int i = 0; i < arguments.length; i++) { - args[i] = ScriptFunctionArgument.of(arguments[i]); - } + Class[] types = Arrays.stream(arguments) + .map(arg -> arg == null ? Object.class : arg.getClass()) + .toArray(Class[]::new); + try { - return function.invoke(script, args); - } catch (Exception e) { + ScriptFunctionExecutor executor = findMatchingExecutor(arguments); + return executor.execute(script, adaptArgsForExecutor(executor, arguments)); + } catch (ScriptFunctionException e) { throw Context.throwAsScriptRuntimeEx(e); } } + private ScriptFunctionExecutor findMatchingExecutor(Object[] args) { + for (ScriptFunctionExecutor executor : definition.getExecutors()) { + int paramCount = executor.getArguments().size(); + if (executor.getMethod().isVarArgs()) { + if (args.length >= paramCount - 1) { + return executor; + } + } else { + if (args.length == paramCount) { + return executor; + } + } + } + throw new IllegalArgumentException("No matching executor found for arguments"); + } + + private Object[] adaptArgsForExecutor(ScriptFunctionExecutor executor, Object[] args) { + var method = executor.getMethod(); + var paramTypes = method.getParameterTypes(); + + if (paramTypes.length == 0) { + return new Object[0]; + } + + if (!method.isVarArgs()) { + return args; + } + + var fixedCount = paramTypes.length - 1; + var finalArgs = new Object[paramTypes.length]; + + for (int i = 0; i < fixedCount; i++) { + finalArgs[i] = i < args.length ? args[i] : null; + } + + var varargType = paramTypes[fixedCount].getComponentType(); + var varargCount = Math.max(0, args.length - fixedCount); + var varargArray = Array.newInstance(varargType, varargCount); + + for (int i = 0; i < varargCount; i++) { + Array.set(varargArray, i, args[fixedCount + i]); + } + + finalArgs[fixedCount] = varargArray; + return finalArgs; + } + @Override public Scriptable construct(Context context, Scriptable scriptable, Object[] objects) { return null; diff --git a/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsScript.java b/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsScript.java index a9943ea..3bc349c 100644 --- a/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsScript.java +++ b/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsScript.java @@ -4,8 +4,8 @@ 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.ScriptFunction; 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.security.StandardSecurityManager; import org.mozilla.javascript.Context; @@ -58,8 +58,8 @@ public Object eval(String script) throws ScriptException { } if (functionManager != null) { - for (ScriptFunction function : functionManager.getFunctions().values()) { - scope.put(function.getName(), scope, new JsFunction(this, function)); + for (ScriptFunctionDefinition definition : functionManager.getFunctions().values()) { + scope.put(definition.getFunction().getName(), scope, new JsFunction(this, definition)); } } From 22d059d5b1d4752a0d02574d6dfb96e27378e424 Mon Sep 17 00:00:00 2001 From: MEFRREEX Date: Sun, 17 Aug 2025 23:54:09 +0400 Subject: [PATCH 2/6] feat: new executors for all functions and remove old executor --- .../ScriptFunctionArgTypeException.java | 35 ---------- .../ScriptFunctionArgsCountException.java | 18 ----- .../api/script/function/ScriptFunction.java | 17 ----- .../argument/ScriptFunctionArgument.java | 65 ------------------- .../function/StandardFunctionManager.java | 48 +++++++------- .../crypto/ScriptFunctionBase64Decode.java | 24 +++---- .../crypto/ScriptFunctionBase64Encode.java | 24 +++---- .../impl/crypto/ScriptFunctionMD5.java | 24 +++---- .../impl/crypto/ScriptFunctionSHA256.java | 24 +++---- .../file/ScriptFunctionDownloadFromUrl.java | 28 +++----- .../impl/file/ScriptFunctionJoinPath.java | 28 ++++---- .../file/ScriptFunctionNormalizePath.java | 21 ++---- .../function/impl/os/ScriptFunctionEnv.java | 21 ++---- .../impl/os/ScriptFunctionExecCommand.java | 23 ++----- .../random/ScriptFunctionRandomDouble.java | 40 ++++-------- .../random/ScriptFunctionRandomFloat.java | 40 ++++-------- .../random/ScriptFunctionRandomInteger.java | 40 ++++-------- .../impl/random/ScriptFunctionRandomLong.java | 40 ++++-------- .../impl/random/ScriptFunctionRandomUUID.java | 8 +-- .../impl/util/ScriptFunctionArrayOf.java | 13 ++-- .../impl/util/ScriptFunctionListOf.java | 14 ++-- .../impl/util/ScriptFunctionPrint.java | 11 +--- .../impl/util/ScriptFunctionRegexMatch.java | 38 ++++------- .../impl/util/ScriptFunctionRegexPattern.java | 21 ++---- .../impl/util/ScriptFunctionSetOf.java | 16 +++-- .../impl/util/ScriptFunctionShuffleArray.java | 24 ++----- .../zip/ScriptFunctionSmartUnzipFile.java | 40 ++++-------- .../impl/zip/ScriptFunctionSmartZipFile.java | 43 +++++------- .../impl/zip/ScriptFunctionUnzipFile.java | 34 ++++------ .../impl/zip/ScriptFunctionZipFile.java | 34 ++++------ .../impl/ScriptFunctionCreateHttpRequest.java | 27 ++------ 31 files changed, 266 insertions(+), 617 deletions(-) delete mode 100644 api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgTypeException.java delete mode 100644 api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgsCountException.java delete mode 100644 api/src/main/java/com/instancify/scriptify/api/script/function/argument/ScriptFunctionArgument.java diff --git a/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgTypeException.java b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgTypeException.java deleted file mode 100644 index fb185d8..0000000 --- a/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgTypeException.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.instancify.scriptify.api.exception; - -import java.util.Collection; -import java.util.stream.Collectors; - -/** - * Exception for script function argument type mismatches. - */ -@Deprecated -public class ScriptFunctionArgTypeException extends ScriptFunctionException { - - /** - * Creates an exception when argument types don't match. - * - * @param required The expected type - * @param provided The type that was given - */ - public ScriptFunctionArgTypeException(Class required, Class provided) { - super("Required argument type: " + required + ", passed: " + provided); - } - - /** - * Creates an exception when argument types don't match. - * - * @param required The expected types - * @param provided The type that was given - */ - public ScriptFunctionArgTypeException(Collection> required, Class provided) { - super("Required argument types: " + createRequiredClassNames(required) + ", passed: " + provided); - } - - private static String createRequiredClassNames(Collection> required) { - return required.stream().map(Class::getName).collect(Collectors.joining(" or ")); - } -} diff --git a/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgsCountException.java b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgsCountException.java deleted file mode 100644 index 8080c95..0000000 --- a/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgsCountException.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.instancify.scriptify.api.exception; - -/** - * Exception for when the count of arguments in a script function call is incorrect. - */ -@Deprecated -public class ScriptFunctionArgsCountException extends ScriptFunctionException { - - /** - * Creates an exception when the number of arguments doesn't match. - * - * @param required The expected number of arguments - * @param provided The number of arguments actually provided - */ - public ScriptFunctionArgsCountException(int required, int provided) { - super("Required number of arguments: " + required + ", passed: " + provided); - } -} diff --git a/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunction.java b/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunction.java index b2f3771..6613498 100644 --- a/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunction.java +++ b/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunction.java @@ -1,10 +1,6 @@ package com.instancify.scriptify.api.script.function; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * Represents a function that can be used within scripts. @@ -17,17 +13,4 @@ public interface ScriptFunction { * @return The function's name */ @NotNull String getName(); - - /** - * Invokes the function with the provided arguments. - * - * @param script The script in which the function will be invoked - * @param args The arguments to pass to the function - * @return The result of the function execution - * @throws ScriptFunctionException If there's an error during invocation - */ - @Deprecated - default @Nullable Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - return null; - } } diff --git a/api/src/main/java/com/instancify/scriptify/api/script/function/argument/ScriptFunctionArgument.java b/api/src/main/java/com/instancify/scriptify/api/script/function/argument/ScriptFunctionArgument.java deleted file mode 100644 index 1bcfad6..0000000 --- a/api/src/main/java/com/instancify/scriptify/api/script/function/argument/ScriptFunctionArgument.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.instancify.scriptify.api.script.function.argument; - -/** - * Represents an argument that can be passed to a script function. - */ -public interface ScriptFunctionArgument { - - /** - * Retrieves the value of this argument. - * - * @return The value of the argument - */ - Object getValue(); - - /** - * Retrieves type the of value of this argument. - * - * @return Type the value of the argument - */ - default Class getType() { - return this.getValue().getClass(); - } - - /** - * Checks if the value of this argument is an instance of the specified class. - * - * @param classOf The class to check against - * @return true if the value is an instance of the given class, false otherwise - */ - default boolean is(Class classOf) { - return classOf.isInstance(getValue()); - } - - /** - * Casts the value of this argument to the specified class type. - * - * @param The type to cast to - * @param classOf The class representing the type to cast to - * @return The value cast to the specified type - * @throws ClassCastException if the value cannot be cast to the specified type - */ - default T as(Class classOf) { - return classOf.cast(getValue()); - } - - /** - * Creates a new ScriptFunctionArgument with the given value. - * - * @param value The value to be wrapped as an argument - * @return A new ScriptFunctionArgument instance - */ - static ScriptFunctionArgument of(Object value) { - return new ScriptFunctionArgument() { - @Override - public Object getValue() { - return value; - } - - @Override - public String toString() { - return value.toString(); - } - }; - } -} diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java b/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java index 8f1ebd0..675b623 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java @@ -33,30 +33,30 @@ public StandardFunctionManager() { this.register(new ScriptFunctionListFiles()); this.register(new ScriptFunctionReadFile()); this.register(new ScriptFunctionWriteFile()); -// this.register(new ScriptFunctionZipFile()); -// this.register(new ScriptFunctionUnzipFile()); -// this.register(new ScriptFunctionSmartUnzipFile()); -// this.register(new ScriptFunctionSmartZipFile()); -// this.register(new ScriptFunctionNormalizePath()); -// this.register(new ScriptFunctionBase64Encode()); -// this.register(new ScriptFunctionBase64Decode()); -// this.register(new ScriptFunctionDownloadFromUrl()); -// this.register(new ScriptFunctionJoinPath()); -// this.register(new ScriptFunctionRandomUUID()); -// this.register(new ScriptFunctionRandomInteger()); -// this.register(new ScriptFunctionRandomLong()); -// this.register(new ScriptFunctionRandomFloat()); -// this.register(new ScriptFunctionRandomDouble()); -// this.register(new ScriptFunctionMD5()); -// this.register(new ScriptFunctionSHA256()); -// this.register(new ScriptFunctionExecCommand()); -// this.register(new ScriptFunctionEnv()); -// this.register(new ScriptFunctionShuffleArray()); -// this.register(new ScriptFunctionListOf()); -// this.register(new ScriptFunctionSetOf()); -// this.register(new ScriptFunctionArrayOf()); -// this.register(new ScriptFunctionRegexPattern()); -// this.register(new ScriptFunctionRegexMatch()); + this.register(new ScriptFunctionZipFile()); + this.register(new ScriptFunctionUnzipFile()); + this.register(new ScriptFunctionSmartZipFile()); + this.register(new ScriptFunctionSmartUnzipFile()); + this.register(new ScriptFunctionNormalizePath()); + this.register(new ScriptFunctionBase64Encode()); + this.register(new ScriptFunctionBase64Decode()); + this.register(new ScriptFunctionDownloadFromUrl()); + this.register(new ScriptFunctionJoinPath()); + this.register(new ScriptFunctionRandomUUID()); + this.register(new ScriptFunctionRandomInteger()); + this.register(new ScriptFunctionRandomLong()); + this.register(new ScriptFunctionRandomFloat()); + this.register(new ScriptFunctionRandomDouble()); + this.register(new ScriptFunctionMD5()); + this.register(new ScriptFunctionSHA256()); + this.register(new ScriptFunctionExecCommand()); + this.register(new ScriptFunctionEnv()); + this.register(new ScriptFunctionShuffleArray()); + this.register(new ScriptFunctionListOf()); + this.register(new ScriptFunctionSetOf()); + this.register(new ScriptFunctionArrayOf()); + this.register(new ScriptFunctionRegexPattern()); + this.register(new ScriptFunctionRegexMatch()); } @Override diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Decode.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Decode.java index 274c166..e73b6d3 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Decode.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Decode.java @@ -1,11 +1,8 @@ package com.instancify.scriptify.core.script.function.impl.crypto; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; import java.nio.charset.StandardCharsets; @@ -15,21 +12,16 @@ * Represents a function to decode base64 to string */ public class ScriptFunctionBase64Decode implements ScriptFunction { + @Override public @NotNull String getName() { return "base64decode"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length != 1) { - throw new ScriptFunctionArgsCountException(1, args.length); - } - - if (!(args[0].getValue() instanceof String str)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); - } - - return new String(Base64.getDecoder().decode(str), StandardCharsets.UTF_8); + @ExecuteAt + public String execute( + @Argument(name = "string") String string + ) { + return new String(Base64.getDecoder().decode(string), StandardCharsets.UTF_8); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Encode.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Encode.java index 7c30e0c..8f7abf6 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Encode.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Encode.java @@ -1,11 +1,8 @@ package com.instancify.scriptify.core.script.function.impl.crypto; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; import java.util.Base64; @@ -14,21 +11,16 @@ * Represents a function to encode string to base64 */ public class ScriptFunctionBase64Encode implements ScriptFunction { + @Override public @NotNull String getName() { return "base64encode"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length != 1) { - throw new ScriptFunctionArgsCountException(1, args.length); - } - - if (!(args[0].getValue() instanceof String str)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - - return Base64.getEncoder().encodeToString(str.getBytes()); + @ExecuteAt + public String execute( + @Argument(name = "string") String string + ) { + return Base64.getEncoder().encodeToString(string.getBytes()); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionMD5.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionMD5.java index 824f3b7..864e850 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionMD5.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionMD5.java @@ -1,11 +1,8 @@ package com.instancify.scriptify.core.script.function.impl.crypto; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; import java.math.BigInteger; @@ -17,21 +14,16 @@ * Represents a function to generate md5 hash for string */ public class ScriptFunctionMD5 implements ScriptFunction { + @Override public @NotNull String getName() { return "md5"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length != 1) { - throw new ScriptFunctionArgsCountException(1, args.length); - } - - if (!(args[0].getValue() instanceof String input)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - + @ExecuteAt + public String execute( + @Argument(name = "input") String input + ) { try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] messageDigest = md.digest(input.getBytes(StandardCharsets.UTF_8)); @@ -44,7 +36,7 @@ public Object invoke(Script script, ScriptFunctionArgument[] args) throws Scr } return hashtext; } catch (NoSuchAlgorithmException e) { - throw new ScriptFunctionException(e); + throw new RuntimeException(e); } } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionSHA256.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionSHA256.java index 08ac8b0..80416b2 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionSHA256.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionSHA256.java @@ -1,11 +1,8 @@ package com.instancify.scriptify.core.script.function.impl.crypto; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; import java.math.BigInteger; @@ -17,21 +14,16 @@ * Represents a function to generate sha256 hash for string */ public class ScriptFunctionSHA256 implements ScriptFunction { + @Override public @NotNull String getName() { return "sha256"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length != 1) { - throw new ScriptFunctionArgsCountException(1, args.length); - } - - if (!(args[0].getValue() instanceof String input)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - + @ExecuteAt + public String execute( + @Argument(name = "input") String input + ) { try { MessageDigest md = MessageDigest.getInstance("SHA-256"); byte[] messageDigest = md.digest(input.getBytes(StandardCharsets.UTF_8)); @@ -44,7 +36,7 @@ public Object invoke(Script script, ScriptFunctionArgument[] args) throws Scr } return hashtext; } catch (NoSuchAlgorithmException e) { - throw new ScriptFunctionException(e); + throw new RuntimeException(e); } } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDownloadFromUrl.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDownloadFromUrl.java index 92a8ed9..b63f20f 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDownloadFromUrl.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDownloadFromUrl.java @@ -1,11 +1,10 @@ package com.instancify.scriptify.core.script.function.impl.file; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; +import com.instancify.scriptify.api.script.function.annotation.Executor; import org.jetbrains.annotations.NotNull; import java.io.File; @@ -25,26 +24,17 @@ public class ScriptFunctionDownloadFromUrl implements ScriptFunction { return "downloadFromUrl"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length != 2) { - throw new ScriptFunctionArgsCountException(2, args.length); - } - - if (!(args[0].getValue() instanceof String url)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - if (!(args[1].getValue() instanceof String filePath)) { - throw new ScriptFunctionArgTypeException(String.class, args[1].getType()); - } - + @ExecuteAt + public void execute( + @Executor Script script, + @Argument(name = "url") String url, + @Argument(name = "filePath") String filePath + ) { try (InputStream in = new URI(url).toURL().openStream()) { File targetPath = script.getSecurityManager().getFileSystem().getFile(filePath); Files.copy(in, targetPath.toPath()); } catch (IOException | URISyntaxException e) { throw new RuntimeException(e); } - - return null; } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionJoinPath.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionJoinPath.java index 55ee2f8..864d903 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionJoinPath.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionJoinPath.java @@ -1,10 +1,8 @@ package com.instancify.scriptify.core.script.function.impl.file; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; /** @@ -17,20 +15,18 @@ public class ScriptFunctionJoinPath implements ScriptFunction { return "joinPath"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - String path = ""; - for (ScriptFunctionArgument arg : args) { - if (arg.getValue() instanceof String segment) { - if (path.isEmpty()) { - path += segment; - } else { - path += '/' + segment; - } + @ExecuteAt + public String execute( + @Argument(name = "args") String... args + ) { + StringBuilder path = new StringBuilder(); + for (String arg : args) { + if (path.isEmpty()) { + path.append(arg); } else { - throw new ScriptFunctionArgTypeException(String.class, args[1].getType()); + path.append('/').append(arg); } } - return path; + return path.toString(); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionNormalizePath.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionNormalizePath.java index 890cd1c..ceb6606 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionNormalizePath.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionNormalizePath.java @@ -1,11 +1,8 @@ package com.instancify.scriptify.core.script.function.impl.file; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; public class ScriptFunctionNormalizePath implements ScriptFunction { @@ -15,16 +12,10 @@ public class ScriptFunctionNormalizePath implements ScriptFunction { return "normalizePath"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length != 1) { - throw new ScriptFunctionArgsCountException(1, args.length); - } - - if (!(args[0].getValue() instanceof String path)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - + @ExecuteAt + public String execute( + @Argument(name = "path") String path + ) { return path.replace('\\', '/'); } } \ No newline at end of file diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionEnv.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionEnv.java index 2d11365..cf1399d 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionEnv.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionEnv.java @@ -1,11 +1,8 @@ package com.instancify.scriptify.core.script.function.impl.os; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; /** @@ -18,16 +15,10 @@ public class ScriptFunctionEnv implements ScriptFunction { return "env"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length != 1) { - throw new ScriptFunctionArgsCountException(1, args.length); - } - - if (!(args[0].getValue() instanceof String name)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - + @ExecuteAt + public String execute( + @Argument(name = "name") String name + ) { return System.getenv(name); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionExecCommand.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionExecCommand.java index bb9cef3..4c27655 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionExecCommand.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionExecCommand.java @@ -1,11 +1,8 @@ package com.instancify.scriptify.core.script.function.impl.os; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; import java.io.BufferedReader; @@ -22,16 +19,10 @@ public class ScriptFunctionExecCommand implements ScriptFunction { return "execCommand"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length != 1) { - throw new ScriptFunctionArgsCountException(1, args.length); - } - - if (!(args[0].getValue() instanceof String input)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - + @ExecuteAt + public String execute( + @Argument(name = "input") String input + ) { try { Process process = Runtime.getRuntime().exec(input); @@ -49,7 +40,7 @@ public Object invoke(Script script, ScriptFunctionArgument[] args) throws Scr } return message.toString(); } catch (IOException e) { - throw new ScriptFunctionException(e); + throw new RuntimeException(e); } } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomDouble.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomDouble.java index 3c7d8bc..43910cf 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomDouble.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomDouble.java @@ -1,11 +1,8 @@ package com.instancify.scriptify.core.script.function.impl.random; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; import java.util.Random; @@ -20,27 +17,18 @@ public class ScriptFunctionRandomDouble implements ScriptFunction { return "randomDouble"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - Random random = new Random(); - if (args.length > 2 || args.length < 1) throw new ScriptFunctionArgsCountException(1, args.length); - - if (args.length == 1) { - if (args[0].getValue() instanceof Number max) { - return random.nextDouble(max.doubleValue()); - } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getType()); - } - } + @ExecuteAt + public double execute( + @Argument(name = "max") Double max + ) { + return new Random().nextDouble(max); + } - if (args[0].getValue() instanceof Number min) { - if (args[1].getValue() instanceof Number max) { - return random.nextDouble(max.doubleValue() - min.doubleValue()) + min.doubleValue(); - } else { - throw new ScriptFunctionArgTypeException(Number.class, args[1].getType()); - } - } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getType()); - } + @ExecuteAt + public double execute( + @Argument(name = "min") Double min, + @Argument(name = "max") Double max + ) { + return new Random().nextDouble(min, max); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomFloat.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomFloat.java index 7201231..58b5e40 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomFloat.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomFloat.java @@ -1,11 +1,8 @@ package com.instancify.scriptify.core.script.function.impl.random; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; import java.util.Random; @@ -20,27 +17,18 @@ public class ScriptFunctionRandomFloat implements ScriptFunction { return "randomFloat"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - Random random = new Random(); - if (args.length > 2 || args.length < 1) throw new ScriptFunctionArgsCountException(1, args.length); - - if (args.length == 1) { - if (args[0].getValue() instanceof Number max) { - return random.nextFloat(max.floatValue()); - } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getType()); - } - } + @ExecuteAt + public float execute( + @Argument(name = "max") Float max + ) { + return new Random().nextFloat(max); + } - if (args[0].getValue() instanceof Number min) { - if (args[1].getValue() instanceof Number max) { - return random.nextFloat(max.floatValue() - min.floatValue()) + min.floatValue(); - } else { - throw new ScriptFunctionArgTypeException(Number.class, args[1].getType()); - } - } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getType()); - } + @ExecuteAt + public float execute( + @Argument(name = "min") Float min, + @Argument(name = "max") Float max + ) { + return new Random().nextFloat(min, max); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomInteger.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomInteger.java index a7c4ab8..076e824 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomInteger.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomInteger.java @@ -1,11 +1,8 @@ package com.instancify.scriptify.core.script.function.impl.random; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; import java.util.Random; @@ -20,27 +17,18 @@ public class ScriptFunctionRandomInteger implements ScriptFunction { return "randomInt"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - Random random = new Random(); - if (args.length > 2 || args.length < 1) throw new ScriptFunctionArgsCountException(1, args.length); - - if (args.length == 1) { - if (args[0].getValue() instanceof Number max) { - return random.nextInt(max.intValue()); - } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getType()); - } - } + @ExecuteAt + public int execute( + @Argument(name = "max") Integer max + ) { + return new Random().nextInt(max); + } - if (args[0].getValue() instanceof Number min) { - if (args[1].getValue() instanceof Number max) { - return random.nextInt(max.intValue() - min.intValue()) + min.intValue(); - } else { - throw new ScriptFunctionArgTypeException(Number.class, args[1].getType()); - } - } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getType()); - } + @ExecuteAt + public int execute( + @Argument(name = "min") Integer min, + @Argument(name = "max") Integer max + ) { + return new Random().nextInt(min, max); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomLong.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomLong.java index 123555f..3260a12 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomLong.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomLong.java @@ -1,11 +1,8 @@ package com.instancify.scriptify.core.script.function.impl.random; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; import java.util.Random; @@ -20,27 +17,18 @@ public class ScriptFunctionRandomLong implements ScriptFunction { return "randomLong"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - Random random = new Random(); - if (args.length > 2 || args.length < 1) throw new ScriptFunctionArgsCountException(1, args.length); - - if (args.length == 1) { - if (args[0].getValue() instanceof Number max) { - return random.nextLong(max.longValue()); - } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getType()); - } - } + @ExecuteAt + public long execute( + @Argument(name = "max") Long max + ) { + return new Random().nextLong(max); + } - if (args[0].getValue() instanceof Number min) { - if (args[1].getValue() instanceof Number max) { - return random.nextLong(max.longValue() - min.longValue()) + min.longValue(); - } else { - throw new ScriptFunctionArgTypeException(Number.class, args[1].getType()); - } - } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getType()); - } + @ExecuteAt + public long execute( + @Argument(name = "min") Long min, + @Argument(name = "max") Long max + ) { + return new Random().nextLong(min, max); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomUUID.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomUUID.java index 34762b9..63f183a 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomUUID.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomUUID.java @@ -1,9 +1,7 @@ package com.instancify.scriptify.core.script.function.impl.random; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; import java.util.UUID; @@ -18,8 +16,8 @@ public class ScriptFunctionRandomUUID implements ScriptFunction { return "randomUUID"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { + @ExecuteAt + public String execute() { return UUID.randomUUID().toString(); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionArrayOf.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionArrayOf.java index 8cb8a84..3c1c0a1 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionArrayOf.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionArrayOf.java @@ -1,9 +1,8 @@ package com.instancify.scriptify.core.script.function.impl.util; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; import java.util.Arrays; @@ -18,8 +17,10 @@ public class ScriptFunctionArrayOf implements ScriptFunction { return "arrayOf"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - return Arrays.stream(args).map(ScriptFunctionArgument::getValue).toArray(); + @ExecuteAt + public Object[] execute( + @Argument(name = "args") Object... args + ) { + return Arrays.stream(args).toArray(); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionListOf.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionListOf.java index 79b3221..1b7c0d3 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionListOf.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionListOf.java @@ -1,12 +1,12 @@ package com.instancify.scriptify.core.script.function.impl.util; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; import java.util.Arrays; +import java.util.List; /** * Represents a function to create a list from the passed arguments @@ -18,8 +18,10 @@ public class ScriptFunctionListOf implements ScriptFunction { return "listOf"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - return Arrays.stream(args).map(ScriptFunctionArgument::getValue).toList(); + @ExecuteAt + public List execute( + @Argument(name = "args") Object... args + ) { + return Arrays.asList(args); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionPrint.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionPrint.java index 7c1e2f1..5efd61c 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionPrint.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionPrint.java @@ -1,10 +1,8 @@ package com.instancify.scriptify.core.script.function.impl.util; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; import org.jetbrains.annotations.NotNull; import java.util.Arrays; @@ -20,17 +18,10 @@ public class ScriptFunctionPrint implements ScriptFunction { return "print"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) { - System.out.println(Arrays.stream(args).map(arg -> arg.getValue().toString()).collect(Collectors.joining(" "))); - return null; - } - @ExecuteAt - public Object execute( + public void execute( @Argument(name = "args") Object... args ) { System.out.println(Arrays.stream(args).map(Object::toString).collect(Collectors.joining(" "))); - return null; } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionRegexMatch.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionRegexMatch.java index 9526663..7c9f385 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionRegexMatch.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionRegexMatch.java @@ -1,14 +1,10 @@ package com.instancify.scriptify.core.script.function.impl.util; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; -import java.util.Set; import java.util.regex.Pattern; /** @@ -21,25 +17,19 @@ public class ScriptFunctionRegexMatch implements ScriptFunction { return "regex_match"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length != 2) { - throw new ScriptFunctionArgsCountException(1, args.length); - } - - Pattern pattern; - if (args[0].getValue() instanceof String regex) { - pattern = Pattern.compile(regex); - } else if (args[0].getValue() instanceof Pattern) { - pattern = (Pattern) args[0].getValue(); - } else { - throw new ScriptFunctionArgTypeException(Set.of(String.class, Pattern.class), args[0].getType()); - } - - if (!(args[1].getValue() instanceof String value)) { - throw new ScriptFunctionArgTypeException(String.class, args[1].getType()); - } + @ExecuteAt + public boolean execute( + @Argument(name = "regex") String regex, + @Argument(name = "value") String value + ) { + return Pattern.compile(regex).matcher(value).matches(); + } + @ExecuteAt + public boolean execute( + @Argument(name = "pattern") Pattern pattern, + @Argument(name = "value") String value + ) { return pattern.matcher(value).matches(); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionRegexPattern.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionRegexPattern.java index 76f7293..75f8429 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionRegexPattern.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionRegexPattern.java @@ -1,11 +1,8 @@ package com.instancify.scriptify.core.script.function.impl.util; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; import java.util.regex.Pattern; @@ -20,16 +17,10 @@ public class ScriptFunctionRegexPattern implements ScriptFunction { return "regex_pattern"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length != 1) { - throw new ScriptFunctionArgsCountException(1, args.length); - } - - if (!(args[0].getValue() instanceof String pattern)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - + @ExecuteAt + public Pattern execute( + @Argument(name = "pattern") String pattern + ) { return Pattern.compile(pattern); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionSetOf.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionSetOf.java index ef26939..6cfcc1d 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionSetOf.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionSetOf.java @@ -1,13 +1,13 @@ package com.instancify.scriptify.core.script.function.impl.util; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; import java.util.Arrays; -import java.util.stream.Collectors; +import java.util.HashSet; +import java.util.Set; /** * Represents a function to create a set from the passed arguments @@ -19,8 +19,10 @@ public class ScriptFunctionSetOf implements ScriptFunction { return "setOf"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - return Arrays.stream(args).map(ScriptFunctionArgument::getValue).collect(Collectors.toUnmodifiableSet()); + @ExecuteAt + public Set execute( + @Argument(name = "args") Object... args + ) { + return new HashSet<>(Arrays.asList(args)); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionShuffleArray.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionShuffleArray.java index 6aa22bf..873f43f 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionShuffleArray.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionShuffleArray.java @@ -1,11 +1,8 @@ package com.instancify.scriptify.core.script.function.impl.util; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -22,19 +19,12 @@ public class ScriptFunctionShuffleArray implements ScriptFunction { return "shuffleArray"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length != 1) { - throw new ScriptFunctionArgsCountException(1, args.length); - } - - if (!(args[0].getValue() instanceof List array)) { - throw new ScriptFunctionArgTypeException(List.class, args[0].getType()); - } - - List list = new ArrayList(array); + @ExecuteAt + public List execute( + @Argument(name = "array") List array + ) { + List list = new ArrayList<>(array); Collections.shuffle(list); - return list; } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java index a3fc5f2..93aa736 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java @@ -1,11 +1,10 @@ package com.instancify.scriptify.core.script.function.impl.zip; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; +import com.instancify.scriptify.api.script.function.annotation.Executor; import org.jetbrains.annotations.NotNull; import java.io.File; @@ -27,30 +26,19 @@ public class ScriptFunctionSmartUnzipFile implements ScriptFunction { return "smartUnzipFile"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length != 3) { - throw new ScriptFunctionArgsCountException(3, args.length); - } - - if (!(args[0].getValue() instanceof String compressedFilePath)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - if (!(args[1].getValue() instanceof String decompressedPath)) { - throw new ScriptFunctionArgTypeException(String.class, args[1].getType()); - } - if (!(args[2].getValue() instanceof List patterns)) { - throw new ScriptFunctionArgTypeException(List.class, args[2].getType()); - } - + @ExecuteAt + public void execute( + @Executor Script script, + @Argument(name = "compressedFilePath") String compressedFilePath, + @Argument(name = "decompressedPath") String decompressedPath, + @Argument(name = "patterns") List patterns + ) { try { - File fileCompressed = new File(compressedFilePath); - File fileDecompressed = new File(decompressedPath); + File fileCompressed = script.getSecurityManager().getFileSystem().getFile(compressedFilePath); + File fileDecompressed = script.getSecurityManager().getFileSystem().getFile(decompressedPath); // Convert patterns to regex patterns List regexPatterns = patterns.stream() - .filter(String.class::isInstance) - .map(String.class::cast) .map(Pattern::compile) .toList(); @@ -88,10 +76,8 @@ public Object invoke(Script script, ScriptFunctionArgument[] args) throws Scr zis.closeEntry(); } } catch (IOException e) { - throw new ScriptFunctionException(e); + throw new RuntimeException(e); } - - return null; } private File newFile(File destinationDir, ZipEntry zipEntry) throws IOException { diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartZipFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartZipFile.java index c658a6f..d48fcb4 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartZipFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartZipFile.java @@ -1,11 +1,10 @@ package com.instancify.scriptify.core.script.function.impl.zip; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; +import com.instancify.scriptify.api.script.function.annotation.Executor; import org.jetbrains.annotations.NotNull; import java.io.File; @@ -13,6 +12,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.util.List; +import java.util.Objects; import java.util.regex.Pattern; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -27,36 +27,25 @@ public class ScriptFunctionSmartZipFile implements ScriptFunction { return "smartZipFile"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length != 3) { - throw new ScriptFunctionArgsCountException(3, args.length); - } - - if (!(args[0].getValue() instanceof String filesPath)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - if (!(args[1].getValue() instanceof String compressedFilePath)) { - throw new ScriptFunctionArgTypeException(String.class, args[1].getType()); - } - if (!(args[2].getValue() instanceof List patterns)) { - throw new ScriptFunctionArgTypeException(List.class, args[2].getType()); - } - + @ExecuteAt + public void execute( + @Executor Script script, + @Argument(name = "filesPath") String filesPath, + @Argument(name = "compressedFilePath") String compressedFilePath, + @Argument(name = "patterns") List patterns + ) { try { - File filesToZip = new File(filesPath); - File compressedFile = new File(compressedFilePath); + File filesToZip = script.getSecurityManager().getFileSystem().getFile(filesPath); + File compressedFile = script.getSecurityManager().getFileSystem().getFile(compressedFilePath); FileOutputStream fos = new FileOutputStream(compressedFile); ZipOutputStream zipOut = new ZipOutputStream(fos); List regexPatterns = patterns.stream() - .filter(String.class::isInstance) - .map(String.class::cast) .map(Pattern::compile) .toList(); if (filesToZip.isDirectory()) { - for (File file : filesToZip.listFiles()) { + for (File file : Objects.requireNonNull(filesToZip.listFiles())) { String fileName = file.getName(); boolean matches = regexPatterns.stream().anyMatch(pattern -> pattern.matcher(fileName).matches()); @@ -69,10 +58,8 @@ public Object invoke(Script script, ScriptFunctionArgument[] args) throws Scr zipOut.close(); fos.close(); } catch (IOException e) { - throw new ScriptFunctionException(e); + throw new RuntimeException(e); } - - return null; } private void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException { diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionUnzipFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionUnzipFile.java index 60f6580..4dabb42 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionUnzipFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionUnzipFile.java @@ -1,11 +1,10 @@ package com.instancify.scriptify.core.script.function.impl.zip; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; +import com.instancify.scriptify.api.script.function.annotation.Executor; import org.jetbrains.annotations.NotNull; import java.io.File; @@ -25,22 +24,15 @@ public class ScriptFunctionUnzipFile implements ScriptFunction { return "unzipFile"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length != 2) { - throw new ScriptFunctionArgsCountException(2, args.length); - } - - if (!(args[0].getValue() instanceof String compressedFilePath)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - if (!(args[1].getValue() instanceof String decompressedPath)) { - throw new ScriptFunctionArgTypeException(String.class, args[1].getType()); - } - + @ExecuteAt + public void execute( + @Executor Script script, + @Argument(name = "compressedFilePath") String compressedFilePath, + @Argument(name = "decompressedPath") String decompressedPath + ) { try { - File fileCompressed = new File(compressedFilePath); - File fileDecompressed = new File(decompressedPath); + File fileCompressed = script.getSecurityManager().getFileSystem().getFile(compressedFilePath); + File fileDecompressed = script.getSecurityManager().getFileSystem().getFile(decompressedPath); byte[] buffer = new byte[1024]; ZipInputStream zis = new ZipInputStream(new FileInputStream(fileCompressed)); @@ -72,10 +64,8 @@ public Object invoke(Script script, ScriptFunctionArgument[] args) throws Scr zis.closeEntry(); zis.close(); } catch (IOException e) { - throw new ScriptFunctionException(e); + throw new RuntimeException(e); } - - return null; } private File newFile(File destinationDir, ZipEntry zipEntry) throws IOException { diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionZipFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionZipFile.java index f93cb86..eb5a6ae 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionZipFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionZipFile.java @@ -1,11 +1,10 @@ package com.instancify.scriptify.core.script.function.impl.zip; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; +import com.instancify.scriptify.api.script.function.annotation.Executor; import org.jetbrains.annotations.NotNull; import java.io.File; @@ -25,22 +24,15 @@ public class ScriptFunctionZipFile implements ScriptFunction { return "zipFile"; } - @Override - public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length != 2) { - throw new ScriptFunctionArgsCountException(2, args.length); - } - - if (!(args[0].getValue() instanceof String filePath)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - if (!(args[1].getValue() instanceof String compressedFilePath)) { - throw new ScriptFunctionArgTypeException(String.class, args[1].getType()); - } - + @ExecuteAt + public void execute( + @Executor Script script, + @Argument(name = "filePath") String filePath, + @Argument(name = "compressedFilePath") String compressedFilePath + ) { try { - File fileToZip = new File(filePath); - File compressedFile = new File(compressedFilePath); + File fileToZip = script.getSecurityManager().getFileSystem().getFile(filePath); + File compressedFile = script.getSecurityManager().getFileSystem().getFile(compressedFilePath); FileOutputStream fos = new FileOutputStream(compressedFile); ZipOutputStream zipOut = new ZipOutputStream(fos); @@ -49,10 +41,8 @@ public Object invoke(Script script, ScriptFunctionArgument[] args) throws Scr zipOut.close(); fos.close(); } catch (IOException e) { - throw new ScriptFunctionException(e); + throw new RuntimeException(e); } - - return null; } private void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException { diff --git a/http/src/main/java/com/instancify/scriptify/http/script/function/impl/ScriptFunctionCreateHttpRequest.java b/http/src/main/java/com/instancify/scriptify/http/script/function/impl/ScriptFunctionCreateHttpRequest.java index 0f88d2b..bf34c13 100644 --- a/http/src/main/java/com/instancify/scriptify/http/script/function/impl/ScriptFunctionCreateHttpRequest.java +++ b/http/src/main/java/com/instancify/scriptify/http/script/function/impl/ScriptFunctionCreateHttpRequest.java @@ -1,14 +1,10 @@ package com.instancify.scriptify.http.script.function.impl; -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; -import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import com.instancify.scriptify.api.script.function.annotation.Argument; +import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; import com.instancify.scriptify.http.script.function.data.HttpRequest; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * Represents a function create http request @@ -20,20 +16,11 @@ public class ScriptFunctionCreateHttpRequest implements ScriptFunction { return "createHttpRequest"; } - @Override - public @Nullable Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { - if (args.length != 2) { - throw new ScriptFunctionArgsCountException(2, args.length); - } - - if (!(args[0].getValue() instanceof String url)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); - } - - if (!(args[1].getValue() instanceof String method)) { - throw new ScriptFunctionArgTypeException(String.class, args[1].getType()); - } - + @ExecuteAt + public HttpRequest execute( + @Argument(name = "url") String url, + @Argument(name = "method") String method + ) { return new HttpRequest(url, method); } } From 5072e17810674c44bd5492475a99b5b465e03a7b Mon Sep 17 00:00:00 2001 From: MEFRREEX Date: Sun, 17 Aug 2025 23:58:04 +0400 Subject: [PATCH 3/6] chore: added javadoc for new exceptions --- ...unctionArgumentCountMismatchException.java | 22 +++++++++++++++---- ...FunctionArgumentTypeMismatchException.java | 22 +++++++++++++++---- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgumentCountMismatchException.java b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgumentCountMismatchException.java index d9ceb32..cb246e7 100644 --- a/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgumentCountMismatchException.java +++ b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgumentCountMismatchException.java @@ -1,11 +1,25 @@ package com.instancify.scriptify.api.exception; +/** + * Exception thrown when a function is called with + * an incorrect number of arguments. + */ public class ScriptFunctionArgumentCountMismatchException extends ScriptFunctionException { - public ScriptFunctionArgumentCountMismatchException(String functionName, - int expectedMin, - int expectedMax, - int provided) { + /** + * Creates a new exception for a mismatch in argument count. + * + * @param functionName The name of the function + * @param expectedMin The minimum number of expected arguments + * @param expectedMax The maximum number of expected arguments + * @param provided The number of arguments actually provided + */ + public ScriptFunctionArgumentCountMismatchException( + String functionName, + int expectedMin, + int expectedMax, + int provided + ) { super("Function '" + functionName + "' expects between " + expectedMin + " and " + expectedMax + " arguments, but got " + provided); } diff --git a/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgumentTypeMismatchException.java b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgumentTypeMismatchException.java index 906f36c..bdc5909 100644 --- a/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgumentTypeMismatchException.java +++ b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionArgumentTypeMismatchException.java @@ -1,11 +1,25 @@ package com.instancify.scriptify.api.exception; +/** + * Exception thrown when a function is called with arguments + * of incompatible types. + */ public class ScriptFunctionArgumentTypeMismatchException extends ScriptFunctionException { - public ScriptFunctionArgumentTypeMismatchException(String functionName, - int index, - Class expected, - Class actual) { + /** + * Creates a new exception for an argument type mismatch. + * + * @param functionName The name of the function + * @param index The index of the argument that failed validation + * @param expected The expected type of the argument + * @param actual The actual type of the provided argument + */ + public ScriptFunctionArgumentTypeMismatchException( + String functionName, + int index, + Class expected, + Class actual + ) { super("Function '" + functionName + "' argument #" + index + " expected type " + expected.getName() + " but got " + (actual == null ? "null" : actual.getName())); From 7e1fb5eb70ec4e82226422f2d20948a2371f69eb Mon Sep 17 00:00:00 2001 From: MEFRREEX Date: Mon, 18 Aug 2025 00:13:59 +0400 Subject: [PATCH 4/6] refactor: move base functions and constant to common module from core --- {security => common}/build.gradle.kts | 2 +- .../constant/CommonConstantManager.java | 13 +++++ .../constant/impl/ScriptConstantBaseDir.java | 22 ++++++++ .../constant/impl/ScriptConstantOsName.java | 20 +++++++ .../function/CommonFunctionManager.java | 53 +++++++++++++++++++ .../crypto/ScriptFunctionBase64Decode.java | 2 +- .../crypto/ScriptFunctionBase64Encode.java | 2 +- .../impl/crypto/ScriptFunctionMD5.java | 2 +- .../impl/crypto/ScriptFunctionSHA256.java | 2 +- .../impl/file/ScriptFunctionDeleteFile.java | 2 +- .../file/ScriptFunctionDownloadFromUrl.java | 2 +- .../impl/file/ScriptFunctionExistsFile.java | 2 +- .../impl/file/ScriptFunctionJoinPath.java | 2 +- .../impl/file/ScriptFunctionListFiles.java | 2 +- .../impl/file/ScriptFunctionMoveFile.java | 2 +- .../file/ScriptFunctionNormalizePath.java | 2 +- .../impl/file/ScriptFunctionReadFile.java | 2 +- .../impl/file/ScriptFunctionWriteFile.java | 2 +- .../function/impl/os/ScriptFunctionEnv.java | 2 +- .../impl/os/ScriptFunctionExecCommand.java | 2 +- .../random/ScriptFunctionRandomDouble.java | 2 +- .../random/ScriptFunctionRandomFloat.java | 2 +- .../random/ScriptFunctionRandomInteger.java | 2 +- .../impl/random/ScriptFunctionRandomLong.java | 2 +- .../impl/random/ScriptFunctionRandomUUID.java | 2 +- .../impl/util/ScriptFunctionArrayOf.java | 2 +- .../impl/util/ScriptFunctionListOf.java | 2 +- .../impl/util/ScriptFunctionPrint.java | 2 +- .../impl/util/ScriptFunctionRegexMatch.java | 2 +- .../impl/util/ScriptFunctionRegexPattern.java | 2 +- .../impl/util/ScriptFunctionSetOf.java | 2 +- .../impl/util/ScriptFunctionShuffleArray.java | 2 +- .../zip/ScriptFunctionSmartUnzipFile.java | 2 +- .../impl/zip/ScriptFunctionSmartZipFile.java | 2 +- .../impl/zip/ScriptFunctionUnzipFile.java | 2 +- .../impl/zip/ScriptFunctionZipFile.java | 2 +- .../constant/StandardConstantManager.java | 7 --- .../function/StandardFunctionManager.java | 47 ---------------- .../security/SecurityFileSystemImpl.java | 2 +- .../security/SecurityPathAccessorImpl.java | 2 +- .../security/StandardSecurityManager.java | 2 +- script-js-graalvm/build.gradle.kts | 2 +- .../instancify/scriptify/script/JsScript.java | 8 +-- script-js-rhino/build.gradle.kts | 2 +- .../instancify/scriptify/script/JsScript.java | 8 +-- settings.gradle.kts | 2 +- 46 files changed, 156 insertions(+), 98 deletions(-) rename {security => common}/build.gradle.kts (75%) create mode 100644 common/src/main/java/com/instancify/scriptify/common/script/constant/CommonConstantManager.java create mode 100644 common/src/main/java/com/instancify/scriptify/common/script/constant/impl/ScriptConstantBaseDir.java create mode 100644 common/src/main/java/com/instancify/scriptify/common/script/constant/impl/ScriptConstantOsName.java create mode 100644 common/src/main/java/com/instancify/scriptify/common/script/function/CommonFunctionManager.java rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/crypto/ScriptFunctionBase64Decode.java (91%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/crypto/ScriptFunctionBase64Encode.java (90%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/crypto/ScriptFunctionMD5.java (94%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/crypto/ScriptFunctionSHA256.java (94%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/file/ScriptFunctionDeleteFile.java (96%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/file/ScriptFunctionDownloadFromUrl.java (95%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/file/ScriptFunctionExistsFile.java (92%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/file/ScriptFunctionJoinPath.java (92%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/file/ScriptFunctionListFiles.java (94%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/file/ScriptFunctionMoveFile.java (93%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/file/ScriptFunctionNormalizePath.java (89%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/file/ScriptFunctionReadFile.java (93%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/file/ScriptFunctionWriteFile.java (94%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/os/ScriptFunctionEnv.java (90%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/os/ScriptFunctionExecCommand.java (95%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/random/ScriptFunctionRandomDouble.java (92%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/random/ScriptFunctionRandomFloat.java (92%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/random/ScriptFunctionRandomInteger.java (92%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/random/ScriptFunctionRandomLong.java (92%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/random/ScriptFunctionRandomUUID.java (88%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/util/ScriptFunctionArrayOf.java (90%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/util/ScriptFunctionListOf.java (91%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/util/ScriptFunctionPrint.java (91%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/util/ScriptFunctionRegexMatch.java (93%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/util/ScriptFunctionRegexPattern.java (90%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/util/ScriptFunctionSetOf.java (91%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/util/ScriptFunctionShuffleArray.java (91%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java (98%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/zip/ScriptFunctionSmartZipFile.java (98%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/zip/ScriptFunctionUnzipFile.java (97%) rename {core/src/main/java/com/instancify/scriptify/core => common/src/main/java/com/instancify/scriptify/common}/script/function/impl/zip/ScriptFunctionZipFile.java (97%) rename {security/src/main/java/com/instancify/scriptify => core/src/main/java/com/instancify/scriptify/core/script}/security/SecurityFileSystemImpl.java (93%) rename {security/src/main/java/com/instancify/scriptify => core/src/main/java/com/instancify/scriptify/core/script}/security/SecurityPathAccessorImpl.java (98%) rename {security/src/main/java/com/instancify/scriptify => core/src/main/java/com/instancify/scriptify/core/script}/security/StandardSecurityManager.java (96%) diff --git a/security/build.gradle.kts b/common/build.gradle.kts similarity index 75% rename from security/build.gradle.kts rename to common/build.gradle.kts index 70f5c43..943bd6a 100644 --- a/security/build.gradle.kts +++ b/common/build.gradle.kts @@ -7,5 +7,5 @@ repositories { } dependencies { - api(project(":api")) + api(project(":core")) } \ No newline at end of file diff --git a/common/src/main/java/com/instancify/scriptify/common/script/constant/CommonConstantManager.java b/common/src/main/java/com/instancify/scriptify/common/script/constant/CommonConstantManager.java new file mode 100644 index 0000000..480cd48 --- /dev/null +++ b/common/src/main/java/com/instancify/scriptify/common/script/constant/CommonConstantManager.java @@ -0,0 +1,13 @@ +package com.instancify.scriptify.common.script.constant; + +import com.instancify.scriptify.core.script.constant.StandardConstantManager; +import com.instancify.scriptify.core.script.constant.impl.ScriptConstantBaseDir; +import com.instancify.scriptify.core.script.constant.impl.ScriptConstantOsName; + +public class CommonConstantManager extends StandardConstantManager { + + public CommonConstantManager() { + this.register(new ScriptConstantOsName()); + this.register(new ScriptConstantBaseDir()); + } +} diff --git a/common/src/main/java/com/instancify/scriptify/common/script/constant/impl/ScriptConstantBaseDir.java b/common/src/main/java/com/instancify/scriptify/common/script/constant/impl/ScriptConstantBaseDir.java new file mode 100644 index 0000000..790729f --- /dev/null +++ b/common/src/main/java/com/instancify/scriptify/common/script/constant/impl/ScriptConstantBaseDir.java @@ -0,0 +1,22 @@ +package com.instancify.scriptify.common.script.constant.impl; + +import com.instancify.scriptify.api.script.constant.ScriptConstant; +import org.jetbrains.annotations.NotNull; + +import java.nio.file.Paths; + +/** + * Represents a constant with base dir + */ +public class ScriptConstantBaseDir implements ScriptConstant { + + @Override + public @NotNull String getName() { + return "baseDir"; + } + + @Override + public Object getValue() { + return Paths.get("").toAbsolutePath().toString(); + } +} diff --git a/common/src/main/java/com/instancify/scriptify/common/script/constant/impl/ScriptConstantOsName.java b/common/src/main/java/com/instancify/scriptify/common/script/constant/impl/ScriptConstantOsName.java new file mode 100644 index 0000000..2362724 --- /dev/null +++ b/common/src/main/java/com/instancify/scriptify/common/script/constant/impl/ScriptConstantOsName.java @@ -0,0 +1,20 @@ +package com.instancify.scriptify.common.script.constant.impl; + +import com.instancify.scriptify.api.script.constant.ScriptConstant; +import org.jetbrains.annotations.NotNull; + +/** + * Represents a constant with os name + */ +public class ScriptConstantOsName implements ScriptConstant { + + @Override + public @NotNull String getName() { + return "osName"; + } + + @Override + public Object getValue() { + return System.getProperty("os.name"); + } +} diff --git a/common/src/main/java/com/instancify/scriptify/common/script/function/CommonFunctionManager.java b/common/src/main/java/com/instancify/scriptify/common/script/function/CommonFunctionManager.java new file mode 100644 index 0000000..6428d9e --- /dev/null +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/CommonFunctionManager.java @@ -0,0 +1,53 @@ +package com.instancify.scriptify.common.script.function; + +import com.instancify.scriptify.common.script.function.impl.crypto.ScriptFunctionBase64Decode; +import com.instancify.scriptify.common.script.function.impl.crypto.ScriptFunctionBase64Encode; +import com.instancify.scriptify.common.script.function.impl.crypto.ScriptFunctionMD5; +import com.instancify.scriptify.common.script.function.impl.crypto.ScriptFunctionSHA256; +import com.instancify.scriptify.common.script.function.impl.file.*; +import com.instancify.scriptify.common.script.function.impl.os.ScriptFunctionEnv; +import com.instancify.scriptify.common.script.function.impl.os.ScriptFunctionExecCommand; +import com.instancify.scriptify.common.script.function.impl.random.*; +import com.instancify.scriptify.common.script.function.impl.util.*; +import com.instancify.scriptify.common.script.function.impl.zip.ScriptFunctionSmartUnzipFile; +import com.instancify.scriptify.common.script.function.impl.zip.ScriptFunctionSmartZipFile; +import com.instancify.scriptify.common.script.function.impl.zip.ScriptFunctionUnzipFile; +import com.instancify.scriptify.common.script.function.impl.zip.ScriptFunctionZipFile; +import com.instancify.scriptify.core.script.function.StandardFunctionManager; + +public class CommonFunctionManager extends StandardFunctionManager { + + public CommonFunctionManager() { + this.register(new ScriptFunctionPrint()); + this.register(new ScriptFunctionExistsFile()); + this.register(new ScriptFunctionDeleteFile()); + this.register(new ScriptFunctionMoveFile()); + this.register(new ScriptFunctionListFiles()); + this.register(new ScriptFunctionReadFile()); + this.register(new ScriptFunctionWriteFile()); + this.register(new ScriptFunctionZipFile()); + this.register(new ScriptFunctionUnzipFile()); + this.register(new ScriptFunctionSmartZipFile()); + this.register(new ScriptFunctionSmartUnzipFile()); + this.register(new ScriptFunctionNormalizePath()); + this.register(new ScriptFunctionBase64Encode()); + this.register(new ScriptFunctionBase64Decode()); + this.register(new ScriptFunctionDownloadFromUrl()); + this.register(new ScriptFunctionJoinPath()); + this.register(new ScriptFunctionRandomUUID()); + this.register(new ScriptFunctionRandomInteger()); + this.register(new ScriptFunctionRandomLong()); + this.register(new ScriptFunctionRandomFloat()); + this.register(new ScriptFunctionRandomDouble()); + this.register(new ScriptFunctionMD5()); + this.register(new ScriptFunctionSHA256()); + this.register(new ScriptFunctionExecCommand()); + this.register(new ScriptFunctionEnv()); + this.register(new ScriptFunctionShuffleArray()); + this.register(new ScriptFunctionListOf()); + this.register(new ScriptFunctionSetOf()); + this.register(new ScriptFunctionArrayOf()); + this.register(new ScriptFunctionRegexPattern()); + this.register(new ScriptFunctionRegexMatch()); + } +} diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Decode.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/crypto/ScriptFunctionBase64Decode.java similarity index 91% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Decode.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/crypto/ScriptFunctionBase64Decode.java index e73b6d3..3327e84 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Decode.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/crypto/ScriptFunctionBase64Decode.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.crypto; +package com.instancify.scriptify.common.script.function.impl.crypto; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Encode.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/crypto/ScriptFunctionBase64Encode.java similarity index 90% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Encode.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/crypto/ScriptFunctionBase64Encode.java index 8f7abf6..61f0a9a 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Encode.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/crypto/ScriptFunctionBase64Encode.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.crypto; +package com.instancify.scriptify.common.script.function.impl.crypto; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionMD5.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/crypto/ScriptFunctionMD5.java similarity index 94% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionMD5.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/crypto/ScriptFunctionMD5.java index 864e850..dce2fa6 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionMD5.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/crypto/ScriptFunctionMD5.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.crypto; +package com.instancify.scriptify.common.script.function.impl.crypto; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionSHA256.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/crypto/ScriptFunctionSHA256.java similarity index 94% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionSHA256.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/crypto/ScriptFunctionSHA256.java index 80416b2..038778a 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionSHA256.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/crypto/ScriptFunctionSHA256.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.crypto; +package com.instancify.scriptify.common.script.function.impl.crypto; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDeleteFile.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionDeleteFile.java similarity index 96% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDeleteFile.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionDeleteFile.java index c0c3674..e644c7a 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDeleteFile.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionDeleteFile.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.file; +package com.instancify.scriptify.common.script.function.impl.file; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDownloadFromUrl.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionDownloadFromUrl.java similarity index 95% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDownloadFromUrl.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionDownloadFromUrl.java index b63f20f..bc4b456 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDownloadFromUrl.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionDownloadFromUrl.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.file; +package com.instancify.scriptify.common.script.function.impl.file; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionExistsFile.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionExistsFile.java similarity index 92% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionExistsFile.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionExistsFile.java index 911ac8f..e3ffaa0 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionExistsFile.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionExistsFile.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.file; +package com.instancify.scriptify.common.script.function.impl.file; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionJoinPath.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionJoinPath.java similarity index 92% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionJoinPath.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionJoinPath.java index 864d903..dc98ef6 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionJoinPath.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionJoinPath.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.file; +package com.instancify.scriptify.common.script.function.impl.file; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionListFiles.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionListFiles.java similarity index 94% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionListFiles.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionListFiles.java index 6bc374a..1bc0f31 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionListFiles.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionListFiles.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.file; +package com.instancify.scriptify.common.script.function.impl.file; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionMoveFile.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionMoveFile.java similarity index 93% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionMoveFile.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionMoveFile.java index d0825ea..5caa306 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionMoveFile.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionMoveFile.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.file; +package com.instancify.scriptify.common.script.function.impl.file; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionNormalizePath.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionNormalizePath.java similarity index 89% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionNormalizePath.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionNormalizePath.java index ceb6606..ef5a27e 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionNormalizePath.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionNormalizePath.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.file; +package com.instancify.scriptify.common.script.function.impl.file; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionReadFile.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionReadFile.java similarity index 93% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionReadFile.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionReadFile.java index 05d721f..51e890f 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionReadFile.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionReadFile.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.file; +package com.instancify.scriptify.common.script.function.impl.file; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionWriteFile.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionWriteFile.java similarity index 94% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionWriteFile.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionWriteFile.java index 2f7f254..b784bc1 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionWriteFile.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/file/ScriptFunctionWriteFile.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.file; +package com.instancify.scriptify.common.script.function.impl.file; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionEnv.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/os/ScriptFunctionEnv.java similarity index 90% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionEnv.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/os/ScriptFunctionEnv.java index cf1399d..4249d4e 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionEnv.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/os/ScriptFunctionEnv.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.os; +package com.instancify.scriptify.common.script.function.impl.os; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionExecCommand.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/os/ScriptFunctionExecCommand.java similarity index 95% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionExecCommand.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/os/ScriptFunctionExecCommand.java index 4c27655..ed73166 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionExecCommand.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/os/ScriptFunctionExecCommand.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.os; +package com.instancify.scriptify.common.script.function.impl.os; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomDouble.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/random/ScriptFunctionRandomDouble.java similarity index 92% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomDouble.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/random/ScriptFunctionRandomDouble.java index 43910cf..3be5abd 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomDouble.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/random/ScriptFunctionRandomDouble.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.random; +package com.instancify.scriptify.common.script.function.impl.random; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomFloat.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/random/ScriptFunctionRandomFloat.java similarity index 92% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomFloat.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/random/ScriptFunctionRandomFloat.java index 58b5e40..df1b79e 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomFloat.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/random/ScriptFunctionRandomFloat.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.random; +package com.instancify.scriptify.common.script.function.impl.random; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomInteger.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/random/ScriptFunctionRandomInteger.java similarity index 92% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomInteger.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/random/ScriptFunctionRandomInteger.java index 076e824..ac676be 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomInteger.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/random/ScriptFunctionRandomInteger.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.random; +package com.instancify.scriptify.common.script.function.impl.random; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomLong.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/random/ScriptFunctionRandomLong.java similarity index 92% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomLong.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/random/ScriptFunctionRandomLong.java index 3260a12..b217e3c 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomLong.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/random/ScriptFunctionRandomLong.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.random; +package com.instancify.scriptify.common.script.function.impl.random; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomUUID.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/random/ScriptFunctionRandomUUID.java similarity index 88% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomUUID.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/random/ScriptFunctionRandomUUID.java index 63f183a..ffd71c8 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomUUID.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/random/ScriptFunctionRandomUUID.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.random; +package com.instancify.scriptify.common.script.function.impl.random; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.ExecuteAt; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionArrayOf.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionArrayOf.java similarity index 90% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionArrayOf.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionArrayOf.java index 3c1c0a1..495298a 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionArrayOf.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionArrayOf.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.util; +package com.instancify.scriptify.common.script.function.impl.util; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionListOf.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionListOf.java similarity index 91% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionListOf.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionListOf.java index 1b7c0d3..ee7310b 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionListOf.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionListOf.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.util; +package com.instancify.scriptify.common.script.function.impl.util; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionPrint.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionPrint.java similarity index 91% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionPrint.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionPrint.java index 5efd61c..d9ab03e 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionPrint.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionPrint.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.util; +package com.instancify.scriptify.common.script.function.impl.util; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionRegexMatch.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionRegexMatch.java similarity index 93% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionRegexMatch.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionRegexMatch.java index 7c9f385..9e96898 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionRegexMatch.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionRegexMatch.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.util; +package com.instancify.scriptify.common.script.function.impl.util; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionRegexPattern.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionRegexPattern.java similarity index 90% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionRegexPattern.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionRegexPattern.java index 75f8429..a29dd2c 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionRegexPattern.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionRegexPattern.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.util; +package com.instancify.scriptify.common.script.function.impl.util; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionSetOf.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionSetOf.java similarity index 91% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionSetOf.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionSetOf.java index 6cfcc1d..6cd241d 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionSetOf.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionSetOf.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.util; +package com.instancify.scriptify.common.script.function.impl.util; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionShuffleArray.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionShuffleArray.java similarity index 91% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionShuffleArray.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionShuffleArray.java index 873f43f..fd725d3 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionShuffleArray.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/util/ScriptFunctionShuffleArray.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.util; +package com.instancify.scriptify.common.script.function.impl.util; import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.annotation.Argument; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java similarity index 98% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java index 93aa736..b670137 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.zip; +package com.instancify.scriptify.common.script.function.impl.zip; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartZipFile.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/zip/ScriptFunctionSmartZipFile.java similarity index 98% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartZipFile.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/zip/ScriptFunctionSmartZipFile.java index d48fcb4..1b3a182 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartZipFile.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/zip/ScriptFunctionSmartZipFile.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.zip; +package com.instancify.scriptify.common.script.function.impl.zip; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionUnzipFile.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/zip/ScriptFunctionUnzipFile.java similarity index 97% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionUnzipFile.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/zip/ScriptFunctionUnzipFile.java index 4dabb42..bf01da4 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionUnzipFile.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/zip/ScriptFunctionUnzipFile.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.zip; +package com.instancify.scriptify.common.script.function.impl.zip; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionZipFile.java b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/zip/ScriptFunctionZipFile.java similarity index 97% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionZipFile.java rename to common/src/main/java/com/instancify/scriptify/common/script/function/impl/zip/ScriptFunctionZipFile.java index eb5a6ae..8f3b09f 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionZipFile.java +++ b/common/src/main/java/com/instancify/scriptify/common/script/function/impl/zip/ScriptFunctionZipFile.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl.zip; +package com.instancify.scriptify.common.script.function.impl.zip; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/constant/StandardConstantManager.java b/core/src/main/java/com/instancify/scriptify/core/script/constant/StandardConstantManager.java index e889c42..119155e 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/constant/StandardConstantManager.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/constant/StandardConstantManager.java @@ -2,8 +2,6 @@ import com.instancify.scriptify.api.script.constant.ScriptConstant; import com.instancify.scriptify.api.script.constant.ScriptConstantManager; -import com.instancify.scriptify.core.script.constant.impl.ScriptConstantBaseDir; -import com.instancify.scriptify.core.script.constant.impl.ScriptConstantOsName; import java.util.HashMap; import java.util.Map; @@ -12,11 +10,6 @@ public class StandardConstantManager implements ScriptConstantManager { private final Map constants = new HashMap<>(); - public StandardConstantManager() { - this.register(new ScriptConstantOsName()); - this.register(new ScriptConstantBaseDir()); - } - @Override public Map getConstants() { return constants; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java b/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java index 675b623..62d7062 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java @@ -4,19 +4,6 @@ import com.instancify.scriptify.api.script.function.ScriptFunctionManager; import com.instancify.scriptify.api.script.function.definition.ScriptFunctionDefinition; import com.instancify.scriptify.core.script.function.definition.ScriptFunctionDefinitionImpl; -import com.instancify.scriptify.core.script.function.impl.crypto.ScriptFunctionBase64Decode; -import com.instancify.scriptify.core.script.function.impl.crypto.ScriptFunctionBase64Encode; -import com.instancify.scriptify.core.script.function.impl.crypto.ScriptFunctionMD5; -import com.instancify.scriptify.core.script.function.impl.crypto.ScriptFunctionSHA256; -import com.instancify.scriptify.core.script.function.impl.file.*; -import com.instancify.scriptify.core.script.function.impl.os.ScriptFunctionEnv; -import com.instancify.scriptify.core.script.function.impl.os.ScriptFunctionExecCommand; -import com.instancify.scriptify.core.script.function.impl.random.*; -import com.instancify.scriptify.core.script.function.impl.util.*; -import com.instancify.scriptify.core.script.function.impl.zip.ScriptFunctionSmartUnzipFile; -import com.instancify.scriptify.core.script.function.impl.zip.ScriptFunctionSmartZipFile; -import com.instancify.scriptify.core.script.function.impl.zip.ScriptFunctionUnzipFile; -import com.instancify.scriptify.core.script.function.impl.zip.ScriptFunctionZipFile; import java.util.HashMap; import java.util.Map; @@ -25,40 +12,6 @@ public class StandardFunctionManager implements ScriptFunctionManager { private final Map functions = new HashMap<>(); - public StandardFunctionManager() { - this.register(new ScriptFunctionPrint()); - this.register(new ScriptFunctionExistsFile()); - this.register(new ScriptFunctionDeleteFile()); - this.register(new ScriptFunctionMoveFile()); - this.register(new ScriptFunctionListFiles()); - this.register(new ScriptFunctionReadFile()); - this.register(new ScriptFunctionWriteFile()); - this.register(new ScriptFunctionZipFile()); - this.register(new ScriptFunctionUnzipFile()); - this.register(new ScriptFunctionSmartZipFile()); - this.register(new ScriptFunctionSmartUnzipFile()); - this.register(new ScriptFunctionNormalizePath()); - this.register(new ScriptFunctionBase64Encode()); - this.register(new ScriptFunctionBase64Decode()); - this.register(new ScriptFunctionDownloadFromUrl()); - this.register(new ScriptFunctionJoinPath()); - this.register(new ScriptFunctionRandomUUID()); - this.register(new ScriptFunctionRandomInteger()); - this.register(new ScriptFunctionRandomLong()); - this.register(new ScriptFunctionRandomFloat()); - this.register(new ScriptFunctionRandomDouble()); - this.register(new ScriptFunctionMD5()); - this.register(new ScriptFunctionSHA256()); - this.register(new ScriptFunctionExecCommand()); - this.register(new ScriptFunctionEnv()); - this.register(new ScriptFunctionShuffleArray()); - this.register(new ScriptFunctionListOf()); - this.register(new ScriptFunctionSetOf()); - this.register(new ScriptFunctionArrayOf()); - this.register(new ScriptFunctionRegexPattern()); - this.register(new ScriptFunctionRegexMatch()); - } - @Override public Map getFunctions() { return functions; diff --git a/security/src/main/java/com/instancify/scriptify/security/SecurityFileSystemImpl.java b/core/src/main/java/com/instancify/scriptify/core/script/security/SecurityFileSystemImpl.java similarity index 93% rename from security/src/main/java/com/instancify/scriptify/security/SecurityFileSystemImpl.java rename to core/src/main/java/com/instancify/scriptify/core/script/security/SecurityFileSystemImpl.java index fe963b1..9f87eca 100644 --- a/security/src/main/java/com/instancify/scriptify/security/SecurityFileSystemImpl.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/security/SecurityFileSystemImpl.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.security; +package com.instancify.scriptify.core.script.security; import com.instancify.scriptify.api.script.security.SecurityFileSystem; import com.instancify.scriptify.api.script.security.SecurityPathAccessor; diff --git a/security/src/main/java/com/instancify/scriptify/security/SecurityPathAccessorImpl.java b/core/src/main/java/com/instancify/scriptify/core/script/security/SecurityPathAccessorImpl.java similarity index 98% rename from security/src/main/java/com/instancify/scriptify/security/SecurityPathAccessorImpl.java rename to core/src/main/java/com/instancify/scriptify/core/script/security/SecurityPathAccessorImpl.java index 3aea9d8..b4667a0 100644 --- a/security/src/main/java/com/instancify/scriptify/security/SecurityPathAccessorImpl.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/security/SecurityPathAccessorImpl.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.security; +package com.instancify.scriptify.core.script.security; import com.instancify.scriptify.api.script.security.ScriptSecurityManager; import com.instancify.scriptify.api.script.security.SecurityPathAccessor; diff --git a/security/src/main/java/com/instancify/scriptify/security/StandardSecurityManager.java b/core/src/main/java/com/instancify/scriptify/core/script/security/StandardSecurityManager.java similarity index 96% rename from security/src/main/java/com/instancify/scriptify/security/StandardSecurityManager.java rename to core/src/main/java/com/instancify/scriptify/core/script/security/StandardSecurityManager.java index cf5e971..574ab6e 100644 --- a/security/src/main/java/com/instancify/scriptify/security/StandardSecurityManager.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/security/StandardSecurityManager.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.security; +package com.instancify.scriptify.core.script.security; import com.instancify.scriptify.api.script.security.ScriptSecurityManager; import com.instancify.scriptify.api.script.security.SecurityPathAccessor; diff --git a/script-js-graalvm/build.gradle.kts b/script-js-graalvm/build.gradle.kts index 05daa86..6c13dec 100644 --- a/script-js-graalvm/build.gradle.kts +++ b/script-js-graalvm/build.gradle.kts @@ -7,7 +7,7 @@ repositories { } dependencies { - api(project(":security")) + api(project(":core")) api("org.graalvm.polyglot:polyglot:24.1.1") api("org.graalvm.polyglot:js:24.1.1") } \ No newline at end of file diff --git a/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsScript.java b/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsScript.java index a14485d..0b18261 100644 --- a/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsScript.java +++ b/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsScript.java @@ -8,7 +8,9 @@ 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.security.StandardSecurityManager; +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 org.graalvm.polyglot.Context; import org.graalvm.polyglot.HostAccess; import org.graalvm.polyglot.Value; @@ -16,8 +18,8 @@ public class JsScript implements Script { private final ScriptSecurityManager securityManager = new StandardSecurityManager(); - private ScriptFunctionManager functionManager; - private ScriptConstantManager constantManager; + private ScriptFunctionManager functionManager = new StandardFunctionManager(); + private ScriptConstantManager constantManager = new StandardConstantManager(); @Override public ScriptSecurityManager getSecurityManager() { diff --git a/script-js-rhino/build.gradle.kts b/script-js-rhino/build.gradle.kts index 3a03bcf..0e1519b 100644 --- a/script-js-rhino/build.gradle.kts +++ b/script-js-rhino/build.gradle.kts @@ -7,6 +7,6 @@ repositories { } dependencies { - api(project(":security")) + api(project(":core")) api("org.mozilla:rhino:1.8.0") } \ No newline at end of file diff --git a/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsScript.java b/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsScript.java index 3bc349c..bda70dd 100644 --- a/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsScript.java +++ b/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsScript.java @@ -7,7 +7,9 @@ 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.security.StandardSecurityManager; +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 org.mozilla.javascript.Context; import org.mozilla.javascript.ScriptableObject; @@ -15,8 +17,8 @@ public class JsScript implements Script { private final Context context = Context.enter(); private final ScriptSecurityManager securityManager = new StandardSecurityManager(); - private ScriptFunctionManager functionManager; - private ScriptConstantManager constantManager; + private ScriptFunctionManager functionManager = new StandardFunctionManager(); + private ScriptConstantManager constantManager = new StandardConstantManager(); public JsScript() { context.setWrapFactory(new JsWrapFactory()); diff --git a/settings.gradle.kts b/settings.gradle.kts index df8de18..11e590a 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,7 +1,7 @@ rootProject.name = "instancify-Scriptify" include("api") include("core") -include("security") +include("common") include("script-js-graalvm") include("script-js-rhino") include("http") From bfdb5421c519990498f739b1c8d1aa994cac88f8 Mon Sep 17 00:00:00 2001 From: MEFRREEX Date: Mon, 18 Aug 2025 00:22:07 +0400 Subject: [PATCH 5/6] chore: change version --- README.md | 12 ++++++------ build.gradle.kts | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b827f3f..9214958 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ For adding a library only: com.instancify.scriptify core - 1.4.0-SNAPSHOT + 1.4.1-SNAPSHOT ``` @@ -30,12 +30,12 @@ For adding a library with JS for Rhino or GraalVM: com.instancify.scriptify script-js-rhino - 1.4.0-SNAPSHOT + 1.4.1-SNAPSHOT com.instancify.scriptify script-js-graalvm - 1.4.0-SNAPSHOT + 1.4.1-SNAPSHOT ``` ## Gradle @@ -49,11 +49,11 @@ maven { For adding a library only: ```groovy -implementation "com.instancify.scriptify:core:1.4.0-SNAPSHOT" +implementation "com.instancify.scriptify:core:1.4.1-SNAPSHOT" ``` For adding a library with JS for Rhino or GraalVM: ```groovy -implementation "com.instancify.scriptify:script-js-rhino:1.4.0-SNAPSHOT" -implementation "com.instancify.scriptify:script-js-graalvm:1.4.0-SNAPSHOT" +implementation "com.instancify.scriptify:script-js-rhino:1.4.1-SNAPSHOT" +implementation "com.instancify.scriptify:script-js-graalvm:1.4.1-SNAPSHOT" ``` \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index f856ba6..b428289 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ java { allprojects { group = "com.instancify.scriptify" - version = "1.4.0-SNAPSHOT" + version = "1.4.1-SNAPSHOT" } subprojects { From bffa98cddcfa8c5db893a858167fdda09ad1b799 Mon Sep 17 00:00:00 2001 From: MEFRREEX Date: Mon, 18 Aug 2025 00:24:54 +0400 Subject: [PATCH 6/6] feat: added unmodifiable for getFunctions and getConstants --- .../api/script/constant/ScriptConstantManager.java | 3 ++- .../core/script/constant/StandardConstantManager.java | 6 ++++-- .../core/script/function/StandardFunctionManager.java | 6 ++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/com/instancify/scriptify/api/script/constant/ScriptConstantManager.java b/api/src/main/java/com/instancify/scriptify/api/script/constant/ScriptConstantManager.java index 0141ba1..0933546 100644 --- a/api/src/main/java/com/instancify/scriptify/api/script/constant/ScriptConstantManager.java +++ b/api/src/main/java/com/instancify/scriptify/api/script/constant/ScriptConstantManager.java @@ -1,6 +1,7 @@ package com.instancify.scriptify.api.script.constant; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.UnmodifiableView; import java.util.Map; @@ -14,7 +15,7 @@ public interface ScriptConstantManager { * * @return A map where keys are constant names and values are ScriptConstant instances */ - Map getConstants(); + @UnmodifiableView Map getConstants(); /** * Gets a specific constant by its name. diff --git a/core/src/main/java/com/instancify/scriptify/core/script/constant/StandardConstantManager.java b/core/src/main/java/com/instancify/scriptify/core/script/constant/StandardConstantManager.java index 119155e..b460636 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/constant/StandardConstantManager.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/constant/StandardConstantManager.java @@ -2,7 +2,9 @@ import com.instancify.scriptify.api.script.constant.ScriptConstant; import com.instancify.scriptify.api.script.constant.ScriptConstantManager; +import org.jetbrains.annotations.UnmodifiableView; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -11,8 +13,8 @@ public class StandardConstantManager implements ScriptConstantManager { private final Map constants = new HashMap<>(); @Override - public Map getConstants() { - return constants; + public @UnmodifiableView Map getConstants() { + return Collections.unmodifiableMap(constants); } @Override diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java b/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java index 62d7062..81e618a 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java @@ -4,7 +4,9 @@ import com.instancify.scriptify.api.script.function.ScriptFunctionManager; import com.instancify.scriptify.api.script.function.definition.ScriptFunctionDefinition; import com.instancify.scriptify.core.script.function.definition.ScriptFunctionDefinitionImpl; +import org.jetbrains.annotations.UnmodifiableView; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -13,8 +15,8 @@ public class StandardFunctionManager implements ScriptFunctionManager { private final Map functions = new HashMap<>(); @Override - public Map getFunctions() { - return functions; + public @UnmodifiableView Map getFunctions() { + return Collections.unmodifiableMap(functions); } @Override