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);
        }
Example #2
0
        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);
        }
Example #4
0
        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);
        }