public async Task <IActionResult> Post([FromBody] JToken jsonBody)
        {
            if (jsonBody == null)
            {
                return(BadRequest("Missing body"));
            }

            string script = jsonBody.Value <string>("script");

            if (string.IsNullOrWhiteSpace(script))
            {
                return(BadRequest("Missing script from body"));
            }

            EntityMetadata   metaData         = new EntityMetadata(script);
            CompilerResponse compilerResponse = new CompilerResponse();

            using (var invoker = new EntityInvoker(metaData, ScriptHelper.GetFrameworkReferences(), ScriptHelper.GetFrameworkImports()))
            {
                await invoker.InitializeEntryPointAsync();

                compilerResponse.CompilationOutput    = invoker.CompilationOutput;
                compilerResponse.CompilationSucceeded = invoker.IsCompilationSuccessful;

                if (compilerResponse.CompilationSucceeded)
                {
                    Tuple <string, string> asmBytes = await invoker.GetAssemblyBytesAsync();

                    compilerResponse.AssemblyBytes = asmBytes.Item1;
                    compilerResponse.PdbBytes      = asmBytes.Item2;
                }
            }

            return(Ok(compilerResponse));
        }
        public async Task <IActionResult> Post([FromBody] JToken jsonBody)
        {
            if (jsonBody == null)
            {
                return(BadRequest("Missing body"));
            }

            // Get script and reference
            var script = jsonBody.Value <string>("script");

            if (string.IsNullOrWhiteSpace(script))
            {
                return(BadRequest("Missing script from body"));
            }

            var references = TryExtract(jsonBody, "reference") ?? new Dictionary <string, string>();

            if (!Enum.TryParse(jsonBody.Value <string>("entityType"), true, out EntityType entityType))
            {
                entityType = EntityType.Signal;
            }

            var metaData         = new EntityMetadata(script, entityType);
            var compilerResponse = new CompilerResponse();

            using (var invoker = new EntityInvoker(metaData, ScriptHelper.GetFrameworkReferences(), ScriptHelper.GetFrameworkImports(), references.ToImmutableDictionary()))
            {
                await invoker.InitializeEntryPointAsync();

                compilerResponse.CompilationTraces    = invoker.CompilationOutput;
                compilerResponse.CompilationSucceeded = invoker.IsCompilationSuccessful;
                compilerResponse.References           = invoker.References;

                if (compilerResponse.CompilationSucceeded)
                {
                    var asmBytes = await invoker.GetAssemblyBytesAsync();

                    compilerResponse.AssemblyBytes = asmBytes.Item1;
                    compilerResponse.PdbBytes      = asmBytes.Item2;
                }
            }

            return(Ok(compilerResponse));
        }