mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 05:01:07 +00:00
Update javascript executor to work w/ compiled ts scripts that export a main function; add output to javalin storeRecordAssociatedScript
This commit is contained in:
@ -80,11 +80,20 @@ public class QJavaScriptExecutor implements QCodeExecutor
|
|||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
// wrap the user's code in an immediately-invoked function expression //
|
// wrap the user's code in an immediately-invoked function expression //
|
||||||
|
// if the user's code (%s below) returns - then our IIFE is done. //
|
||||||
|
// if the user's code doesn't return, but instead created a 'script' //
|
||||||
|
// variable, with a 'main' function on it (e.g., from a compiled //
|
||||||
|
// type script file), then call main function and return its result. //
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
String codeToRun = """
|
String codeToRun = """
|
||||||
(function userDefinedFunction()
|
(function userDefinedFunction()
|
||||||
{
|
{
|
||||||
%s
|
%s
|
||||||
|
|
||||||
|
if(script && script.main)
|
||||||
|
{
|
||||||
|
return (script.main());
|
||||||
|
}
|
||||||
})();
|
})();
|
||||||
""".formatted(code);
|
""".formatted(code);
|
||||||
|
|
||||||
|
@ -100,6 +100,34 @@ class ExecuteCodeActionTest
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
@Test
|
||||||
|
void testCompiledFromTypeScript() throws QException
|
||||||
|
{
|
||||||
|
OneTestOutput oneTestOutput = testOne(4, """
|
||||||
|
var script = (function (exports) {
|
||||||
|
|
||||||
|
function cooling() {
|
||||||
|
output.setD(7);
|
||||||
|
return (output);
|
||||||
|
}
|
||||||
|
|
||||||
|
cooling();
|
||||||
|
|
||||||
|
exports.cooling = cooling;
|
||||||
|
|
||||||
|
return exports;
|
||||||
|
})({});
|
||||||
|
""");
|
||||||
|
assertEquals(7, oneTestOutput.testOutput().getD());
|
||||||
|
assertTrue(oneTestOutput.executeCodeOutput().getOutput() instanceof TestOutput);
|
||||||
|
assertEquals(7, ((TestOutput) oneTestOutput.executeCodeOutput().getOutput()).getD());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
**
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
@ -109,6 +109,7 @@ import com.kingsrook.qqq.backend.core.utils.StringUtils;
|
|||||||
import com.kingsrook.qqq.backend.core.utils.ValueUtils;
|
import com.kingsrook.qqq.backend.core.utils.ValueUtils;
|
||||||
import io.javalin.Javalin;
|
import io.javalin.Javalin;
|
||||||
import io.javalin.apibuilder.EndpointGroup;
|
import io.javalin.apibuilder.EndpointGroup;
|
||||||
|
import io.javalin.http.ContentType;
|
||||||
import io.javalin.http.Context;
|
import io.javalin.http.Context;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
@ -1113,6 +1114,8 @@ public class QJavalinImplementation
|
|||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
private static void storeRecordAssociatedScript(Context context)
|
private static void storeRecordAssociatedScript(Context context)
|
||||||
{
|
{
|
||||||
|
context.contentType(ContentType.APPLICATION_JSON);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
StoreAssociatedScriptInput input = new StoreAssociatedScriptInput(qInstance);
|
StoreAssociatedScriptInput input = new StoreAssociatedScriptInput(qInstance);
|
||||||
@ -1128,7 +1131,7 @@ public class QJavalinImplementation
|
|||||||
StoreAssociatedScriptAction storeAssociatedScriptAction = new StoreAssociatedScriptAction();
|
StoreAssociatedScriptAction storeAssociatedScriptAction = new StoreAssociatedScriptAction();
|
||||||
storeAssociatedScriptAction.run(input, output);
|
storeAssociatedScriptAction.run(input, output);
|
||||||
|
|
||||||
context.result(JsonUtils.toJson("OK"));
|
context.result(JsonUtils.toJson(output));
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user