/// <summary> /// Generate NodeJS client code /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(CodeModel cm) { var disableTypeScriptGeneration = Singleton<GeneratorSettingsJs>.Instance.DisableTypeScriptGeneration; var codeModel = cm as CodeModelJs; if (codeModel == null) { throw new InvalidCastException("CodeModel is not a NodeJS code model."); } // Service client var serviceClientTemplate = new ServiceClientTemplate {Model = codeModel}; await Write(serviceClientTemplate, codeModel.Name.ToCamelCase() + ".js"); if (!disableTypeScriptGeneration) { var serviceClientTemplateTS = new ServiceClientTemplateTS {Model = codeModel}; await Write(serviceClientTemplateTS, codeModel.Name.ToCamelCase() + ".d.ts"); } //Models if (codeModel.ModelTypes.Any()) { var modelIndexTemplate = new ModelIndexTemplate {Model = codeModel}; await Write(modelIndexTemplate, Path.Combine("models", "index.js")); if (!disableTypeScriptGeneration) { var modelIndexTemplateTS = new ModelIndexTemplateTS {Model = codeModel}; await Write(modelIndexTemplateTS, Path.Combine("models", "index.d.ts")); } foreach (var modelType in codeModel.ModelTemplateModels) { var modelTemplate = new ModelTemplate {Model = modelType}; await Write(modelTemplate, Path.Combine("models", modelType.NameAsFileName.ToCamelCase() + ".js")); } } //MethodGroups if (codeModel.MethodGroupModels.Any()) { var methodGroupIndexTemplate = new MethodGroupIndexTemplate {Model = codeModel}; await Write(methodGroupIndexTemplate, Path.Combine("operations", "index.js")); if (!disableTypeScriptGeneration) { var methodGroupIndexTemplateTS = new MethodGroupIndexTemplateTS {Model = codeModel}; await Write(methodGroupIndexTemplateTS, Path.Combine("operations", "index.d.ts")); } foreach (var methodGroupModel in codeModel.MethodGroupModels) { var methodGroupTemplate = new MethodGroupTemplate {Model = methodGroupModel}; await Write(methodGroupTemplate, Path.Combine("operations", methodGroupModel.TypeName.ToCamelCase() + ".js")); } } }
/// <summary> /// Generate NodeJS client code for given ServiceClient. /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(ServiceClient serviceClient) { var serviceClientTemplateModel = new ServiceClientTemplateModel(serviceClient); // Service client var serviceClientTemplate = new ServiceClientTemplate { Model = serviceClientTemplateModel, }; await Write(serviceClientTemplate, serviceClient.Name.ToCamelCase() + ".js"); //Models if (serviceClient.ModelTypes.Any()) { var modelIndexTemplate = new ModelIndexTemplate { Model = serviceClientTemplateModel }; await Write(modelIndexTemplate, Path.Combine("models", "index.js")); foreach (var modelType in serviceClientTemplateModel.ModelTemplateModels) { var modelTemplate = new ModelTemplate { Model = modelType }; await Write(modelTemplate, Path.Combine("models", modelType.Name.ToCamelCase() + ".js")); } } //MethodGroups if (serviceClientTemplateModel.MethodGroupModels.Any()) { var methodGroupIndexTemplate = new MethodGroupIndexTemplate { Model = serviceClientTemplateModel }; await Write(methodGroupIndexTemplate, Path.Combine("operations", "index.js")); foreach (var methodGroupModel in serviceClientTemplateModel.MethodGroupModels) { var methodGroupTemplate = new MethodGroupTemplate { Model = methodGroupModel }; await Write(methodGroupTemplate, Path.Combine("operations", methodGroupModel.MethodGroupType.ToCamelCase() + ".js")); } } }
/// <summary> /// Generate NodeJS client code /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(CodeModel cm) { var disableTypeScriptGeneration = Singleton <GeneratorSettingsJs> .Instance.DisableTypeScriptGeneration; var codeModel = cm as CodeModelJs; if (codeModel == null) { throw new InvalidCastException("CodeModel is not a NodeJS code model."); } // Service client var serviceClientTemplate = new ServiceClientTemplate { Model = codeModel }; await Write(serviceClientTemplate, codeModel.Name.ToCamelCase() + ".js"); if (!disableTypeScriptGeneration) { var serviceClientTemplateTS = new ServiceClientTemplateTS { Model = codeModel }; await Write(serviceClientTemplateTS, codeModel.Name.ToCamelCase() + ".d.ts"); } //Models if (codeModel.ModelTypes.Any()) { var modelIndexTemplate = new ModelIndexTemplate { Model = codeModel }; await Write(modelIndexTemplate, Path.Combine("models", "index.js")); if (!disableTypeScriptGeneration) { var modelIndexTemplateTS = new ModelIndexTemplateTS { Model = codeModel }; await Write(modelIndexTemplateTS, Path.Combine("models", "index.d.ts")); } foreach (var modelType in codeModel.ModelTemplateModels) { var modelTemplate = new ModelTemplate { Model = modelType }; await Write(modelTemplate, Path.Combine("models", modelType.NameAsFileName.ToCamelCase() + ".js")); } } //MethodGroups if (codeModel.MethodGroupModels.Any()) { var methodGroupIndexTemplate = new MethodGroupIndexTemplate { Model = codeModel }; await Write(methodGroupIndexTemplate, Path.Combine("operations", "index.js")); if (!disableTypeScriptGeneration) { var methodGroupIndexTemplateTS = new MethodGroupIndexTemplateTS { Model = codeModel }; await Write(methodGroupIndexTemplateTS, Path.Combine("operations", "index.d.ts")); } foreach (var methodGroupModel in codeModel.MethodGroupModels) { var methodGroupTemplate = new MethodGroupTemplate { Model = methodGroupModel }; await Write(methodGroupTemplate, Path.Combine("operations", methodGroupModel.TypeName.ToCamelCase() + ".js")); } } }
/// <summary> /// Generate TypeScript client code /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(CodeModel cm) { var codeModel = cm as CodeModelTS; if (codeModel == null) { throw new InvalidCastException("CodeModel is not a TypeScript code model."); } codeModel.PackageName = Settings.Instance.PackageName; codeModel.PackageVersion = Settings.Instance.PackageVersion; // Service client var serviceClientTemplate = new ServiceClientTemplate { Model = codeModel }; await Write(serviceClientTemplate, codeModel.Name.ToCamelCase() + ".ts"); await Write(new ServiceClientContextTemplate { Model = codeModel }, codeModel.ContextName.ToCamelCase() + ".ts"); //Models if (codeModel.ModelTypes.Any()) { var modelIndexTemplate = new ModelIndexTemplate { Model = codeModel }; await Write(modelIndexTemplate, Path.Combine("models", "index.ts")); var mapperIndexTemplate = new MapperIndexTemplate { Model = codeModel }; await Write(mapperIndexTemplate, Path.Combine("models", "mappers.ts")); } //MethodGroups if (codeModel.MethodGroupModels.Any()) { var methodGroupIndexTemplate = new MethodGroupIndexTemplate { Model = codeModel }; await Write(methodGroupIndexTemplate, Path.Combine("operations", "index.ts")); foreach (var methodGroupModel in codeModel.MethodGroupModels) { var methodGroupTemplate = new MethodGroupTemplate { Model = methodGroupModel }; await Write(methodGroupTemplate, Path.Combine("operations", methodGroupModel.TypeName.ToCamelCase() + ".ts")); } } var generateMetadata = Singleton <GeneratorSettingsTS> .Instance.GenerateMetadata; if (generateMetadata) { // package.json var packageJson = new PackageJson { Model = codeModel }; await Write(packageJson, Path.Combine("../", "package.json")); //tsconfig.json var nodeTsConfig = new TsConfig { Model = new TsConfigModel(false) }; await Write(nodeTsConfig, Path.Combine("../", "tsconfig.json")); // webpack.config.js var webpackConfig = new WebpackConfig { Model = codeModel }; await Write(webpackConfig, Path.Combine("../", "webpack.config.js")); // .npmignore var npmIgnore = new NpmIgnore { Model = codeModel }; await Write(npmIgnore, Path.Combine("../", ".npmignore")); //README.md var readme = new ReadmeTemplate { Model = codeModel }; await Write(readme, Path.Combine("../", "README.md")); } }
/// <summary> /// Generate TypeScript client code /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(CodeModel cm) { var codeModel = cm as CodeModelTS; if (codeModel == null) { throw new InvalidCastException("CodeModel is not a TypeScript code model."); } InitializeSettings(codeModel); // Service client var serviceClientTemplate = new ServiceClientTemplate { Model = codeModel }; await Write(serviceClientTemplate, codeModel.Name.ToCamelCase() + ".ts"); await Write(new ServiceClientContextTemplate { Model = codeModel }, codeModel.ContextName.ToCamelCase() + ".ts"); //Models if (codeModel.ModelTypes.Any()) { var modelIndexTemplate = new ModelIndexTemplate { Model = codeModel }; await Write(modelIndexTemplate, Path.Combine("models", "index.ts")); var mapperIndexTemplate = new MapperIndexTemplate { Model = codeModel }; await Write(mapperIndexTemplate, Path.Combine("models", "mappers.ts")); } bool serviceHasMappableParameters = codeModel.Methods .SelectMany(m => m.LogicalParameters) .Any(p => p.Location != ParameterLocation.Body); if (serviceHasMappableParameters) { await Write(new ParameterTemplate { Model = codeModel }, Path.Combine("models", "parameters.ts")); } //MethodGroups if (codeModel.MethodGroupModels.Any()) { var methodGroupIndexTemplate = new MethodGroupIndexTemplate { Model = codeModel }; await Write(methodGroupIndexTemplate, Path.Combine("operations", "index.ts")); foreach (var methodGroupModel in codeModel.MethodGroupModels) { var mappersTemplate = new MethodGroupMappersTemplate { Model = methodGroupModel }; await Write(mappersTemplate, Path.Combine("models", methodGroupModel.MappersModuleName + ".ts")); var methodGroupTemplate = new MethodGroupTemplate { Model = methodGroupModel }; await Write(methodGroupTemplate, Path.Combine("operations", methodGroupModel.TypeName.ToCamelCase() + ".ts")); } } if (codeModel.GenerateMetadata) { // package.json var packageJson = new PackageJson { Model = codeModel }; await Write(packageJson, Path.Combine("../", "package.json")); //tsconfig.json var nodeTsConfig = new TsConfig { Model = new TsConfigModel(false) }; await Write(nodeTsConfig, Path.Combine("../", "tsconfig.json")); // webpack.config.js var webpackConfig = new WebpackConfig { Model = codeModel }; await Write(webpackConfig, Path.Combine("../", "webpack.config.js")); // .npmignore var npmIgnore = new NpmIgnore { Model = codeModel }; await Write(npmIgnore, Path.Combine("../", ".npmignore")); //README.md var readme = new ReadmeTemplate { Model = codeModel }; await Write(readme, Path.Combine("../", "README.md")); } }