public static ScriptEngine GetScriptEngine() { //Initialize the script engine. var engine = new ScriptEngine(); //Register Bundles. var instance = new BaristaGlobal(engine); instance.Common.RegisterBundle(new StringBundle()); instance.Common.RegisterBundle(new SugarBundle()); instance.Common.RegisterBundle(new SucraloseBundle()); instance.Common.RegisterBundle(new LoDashBundle()); instance.Common.RegisterBundle(new MomentBundle()); instance.Common.RegisterBundle(new MustacheBundle()); instance.Common.RegisterBundle(new LinqBundle()); instance.Common.RegisterBundle(new JsonDataBundle()); instance.Common.RegisterBundle(new ActiveDirectoryBundle()); instance.Common.RegisterBundle(new DocumentBundle()); instance.Common.RegisterBundle(new DiagnosticsBundle()); instance.Common.RegisterBundle(new UtilityBundle()); instance.Common.RegisterBundle(new DocumentStoreBundle()); instance.Common.RegisterBundle(new RavenClientBundle()); instance.Common.RegisterBundle(new SimpleInheritanceBundle()); instance.Common.RegisterBundle(new SqlDataBundle()); instance.Common.RegisterBundle(new StateMachineBundle()); instance.Common.RegisterBundle(new DeferredBundle()); instance.Common.RegisterBundle(new BaristaSearchIndexBundle()); instance.Common.RegisterBundle(new WebAdministrationBundle()); //instance.Common.RegisterBundle(new UnitTestingBundle()); //Global Types engine.SetGlobalValue("Barista", instance); engine.SetGlobalValue("fs", new FileSystemInstance(engine)); engine.SetGlobalValue("Guid", new GuidConstructor(engine)); engine.SetGlobalValue("Uri", new UriConstructor(engine)); engine.SetGlobalValue("Point", new PointConstructor(engine)); engine.SetGlobalValue("Size", new SizeConstructor(engine)); engine.SetGlobalValue("NetworkCredential", new NetworkCredentialConstructor(engine)); engine.SetGlobalValue("Base64EncodedByteArray", new Base64EncodedByteArrayConstructor(engine)); var console = new FirebugConsole(engine) { Output = new BaristaConsoleOutput(engine) }; engine.SetGlobalValue("console", console); return(engine); }
public override IScriptEngine GetScriptEngine(Bundles.WebBundleBase webBundle, out bool isNewScriptEngineInstance, out bool errorInInitialization) { isNewScriptEngineInstance = false; errorInInitialization = false; //Based on the instancing mode, either retrieve the ScriptEngine from the desired store, or create a new ScriptEngine instance. ScriptEngine engine; var instanceSettings = BaristaContext.Current.Request.ParseInstanceSettings(); switch (instanceSettings.InstanceMode) { case BaristaInstanceMode.PerCall: //Always create a new instance of the script engine. engine = new ScriptEngine(); isNewScriptEngineInstance = true; break; //case BaristaInstanceMode.Single: // engine = BaristaSharePointGlobal.GetOrCreateScriptEngineInstanceFromRuntimeCache(BaristaContext.Current.Request.InstanceName, out isNewScriptEngineInstance); // break; //case BaristaInstanceMode.PerSession: // engine = BaristaSharePointGlobal.GetOrCreateScriptEngineInstanceFromSession(BaristaContext.Current.Request.InstanceName, out isNewScriptEngineInstance); // break; default: throw new NotImplementedException("The instance mode of " + instanceSettings.InstanceMode + " is currently not supported."); } if (BaristaContext.Current.Request.ShouldForceStrict()) { engine.ForceStrictMode = true; } if (isNewScriptEngineInstance) { var console = new FirebugConsole(engine) { Output = new BaristaConsoleOutput(engine) }; //Register Bundles. var instance = new BaristaGlobal(engine); if (webBundle != null) { instance.Common.RegisterBundle(webBundle); } instance.Common.RegisterBundle(new StringBundle()); instance.Common.RegisterBundle(new SugarBundle()); instance.Common.RegisterBundle(new SucraloseBundle()); instance.Common.RegisterBundle(new LoDashBundle()); instance.Common.RegisterBundle(new FileWebOptimizationBundle()); instance.Common.RegisterBundle(new MomentBundle()); instance.Common.RegisterBundle(new MustacheBundle()); instance.Common.RegisterBundle(new LinqBundle()); instance.Common.RegisterBundle(new JsonDataBundle()); instance.Common.RegisterBundle(new ActiveDirectoryBundle()); instance.Common.RegisterBundle(new DocumentBundle()); instance.Common.RegisterBundle(new DiagnosticsBundle()); instance.Common.RegisterBundle(new iCalBundle()); instance.Common.RegisterBundle(new SmtpBundle()); //instance.Common.RegisterBundle(new K2Bundle()); instance.Common.RegisterBundle(new UtilityBundle()); instance.Common.RegisterBundle(new DocumentStoreBundle()); instance.Common.RegisterBundle(new RavenClientBundle()); instance.Common.RegisterBundle(new SimpleInheritanceBundle()); instance.Common.RegisterBundle(new SqlDataBundle()); instance.Common.RegisterBundle(new StateMachineBundle()); instance.Common.RegisterBundle(new DeferredBundle()); instance.Common.RegisterBundle(new BaristaSearchIndexBundle()); instance.Common.RegisterBundle(new WebAdministrationBundle()); //instance.Common.RegisterBundle(new UnitTestingBundle()); instance.Common.RegisterBundle(new SeleniumBundle()); //Global Types engine.SetGlobalValue("barista", instance); engine.SetGlobalValue("fs", new FileSystemInstance(engine)); engine.SetGlobalValue("Guid", new GuidConstructor(engine)); engine.SetGlobalValue("Uri", new UriConstructor(engine)); engine.SetGlobalValue("Encoding", new EncodingConstructor(engine)); engine.SetGlobalValue("Size", new SizeConstructor(engine)); engine.SetGlobalValue("Point", new PointConstructor(engine)); engine.SetGlobalValue("NetworkCredential", new NetworkCredentialConstructor(engine)); engine.SetGlobalValue("Base64EncodedByteArray", new Base64EncodedByteArrayConstructor(engine)); engine.SetGlobalValue("console", console); //Map Barista functions to global functions. engine.Execute(@"var help = function(obj) { return barista.help(obj); }; var require = function(name) { return barista.common.require(name); }; var listBundles = function() { return barista.common.listBundles(); }; var define = function() { return barista.common.define(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]); }; var include = function(scriptUrl) { return barista.include(scriptUrl); };"); //Execute any instance initialization code. if (String.IsNullOrEmpty(BaristaContext.Current.Request.InstanceInitializationCode) == false) { var initializationScriptSource = new StringScriptSource(BaristaContext.Current.Request.InstanceInitializationCode, BaristaContext.Current.Request.InstanceInitializationCodePath); try { engine.Execute(initializationScriptSource); } catch (JavaScriptException ex) { var logger = Logging.LogManager.GetCurrentClassLogger(); logger.Log(LogLevel.Error, () => "A JavaScript exception was thrown wile evaluating Script.", ex); UpdateResponseWithJavaScriptExceptionDetails(engine, ex, BaristaContext.Current.Response); errorInInitialization = true; //switch (BaristaContext.Current.Request.InstanceMode) //{ // case BaristaInstanceMode.Single: // BaristaSharePointGlobal.RemoveScriptEngineInstanceFromRuntimeCache(BaristaContext.Current.Request.InstanceName); // break; // case BaristaInstanceMode.PerSession: // BaristaSharePointGlobal.RemoveScriptEngineInstanceFromRuntimeCache(BaristaContext.Current.Request.InstanceName); // break; //} } catch (Exception ex) { var logger = Logging.LogManager.GetCurrentClassLogger(); logger.Log(LogLevel.Error, () => "An internal error occured while evaluating script: ", ex); errorInInitialization = true; //switch (BaristaContext.Current.Request.InstanceMode) //{ // case BaristaInstanceMode.Single: // BaristaSharePointGlobal.RemoveScriptEngineInstanceFromRuntimeCache(BaristaContext.Current.Request.InstanceName); // break; // case BaristaInstanceMode.PerSession: // BaristaSharePointGlobal.RemoveScriptEngineInstanceFromRuntimeCache(BaristaContext.Current.Request.InstanceName); // break; //} throw; } } } return(engine); }