예제 #1
0
        public async Task ToTypeScriptType_Simple()
        {
            var template = @"{{- capture output
                                     for class in data.Classes | Symbols.WhereNameStartsWith ""ToTypeScriptType_Simple""
                                         for field in class.Fields
                                             field.Type | Type.ToTypeScriptType | String.Append ""\r\n""
                                         end
                                      end
                                  end
                                  Save output ""Some name"" }}
                            ";
            var result   = await NTypeWriter.Render(template, data, null);

            var actual   = result.Items.First().Content;
            var expected = @"
boolean
number
number | null
string
string | null
MyEnum
MyEnum | null
Promise<number>
number
any
string
string | null";

            Assert.AreEqual(expected.Trim(), actual.Trim());
        }
예제 #2
0
        public async Task ToTypeScriptType_Complex()
        {
            var template = @"{{- capture output
                                     for class in data.Classes | Symbols.WhereNameStartsWith ""ToTypeScriptType_Complex""
                                         for field in class.Fields
                                             field.Type | Type.ToTypeScriptType | String.Append ""\r\n""
                                         end
                                      end
                                  end
                                  Save output ""Some name"" }}
                            ";
            var result   = await NTypeWriter.Render(template, data, null);

            var actual   = result.Items.First().Content;
            var expected = @"
number[]
MyGeneric<number>
number[]
number[]
MyGeneric<number | null>
(number | null)[]
(number | null)[]
MyGeneric<number | null> | null
(number | null)[] | null
(number | null)[] | null
{ [key: string]: number }";

            Assert.AreEqual(expected.Trim(), actual.Trim());
        }
예제 #3
0
        public async Task ToTypeScriptDefault()
        {
            var template = @"{{- capture output
                                     for class in data.Classes | Symbols.WhereNameStartsWith ""ToTypeScriptDefault""
                                         for field in class.Fields
                                             field.Type | Type.ToTypeScriptDefault | String.Append ""\r\n""
                                         end
                                      end
                                  end
                                  Save output ""Some name"" }}
                            ";
            var result   = await NTypeWriter.Render(template, data, null);

            var actual   = result.Items.First().Content;
            var expected = @"
false
null
0
null
0
""""
null
0
null
[]
{}";

            Assert.AreEqual(expected.Trim(), actual.Trim());
        }
예제 #4
0
        public async Task AllReferencedTypes()
        {
            var template = @"{{- capture output
                                     for class in data.Classes | Symbols.WhereNameStartsWith ""AllReferencedTypes""
                                         for type in class | Type.AllReferencedTypes
                                             type.Name + ""\r\n""
                                         end
                                      end
                                  end
                                  Save output ""Some name"" }}
                            ";
            var result   = await NTypeWriter.Render(template, data, null);

            var actual   = result.Items.First().Content;
            var expected = @"
PropertyType
MethodReturnType
ParameterType
MethodReturnType2
FieldType
EnumType
EnumerableType
GenericType<int>
ArrayType
BaseType
";

            Assert.AreEqual(expected.Trim(), actual.Trim());
        }
예제 #5
0
        public async Task UserCanAddCustomFunctions()
        {
            var template        = "{{- capture output; Custom.MyFunction;  end; Save output \"result\" }}";
            var expectedResult  = "Hello World!";
            var codeModelConfig = new CodeModelConfiguration();
            var dataProvider    = await CreateCodeModelFromProject(codeModelConfig, "Tests.Assets.WebApi");

            var settings = new Configuration().AddCustomFunctions(typeof(MyCustomFunctionsAreHere));
            var result   = await NTypeWriter.Render(template, dataProvider, settings);

            var finalResult = result.Items.First().Content;

            Assert.AreEqual(expectedResult, finalResult);
        }
예제 #6
0
        static async Task Main(string[] args)
        {
            // 1) Load project
            AnalyzerManager  manager   = new AnalyzerManager();
            IProjectAnalyzer analyzer  = manager.GetProject(@"..\..\..\..\NTypewriter\NTypewriter.csproj");
            AdhocWorkspace   workspace = analyzer.GetWorkspace(false);
            var project = workspace.CurrentSolution.Projects.Where(x => x.Name == "NTypewriter").First();

            // 2) Add xml documentation
            project = AddXmlDocumentation(project, typeof(ICodeModel));
            project = AddXmlDocumentation(project, typeof(ActionFunctions));
            project = AddXmlDocumentation(project, typeof(Scriban.Functions.StringFunctions));

            // 3) Compile
            var compilation = await project.GetCompilationAsync();

            // 4) Create CodeModel
            var codeModelConfiguration = new CodeModelConfiguration()
            {
                OmitSymbolsFromReferencedAssemblies = false
            };
            var codeModel = new CodeModel(compilation, codeModelConfiguration);

            // 5) Load template
            string template = File.ReadAllText(@"..\..\..\CodeModel.nt");

            // 6) Add custom functions
            var ntypewriterConfig = new Configuration();

            ntypewriterConfig.AddCustomFunctions(typeof(NTEConfig));

            // 7) Render
            var result = await NTypeWriter.Render(template, codeModel, ntypewriterConfig);

            if (!result.HasErrors)
            {
                var renderedItem = result.Items.First();
                var path         = Path.Combine(@"..\..\..\", renderedItem.Name);
                File.WriteAllText(path, renderedItem.Content);
            }
            else
            {
                foreach (var msg in result.Messages)
                {
                    Console.WriteLine(msg.Message);
                }
            }
        }
예제 #7
0
        public async Task <IEnumerable <RenderingResult> > RenderAsync(string templateFilePath, string template, ICodeModel codeModel, IEnumerable <Type> typesThatContainCustomFunctions, EditorConfig editorConfig)
        {
            errorList.Clear();
            output.Info("Rendering template");

            var configuration = new NTypewriter.Configuration();

            configuration.AddCustomFunctions(typesThatContainCustomFunctions.ToArray());

            var configAdapter = new EditorConfigAdapterForScriban(editorConfig);

            var dataModels = new Dictionary <string, object>();

            dataModels[DataScriptObject.DataVariableName] = codeModel;
            dataModels["codeModel"] = codeModel;
            dataModels[DataScriptObject.ConfigVariableName] = configAdapter;

            var result = await NTypeWriter.Render(template, dataModels, configuration, new ExternalOutputAdapter(output));

            output.Info("Used configuration : " + editorConfig.ToString());

            foreach (var message in result.Messages)
            {
                output.Write(message.ToString(), message.Type == MessageType.Error);
                errorList.AddError(templateFilePath, message);
            }
            errorList.Publish();
            if (result.HasErrors)
            {
                throw new RuntimeException("Rendering template failed");
            }

            output.Info("Template rendered successfully");

            var rootDirectory = Path.GetDirectoryName(templateFilePath);

            output.Info($"Root directory : {rootDirectory})");
            var renderedItems = result.Items.Select(x => new RenderingResult(x, rootDirectory)).ToList();

            return(renderedItems);
        }
예제 #8
0
        public async Task AllReferencedTypesForInterface()
        {
            var template = @"{{- capture output
                                     for interface in data.Interfaces | Symbols.WhereNameStartsWith ""AllReferencedTypes""
                                         for type in interface | Type.AllReferencedTypes SearchIn.All
                                             type.Name + ""\r\n""
                                         end
                                      end
                                  end
                                  Save output ""Some name"" }}
                            ";
            var result   = await NTypeWriter.Render(template, data, null);

            var actual   = result.Items.First().Content;
            var expected = @"
PropertyType
IndexerReturnType
MethodReturnType
ParameterType
";

            Assert.AreEqual(expected.Trim(), actual.Trim());
        }