private async Task Run(CommandOption option) { string directory = GetBaseDirectory(option.Directory); await RunWorkflow(builder => builder .StartWith <SetVariable>( step => { step.VariableName = "BaseDirectory"; step.ValueExpression = new LiteralExpression(directory); }) .Then <SetVariable>( step => { step.VariableName = "Option"; step.ValueExpression = new JavaScriptExpression <CommandOption>($"({option.ToJson()})"); }) .Then <SetVariable>( step => { step.VariableName = "TemplateDirectory"; step.ValueExpression = new LiteralExpression <string>("Templates/Localization"); }) .Then <ProjectInfoProviderStep>() .Then <SetModelVariableStep>() /* Add localization */ .Then <TextGenerationStep>( step => { step.TemplateName = "Localization"; } ) .Then <MultiFileFinderStep>( step => { step.SearchFileName = new LiteralExpression("*.json"); step.BaseDirectory = new JavaScriptExpression <string>(@"`${AspNetCoreDir}/src/${ProjectInfo.FullName}.Domain.Shared/Localization`"); } ) .Then <ForEach>( x => { x.CollectionExpression = new JavaScriptExpression <IList <object> >(MultiFileFinderStep.DefaultFileParameterName); }, branch => branch.When(OutcomeNames.Iterate) .Then <LocalizationJsonModificationCreatorStep>( step => { step.TargetFile = new JavaScriptExpression <string>("CurrentValue"); step.LocalizationJson = new JavaScriptExpression <string>(TextGenerationStep.DefaultGeneratedTextParameterName); } ) .Then(branch) ) .Build() ); }
private async Task Run(CommandOption option) { string directory = GetBaseDirectory(option.Directory); option.Folder = option.Folder.Replace('\\', '/'); await RunWorkflow(builder => builder .StartWith <SetVariable>( step => { step.VariableName = "BaseDirectory"; step.ValueExpression = new LiteralExpression(directory); }) .Then <SetVariable>( step => { step.VariableName = "Option"; step.ValueExpression = new JavaScriptExpression <CommandOption>($"({option.ToJson()})"); }) .Then <SetVariable>( step => { step.VariableName = "Overwrite"; step.ValueExpression = new JavaScriptExpression <bool>("!Option.NoOverwrite"); }) .Then <SetVariable>( step => { step.VariableName = "TemplateDirectory"; step.ValueExpression = new LiteralExpression <string>("Templates/Service"); }) .Then <ProjectInfoProviderStep>() .Then <SetModelVariableStep>() .Then <GroupGenerationStep>( step => { step.GroupName = "Service"; step.TargetDirectory = new JavaScriptExpression <string>("AspNetCoreDir"); }) .Build() ); }
private async Task Run(CommandOption option) { string directory = GetBaseDirectory(option.Directory); var entityFileName = option.Entity + ".cs"; await RunWorkflow(builder => builder .StartWith <SetVariable>( step => { step.VariableName = "BaseDirectory"; step.ValueExpression = new LiteralExpression(directory); }) .Then <SetVariable>( step => { step.VariableName = "Option"; step.ValueExpression = new JavaScriptExpression <CommandOption>($"({option.ToJson()})"); }) .Then <SetVariable>( step => { step.VariableName = "Overwrite"; step.ValueExpression = new JavaScriptExpression <bool>("!Option.NoOverwrite"); }) .Then <SetVariable>( step => { step.VariableName = "TemplateDirectory"; step.ValueExpression = new LiteralExpression <string>("Templates/Crud"); }) .Then <ProjectInfoProviderStep>() .Then <FileFinderStep>( step => { step.SearchFileName = new LiteralExpression(entityFileName); }) .Then <EntityParserStep>() .Then <SetModelVariableStep>() .Then <IfElse>( step => step.ConditionExpression = new JavaScriptExpression <bool>("Option.SkipEntityConstructors"), ifElse => { ifElse.When(OutcomeNames.False) .AddEntityConstructorsGenerationWorkflow() .Then("EntityUsing") ; ifElse.When(OutcomeNames.True) .Then("EntityUsing") ; }) .AddEntityUsingGenerationWorkflow("EntityUsing") .AddEfCoreConfigurationWorkflow() .Then <IfElse>( step => step.ConditionExpression = new JavaScriptExpression <bool>("Option.CustomRepository"), ifElse => { ifElse .When(OutcomeNames.True) .AddCustomRepositoryGeneration() .Then("ServiceGeneration") ; ifElse .When(OutcomeNames.False) .Then("ServiceGeneration") ; } ) .AddServiceGenerationWorkflow("ServiceGeneration") .Then <IfElse>( step => step.ConditionExpression = new JavaScriptExpression <bool>("Option.SkipLocalization"), ifElse => { ifElse.When(OutcomeNames.False) .AddLocalizationGenerationWorkflow("LocalizationGeneration") .Then("Ui") ; ifElse.When(OutcomeNames.True) .Then("Ui") ; }) .Then <IfElse>( step => step.ConditionExpression = new JavaScriptExpression <bool>("Option.SkipUi"), ifElse => { ifElse .When(OutcomeNames.False) .Then <Switch>( @switch => { @switch.Expression = new JavaScriptExpression <string>("(ProjectInfo.UiFramework)"); @switch.Cases = Enum.GetValues(typeof(UiFramework)).Cast <int>().Select(u => u.ToString()).ToArray(); }, @switch => { @switch.When(UiFramework.None.ToString("D")) .Then("TestGeneration"); @switch.When(UiFramework.RazorPages.ToString("D")) .AddUiRazorPagesGenerationWorkflow() .Then("TestGeneration"); @switch.When(UiFramework.Angular.ToString("D")) // TODO //.AddUiAngularGenerationWorkflow() .Then("TestGeneration"); } ) ; ifElse .When(OutcomeNames.True) .Then("TestGeneration") ; } ).WithName("Ui") .Then <IfElse>( step => step.ConditionExpression = new JavaScriptExpression <bool>("Option.SkipTest"), ifElse => { ifElse .When(OutcomeNames.False) .AddTestGenerationWorkflow() .Then("DbMigrations") ; ifElse .When(OutcomeNames.True) .Then("DbMigrations") ; } ).WithName("TestGeneration") .Then <IfElse>( step => step.ConditionExpression = new JavaScriptExpression <bool>("Option.SkipDbMigrations"), ifElse => { ifElse .When(OutcomeNames.False) .AddMigrationAndUpdateDatabaseWorkflow() ; } ).WithName("DbMigrations") .Build() ); }
private async Task Run(CommandOption option) { string directory = GetBaseDirectory(option.Directory); for (int i = 0; i < option.MethodNames.Length; i++) { // Convert method name to pascal case option.MethodNames[i] = option.MethodNames[i].ToPascalCase(); } await RunWorkflow(builder => builder .StartWith <SetVariable>( step => { step.VariableName = "BaseDirectory"; step.ValueExpression = new LiteralExpression(directory); }) .Then <SetVariable>( step => { step.VariableName = "Option"; step.ValueExpression = new JavaScriptExpression <CommandOption>($"({option.ToJson()})"); }) .Then <SetVariable>( step => { step.VariableName = "Overwrite"; step.ValueExpression = new JavaScriptExpression <bool>("!Option.NoOverwrite"); }) .Then <SetVariable>( step => { step.VariableName = "TemplateDirectory"; step.ValueExpression = new LiteralExpression <string>("Templates/Methods"); }) .Then <ProjectInfoProviderStep>() .Then <FileFinderStep>( step => { step.SearchFileName = new JavaScriptExpression <string>("`I${Option.ServiceName}AppService.cs`"); }) .Then <ServiceInterfaceParserStep>() .Then <SetModelVariableStep>() .Then <AppServiceInterfaceStep>() .Then <FileModifierStep>() .Then <ForEach>( x => { x.CollectionExpression = new JavaScriptExpression <IList <object> >("Option.MethodNames"); }, branch => branch.When(OutcomeNames.Iterate) .Then <SetVariable>( step => { step.VariableName = "Bag.Name"; step.ValueExpression = new JavaScriptExpression <string>("CurrentValue"); } ) .Then <SetModelVariableStep>() .Then <GroupGenerationStep>( step => { step.GroupName = "Service"; step.TargetDirectory = new JavaScriptExpression <string>("AspNetCoreDir"); } ) .Then(branch) ) .Then <FileFinderStep>( step => { step.SearchFileName = new JavaScriptExpression <string>("`${Option.ServiceName}AppService.cs`"); }) .Then <AppServiceClassStep>() .Then <FileModifierStep>() .Build() ); }