public static string JSON2RJSON(string inpJson) { using (var engine = new Microsoft.ClearScript.V8.V8ScriptEngine()) { var script = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @"\RJSON.js"; if (!File.Exists(script)) script = Machines.rootPath + @"JsLib\JS\External\RJSON.js"; engine.Execute(script, File.ReadAllText(script)); var par = new rjsonObj { inpJson = inpJson }; engine.AddHostObject("inpJson", par); return (string)engine.Evaluate("JSON.stringify(RJSON.pack(JSON.parse(inpJson.inpJson)))"); } }
public static void JsReflection(string tsFileName, string jsonMapFn) { using (var engine = new Microsoft.ClearScript.V8.V8ScriptEngine()) { engine.Execute("typescript.js", File.ReadAllText(@"d:\LMCom\rew\Web4\JsLib\Scripts\typescript.js")); engine.Execute("underscore.js", File.ReadAllText(@"d:\LMCom\rew\Web4\JsLib\Scripts\underscore.js")); engine.Execute("GenerateReflection.js", File.ReadAllText(@"d:\LMCom\rew\Web4\Author\GenerateReflection.js")); var par = new reflectionObj { inpTSCode = File.ReadAllText(tsFileName) }; engine.AddHostObject("inpTSCode", par); File.WriteAllText(jsonMapFn + ".json", (string)engine.Evaluate("author.parseReflection(inpTSCode.inpTSCode, false)")); File.WriteAllText(jsonMapFn + ".debug.json", (string)engine.Evaluate("author.parseReflection(inpTSCode.inpTSCode, true)")); } }
private static void ExecuteWithClearScript(Test test) { Execute("clearscript", test, () => { using (var clearscriptV8 = new Microsoft.ClearScript.V8.V8ScriptEngine()) { clearscriptV8.Execute(test.Content); } }); }
static void OriginalMain() { var done = false; var sw = new Stopwatch(); sw.Start(); for (var i = 0; i < N; i++) { var jintEngine = new Jint.Engine(); jintEngine.Execute(currentScript); done = jintEngine.GetValue("done").AsBoolean(); } sw.Stop(); Console.WriteLine("jint: " + sw.ElapsedMilliseconds / N + " - " + done); done = false; sw.Restart(); for (var i = 0; i < N; i++) { var ironjsEngine = new IronJS.Hosting.CSharp.Context(); ironjsEngine.Execute(currentScript); done = ironjsEngine.GetGlobalAs<bool>("done"); } sw.Stop(); Console.WriteLine("ironjs: " + sw.ElapsedMilliseconds / N + " - " + done); done = false; sw.Restart(); for (var i = 0; i < N; i++) { using (var jsNetEngine = new Noesis.Javascript.JavascriptContext()) { jsNetEngine.Run(currentScript); done = (bool)jsNetEngine.GetParameter("done"); } } sw.Stop(); Console.WriteLine("js.net: " + sw.ElapsedMilliseconds / N + " - " + done); done = false; sw.Restart(); for (var i = 0; i < N; i++) { var jurassicEngine = new Jurassic.ScriptEngine(); jurassicEngine.Execute(currentScript); done = jurassicEngine.GetGlobalValue<bool>("done"); } sw.Stop(); Console.WriteLine("jurassic: " + sw.ElapsedMilliseconds / N + " - " + done); done = false; sw.Restart(); for (var i = 0; i < N; i++) { using (var clearscriptV8 = new Microsoft.ClearScript.V8.V8ScriptEngine()) { clearscriptV8.Execute(currentScript); done = clearscriptV8.Script.done; } } sw.Stop(); Console.WriteLine("clearscriptV8: " + sw.ElapsedMilliseconds / N + " - " + done); done = false; sw.Restart(); using (var clearscriptV8 = new Microsoft.ClearScript.V8.V8Runtime()) { var compiled = clearscriptV8.Compile(currentScript); for (var i = 0; i < N; i++) { using (var engine = clearscriptV8.CreateScriptEngine()) { engine.Evaluate(compiled); done = engine.Script.done; } } } sw.Stop(); Console.WriteLine("clearscriptV8 compiled: " + sw.ElapsedMilliseconds / N + " - " + done); done = false; sw.Restart(); for (var i = 0; i < N; i++) { var nilcontext = new NiL.JS.Core.Context(); nilcontext.Eval(currentScript); done = (bool)nilcontext.GetVariable("done"); } sw.Stop(); Console.WriteLine("niljs: " + sw.ElapsedMilliseconds / N + " - " + done); Console.Read(); }
/// <summary> /// 获得引擎 /// </summary> /// <returns></returns> private Microsoft.ClearScript.V8.V8ScriptEngine GetEngine() { var result = new Microsoft.ClearScript.V8.V8ScriptEngine(); result.AddHostType("Console", typeof(Console)); return(result); }
public Handlebars(Microsoft.ClearScript.V8.V8ScriptEngine engine) { this.engine = engine; var handlebarsJsText = GetHandlebarsJsText(); engine.Execute(handlebarsJsText); }
public Handlebars(Microsoft.ClearScript.V8.V8ScriptEngine engine) { Guard.AgainstNull(engine, "engine"); this.engine = engine; var handlebarsJsText = GetHandlebarsJsText(); engine.Execute(handlebarsJsText); }
public override void Dispose() { if (_disposedFlag.Set()) { if (_jsEngine != null) { _jsEngine.Dispose(); _jsEngine = null; } } }
/// <summary> /// 执行代码 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="code"></param> /// <param name="resultName"></param> /// <returns></returns> public T HandlerByCode <T>(string code, string resultName = "result") { using Microsoft.ClearScript.V8.V8ScriptEngine engine = GetEngine(); string cmd = _libsPaths.Aggregate(string.Empty, (current, libPath) => current + $"{GetFileContent(libPath)}\r\n"); cmd += code; engine.Execute(cmd); var result = ((object)engine.Script[resultName]).ToJson().JsonToDeserializeObject <T>(); return(result); }
/// <summary> /// Constructs an instance of adapter for the V8 JS engine (Microsoft ClearScript.V8) /// </summary> /// <param name="settings">Settings of the V8 JS engine</param> public V8JsEngine(V8Settings settings) { V8Settings v8Settings = settings ?? new V8Settings(); var constraints = new OriginalRuntimeConstraints { HeapExpansionMultiplier = v8Settings.HeapExpansionMultiplier, MaxArrayBufferAllocation = v8Settings.MaxArrayBufferAllocation, MaxNewSpaceSize = v8Settings.MaxNewSpaceSize, MaxOldSpaceSize = v8Settings.MaxOldSpaceSize }; OriginalEngineFlags flags = OriginalEngineFlags.None; if (v8Settings.AwaitDebuggerAndPauseOnStart) { flags |= OriginalEngineFlags.AwaitDebuggerAndPauseOnStart; } if (v8Settings.EnableDebugging) { flags |= OriginalEngineFlags.EnableDebugging; } if (v8Settings.EnableRemoteDebugging) { flags |= OriginalEngineFlags.EnableRemoteDebugging; } if (v8Settings.DisableGlobalMembers) { flags |= OriginalEngineFlags.DisableGlobalMembers; } int debugPort = v8Settings.DebugPort; try { _jsEngine = new OriginalEngine(constraints, flags, debugPort) { MaxRuntimeHeapSize = v8Settings.MaxHeapSize, RuntimeHeapSizeSampleInterval = v8Settings.HeapSizeSampleInterval, MaxRuntimeStackUsage = v8Settings.MaxStackUsage }; } catch (TypeLoadException e) { throw WrapTypeLoadException(e); } catch (Exception e) { throw JsErrorHelpers.WrapEngineLoadException(e, EngineName, EngineVersion, true); } }
private void ProcessRequire(string rootPath, Package package, Module module) { string currentPath = _fileSystem.Path.GetDirectoryName(module.FullPath); using (Microsoft.ClearScript.ScriptEngine engine = new Microsoft.ClearScript.V8.V8ScriptEngine()) { Action <string> require = (entryPoint) => { ProcessModule(rootPath, package, entryPoint, currentPath); }; engine.AddHostObject("require", new Action <string>(require)); engine.Execute("(function(exports){try{" + module.TransformedContent + "}catch(e){}}({}));"); } }
public bool ClearScript(Parameter parameter) { using (Microsoft.ClearScript.V8.V8ScriptEngine engine = new Microsoft.ClearScript.V8.V8ScriptEngine()) { List <int> results = new List <int>(parameter.Statements.Length); foreach (string statement in parameter.Statements) { int result = Convert.ToInt32(engine.Evaluate(statement)); results.Add(result); } return(Assert(results, parameter.Sum)); } }
public bool ClearScript(Parameter parameter) { using (Microsoft.ClearScript.V8.V8ScriptEngine engine = new Microsoft.ClearScript.V8.V8ScriptEngine()) { List <int> results = new List <int>(parameter.Numbers.Length); engine.Script["n"] = parameter.Numbers; foreach (int number in parameter.Numbers) { int result = Convert.ToInt32(engine.Evaluate(parameter.Statements[number])); results.Add(result); } return(Assert(results, parameter.Sum)); } }
/// <summary> /// 编译传递的JavaScript 代码 /// </summary> /// <param name="cid">默认需求本期开奖id,回测系统使用</param> /// <param name="code">编译代码</param> /// <returns></returns> public MessageScriptModel Builder(string expect, string code) { StringBuilder stringBuilder = new StringBuilder(); string system = System.IO.File.ReadAllText(HttpContext.Current.Server.MapPath("/Js/CPQaunt.js")); string jsonparese = System.IO.File.ReadAllText(HttpContext.Current.Server.MapPath("/Js/json_parse.js")); string json2 = System.IO.File.ReadAllText(HttpContext.Current.Server.MapPath("/Js/json2.js")); stringBuilder.AppendLine(jsonparese); stringBuilder.AppendLine(json2); stringBuilder.AppendLine(system); stringBuilder.AppendLine(code); try { using (Microsoft.ClearScript.ScriptEngine engine = new Microsoft.ClearScript.V8.V8ScriptEngine()) { engine.AddHostObject("LotteryFacade", new CPQaunt.Facade.LotteryFacade()); engine.Execute(stringBuilder.ToString()); var s = engine.Script.main(expect); MessageScriptModel message = new MessageScriptModel(); message.type = MessageType.List; message.status = true; JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); jsSerializer.MaxJsonLength = Int32.MaxValue; message.numbers = jsSerializer.Deserialize <List <NumberModel> >(s); return(message); } } catch (Exception e) { MessageScriptModel message = new MessageScriptModel(); message.type = MessageType.Log; message.status = false; message.message = e.Message; return(message); } }
public bool ClearScriptCompiled(Parameter parameter) { using (Microsoft.ClearScript.V8.V8ScriptEngine engine = new Microsoft.ClearScript.V8.V8ScriptEngine()) { Microsoft.ClearScript.V8.V8Script script = engine.Compile(EXPRESSION); List <int> results = new List <int>(parameter.Numbers.Length); foreach (int number in parameter.Numbers) { engine.Script["n"] = number; int result = Convert.ToInt32(engine.Evaluate(script)); results.Add(result); } return(Assert(results, parameter.Sum)); } }
internal static void MakeRequest(DynamicObject config, DynamicObject callback, Microsoft.ClearScript.V8.V8ScriptEngine engine) { var options = new NodeHttpRequestOptions(config); var uriObj = new Uri((config.GetMember <object>("uri") ?? config.GetMember <object>("url")).ToString()); options.url = (config.GetMember <string>("uri") ?? config.GetMember <string>("url")); options.host = uriObj.Host; options.hostname = uriObj.Host; options.scheme = uriObj.Scheme; options.path = uriObj.PathAndQuery; options.port = uriObj.Port; options.method = config.GetMember("method", "GET"); options.headers = config.GetMember <DynamicObject>("headers"); bool isJson = config.GetMember("json", false); var req = new NodeHttpRequest(options); Action <NodeHttpResponse> wrapperCallback = resp => { if (callback == null) { return; } // string body = null; object body = null; var apiResp = resp.body as string; if (isJson) { var parser = (dynamic)engine.Evaluate("JSON.parse"); body = parser(apiResp); } else { body = apiResp; } callback.AsDynamic().call(null, null, resp, body); }; req.@on("response", wrapperCallback); req.end(); }
private object ConvertHours(string inputString) { var engine = new Microsoft.ClearScript.V8.V8ScriptEngine(); return(engine.Evaluate(GetConvertScript() + $"convertHours('{inputString}')")); }
public static ServerScriptModelRow Execute( Context context, SiteSettings ss, BaseItemModel itemModel, View view, ServerScript[] scripts, bool onTesting = false) { if (!(Parameters.Script.ServerScript != false && context.ContractSettings.NewFeatures() && context.ContractSettings.Script != false)) { return(null); } if (!(context?.ServerScriptDepth < 10)) { return(null); } itemModel = itemModel ?? new BaseItemModel(); ServerScriptModelRow scriptValues = null; using (var model = new ServerScriptModel( context: context, ss: ss, data: Values( context: context, ss: ss, model: itemModel), columns: Columns( context: context, ss: ss), columnFilterHash: view?.ColumnFilterHash, columnSorterHash: view?.ColumnSorterHash, onTesting: onTesting)) { using (var engine = new Microsoft.ClearScript.V8.V8ScriptEngine( Microsoft.ClearScript.V8.V8ScriptEngineFlags.EnableDateTimeConversion)) { try { engine.ContinuationCallback = model.ContinuationCallback; engine.AddHostObject("context", model.Context); engine.AddHostObject("model", model.Model); engine.AddHostObject("depts", model.Depts); engine.AddHostObject("groups", model.Groups); engine.AddHostObject("users", model.Users); engine.AddHostObject("columns", model.Columns); engine.AddHostObject("siteSettings", model.SiteSettings); engine.AddHostObject("view", model.View); engine.AddHostObject("items", model.Items); engine.AddHostObject("hidden", model.Hidden); engine.AddHostObject("extendedSql", model.ExtendedSql); engine.AddHostObject("notifications", model.Notification); foreach (var script in scripts) { engine.Execute(script.Body); } } finally { engine.ContinuationCallback = null; } } scriptValues = SetValues( context: context, ss: ss, model: itemModel, view: view, data: model); } return(scriptValues); }
public ScriptEngine(LockToken @lock) { LockToken.Enforce <ScriptEngine>(@lock); Engine = new Microsoft.ClearScript.V8.V8ScriptEngine(); Engine.AllowReflection = true; }