Exemplo n.º 1
0
        /// <summary>
        /// Method to use for running Javascript Files.
        /// </summary>
        /// <param name="filePath">Path to JS or JSE File</param>
        public void RunScript(object filePath)
        {
            try
            {
                /* CODIGO JINTENGINE VIEJO
                Engine engine = new Engine(cfg => cfg.AllowClr(typeof(NinoJS.Resources.SQL).Assembly))
                    .SetValue("log", new Action<object>(Console.WriteLine));
                engine.Execute(fileContent);
                */

                string fileContent = new StreamReader(filePath.ToString()).ReadToEnd();

                var engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging);
                var typeCollection = new HostTypeCollection("mscorlib", "System", "System.Core", "NinoJS.Resources");
                engine.AddHostObject("clr", typeCollection);
                engine.AddHostObject("host", new HostFunctions());
                engine.AddHostObject("extendedHost", new ExtendedHostFunctions());
                engine.AddHostObject("console", new NinoJS.Core.Helpers.Console());

                engine.Execute(fileContent);
            }
            catch (Exception ex)
            {
                System.Console.WriteLine(ex.ToString());
                log.LogError(ex.ToString());
            }
        }
Exemplo n.º 2
0
 protected override ElementString TranslateToElementString(string sRawString, int nCardIndex, DeckLine zDeckLine, ProjectLayoutElement zElement)
 {
     using (var engine = new V8ScriptEngine())
     {
         var sScript = GetJavaScript(nCardIndex, zDeckLine, sRawString);
         try
         {
             var sValue = engine.Evaluate(sScript);
             if (sValue is string || sValue is int)
             {
                 return new ElementString()
                 {
                     String = sValue.ToString()
                 };
             }
             else
             {
                 Logger.AddLogLine(sValue.GetType().ToString());
             }
         }
         catch (Exception e)
         {
             Logger.AddLogLine(e.Message);
         }
     }
     return new ElementString()
     {
         String = string.Empty
     };
 }
Exemplo n.º 3
0
            public void RunScript(string script)
            {
                Console.WriteLine("[{0}] {1} clicked Run Script", DateTime.Now, Context.ConnectionId);

                if (jContext == null)
                {
                    jContext = new V8ScriptEngine();
                    jContext.AddHostObject("map", map);
                    jContext.AddHostType("Console", typeof(Console));
                }

                try
                {
                    jContext.Evaluate(script);
                }
                catch (ScriptEngineException ex)
                {
                    Clients.All.receiveMessage("JavaScript Engine:" + ex.Message + "<br>");
                }

                foreach (var token in map.GetTokenList())
                {
                    Clients.All.onTokenMoved(token.Id, token.X, token.Y, "nobody");
                }
            }
Exemplo n.º 4
0
 public IJSPlayer(string fileFullPath, ILog iLog)
 {
     this.iLog = iLog;
     engin = new V8ScriptEngine();
     engin.Execute(File.ReadAllText(fileFullPath));
     engin.AddHostObject("Console", iLog);
 }
Exemplo n.º 5
0
 public Engine()
 {
     engine = new V8ScriptEngine (V8ScriptEngineFlags.EnableDebugging);
     engine.AddHostObject ("dotnet", new Microsoft.ClearScript.HostTypeCollection ("mscorlib", "System.Core"));
     engine.AddHostType ("WinJS_KeyUtil", typeof (KeyUtil));
     engine.AddHostType ("WinJS_FileUtils", typeof (FileUtils));
     engine.AddHostObject ("WinJS_host", new Microsoft.ClearScript.HostFunctions ());
 }
 private dynamic Merge(Product site, Product user)
 {
     var engine = new V8ScriptEngine();
     var underscore = File.ReadAllText("scripts/underscore.min.js");
     engine.Execute(underscore);
     engine.Execute("function extend(thing1, thing2) { return _.extend({}, thing1, thing2) }");
     var product = engine.Script.extend(site, user);
     return product;
 }
Exemplo n.º 7
0
        public Markdownify(Options options, RenderMethods rendereMethods, V8ScriptEngine engine)
        {
            this.engine = engine;

            var markedJsText = GetMarkedJsText();
            engine.Execute(markedJsText);

            var js = GetContructionJs(options, rendereMethods);
            engine.Execute(js);
        }
        public void Can_Perform_JS_ToLower_On_A_Passed_String()
        {
            using (var engine = new V8ScriptEngine(V8ScriptEngineFlags.DisableGlobalMembers))
            {
                engine.Script.MyString = "Just a test string";
                engine.AddHostType("Console", typeof(Console));

                engine.Execute("Console.WriteLine ('Length of MyString = {0}', MyString.toLowerCase())");
            }
        }
Exemplo n.º 9
0
        public static HtmlDocumentFacade ProcessServerSideScripts(this HtmlDocumentFacade doc)
        {
            var scripts = doc.getElementsByTagName("script");
            var noSideScripts = scripts
                .Where(_TestForNoSide);
            var noSideScriptsList = noSideScripts.ToList();
            noSideScriptsList.ForEach(node =>
            {
                node.parentNode.removeChild(node);
            });
            var serverSideScripts = scripts
                .Where(_TestForServerSide)
                .Where(_TestForRealScript)
            ;
            var sb = new StringBuilder();
            //serverSideScripts = serverSideScripts.Where(node => string.IsNullOrEmpty(node.getAttribute(ModelAttribute)));
            var serverSideScriptsList = serverSideScripts.ToList();
            serverSideScriptsList.ForEach(node =>
            {
                string src = node.getAttribute("src");
                if (string.IsNullOrEmpty(src))
                {
                    sb.AppendLine(node.innerHTML);
                }
                else
                {
                    sb.AppendLine(doc.GetHostContent(src));
                }
                if (!_TestForClientSide(node))
                {
                    node.parentNode.removeChild(node);
                }
            });
            string script = sb.ToString();
            if (script.Length > 0)
            {
                // Initialize a context
                script = sb.ToString();
                using (var engine = new V8ScriptEngine())
                {
                    var jqueryFacade = new JQueryFacade(doc);
                    engine.AddHostObject("console", new Console());
                    engine.AddHostObject("document", doc);
                    engine.AddHostObject("jQueryServerSideFacade", jqueryFacade);
                    engine.Execute("var " + modeParameter + "='server'");
                    if (doc.ProcessContext.Model != null)
                    {
                        engine.AddHostObject("model", doc.ProcessContext.Model);
                    }
                    engine.Execute(script);
                }
            }

            return doc;
        }
