public void PrioritizedModuleLoaderExaminesAllModuleLoaders() { var script = @" import goodnightMoon from 'goodnight_moon'; export default goodnightMoon; "; var inMemoryModuleLoader = new InMemoryModuleLoader(); inMemoryModuleLoader.RegisterModule(new HelloWorldModule()); var inMemoryModuleLoader1 = new InMemoryModuleLoader(); inMemoryModuleLoader1.RegisterModule(new GoodnightMoonModule()); var aggregateModuleLoader = new PrioritizedAggregateModuleLoader(); aggregateModuleLoader.RegisterModuleLoader(inMemoryModuleLoader1, priority: 100); aggregateModuleLoader.RegisterModuleLoader(inMemoryModuleLoader, priority: 1); var baristaRuntime = GetRuntimeFactory(aggregateModuleLoader); using (var rt = baristaRuntime.CreateRuntime()) { using (var ctx = rt.CreateContext()) { var result = ctx.EvaluateModule(script); Assert.Equal("Goodnight, moon.", result.ToString()); } } }
public void JsAggregateModuleLoaderPrefixesMustBeSpecified() { var inMemoryModuleLoader1 = new InMemoryModuleLoader(); inMemoryModuleLoader1.RegisterModule(new HelloWorldModule()); var inMemoryModuleLoader2 = new InMemoryModuleLoader(); inMemoryModuleLoader2.RegisterModule(new GoodnightMoonModule()); var aggregateModuleLoader = new PrefixedAggregateModuleLoader(); Assert.Throws <ArgumentNullException>(() => { aggregateModuleLoader.RegisterModuleLoader("", inMemoryModuleLoader1); }); Assert.Throws <ArgumentNullException>(() => { aggregateModuleLoader.RegisterModuleLoader(null, inMemoryModuleLoader2); }); Assert.Throws <ArgumentNullException>(() => { aggregateModuleLoader.RegisterModuleLoader("foobar", null); }); }
public void PrioritizedModuleLoaderUsesHigherPriorityModuleLoadersOverLowerPriority() { var script = @" import helloworld from 'hello_world'; export default helloworld; "; var inMemoryModuleLoader = new InMemoryModuleLoader(); inMemoryModuleLoader.RegisterModule(new HelloWorldModule()); var inMemoryModuleLoader1 = new InMemoryModuleLoader(); inMemoryModuleLoader1.RegisterModule(new AnotherHelloWorldModule()); var aggregateModuleLoader = new PrioritizedAggregateModuleLoader(); aggregateModuleLoader.RegisterModuleLoader(inMemoryModuleLoader1, priority: 100); aggregateModuleLoader.RegisterModuleLoader(inMemoryModuleLoader, priority: 1); var baristaRuntime = GetRuntimeFactory(aggregateModuleLoader); using (var rt = baristaRuntime.CreateRuntime()) { using (var ctx = rt.CreateContext()) { var result = ctx.EvaluateModule(script); Assert.Equal("Hello, World!", result.ToString()); } } }
public void JsAggregateModuleLoaderReturnsFallbackModules() { var script = @" import helloworld from 'hello_world'; export default helloworld; "; var inMemoryModuleLoader = new InMemoryModuleLoader(); var aggregateModuleLoader = new PrefixedAggregateModuleLoader { FallbackModuleLoader = inMemoryModuleLoader }; inMemoryModuleLoader.RegisterModule(new HelloWorldModule()); var baristaRuntime = GetRuntimeFactory(aggregateModuleLoader); using (var rt = baristaRuntime.CreateRuntime()) { using (var ctx = rt.CreateContext()) { var result = ctx.EvaluateModule(script); Assert.Equal("Hello, World!", result.ToString()); } } }
public void JsAggregateModuleLoaderThrowsWhenWhitespacePrefixesAreUsed() { var script = @" import helloworld from ' !hello_world'; export default helloworld; "; var inMemoryModuleLoader1 = new InMemoryModuleLoader(); inMemoryModuleLoader1.RegisterModule(new HelloWorldModule()); var aggregateModuleLoader = new PrefixedAggregateModuleLoader(); Assert.Throws <ArgumentNullException>(() => { aggregateModuleLoader.RegisterModuleLoader(" ", inMemoryModuleLoader1); }); var baristaRuntime = GetRuntimeFactory(aggregateModuleLoader); using (var rt = baristaRuntime.CreateRuntime()) { using (var ctx = rt.CreateContext()) { Assert.Throws <JsScriptException>(() => { var result = ctx.EvaluateModule(script); }); } } }
/// <summary> /// Register BaristaCore services with the specified ServiceCollection. /// </summary> /// <param name="services"></param> /// <returns></returns> public static IServiceCollection AddBaristaCore(this IServiceCollection services, IBaristaModuleLoader moduleLoader = null) { if (moduleLoader == null) { moduleLoader = new InMemoryModuleLoader(); } services.AddSingleton <IJavaScriptEngineFactory, ChakraCoreFactory>(); services.AddSingleton((provider) => { var jsEngineFactory = provider.GetRequiredService <IJavaScriptEngineFactory>(); return(jsEngineFactory.CreateJavaScriptEngine()); }); services.AddSingleton(moduleLoader); services.AddSingleton <IBaristaValueFactoryBuilder, BaristaValueFactoryBuilder>(); services.AddSingleton <IBaristaRuntimeFactory, BaristaRuntimeFactory>(); //Conversion strategies must be transient, as they create objects tied to the context. services.AddTransient <IBaristaConversionStrategy, BaristaConversionStrategy>(); services.AddTransient <IBaristaTypeConversionStrategy, BaristaTypeConversionStrategy>(); services.AddTransient <IBaristaContextFactory, BaristaContextFactory>(); services.AddTransient <IBaristaModuleRecordFactory, BaristaModuleRecordFactory>(); services.AddTransient <IPromiseTaskQueue, PromiseTaskQueue>(); return(services); }
public static IBaristaModuleLoader Invoke(BrewOrder brewOrder, HttpRequest req) { //Set up the module loader for the request. var moduleLoader = new PrioritizedAggregateModuleLoader(); //Register all the modules within the BaristaLabs.BaristaCore.Extensions assembly. moduleLoader.RegisterModuleLoader(new AssemblyModuleLoader(typeof(TypeScriptTranspiler).Assembly), 1); //Register modules needing context. var currentContextModule = new BaristaContextModule(req); var contextModuleLoader = new InMemoryModuleLoader(); contextModuleLoader.RegisterModule(currentContextModule); moduleLoader.RegisterModuleLoader(contextModuleLoader, 2); //Register the web resource module loader rooted at the target path. if (Uri.TryCreate(new Uri(brewOrder.BaseUrl, UriKind.Absolute), brewOrder.Path, out Uri targetUri)) { var targetPath = targetUri.GetLeftPart(UriPartial.Authority) + String.Join("", targetUri.Segments.Take(targetUri.Segments.Length - 1)); var webResourceModuleLoader = new WebResourceModuleLoader(targetPath); moduleLoader.RegisterModuleLoader(webResourceModuleLoader, 100); } return(moduleLoader); }
public TypeScriptTranspiler() { var myMemoryModuleLoader = new InMemoryModuleLoader(); myMemoryModuleLoader.RegisterModule(new TypeScriptModule()); var serviceCollection = new ServiceCollection(); serviceCollection.AddBaristaCore(moduleLoader: myMemoryModuleLoader); m_provider = serviceCollection.BuildServiceProvider(); m_runtimeFactory = m_provider.GetRequiredService <IBaristaRuntimeFactory>(); }
public IBaristaRuntimeFactory GetRuntimeFactory() { var myMemoryModuleLoader = new InMemoryModuleLoader(); myMemoryModuleLoader.RegisterModule(new LodashModule()); var serviceCollection = new ServiceCollection(); serviceCollection.AddBaristaCore(moduleLoader: myMemoryModuleLoader); var provider = serviceCollection.BuildServiceProvider(); return(provider.GetRequiredService <IBaristaRuntimeFactory>()); }
public void JsAggregateModuleLoaderCanRemoveLoader() { var inMemoryModuleLoader1 = new InMemoryModuleLoader(); inMemoryModuleLoader1.RegisterModule(new HelloWorldModule()); var inMemoryModuleLoader2 = new InMemoryModuleLoader(); inMemoryModuleLoader2.RegisterModule(new GoodnightMoonModule()); var aggregateModuleLoader = new PrefixedAggregateModuleLoader(); Assert.False(aggregateModuleLoader.HasModuleLoader("foo")); aggregateModuleLoader.RegisterModuleLoader("foo", inMemoryModuleLoader1); Assert.True(aggregateModuleLoader.HasModuleLoader("foo")); aggregateModuleLoader.RemoveModuleLoader("foo"); Assert.False(aggregateModuleLoader.HasModuleLoader("foo")); }
public void JsAggregateModuleLoaderPrefixesMustBeUnique() { var inMemoryModuleLoader1 = new InMemoryModuleLoader(); inMemoryModuleLoader1.RegisterModule(new HelloWorldModule()); var inMemoryModuleLoader2 = new InMemoryModuleLoader(); inMemoryModuleLoader2.RegisterModule(new GoodnightMoonModule()); var aggregateModuleLoader = new PrefixedAggregateModuleLoader(); aggregateModuleLoader.RegisterModuleLoader("daytime", inMemoryModuleLoader1); Assert.Throws <ArgumentException>(() => { aggregateModuleLoader.RegisterModuleLoader("daytime", inMemoryModuleLoader2); }); }
public void JsInMemoryModuleLoaderThrowsOnInvalidArguments() { var inMemoryModuleLoader = new InMemoryModuleLoader(); Assert.Throws <ArgumentNullException>(() => { inMemoryModuleLoader.RegisterModule(null); }); Assert.Throws <InvalidOperationException>(() => { inMemoryModuleLoader.RegisterModule(new PhantomModule()); }); inMemoryModuleLoader.RegisterModule(new HelloWorldModule()); Assert.Throws <InvalidOperationException>(() => { inMemoryModuleLoader.RegisterModule(new HelloWorldModule()); }); }
public void JsAggregateModuleLoaderPrefixedModules() { var script = @" import helloworld from 'daytime!hello_world'; export default helloworld; "; var script2 = @" import helloworld from 'nighttime!goodnight_moon'; export default helloworld; "; var inMemoryModuleLoader1 = new InMemoryModuleLoader(); inMemoryModuleLoader1.RegisterModule(new HelloWorldModule()); var inMemoryModuleLoader2 = new InMemoryModuleLoader(); inMemoryModuleLoader2.RegisterModule(new GoodnightMoonModule()); var aggregateModuleLoader = new PrefixedAggregateModuleLoader(); aggregateModuleLoader.RegisterModuleLoader("daytime", inMemoryModuleLoader1); aggregateModuleLoader.RegisterModuleLoader("nighttime", inMemoryModuleLoader2); var baristaRuntime = GetRuntimeFactory(aggregateModuleLoader); using (var rt = baristaRuntime.CreateRuntime()) { using (var ctx = rt.CreateContext()) { var result = ctx.EvaluateModule(script); Assert.Equal("Hello, World!", result.ToString()); result = ctx.EvaluateModule(script2); Assert.Equal("Goodnight, moon.", result.ToString()); } } }