public override void Initialize(ITypeGenerator typeGenerator) { var definition = new TypeScriptInterfaceDefinition(); definition.Members.AddRange(Type.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly) .Where(m => !m.Name.Contains("_")) .Select(m => new TypeScriptInterfaceFunctionMember(m.Name.ToLowerCamelCase(), typeGenerator.BuildAndImportType(Unit, m.ReturnType), m.GetParameters() .Select(p => new TypeScriptArgumentDeclaration { Name = p.Name, Optional = false, Type = typeGenerator.BuildAndImportType(Unit, p.ParameterType), }) .ToArray()))); definition.Members.AddRange(Type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly) .Select(x => new TypeScriptInterfacePropertyMember(x.Name.ToLowerCamelCase(), typeGenerator.BuildAndImportType(Unit, x.PropertyType)))); Declaration = new TypeScriptInterfaceDeclaration { Definition = definition, Name = Type.Name }; base.Initialize(typeGenerator); }
public override void Initialize(ITypeGenerator typeGenerator) { var definition = new TypeScriptInterfaceDefinition(); definition.Members.AddRange(Type.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly) .Select(x => new TypeScriptInterfaceFunctionMember(x.Name, typeGenerator.BuildAndImportType(Unit, x, x.ReturnType)))); Declaration = new TypeScriptInterfaceDeclaration { Definition = definition, Name = Type.Name }; base.Initialize(typeGenerator); }
private TypeScriptTypeDeclaration GenerateInternalApiController(TypeScriptUnit targetUnit, Type type, Func <ICustomAttributeProvider, Type, TypeScriptType> buildAndImportType) { var baseApi = GetApiBase(type); var apiName = GetApiName(type); var interfaceName = "I" + apiName; var methodInfos = GetMethodsToImplement(type); var definition = new TypeScriptInterfaceDefinition(); definition.Members.AddRange(methodInfos .SelectMany(x => BuildApiInterfaceMember(x, buildAndImportType, type))); targetUnit.AddSymbolImport(baseApi.Name, baseApi.Location); var interfaceDeclaration = new TypeScriptInterfaceDeclaration { Name = interfaceName, Definition = definition }; var typeScriptClassDefinition = new TypeScriptClassDefinition { BaseClass = new TypeScriptTypeReference(baseApi.Name), ImplementedInterfaces = new TypeScriptType[] { new TypeScriptTypeReference(interfaceName) }, }; typeScriptClassDefinition.Members.AddRange( methodInfos .SelectMany(x => BuildApiImplMember(x, buildAndImportType, type))); targetUnit.Body.Add(new TypeScriptExportStatement { Declaration = new TypeScriptClassDeclaration { Name = GetApiClassName(apiName), Defintion = typeScriptClassDefinition } }); return(interfaceDeclaration); }
private TypeScriptTypeDeclaration GenerateInternalApiController(TypeScriptUnit targetUnit, Type type, Func <ICustomAttributeProvider, Type, TypeScriptType> buildAndImportType) { var baseApiClassName = "ApiBase"; var apiName = type.Name; var interfaceName = "I" + apiName; var typeScriptClassDefinition = new TypeScriptClassDefinition { BaseClass = new TypeScriptTypeReference(baseApiClassName), ImplementedInterfaces = new TypeScriptType[] { new TypeScriptTypeReference(interfaceName) } }; var methodInfos = type.GetMethods(BindingFlags.Instance | BindingFlags.Public) .Where(m => !m.IsSpecialName) .Where(x => x.DeclaringType == type) .ToArray(); typeScriptClassDefinition.Members.AddRange(methodInfos.SelectMany(x => BuildApiImplMember(targetUnit, x, buildAndImportType, type))); targetUnit.Body.Add(new TypeScriptExportStatement { Declaration = new TypeScriptClassDeclaration { Name = apiName, Defintion = typeScriptClassDefinition } }); var definition = new TypeScriptInterfaceDefinition(); definition.Members.AddRange(methodInfos.SelectMany(x => BuildApiInterfaceMember(targetUnit, x, buildAndImportType))); targetUnit.AddDefaultSymbolImport(baseApiClassName, $"../apiBase/{baseApiClassName}"); var interfaceDeclaration = new TypeScriptInterfaceDeclaration { Name = interfaceName, Definition = definition }; return(interfaceDeclaration); }