Exemplo n.º 10
0
        public ContentEngine(IServiceRegistry serviceRegistry, IModScriptRegistry scriptRegistry,
            ICEResourceService resourceService) {
            _serviceRegistry = serviceRegistry;
            _scriptRegistry = scriptRegistry;
            _resourceService = resourceService;
            _logger = MainLog.Logger;
            _engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging);

            RegisterServices();
            RegisterDefaultTypes();
        }
        public static void Main()
        {
            using (var engine = new V8ScriptEngine(typeof(ClearScriptConsole).Name, V8ScriptEngineFlags.EnableDebugging))
            {
                engine.AddHostObject("host", new ExtendedHostFunctions());
                engine.AddHostObject("lib", HostItemFlags.GlobalMembers, new HostTypeCollection("mscorlib", "System", "System.Core", "ClearScript"));
                engine.AllowReflection = true;

                RunStartupFile(engine);
                RunConsole(engine);
            }
        }
        public void Can_Perform_JS_ToLower_On_An_Object_Property()
        {
            using (var engine = new V8ScriptEngine(V8ScriptEngineFlags.DisableGlobalMembers))
            {
                var myObject = new {MyString = "Just a test string"};

                engine.Script.MyString = "Just a test string";
                engine.AddHostType("Console", typeof(Console));
                engine.AddHostObject("myObject", myObject);

                engine.Execute("Console.WriteLine ('Length of MyString = {0}', myObject.MyString.toLowerCase())");
            }
        }
        /// <summary>
        /// Builds and returns a requirer to include with an engine.
        /// </summary>
        /// <param name="compiler">Compiles the required scripts if needed.</param>
        /// <param name="engine">The engine that will run the required script.</param>
        /// <returns></returns>
        internal static Requirer BuildRequirer(ScriptCompiler compiler, V8ScriptEngine engine)
        {
            var requirer = new Requirer
            {
                Compiler = compiler,
                Engine = engine
            };

            //Need to add this as a host object to the script
            requirer.Engine.AddHostObject("require", new Func<string, object>(requirer.Require));
            requirer.Engine.AddHostObject("requireNamed", new Func<string, string, object>(requirer.Require));

            return requirer;
        }
Exemplo n.º 14
0
        public string Render(string path)
        {
            using (var engine = new V8ScriptEngine())
            {
                Environment.CurrentDirectory = Path.GetDirectoryName(path);

                engine.AddHostType("externalFS", typeof(FsModule));

                engine.Execute("jade.js", Resources.jade);

                var result = (string)engine.Script.jade.renderFile(path);

                return result;
            }
        }
Exemplo n.º 15
0
        public ClearScriptEngine(IHandlebarsResourceProvider resourceProvider)
        {
            Console.Out.WriteLine("ClearScriptEngine Loaded");

            _resourceProvider = resourceProvider;

            _context = new V8ScriptEngine();
            _context.AddHostObject("clearScriptBridge", 
                                   HostItemFlags.GlobalMembers,
                                   new ClearScriptBridgeFunctions(_context, _resourceProvider));

            // _context.Script.moduleLoader = new ModuleLoader(_context);
            // _context.Execute(File.ReadAllText("require.js"));
            // _context.Execute(@"require.load = function(context, name, url) { moduleLoader.LoadModuleAsync(context, name, url); };");
                
            _context.Execute("var raw = [];");
            _context.Execute("require('./Script/handlebars-1.0.0.js');");
            foreach (var script in HandlebarsConfiguration.Instance.Include)
            {
                _context.Execute("require('./" + script.Source + "');"); 
            }

        }
Exemplo n.º 16
0
        public String V8Build(String view, object modal)
        {
            String result = String.Empty;

            using (var engine = new V8ScriptEngine())
            {
                engine.Execute(Juicer);

                engine.Script.view = view;

                var modal_script = "modal = " + JsonConvert.SerializeObject(modal);

                engine.Execute(modal_script);

                result = engine.Invoke("juicer", engine.Script.view, engine.Script.modal);
            }

            return result.ToString();
        }
Exemplo n.º 17
0
 public ReflectableAssembly(Assembly assembly, V8ScriptEngine evaluator)
 {
     this.evaluator = evaluator;
     Assembly       = assembly;
 }
