Exemple #1
0
 /// <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;
 }
Exemple #4
0
        /// <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");
            }
        }
Exemple #5
0
 /// <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;
 }
Exemple #8
0
 public IScriptImportService Clone(WorkableLogger logger)
 {
     return(this);
 }