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()); }
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()); }
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()); }
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()); }
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); }
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); } } }
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); }
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()); }