Exemplo n.º 18
0
        public void PropertyBag_MultiEngine_Parallel()
        {
            // This is a torture test for ConcurrentWeakSet and general engine teardown/cleanup.
            // It has exposed some very tricky engine bugs.

            var bag = new PropertyBag();
            engine.AddHostObject("bag", bag);

            const int threadCount = 256;
            var engineCount = 0;

            // 32-bit V8 starts failing requests to create new contexts rather quickly. This is
            // because each V8 isolate requires (among other things) a 32MB address space
            // reservation. 64-bit V8 reserves much larger blocks but benefits from the enormous
            // available address space.

            var maxV8Count = Environment.Is64BitProcess ? 128 : 16;
            var maxJScriptCount = (threadCount - maxV8Count) / 2;

            var startEvent = new ManualResetEventSlim(false);
            var checkpointEvent = new ManualResetEventSlim(false);
            var continueEvent = new ManualResetEventSlim(false);
            var stopEvent = new ManualResetEventSlim(false);

            ParameterizedThreadStart body = arg =>
            {
                // ReSharper disable AccessToDisposedClosure

                var index = (int)arg;
                startEvent.Wait();

                ScriptEngine scriptEngine;
                if (index < maxV8Count)
                {
                    scriptEngine = new V8ScriptEngine();
                }
                else if (index < (maxV8Count + maxJScriptCount))
                {
                    scriptEngine = new JScriptEngine();
                }
                else
                {
                    scriptEngine = new VBScriptEngine();
                }

                scriptEngine.AddHostObject("bag", bag);
                if (Interlocked.Increment(ref engineCount) == threadCount)
                {
                    checkpointEvent.Set();
                }

                continueEvent.Wait();

                scriptEngine.Dispose();
                if (Interlocked.Decrement(ref engineCount) == 0)
                {
                    stopEvent.Set();
                }

                // ReSharper restore AccessToDisposedClosure
            };

            var threads = Enumerable.Range(0, threadCount).Select(index => new Thread(body)).ToArray();
            threads.ForEach((thread, index) => thread.Start(index));

            startEvent.Set();
            checkpointEvent.Wait();
            Assert.AreEqual(threadCount + 1, bag.EngineCount);

            continueEvent.Set();
            stopEvent.Wait();
            GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
            Assert.AreEqual(1, bag.EngineCount);

            Array.ForEach(threads, thread => thread.Join());
            startEvent.Dispose();
            checkpointEvent.Dispose();
            continueEvent.Dispose();
            stopEvent.Dispose();
        }
Exemplo n.º 19
0
 private V8ScriptItem(V8ScriptEngine engine, IV8Object target)
 {
     this.engine = engine;
     this.target = target;
 }
