/// <summary> /// creates a new <see cref="ScriptExecutor"/> /// </summary> /// <param name="logger">used for logging in script</param> /// <param name="compiler">compiler used to parse script</param> /// <param name="name">name of script to execute</param> /// <param name="revision">revision of script to execute</param> public ScriptExecutor(WorkableLogger logger, IScriptCompiler compiler, string name, int?revision) { this.logger = logger; this.compiler = compiler; this.name = name; this.revision = revision; }
/// <summary> /// creates a new <see cref="WorkableExecutor"/> /// </summary> /// <param name="logger">used for logging in workflow</param> /// <param name="workflowservice">access to workflow data</param> /// <param name="compiler">compiled workflows</param> /// <param name="executor">executes compiled workflows</param> /// <param name="name">name of workflow to execute</param> /// <param name="revision">workflow revision (optional)</param> public LuaWorkableExecutor(WorkableLogger logger, IWorkflowService workflowservice, IWorkflowCompiler compiler, IWorkflowExecutionService executor, string name, int?revision) { this.logger = logger; this.workflowservice = workflowservice; this.compiler = compiler; this.executor = executor; this.name = name; this.revision = revision; }
/// <summary> /// creates a new <see cref="WorkflowInstanceState"/> /// </summary> /// <param name="workflow">currently executing workflow</param> /// <param name="logger">access to logging</param> /// <param name="variables">workflow state variables</param> /// <param name="workflowprovider">provides workflows by name</param> /// <param name="workflowexecutor">executor for workflows</param> /// <param name="language">default language used for code execution</param> /// <param name="profiling">determines whether to profile performance</param> public WorkflowInstanceState(WorkflowIdentifier workflow, WorkableLogger logger, StateVariableProvider variables, Func <string, Task <WorkflowInstance> > workflowprovider, IWorkflowExecutionService workflowexecutor, ScriptLanguage?language, bool profiling) { this.workflowprovider = workflowprovider; Logger = logger; Variables = variables; WorkflowExecutor = workflowexecutor; Language = language; Profiling = profiling; Workflow = workflow; }
/// <inheritdoc /> public object Execute(IVariableProvider variables) { if (variables == null) { throw new InvalidOperationException("Javascript execution needs global variables"); } Engine engine = new Engine { ClrTypeConverter = new JavascriptTypeConverter() }; WorkableLogger logger = variables.GetProvider("log").GetVariable("log") as WorkableLogger; engine.SetValue("load", importservice.Clone(logger)); engine.SetValue("await", (Func <Task, object>)Helpers.Tasks.AwaitTask); foreach (string name in variables.Variables) { object hostobject = variables[name]; if (hostobject == null) { // v8 doesn't like null host objects continue; } engine.SetValue(name, hostobject); } switch (language) { case ScriptLanguage.JavaScript: script ??= new JavaScriptParser(code).ParseScript(); return(engine.Execute(script).GetCompletionValue().ToObject()); case ScriptLanguage.TypeScript: string transpiled = ReactEnvironment.Current.Babel.Transform($"function main():any{{{code}}}\nvar _result=main();", "unknown.ts"); script ??= new JavaScriptParser(transpiled).ParseScript(); engine.Execute(script); return(engine.GetValue("_result").ToObject()); default: throw new ArgumentException($"Unsupported language '{language}' as JavaScript"); } }
/// <summary> /// creates a new <see cref="ScriptImportService"/> /// </summary> /// <param name="serviceprovider">used for service access</param> /// <param name="logger">logger used for script and workflow logging</param> public LuaImportService(IServiceProvider serviceprovider, WorkableLogger logger) { this.serviceprovider = serviceprovider; this.logger = logger; }
/// <inheritdoc /> public IScriptImportService Clone(WorkableLogger logger) { return(new ScriptImportService(serviceprovider, logger)); }
/// <summary> /// creates a new <see cref="ScriptImportService"/> /// </summary> /// <param name="serviceprovider">used for service access</param> /// <param name="logger">logger used for script and workflow logging</param> public ScriptImportService(IServiceProvider serviceprovider, WorkableLogger logger = null) { this.serviceprovider = serviceprovider; this.logger = logger; }
public IScriptImportService Clone(WorkableLogger logger) { return(this); }