Exemplo n.º 1
0
        public void JsModulesCanDetermineTheModuleRequestingIt()
        {
            var script       = @"
import banana from 'level2';
export default 'hello, world! ' + banana;
";
            var bananaModule = new BaristaScriptModule("level2")
            {
                Script = @"
import requestorName from 'depedendent';
export default 'Requested By: ' + requestorName;
"
            };

            ModuleLoader.RegisterModule(bananaModule);
            ModuleLoader.RegisterModule(new ReturnDependentNameModule());

            using (var rt = BaristaRuntimeFactory.CreateRuntime())
            {
                using (var ctx = rt.CreateContext())
                {
                    using (ctx.Scope())
                    {
                        var result = ctx.EvaluateModule(script);

                        Assert.Equal("hello, world! Requested By: level2", result.ToString());
                    }
                }
            }
        }
Exemplo n.º 2
0
        public void JsModulesImportingBadScriptsThrow()
        {
            var script       = @"
import banana from 'badbanana';
export default 'hello, world! ' + banana;
";
            var bananaModule = new BaristaScriptModule("badbanana")
            {
                Script = @"
export default asdf@11;
"
            };

            ModuleLoader.RegisterModule(bananaModule);

            using (var rt = BaristaRuntimeFactory.CreateRuntime())
            {
                using (var ctx = rt.CreateContext())
                {
                    using (ctx.Scope())
                    {
                        Assert.Throws <JsScriptException>(() =>
                        {
                            var result = ctx.EvaluateModule(script);
                        });
                    }
                }
            }
        }
Exemplo n.º 3
0
        public void JsModulesCanBeDynamicallyProvided()
        {
            var script       = @"
import banana from 'banana';
export default 'hello, world! ' + banana;
";
            var bananaModule = new BaristaScriptModule("banana")
            {
                Script = @"
export default 'banana';
"
            };

            ModuleLoader.RegisterModule(bananaModule);

            using (var rt = BaristaRuntimeFactory.CreateRuntime())
            {
                using (var ctx = rt.CreateContext())
                {
                    using (ctx.Scope())
                    {
                        var result = ctx.EvaluateModule(script);

                        Assert.True(result.ToString() == "hello, world! banana");
                    }
                }
            }
        }
Exemplo n.º 4
0
        public void JsModulesImportingThemselvesContinue()
        {
            var script       = @"
import banana from 'banana';
export default 'hello, world! ' + banana;
";
            var bananaModule = new BaristaScriptModule("banana")
            {
                Script = @"
import banana from 'banana'
export default 'banana' + ' ' + banana;
"
            };

            ModuleLoader.RegisterModule(bananaModule);

            using (var rt = BaristaRuntimeFactory.CreateRuntime())
            {
                using (var ctx = rt.CreateContext())
                {
                    using (ctx.Scope())
                    {
                        var result = ctx.EvaluateModule(script);

                        //FIXME: Not sure the full discussion around self-referencing modules, are they allowed for n?
                        Assert.Equal("hello, world! banana undefined", result.ToString());
                    }
                }
            }
        }
Exemplo n.º 5
0
        public Task <IBaristaModule> GetModule(string name)
        {
            var fullPath     = Path.Combine(m_baseUri.ToString(), name);
            var relativePath = new Uri(fullPath);
            var targetPath   = m_baseUri.MakeRelativeUri(relativePath);

            var restClient = m_restClientBuilder();
            var request    = new RestRequest(targetPath, Method.GET);
            //RestClient's Async Methods seem to be queued on a single thread
            //If this is async, it conflicts with fetch (if that is async too)
            //So we're making them all syncronous. :-/
            var response = restClient.Execute(request);

            if ((int)response.StatusCode >= 200 && (int)response.StatusCode < 400)
            {
                var filename = Path.GetFileName(response.ResponseUri.ToString());

                //Based on file's type, return an appropriate module.
                switch (GetCanonicalResourceKind(response.ResponseUri.ToString(), response.ContentType))
                {
                case ResourceKind.JavaScript:
                    var scriptModule = new BaristaScriptModule(name, ModuleDescription)
                    {
                        Script = response.Content
                    };

                    return(Task.FromResult <IBaristaModule>(scriptModule));

                case ResourceKind.Jsx:
                case ResourceKind.Tsx:
                case ResourceKind.TypeScript:
                    var typeScriptModule = new BaristaTypeScriptModule(name, ModuleDescription, String.IsNullOrWhiteSpace(filename) ? "script.js" : filename)
                    {
                        Script = response.Content
                    };
                    return(Task.FromResult <IBaristaModule>(typeScriptModule));

                case ResourceKind.Json:
                    return(Task.FromResult <IBaristaModule>(new JsonModule(name, ModuleDescription, response.Content)));

                case ResourceKind.Text:
                    return(Task.FromResult <IBaristaModule>(new RawTextModule(name, ModuleDescription, response.Content)));

                case ResourceKind.Binary:
                default:
                    return(Task.FromResult <IBaristaModule>(new RawBlobModule(name, ModuleDescription, new Blob(response.RawBytes, response.ContentType))));
                }
            }

            return(null);
        }