Exemplo n.º 20
0
        public void Test()
        {
            // create a script engine

            using (var engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDynamicModuleImports))

            {
                // expose a host type

                engine.AddHostType("Console", typeof(Console));

                engine.Execute("Console.WriteLine('{0} is an interesting number.', Math.PI)");



                // expose a host object

                engine.AddHostObject("random", new Random());

                engine.Execute("Console.WriteLine(random.NextDouble())");



                // expose entire assemblies

                engine.AddHostObject("lib", new HostTypeCollection("mscorlib", "System.Core"));

                engine.Execute("Console.WriteLine(lib.System.DateTime.Now)");



                // create a host object from script

                engine.Execute(@"

        birthday = new lib.System.DateTime(2007, 5, 22);

        Console.WriteLine(birthday.ToLongDateString());

    ");



                // use a generic class from script

                engine.Execute(@"

        Dictionary = lib.System.Collections.Generic.Dictionary;

        dict = new Dictionary(lib.System.String, lib.System.Int32);

        dict.Add('foo', 123);

    ");



                // call a host method with an output parameter

                engine.AddHostObject("host", new HostFunctions());

                engine.Execute(@"

        intVar = host.newVar(lib.System.Int32);

        found = dict.TryGetValue('foo', intVar.out);

        Console.WriteLine('{0} {1}', found, intVar);

    ");



                // create and populate a host array

                engine.Execute(@"

        numbers = host.newArr(lib.System.Int32, 20);

        for (var i = 0; i < numbers.Length; i++) { numbers[i] = i; }

        Console.WriteLine(lib.System.String.Join(', ', numbers));

    ");



                // create a script delegate

                engine.Execute(@"

        Filter = lib.System.Func(lib.System.Int32, lib.System.Boolean);

        oddFilter = new Filter(function(value) {

            return (value & 1) ? true : false;

        });

    ");



                // use LINQ from script

                engine.Execute(@"

        oddNumbers = numbers.Where(oddFilter);

        Console.WriteLine(lib.System.String.Join(', ', oddNumbers));

    ");



                // use a dynamic host object

                engine.Execute(@"

        expando = new lib.System.Dynamic.ExpandoObject();

        expando.foo = 123;

        expando.bar = 'qux';

        delete expando.foo;

    ");



                // call a script function

                engine.Execute("function print(x) { Console.WriteLine(x); }");

                engine.Script.print(DateTime.Now.DayOfWeek);



                // examine a script object

                engine.Execute("person = { name: 'Fred', age: 5 }");

                Console.WriteLine(engine.Script.person.name);



                // read a JavaScript typed array

                engine.Execute("values = new Int32Array([1, 2, 3, 4, 5])");

                var values = (ITypedArray <int>)engine.Script.values;

                Console.WriteLine(string.Join(", ", values.ToArray()));
            }
        }
        public void V8ScriptEngine_General_Precompiled_Dual()
        {
            engine.Dispose();
            using (var runtime = new V8Runtime())
            {
                using (var script = runtime.Compile(generalScript))
                {
                    engine = runtime.CreateScriptEngine();
                    using (var console = new StringWriter())
                    {
                        var clr = new HostTypeCollection(type => type != typeof(Console), "mscorlib", "System", "System.Core");
                        clr.GetNamespaceNode("System").SetPropertyNoCheck("Console", console);

                        engine.AddHostObject("host", new ExtendedHostFunctions());
                        engine.AddHostObject("clr", clr);

                        engine.Evaluate(script);
                        Assert.AreEqual(MiscHelpers.FormatCode(generalScriptOutput), console.ToString().Replace("\r\n", "\n"));

                        console.GetStringBuilder().Clear();
                        Assert.AreEqual(string.Empty, console.ToString());

                        engine.Evaluate(script);
                        Assert.AreEqual(MiscHelpers.FormatCode(generalScriptOutput), console.ToString().Replace("\r\n", "\n"));
                    }

                    engine.Dispose();
                    engine = runtime.CreateScriptEngine();
                    using (var console = new StringWriter())
                    {
                        var clr = new HostTypeCollection(type => type != typeof(Console), "mscorlib", "System", "System.Core");
                        clr.GetNamespaceNode("System").SetPropertyNoCheck("Console", console);

                        engine.AddHostObject("host", new ExtendedHostFunctions());
                        engine.AddHostObject("clr", clr);

                        engine.Evaluate(script);
                        Assert.AreEqual(MiscHelpers.FormatCode(generalScriptOutput), console.ToString().Replace("\r\n", "\n"));

                        console.GetStringBuilder().Clear();
                        Assert.AreEqual(string.Empty, console.ToString());

                        engine.Evaluate(script);
                        Assert.AreEqual(MiscHelpers.FormatCode(generalScriptOutput), console.ToString().Replace("\r\n", "\n"));
                    }
                }
            }
        }
        public void V8ScriptEngine_ResourceConstraints_Dual()
        {
            const int limit = 4 * 1024 * 1024;
            const string code = @"x = []; for (i = 0; i < 1024 * 1024; i++) { x.push(x); }";

            engine.Execute(code);
            engine.CollectGarbage(true);
            var usedHeapSize = engine.GetRuntimeHeapInfo().UsedHeapSize;

            var constraints = new V8RuntimeConstraints
            {
                MaxYoungSpaceSize = limit,
                MaxOldSpaceSize = limit,
                MaxExecutableSize = limit
            };

            engine.Dispose();
            engine = new V8ScriptEngine(constraints);

            TestUtil.AssertException<ScriptEngineException>(() =>
            {
                try
                {
                    engine.Execute(code);
                }
                catch (ScriptEngineException exception)
                {
                    Assert.IsTrue(exception.IsFatal);
                    throw;
                }
            });

            engine.CollectGarbage(true);
            Assert.IsTrue(usedHeapSize > engine.GetRuntimeHeapInfo().UsedHeapSize);
        }
Exemplo n.º 23
0
 public JavascriptView(string viewPath, JsEngine engine, V8ScriptEngine context)
 {
     _viewPath = viewPath;
     _engine   = engine;
     _context  = context;
 }
Exemplo n.º 24
0
 private Scene CreateScene(string script)
 {
     using (var engine = new V8ScriptEngine())
     {
     }
 }
Exemplo n.º 25
0
 /// <summary>
 /// Constructor!
 /// </summary>
 public JavascriptHostObject(Dictionary <string, string> configParameters, V8ScriptEngine engine)
 {
     this.configParameters = configParameters;
     this.engine           = engine;
 }
Exemplo n.º 26
0
 public HttpResult(V8ScriptEngine scriptEngine, HttpResponseMessage response)
 {
     this._response     = response;
     this._scriptEngine = scriptEngine;
 }
Exemplo n.º 27
0
 private static void ConfigureJavaScriptEngine(ref V8ScriptEngine v8)
 {
 }
Exemplo n.º 28
0
 public ServerTester(Server server)
 {
     this.server = server;
     engine      = new V8ScriptEngine();
     engine.AddHostObject("Server", server);
 }
Exemplo n.º 29
0
 public static void _init()
 {
     m_engine = new V8ScriptEngine();
     m_engine.AddHostObject("___api", new apiJS());
 }
Exemplo n.º 30
0
 public JArray(V8ScriptEngine evaluator)
     : this(evaluator, null)
 {
 }
Exemplo n.º 31
0
 public void TestInitialize()
 {
     engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging);
 }
Exemplo n.º 32
0
 public void TestSetup()
 {
     _engine = new V8ScriptEngine();
 }
        public void V8ScriptEngine_ErrorHandling_NestedScriptError()
        {
            var innerEngine = new V8ScriptEngine("inner", V8ScriptEngineFlags.EnableDebugging);
            engine.AddHostObject("engine", innerEngine);

            TestUtil.AssertException<ScriptEngineException>(() =>
            {
                try
                {
                    engine.Execute("engine.Execute('foo = {}; foo();')");
                }
                catch (ScriptEngineException exception)
                {
                    TestUtil.AssertValidException(engine, exception);
                    Assert.IsNotNull(exception.InnerException);

                    var hostException = exception.InnerException;
                    Assert.IsInstanceOfType(hostException, typeof(TargetInvocationException));
                    TestUtil.AssertValidException(hostException);
                    Assert.IsNotNull(hostException.InnerException);

                    var nestedException = hostException.InnerException as ScriptEngineException;
                    Assert.IsNotNull(nestedException);
                    TestUtil.AssertValidException(innerEngine, nestedException);
                    Assert.IsNull(nestedException.InnerException);

                    Assert.AreEqual("Error: " + hostException.Message, exception.Message);
                    throw;
                }
            });
        }
Exemplo n.º 34
0
        /// <summary>
        /// configura o Helper para posterior execuçao
        /// </summary>
        /// <param name="diretorioJavascripts">Diretório onde estão os arquivos em js</param>
        /// <param name="setTimeout">Habilitar a função global setTimeout</param>
        /// <param name="setInterval">Habilitar a função global setInterval</param>
        private void Carregar(string diretorioJavascripts, bool setTimeout, bool setInterval)
        {
            TimedOuts = new List<IDisposable>();
            _diretorioExecucao = diretorioJavascripts;
            _timeoutTestes = int.MaxValue;
            ExecutouTestesAteFinal = false;

            SetTimeOutLigado = setTimeout;

            //O manager vai compilar e cachear as bibliotecas
            _manager = new RuntimeManager(new ManualManagerSettings() { MaxExecutableBytes = (1000000000 * 2), RuntimeMaxCount = int.MaxValue});
            _engine = _manager.GetEngine();

            //RequireManager.ClearPackages(); //garantir uma execução limpa

            #region Ler arquivos Js

            _cacheCodigos = new Dictionary<string, string>();

            foreach (var enumerateFile in Directory.EnumerateFiles(diretorioJavascripts, "*.js"))
            {
                _cacheCodigos.Add(Path.GetFileNameWithoutExtension(enumerateFile), File.ReadAllText(enumerateFile));
                //_manager.Compile(Path.GetFileNameWithoutExtension(enumerateFile), File.ReadAllText(enumerateFile), true, int.MaxValue);
            }

            #endregion

            #region Configura a Engine com o JavascriptHelper e Console, Settimeout e etc

            FalhasDosTestes = new List<string>();
            _timers = new Dictionary<int, bool>();

            _engine.AddHostObject("javascriptHelper", this);

            _engine.Execute(@"'use strict';
                        function console() {
                          if (!(this instanceof console)) {
                            return new Console();
                          }
                        }

                        console.prototype.log = function(args, args1, args2) {
                          javascriptHelper.Escrever(args, args1, args2);
                        };");

            _engine.Execute("var console = new console();");
            _engine.Execute("var GLOBAL = this;");

            _engine.Execute(@"var stFunctionsCallBack = new Array();");

            if (setTimeout)
            {
                _engine.Execute(@"var setTimeout = function (funcToCall, millis) {
                                                var textoId = javascriptHelper.CurrentThreadId;
                                                var idlocal = javascriptHelper.SetTimeout(millis);
                                                stFunctionsCallBack.push(funcToCall);
                                                return idlocal;
                            };");

                _engine.Execute(@"var clearTimeout = function(id) { javascriptHelper.ClearTimeout(id);};");
            }

            if (setInterval)
            {
                _engine.Execute(@"var setInterval = function (funcToCall, millis) {

                                                var idlocal = javascriptHelper.SetTimeout(millis);
                                                var funcaoTimeout = function() { funcToCall(); setTimeout(funcToCall, millis); };
                                                stFunctionsCallBack.push(funcaoTimeout);
                                                return idlocal;
                            };");

                _engine.Execute(@"var clearInterval = function(id) { javascriptHelper.ClearTimeout(id);};");
            }
            #endregion
        }
Exemplo n.º 35
0
        public static void Init(V8ScriptEngine engine)
        {
            _createJsArray = engine.Evaluate(@"
                (function (list) {
                    var array = [];
                    for (var i = 0; i < list.Length; i++){
                        array.push(list[i]);
                    }
                    return array;
                }).valueOf()
            ");

            _createJsByteArray = engine.Evaluate(@"
                (function (length) {
                    var array = new Uint8Array(length);
                    return array;
                }).valueOf()
            ");

            _createJSPromise = engine.Evaluate(@"
                (function (action) {
                    return new Promise((resolve, reject) => {
                        action(resolve, reject);
                    });
                }).valueOf()
            ");

            _createJSObject = engine.Evaluate(@"
                (function (list) {
                    var obj = {};
                    for (var i = 0; i < list.Count; i++){
                        obj[list[i].Key] = list[i].Value;
                    }
                    return obj;
                }).valueOf()
            ");

            _createJSObjectArray = engine.Evaluate(@"
                (function (json) {
                    return JSON.parse(json);
                }).valueOf()
            ");

            _fillDictionary = engine.Evaluate(@"
                (function (obj, dict) {
                    for(var key in obj){
                        dict.Add(key, obj[key]);
                    }
                }).valueOf()
            ");

            _getStack = engine.Evaluate(@"
                (function() {
                  // Save original Error.prepareStackTrace
                  var origPrepareStackTrace = Error.prepareStackTrace

                  // Override with function that just returns `stack`
                  Error.prepareStackTrace = function (_, stack) {
                    return stack
                  }

                  // Create a new `Error`, which automatically gets `stack`
                  var err = new Error()

                  // Evaluate `err.stack`, which calls our new `Error.prepareStackTrace`
                  var stack = err.stack

                  // Restore original `Error.prepareStackTrace`
                  Error.prepareStackTrace = origPrepareStackTrace

                  // Remove superfluous function call on stack
                  stack.shift() // getStack --> Error

                  return stack
                }).valueOf()
            ");
        }
        public V8EngineSession() 
        {
            logFilePath = Path.Combine(Path.GetTempPath(), "V8Enginelog.log");
            
            m_currentScriptName = GetRandomScriptTargetName();
          
            var debuggingPort = PortUtilities.FindFreePort(IPAddress.Loopback);

            m_scriptEngine = new V8ScriptEngine(V8ScriptEngineFlags.DisableGlobalMembers | V8ScriptEngineFlags.EnableDebugging, debuggingPort)
            {
                AllowReflection = false,
            };
                        
            m_scriptEngine.AddHostObject("host", new HostFunctions());
            m_scriptEngine.AddHostObject("lib", new HostTypeCollection("mscorlib", "System.Core"));
            m_scriptEngine.AddHostObject("winform", new HostTypeCollection("System.Windows.Forms"));

            portUri = new Uri("tcp://127.0.0.1:"+debuggingPort);
            m_tcpClient = new TcpClient(portUri.Host, portUri.Port);

            Connect();
        }
Exemplo n.º 37
0
        public static object Wrap(V8ScriptEngine engine, object obj)
        {
            Debug.Assert(!(obj is IScriptMarshalWrapper));

            if (obj == null)
            {
                return null;
            }

            var target = obj as IV8Object;
            if (target != null)
            {
                return new V8ScriptItem(engine, target);
            }

            return obj;
        }
 public void Cleanup()
 {
     if (_scriptEngine != null)
     {
         _scriptEngine.Dispose();
         _scriptEngine = null;
     }
 }
Exemplo n.º 39
0
        public void PropertyBag_MultiEngine_HostFunctions()
        {
            using (var scriptEngine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging))
            {
                const string code = "bag.host.func(0, function () { return bag.func(); })";
                var bag = new PropertyBag
                {
                    { "host", new HostFunctions() },
                    { "func", new Func<object>(() => ScriptEngine.Current) }
                };

                engine.AddHostObject("bag", bag);
                scriptEngine.AddHostObject("bag", bag);

                var func = (Func<object>)engine.Evaluate(code);
                Assert.AreSame(engine, func());

                func = (Func<object>)scriptEngine.Evaluate(code);
                Assert.AreSame(scriptEngine, func());
            }
        }
Exemplo n.º 40
0
 internal void InjectFuncs(V8ScriptEngine context)
 {
     //context.AddHostObject("module.import", new Func<string,DynamicObject>(ImportModule));
 }
Exemplo n.º 41
0
 public Async(V8ScriptEngine evaluator)
 {
     this.evaluator = evaluator;
 }
Exemplo n.º 42
0
        private JsScriptRunner(JsScriptRunnerType type, object scriptingContext = null, string contextName = null)
        {
            if (!(scriptingContext is null) && contextName is null)
            {
                throw new ArgumentNullException(nameof(contextName));
            }

            ScriptingContext = scriptingContext;
            Type             = type;

            switch (type)
            {
            case JsScriptRunnerType.Jint:
            {
                // engine settings:
                // strict mode   https://stackoverflow.com/a/34302448   https://stackoverflow.com/questions/34301881/should-i-use-strict-for-every-single-javascript-function-i-write
                JintEngine = new Engine(cfg => cfg.Strict(true));
                //JintEngine = new Engine();
                if (!(scriptingContext is null))
                {
                    JintEngine.SetValue(contextName, scriptingContext);          // pass 'scriptingConnector' to Js
                }
                break;
            }

            case JsScriptRunnerType.ClearScript:
            {
                //ClearScriptEngine = new V8ScriptEngine();
                //ClearScriptEngine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDateTimeConversion);
                ClearScriptEngine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDateTimeConversion | V8ScriptEngineFlags.DisableGlobalMembers);
                ClearScriptEngine.AllowReflection = false;
                //ClearScriptEngine.DefaultAccess = Microsoft.ClearScript.ScriptAccess.Full;
                //ClearScriptEngine.DefaultAccess = Microsoft.ClearScript.ScriptAccess.None;
                if (!(scriptingContext is null))
                {
                    ClearScriptEngine.AddHostObject(contextName, scriptingContext);          // pass 'scriptingConnector' to Js
                }
                break;
            }

            case JsScriptRunnerType.ClearScriptDebugMode:
            {
                ClearScriptEngine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDateTimeConversion
                                                       | V8ScriptEngineFlags.DisableGlobalMembers
                                                       | V8ScriptEngineFlags.EnableDebugging
                                                       | V8ScriptEngineFlags.AwaitDebuggerAndPauseOnStart);

                /* ClearScriptEngine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDateTimeConversion
                 | V8ScriptEngineFlags.DisableGlobalMembers
                 | V8ScriptEngineFlags.EnableDebugging
                 | V8ScriptEngineFlags.EnableRemoteDebugging
                 | V8ScriptEngineFlags.AwaitDebuggerAndPauseOnStart);*/
                ClearScriptEngine.AllowReflection = false;
                if (!(scriptingContext is null))
                {
                    ClearScriptEngine.AddHostObject(contextName, scriptingContext);          // pass 'scriptingConnector' to Js
                }
                break;
            }
            }
        }
Exemplo n.º 43
0
        public static void Colorify(List <LabelledLogTraceExt> traces, List <LogLabel> activeRules)
        {
            var sw = Stopwatch.StartNew();

            foreach (var trace in traces)
            {
                trace.Compile();
            }
            using (var v8 = new V8ScriptEngine())
            {
                int colorifiedOnClientCount = 0;
                int colorifiedOnServerCount = 0;
                v8.AddHostType("Console", typeof(Console));
                foreach (var rule in activeRules)
                {
                    try
                    {
                        v8.Execute("var " + "o" + " = " + rule.JSFilter + ";");
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show("Rule " + rule.Name + " is wrong, cannot colorify");
                        return;
                    }

                    bool wasJsUsed = false;
                    foreach (var trace in traces)
                    {
                        if (trace.HasLabelPrecompiled(rule._id))
                        {
                            continue;
                        }
                        wasJsUsed = true;
                        for (int i = 0; i < trace.Items.Count; i++)
                        {
                            var item   = trace.Items[i];
                            var toPass = JsonConvert.DeserializeObject <ExpandoObject>(JsonConvert.SerializeObject(item));
                            if (v8.Script["o"](toPass))
                            {
                                trace.ItemsLabels[i].Add(rule._id);
                            }
                        }
                    }

                    if (wasJsUsed)
                    {
                        colorifiedOnClientCount++;
                    }
                    else
                    {
                        colorifiedOnServerCount++;
                    }
                }

                Console.WriteLine("--colorify info--");
                Console.WriteLine("Total traces " + traces.Count);
                Console.WriteLine("Rules on server " + colorifiedOnServerCount);
                Console.WriteLine("Rules on client " + colorifiedOnClientCount);
                sw.Stop();
                Console.WriteLine("Time elapsed " + sw.ElapsedMilliseconds + "ms");
                //foreach (var rule in activeRules)
                //{
                //    try
                //    {
                //        v8.Execute("var " + "o" + " = " + rule.JSFilter + ";");
                //    }
                //    catch (Exception e)
                //    {
                //        MessageBox.Show("Rule " + rule.Name + " is wrong, cannot colorify");
                //        return;
                //    }
                //}
                //foreach (var logTrace in traces)
                //{
                //    logTrace.ItemsLabels.Clear();//remove old info if there is
                //    foreach (var item in logTrace.Items)
                //    {
                //        List<string> labels = new List<string>();
                //        var toPass = JsonConvert.DeserializeObject<ExpandoObject>(JsonConvert.SerializeObject(item));
                //        foreach (var rule in activeRules)
                //        {
                //            if (v8.Script["o"](toPass))
                //            {
                //                labels.Add(rule._id);
                //            }
                //        }
                //        logTrace.ItemsLabels.Add(labels.ToArray());
                //    }
                //}
            }
        }
Exemplo n.º 44
0
        public async Task <GenerateResult> GenerateDocumentAsync(string code, object model, IResourceManager resourceManager = null, CancellationToken cancellationToken = default)
        {
            using var engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDynamicModuleImports);
            engine.Execute(PolyfillScripts.Get("ImageData"));

            engine.DocumentSettings.Loader = new CustomLoader(engine.DocumentSettings.Loader, _resourceScriptFactory, resourceManager);
            engine.DocumentSettings.AddSystemDocument("main", ModuleCategory.Standard, code);

            dynamic setModel = engine.Evaluate(@"
let model;
const setModel = m => model = JSON.parse(m);
setModel");

            setModel(JsonSerializer.Serialize(model));

            dynamic contentTypePromise = engine.Evaluate(new DocumentInfo()
            {
                Category = ModuleCategory.Standard
            }, @"
async function getContentType() {
    const { contentType } = await import('main');
    return contentType;
}
getContentType()");
            var contentType = await ToTask(contentTypePromise);

            if (contentType is Undefined)
            {
                contentType = null;
            }

            dynamic resultPromise = engine.Evaluate(new DocumentInfo()
            {
                Category = ModuleCategory.Standard
            }, @"
import Builder from 'main';
let builder = new Builder();
Promise.resolve(builder.build(model));");

            var result = await ToTask(resultPromise);

            switch (result)
            {
            case string @string: return(new GenerateResult()
                {
                    Content = Encoding.UTF8.GetBytes(@string), ContentType = contentType ?? "text/plain"
                });

            case ITypedArray <byte> typedArray: return(new GenerateResult()
                {
                    Content = typedArray.ToArray(), ContentType = contentType ?? "application/octet-stream"
                });

            case IList list:
            {
                var array = new byte[list.Count];
                for (var i = 0; i < list.Count; i++)
                {
                    array[i] = Convert.ToByte(list[i]);
                }

                return(new GenerateResult()
                    {
                        Content = array, ContentType = contentType ?? "application/octet-stream"
                    });
            }

            default: throw new NotSupportedException("Build did not produce a supported result");
            }
        }
Exemplo n.º 45
0
 public ReadableStream(V8ScriptEngine evaluator)
 {
     Evaluator = evaluator;
     pipes     = new List <IPipe>();
     promises  = new List <Promise>();
 }
Exemplo n.º 46
0
        public void Restart()
        {
            // Find available port
            _engineDebugPort = -1;
            for (var p = DebugPortStart; p <= DebugPortEnd; p++)
            {
                if (Proxy.IsPortAvailable(p))
                {
                    _engineDebugPort = p;
                    break;
                }
            }

            // Dispose old engine
            if (_engine != null)
            {
                _engine.Dispose();
            }

            // Clear queues
            _callbacks = new ConcurrentQueue <Callback>();
            _timeouts  = new List <TimeOut>();
            _requests  = new ConcurrentQueue <Request>();

            // Clear XDoc callback
            API.XDoc.ResetHooks();

            if (_engineDebugPort != -1)
            {
                // Enable debugging on port "port"
                _engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging, _engineDebugPort);
            }
            else
            {
                // Create engine without debugging because no port is open
                // (this should never happen since there are a lot of ports in the range)
                _engine = new V8ScriptEngine();
            }

            // Clear the list of required files
            _required.Clear();

            // Define the NetJS API
            AddHostType(typeof(API.HTTP));
            AddHostType(typeof(API.SQLAPI));
            AddHostType(typeof(API.IO));
            AddHostType(typeof(API.Log));
            AddHostType(typeof(API.Application));
            AddHostType(typeof(API.Session));
            AddHostType(typeof(API.XDoc));
            AddHostType(typeof(API.Base64));
            AddHostType(typeof(API.Buffer));
            AddHostType(typeof(API.Windows));
            AddHostType(typeof(API.DLL));
            AddHostType(typeof(API.XML));
            AddHostType(typeof(API.MongoDBAPI));
            AddHostFunctions(typeof(API.Functions));

            // Initialize the tool functions
            Tool.Init(_engine);

            // Call the after start callback
            _afterStart(this);
        }
Exemplo n.º 47
0
        /// <summary>
        /// Serve para reiniciar a Engine e liberar memória
        /// </summary>
        public void ReiniciarEngine()
        {
            _engine.Interrupt();
            _engine.Dispose();

            _engine = _manager.GetEngine();

            Carregar(_diretorioExecucao, SetTimeOutLigado, false);
            ConfigurarGeracao();
        }
Exemplo n.º 48
0
 public RequireFunction(V8ScriptEngine scriptEvaluator, IModuleLoader loader, Module module)
 {
     this.scriptEvaluator = scriptEvaluator;
     Loader = loader;
     Module = module;
 }
        public void Dispose()
        {
            if (m_tcpClient != null)
            {
                m_tcpClient.Close();
            }

            if (m_scriptEngine != null)
            {
                m_scriptEngine.Interrupt();
                //m_scriptEngine.CollectGarbage(true);
                m_scriptEngine.Dispose();
                m_scriptEngine = null;
            }
        }
Exemplo n.º 50
0
        /// <summary>
        /// 执行JS
        /// </summary>
        private static void RunJs(string code)
        {
            if (string.IsNullOrEmpty(code))
            {
                return;
            }

            using (var engine = new V8ScriptEngine())
            {
                // expose a host type

                engine.AddHostType("Console", typeof(Console));

                engine.AddHostObject("lib", new HostTypeCollection("mscorlib", "System.Core"));

                //engine.Execute("Console.WriteLine(lib.System.DateTime.Now)");

                // expose a host object

                engine.AddHostObject("random", new Random());

                //engine.Execute("Console.WriteLine(random.NextDouble())");



                // expose entire assemblies



                // create a host object from script

                //            engine.Execute(@"

                //    birthday = new lib.System.DateTime(2007, 5, 22);

                //    Console.WriteLine(birthday.ToLongDateString());

                //");



                // use a generic class from script

                //            engine.Execute(@"

                //    Dictionary = lib.System.Collections.Generic.Dictionary;

                //    dict = new Dictionary(lib.System.String, lib.System.Int32);

                //    dict.Add('foo', 123);

                //");



                // call a host method with an output parameter

                engine.AddHostObject("host", new HostFunctions());

                //            engine.Execute(@"

                //    intVar = host.newVar(lib.System.Int32);

                //    found = dict.TryGetValue('foo', intVar.out);

                //    Console.WriteLine('{0} {1}', found, intVar);

                //");



                // create and populate a host array

                //            engine.Execute(@"

                //    numbers = host.newArr(lib.System.Int32, 20);

                //    for (var i = 0; i < numbers.Length; i++) { numbers[i] = i; }

                //    Console.WriteLine(lib.System.String.Join(', ', numbers));

                //");



                // create a script delegate

                //            engine.Execute(@"

                //    Filter = lib.System.Func(lib.System.Int32, lib.System.Boolean);

                //    oddFilter = new Filter(function(value) {

                //        return (value & 1) ? true : false;

                //    });

                //");



                // use LINQ from script

                //            engine.Execute(@"

                //    oddNumbers = numbers.Where(oddFilter);

                //    Console.WriteLine(lib.System.String.Join(', ', oddNumbers));

                //");



                // use a dynamic host object

                //            engine.Execute(@"

                //    expando = new lib.System.Dynamic.ExpandoObject();

                //    expando.foo = 123;

                //    expando.bar = 'qux';

                //    delete expando.foo;

                //");



                // call a script function

                //engine.Execute("function print(x) { Console.WriteLine(x); }");

                //engine.Script.print(DateTime.Now.DayOfWeek);


                // examine a script object

                //engine.Execute("person = { name: 'Fred', age: 5 }");

                //Console.WriteLine(engine.Script.person.name);



                // read a JavaScript typed array

                //engine.Execute("values = new Int32Array([1, 2, 3, 4, 5])");

                //var values = (ITypedArray<int>)engine.Script.values;

                //Console.WriteLine(string.Join(", ", values.ToArray()));
                var Proxy = new ScriptProxy();
                Proxy.系统.Img = () =>
                {
                    CaptureImage screen = FlaUI.Core.Capturing.Capture.Screen(engine.Script.屏幕());
                    return((Bitmap)screen.Bitmap.Clone());
                };
                engine.AddHostObject("代理", Proxy);

                engine.Execute(code);
            }
        }
        /// <summary>
        /// Retrieves the script engine for the current runtime manager.
        /// </summary>
        /// <returns></returns>
        public V8ScriptEngine GetEngine()
        {
            if (_scriptEngine == null)
            {
                V8ScriptEngineFlags flags = _settings.V8DebugEnabled
                    ? V8ScriptEngineFlags.DisableGlobalMembers | V8ScriptEngineFlags.EnableDebugging
                    : V8ScriptEngineFlags.DisableGlobalMembers;

                _scriptEngine = _v8Runtime.CreateScriptEngine(flags, _settings.V8DebugPort);
            }
            return _scriptEngine;
        }
Exemplo n.º 52
0
        public void PropertyBag_MultiEngine_Parallel()
        {
            // This is a torture test for ConcurrentWeakSet and general engine teardown/cleanup.
            // It has exposed some very tricky engine bugs.

            var bag = new PropertyBag();

            engine.AddHostObject("bag", bag);

            var threadCount = Environment.Is64BitProcess ? 1024 : 256;
            var engineCount = 0;

            // 32-bit V8 starts failing requests to create new contexts rather quickly. This is
            // because each V8 isolate requires (among other things) a 32MB address space
            // reservation. 64-bit V8 reserves much larger blocks but benefits from the enormous
            // available address space.

            var maxV8Count      = Environment.Is64BitProcess ? 256 : 16;
            var maxJScriptCount = (threadCount - maxV8Count) / 2;

            var startEvent      = new ManualResetEventSlim(false);
            var checkpointEvent = new ManualResetEventSlim(false);
            var continueEvent   = new ManualResetEventSlim(false);
            var stopEvent       = new ManualResetEventSlim(false);

            ParameterizedThreadStart body = arg =>
            {
                // ReSharper disable AccessToDisposedClosure

                var index = (int)arg;
                startEvent.Wait();

                ScriptEngine scriptEngine;
                if (index < maxV8Count)
                {
                    scriptEngine = new V8ScriptEngine();
                }
                else if (index < (maxV8Count + maxJScriptCount))
                {
                    scriptEngine = new JScriptEngine();
                }
                else
                {
                    scriptEngine = new VBScriptEngine();
                }

                scriptEngine.AddHostObject("bag", bag);
                if (Interlocked.Increment(ref engineCount) == threadCount)
                {
                    checkpointEvent.Set();
                }

                continueEvent.Wait();

                scriptEngine.Dispose();
                if (Interlocked.Decrement(ref engineCount) == 0)
                {
                    stopEvent.Set();
                }

                // ReSharper restore AccessToDisposedClosure
            };

            var threads = Enumerable.Range(0, threadCount).Select(index => new Thread(body)).ToArray();

            threads.ForEach((thread, index) => thread.Start(index));

            startEvent.Set();
            checkpointEvent.Wait();
            Assert.AreEqual(threadCount + 1, bag.EngineCount);

            continueEvent.Set();
            stopEvent.Wait();
            GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
            Assert.AreEqual(1, bag.EngineCount);

            Array.ForEach(threads, thread => thread.Join());
            startEvent.Dispose();
            checkpointEvent.Dispose();
            continueEvent.Dispose();
            stopEvent.Dispose();
        }
Exemplo n.º 53
0
 public void TestInitialize()
 {
     engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging);
 }
Exemplo n.º 54
0
 public JavaScriptContext()
 {
     this.engine = new V8ScriptEngine();
 }