/// <summary> /// Ensures that some engines have been registered with JavaScriptEngineSwitcher. IF not, /// registers some default engines. /// </summary> /// <param name="jsEngineSwitcher">JavaScript Engine Switcher instance</param> /// <param name="allowMsie">Whether to allow the MSIE JS engine</param> private static void EnsureJsEnginesRegistered(JsEngineSwitcher jsEngineSwitcher, bool allowMsie) { if (jsEngineSwitcher.EngineFactories.Any()) { // Engines have been registered, nothing to do here! return; } Trace.WriteLine( "No JavaScript engines were registered, falling back to a default config! It is " + "recommended that you configure JavaScriptEngineSwitcher in your app. See " + "https://github.com/Taritsyn/JavaScriptEngineSwitcher/wiki/Registration-of-JS-engines " + "for more information." ); #if NET40 jsEngineSwitcher.EngineFactories.AddV8(); #endif jsEngineSwitcher.EngineFactories.AddVroom(); if (allowMsie) { jsEngineSwitcher.EngineFactories.AddMsie(); } #if !NET40 jsEngineSwitcher.EngineFactories.AddChakraCore(); #endif }
static void Main(string[] args) { JsEngineSwitcher engineSwitcher = JsEngineSwitcher.Instance; engineSwitcher.EngineFactories .AddEFFCChakraCore() .AddEFFCVroom(new EFFCVroomSettings { MaxYoungSpaceSize = 4194304, MaxOldSpaceSize = 8388608 });; engineSwitcher.DefaultEngineName = EFFCVroomJsEngine.EngineName; using (var js = engineSwitcher.CreateDefaultEngine()) { js.Evaluate(@"var out={ $acttype : 'Delete', $table : 'FunctionInfo', $where : { $or:[{ FunctionNo:'1' }, { ParentNo:'1' }, ] } } "); var re = js.GetVariableValue("out"); } }
public void ShouldThrowIfJsEngineFails() { const string defaultEngineName = "DefaultEngine"; var defaultEngineFactory = new Mock <IJsEngineFactory>(); defaultEngineFactory.Setup(x => x.EngineName).Returns(defaultEngineName); defaultEngineFactory.Setup(x => x.CreateEngine()).Throws(new JsEngineLoadException("This is a custom JS engine load error.")); var cache = new Mock <ICache>(); var config = new Mock <IReactSiteConfiguration>(); config.Setup(x => x.ScriptsWithoutTransform).Returns(new List <string>()); config.Setup(x => x.LoadReact).Returns(true); var fileSystem = new Mock <IFileSystem>(); var engineSwitcher = new JsEngineSwitcher( new JsEngineFactoryCollection { defaultEngineFactory.Object, }, string.Empty ); var caughtException = Assert.Throws <ReactEngineNotFoundException>(() => { var factory = new JavaScriptEngineFactory(engineSwitcher, config.Object, cache.Object, fileSystem.Object); factory.GetEngineForCurrentThread(); }); Assert.Contains("This is a custom JS engine load error", caughtException.Message); }
static void AddJsEngineByName(JsEngineSwitcher engineSwitcher, string engineName) { engineSwitcher.EngineFactories.Clear(); switch (engineName) { case JurassicJsEngine.EngineName: engineSwitcher.EngineFactories.AddJurassic(); break; case JintJsEngine.EngineName: engineSwitcher.EngineFactories.AddJint(); break; case MsieJsEngine.EngineName: engineSwitcher.EngineFactories.AddMsie(); break; case ChakraCoreJsEngine.EngineName: engineSwitcher.EngineFactories.AddChakraCore(); break; case V8JsEngine.EngineName: engineSwitcher.EngineFactories.AddV8(); break; } }
public void ShouldReturnDefaultEngine() { const string someEngineName = "SomeEngine"; const string defaultEngineName = "DefaultEngine"; const string someOtherEngineName = "SomeOtherEngine"; var someEngineFactory = new Mock <IJsEngineFactory>(); someEngineFactory.Setup(x => x.EngineName).Returns(someEngineName); someEngineFactory.Setup(x => x.CreateEngine()).Returns(() => { var someEngine = new Mock <IJsEngine>(); someEngine.Setup(x => x.Name).Returns(someEngineName); return(someEngine.Object); }); var defaultEngineFactory = new Mock <IJsEngineFactory>(); defaultEngineFactory.Setup(x => x.EngineName).Returns(defaultEngineName); defaultEngineFactory.Setup(x => x.CreateEngine()).Returns(() => { var defaultEngine = new Mock <IJsEngine>(); defaultEngine.Setup(x => x.Name).Returns(defaultEngineName); return(defaultEngine.Object); }); var someOtherEngineFactory = new Mock <IJsEngineFactory>(); someOtherEngineFactory.Setup(x => x.EngineName).Returns(someOtherEngineName); someOtherEngineFactory.Setup(x => x.CreateEngine()).Returns(() => { var someOtherEngine = new Mock <IJsEngine>(); someOtherEngine.Setup(x => x.Name).Returns(someOtherEngineName); return(someOtherEngine.Object); }); var config = new Mock <IReactSiteConfiguration>(); config.Setup(x => x.ScriptsWithoutTransform).Returns(new List <string>()); config.Setup(x => x.LoadReact).Returns(true); var cache = new Mock <ICache>(); var fileSystem = new Mock <IFileSystem>(); var engineSwitcher = new JsEngineSwitcher( new JsEngineFactoryCollection { someEngineFactory.Object, defaultEngineFactory.Object, someOtherEngineFactory.Object }, defaultEngineName ); var factory = new JavaScriptEngineFactory(engineSwitcher, config.Object, cache.Object, fileSystem.Object); var engine = factory.GetEngineForCurrentThread(); Assert.Equal(defaultEngineName, engine.Name); }
public static void Configure(JsEngineSwitcher engineSwitcher) { var v8ef = new V8JsEngineFactory(); engineSwitcher.EngineFactories.Add(v8ef); engineSwitcher.DefaultEngineName = v8ef.EngineName; }
// For more information on bundling, visit https://go.microsoft.com/fwlink/?LinkId=301862 public static void RegisterBundles(BundleCollection bundles) { JsEngineSwitcher engineSwitcher = JsEngineSwitcher.Instance; engineSwitcher.EngineFactories.AddMsie(); RegisterScriptBundles(bundles); RegisterStyleBundles(bundles); }
public static void Configure(JsEngineSwitcher engineSwitcher) { engineSwitcher.EngineFactories .AddMsie(new MsieSettings { UseEcmaScript5Polyfill = true, UseJson2Library = true }); engineSwitcher.DefaultEngineName = MsieJsEngine.EngineName; }
public static void Configure() { JsEngineSwitcher engineSwitcher = JsEngineSwitcher.Instance; engineSwitcher.EngineFactories .AddV8(new V8Settings { }) ; engineSwitcher.DefaultEngineName = V8JsEngine.EngineName; }
/// <summary> /// Adds a JS engine switcher to <see cref="IServiceCollection"/> /// </summary> /// <param name="services">The services available in the application</param> /// <returns>Instance of <see cref="JsEngineFactoryCollection" /></returns> public static JsEngineFactoryCollection AddJsEngineSwitcher(this IServiceCollection services) { if (services == null) { throw new ArgumentNullException("services"); } JsEngineSwitcher engineSwitcher = JsEngineSwitcher.Instance; services.AddSingleton(engineSwitcher); return(engineSwitcher.EngineFactories); }
private static JsEngineSwitcher GetJsEngineSwitcher() { if (JsEngineSwitcher == null) { JsEngineSwitcher engineSwitcher = JsEngineSwitcher.Current as JsEngineSwitcher; engineSwitcher.EngineFactories.AddJint(new JintSettings { StrictMode = true }); //engineSwitcher.EngineFactories.AddJurassic(new JurassicSettings { StrictMode = true, }); JsEngineSwitcher = engineSwitcher; } return(JsEngineSwitcher); }
public static void RegisterJsEngines() { JsEngineSwitcher engineSwitcher = JsEngineSwitcher.Instance; engineSwitcher.EngineFactories .AddV8() .AddMsie(new MsieSettings { UseEcmaScript5Polyfill = true, UseJson2Library = true }); engineSwitcher.DefaultEngineName = V8JsEngine.EngineName; }
/// <summary> /// Gets a factory for the most appropriate JavaScript engine for the current environment. /// The first functioning JavaScript engine with the lowest priority will be used. /// </summary> /// <returns>Function to create JavaScript engine</returns> private static Func <IJsEngine> GetFactory(JsEngineSwitcher jsEngineSwitcher, bool allowMsie) { EnsureJsEnginesRegistered(jsEngineSwitcher, allowMsie); foreach (var engineFactory in jsEngineSwitcher.EngineFactories) { IJsEngine engine = null; try { engine = engineFactory.CreateEngine(); if (EngineIsUsable(engine, allowMsie)) { // Success! Use this one. return(engineFactory.CreateEngine); } } catch (Exception ex) { // This engine threw an exception, try the next one Trace.WriteLine(string.Format("Error initialising {0}: {1}", engineFactory, ex)); } finally { if (engine != null) { engine.Dispose(); } } } // Epic fail, none of the engines worked. Nothing we can do now. // Throw an error relevant to the engine they should be able to use. #if NET40 if (JavaScriptEngineUtils.EnvironmentSupportsClearScript()) { JavaScriptEngineUtils.EnsureEngineFunctional <V8JsEngine, ClearScriptV8InitialisationException>( ex => new ClearScriptV8InitialisationException(ex) ); } #endif #if NET40 || NETSTANDARD1_6 if (JavaScriptEngineUtils.EnvironmentSupportsVroomJs()) { JavaScriptEngineUtils.EnsureEngineFunctional <VroomJsEngine, VroomJsInitialisationException>( ex => new VroomJsInitialisationException(ex.Message) ); } #endif throw new ReactEngineNotFoundException(); }
public static void Configure() { JsEngineSwitcher engineSwitcher = JsEngineSwitcher.Instance; engineSwitcher.EngineFactories .AddV8() .AddChakraCore(); engineSwitcher.DefaultEngineName = V8JsEngine.EngineName; ReactSiteConfiguration.Configuration .SetLoadBabel(false) .SetLoadReact(false) .AddScriptWithoutTransform("~/js/server.js"); }
public void RegisterBundles(BundleCollection bundles) { JsEngineSwitcher engineSwitcher = JsEngineSwitcher.Instance; engineSwitcher.EngineFactories.AddMsie(new MsieSettings { UseEcmaScript5Polyfill = true, UseJson2Library = true }); engineSwitcher.DefaultEngineName = MsieJsEngine.EngineName; bundles.UseCdn = true; BundleTable.EnableOptimizations = Sitecore.Configuration.Settings.GetBoolSetting("BundleTableEnableOptimizations", true); BundleResolver.Current = new CustomBundleResolver(); // JS Bundle bundles.Add(new ScriptBundle("~/bundles/js").Include("~/Assets/js/jquery.validate*", "~/Assets/js/modernizr-*", "~/Assets/js/app.js")); //Rasmussen Bundle bundles.Add(new ScriptBundle("~/bundles/js/rasmussen"). Include("~/Assets/dev/js/common.js")); //can add more "~/Assets/dev/js/header.js")); //Backend JS Bundles //This Bundle is used on following components : //1. PageNavigation.cshtml bundles.Add(new ScriptBundle("~/bundles/js/pagenavigation").Include("~/Assets/dev/js/PageNavigation.js")); //This Bundle is used on following components : //1. VerticalTabComponent.cshtml bundles.Add(new ScriptBundle("~/bundles/js/verticalnav").Include("~/Assets/dev/js/VerticalTabs.js")); // CSS Bundle //CSS Bundle for Rasmussen var rasStyleBundle = new Bundle("~/bundles/css").Include("~/Assets/css/app.css", new CssRewriteUrlFixedTransform()); rasStyleBundle.Builder = new NullBuilder(); rasStyleBundle.Transforms.Add(new StyleTransformer()); rasStyleBundle.Orderer = new NullOrderer(); rasStyleBundle.Transforms.Add(new CssMinify()); bundles.Add(rasStyleBundle); }
public static void Configure(JsEngineSwitcher engineSwitcher) { engineSwitcher.EngineFactories .AddChakraCore() .AddJint() .AddJurassic() .AddMsie(new MsieSettings { UseEcmaScript5Polyfill = true, UseJson2Library = true }) .AddV8() ; engineSwitcher.DefaultEngineName = ChakraCoreJsEngine.EngineName; }
public void ShouldThrowIfDefaultEngineFactoryNotFound() { const string someEngineName = "SomeEngine"; const string defaultEngineName = "DefaultEngine"; const string someOtherEngineName = "SomeOtherEngine"; var someEngineFactory = new Mock <IJsEngineFactory>(); someEngineFactory.Setup(x => x.EngineName).Returns(someEngineName); someEngineFactory.Setup(x => x.CreateEngine()).Returns(() => { var someEngine = new Mock <IJsEngine>(); someEngine.Setup(x => x.Name).Returns(someEngineName); return(someEngine.Object); }); var someOtherEngineFactory = new Mock <IJsEngineFactory>(); someOtherEngineFactory.Setup(x => x.EngineName).Returns(someOtherEngineName); someOtherEngineFactory.Setup(x => x.CreateEngine()).Returns(() => { var someOtherEngine = new Mock <IJsEngine>(); someOtherEngine.Setup(x => x.Name).Returns(someOtherEngineName); return(someOtherEngine.Object); }); var config = new Mock <IReactSiteConfiguration>(); config.Setup(x => x.ScriptsWithoutTransform).Returns(new List <string>()); config.Setup(x => x.LoadReact).Returns(true); var fileSystem = new Mock <IFileSystem>(); var engineSwitcher = new JsEngineSwitcher( new JsEngineFactoryCollection { someEngineFactory.Object, someOtherEngineFactory.Object }, defaultEngineName ); Assert.Throws <ReactEngineNotFoundException>(() => { var factory = new JavaScriptEngineFactory(engineSwitcher, config.Object, fileSystem.Object); }); }
/// <summary> /// Initializes a new instance of the <see cref="JavaScriptEngineFactory"/> class. /// </summary> public JavaScriptEngineFactory( JsEngineSwitcher jsEngineSwitcher, IReactSiteConfiguration config, IFileSystem fileSystem ) { _jsEngineSwitcher = jsEngineSwitcher; _config = config; _fileSystem = fileSystem; #pragma warning disable 618 _factory = GetFactory(_jsEngineSwitcher, config.AllowMsieEngine); #pragma warning restore 618 if (_config.ReuseJavaScriptEngines) { _pool = CreatePool(); } }
public static void Initialize() { if (!_initialized) { lock (_synchronizer) { if (!_initialized) { JsEngineSwitcher engineSwitcher = JsEngineSwitcher.Instance; engineSwitcher.EngineFactories .AddMsie() ; engineSwitcher.DefaultEngineName = MsieJsEngine.EngineName; _initialized = true; } } } }
private JavaScriptEngineFactory CreateFactory( Mock <IReactSiteConfiguration> config, Mock <IFileSystem> fileSystem, Func <IJsEngine> innerEngineFactory ) { var engineFactory = new Mock <IJsEngineFactory>(); engineFactory.Setup(x => x.EngineName).Returns("MockEngine"); engineFactory.Setup(x => x.CreateEngine()).Returns(innerEngineFactory); var engineSwitcher = new JsEngineSwitcher( new JsEngineFactoryCollection { engineFactory.Object }, string.Empty ); return(new JavaScriptEngineFactory(engineSwitcher, config.Object, fileSystem.Object)); }
public void ShouldThrowIfNoEnginesRegistered() { var config = new Mock <IReactSiteConfiguration>(); var fileSystem = new Mock <IFileSystem>(); config.Setup(x => x.ScriptsWithoutTransform).Returns(new List <string>()); config.Setup(x => x.LoadReact).Returns(true); var engineSwitcher = new JsEngineSwitcher( new JsEngineFactoryCollection(), string.Empty ); var caughtException = Assert.Throws <ReactException>(() => { new JavaScriptEngineFactory(engineSwitcher, config.Object, fileSystem.Object); }); Assert.Contains("No JS engines were registered", caughtException.Message); }
public AfishaJavaScriptEngineFactory(JsEngineSwitcher engineSwitcher, IReactSiteConfiguration config, IFileSystem fileSystem) : base(engineSwitcher, config, fileSystem) { }
/// <summary> /// Gets a Jint JavaScript engine configuration settings /// </summary> /// <param name="switcher">JavaScript engine switcher</param>> /// <returns>Configuration settings of Jint JavaScript engine</returns> public static JintConfiguration GetJintConfiguration(this JsEngineSwitcher switcher) { return(_jintConfig.Value); }
public JsEvaluationService(JsEngineSwitcher engineSwitcher) { _engineSwitcher = engineSwitcher; }
/// <summary> /// Gets a MSIE JavaScript engine configuration settings /// </summary> /// <param name="switcher">JavaScript engine switcher</param>> /// <returns>Configuration settings of MSIE JavaScript engine</returns> public static MsieConfiguration GetMsieConfiguration(this JsEngineSwitcher switcher) { return(_msieConfig.Value); }
/// <summary> /// Gets a Jurassic JavaScript engine configuration settings /// </summary> /// <param name="switcher">JavaScript engine switcher</param>> /// <returns>Configuration settings of Jurassic JavaScript engine</returns> public static JurassicConfiguration GetJurassicConfiguration(this JsEngineSwitcher switcher) { return(_jurassicConfig.Value); }
public static void Configure(JsEngineSwitcher engineSwitcher) { engineSwitcher.EngineFactories .AddMsie() ; }
public static void Configure(JsEngineSwitcher engineSwitcher) { engineSwitcher.EngineFactories.AddV8(); engineSwitcher.DefaultEngineName = V8JsEngine.EngineName; }
/// <summary> /// Gets a V8 JavaScript engine configuration settings /// </summary> /// <param name="switcher">JavaScript engine switcher</param>> /// <returns>Configuration settings of V8 JavaScript engine</returns> public static V8Configuration GetV8Configuration(this JsEngineSwitcher switcher) { return(_v8Config.Value); }