Skip to content

Commit a8f44d2

Browse files
committed
Log if invalid type name detected and skip writing it
1 parent 723c72b commit a8f44d2

File tree

1 file changed

+99
-86
lines changed

1 file changed

+99
-86
lines changed

src/WebApiToTypeScript/Interfaces/InterfaceService.cs

Lines changed: 99 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
using Mono.Cecil;
2-
using System.Collections.Generic;
1+
using System.Collections.Generic;
32
using System.Diagnostics;
43
using System.Linq;
54
using System.Text.RegularExpressions;
5+
using Mono.Cecil;
66
using WebApiToTypeScript.Block;
77
using WebApiToTypeScript.Types;
88

@@ -97,7 +97,7 @@ public InterfaceNode AddInterfaceNode(TypeDefinition typeDefinition)
9797
if (isBaseClassNotObject && baseClass != typeDefinition)
9898
baseInterfaceNode = AddInterfaceNode(baseClass);
9999
}
100-
100+
101101
interfaceNode = AdjustBaseClass(interfaceNode, baseInterfaceNode);
102102

103103
var things = GetMembers(typeDefinition)
@@ -130,120 +130,133 @@ private void WriteInterfaces(TypeScriptBlock interfacesBlock, InterfaceNode inte
130130

131131
if (typeDefinition != null)
132132
{
133-
string implementsString = null;
134-
string extendsString = null;
133+
WriteInterfaceNode(interfacesBlock, interfaceNode);
134+
}
135135

136-
var iHaveGenericParameters = typeDefinition.HasGenericParameters;
137-
if (iHaveGenericParameters)
138-
{
139-
var genericParameters = typeDefinition.GenericParameters
140-
.Select(p => p.Name);
136+
foreach (var derivedInterfaceNode in interfaceNode.DerivedInterfaces)
137+
WriteInterfaces(interfacesBlock, derivedInterfaceNode);
138+
}
141139

142-
implementsString = WrapInAngledBrackets(string.Join(", ", genericParameters));
143-
}
140+
private void WriteInterfaceNode(TypeScriptBlock interfacesBlock, InterfaceNode interfaceNode)
141+
{
142+
var typeDefinition = interfaceNode.TypeDefinition;
143+
144+
string implementsString = null;
145+
string extendsString = null;
144146

145-
var hasBaseClass = interfaceNode.BaseInterface?.TypeDefinition != null;
146-
var baseTypeName = CleanName(interfaceNode.BaseInterface?.TypeDefinition?.Name);
147+
var iHaveGenericParameters = typeDefinition.HasGenericParameters;
148+
if (iHaveGenericParameters)
149+
{
150+
var genericParameters = typeDefinition.GenericParameters
151+
.Select(p => p.Name);
147152

148-
if (hasBaseClass)
153+
implementsString = WrapInAngledBrackets(string.Join(", ", genericParameters));
154+
}
155+
156+
var hasBaseClass = interfaceNode.BaseInterface?.TypeDefinition != null;
157+
var baseTypeName = CleanName(interfaceNode.BaseInterface?.TypeDefinition?.Name);
158+
159+
if (hasBaseClass)
160+
{
161+
var iHaveGenericArguments = typeDefinition.BaseType.IsGenericInstance;
162+
if (iHaveGenericArguments)
149163
{
150-
var iHaveGenericArguments = typeDefinition.BaseType.IsGenericInstance;
151-
if (iHaveGenericArguments)
152-
{
153-
var baseTypeInstance = typeDefinition.BaseType as GenericInstanceType;
154-
var genericArguments = baseTypeInstance.GenericArguments
155-
.Select(p => p.IsGenericParameter
156-
? p.Name
157-
: TypeService.GetTypeScriptType(p.GetElementType(), p.Name).TypeName);
164+
var baseTypeInstance = typeDefinition.BaseType as GenericInstanceType;
165+
var genericArguments = baseTypeInstance.GenericArguments
166+
.Select(p => p.IsGenericParameter
167+
? p.Name
168+
: TypeService.GetTypeScriptType(p.GetElementType(), p.Name).TypeName);
158169

159-
extendsString = WrapInAngledBrackets(string.Join(", ", genericArguments));
160-
}
170+
extendsString = WrapInAngledBrackets(string.Join(", ", genericArguments));
171+
}
161172

162-
var baseTypeHasGenericParameters = typeDefinition.BaseType.HasGenericParameters;
163-
if (baseTypeHasGenericParameters)
164-
{
165-
var genericParameters = typeDefinition.BaseType.GenericParameters
166-
.Select(p => p.Name);
173+
var baseTypeHasGenericParameters = typeDefinition.BaseType.HasGenericParameters;
174+
if (baseTypeHasGenericParameters)
175+
{
176+
var genericParameters = typeDefinition.BaseType.GenericParameters
177+
.Select(p => p.Name);
167178

168-
extendsString = WrapInAngledBrackets(string.Join(", ", genericParameters));
169-
}
179+
extendsString = WrapInAngledBrackets(string.Join(", ", genericParameters));
170180
}
181+
}
171182

172-
var interfaceExtendsString = hasBaseClass
173-
? $" extends I{baseTypeName}{extendsString}"
174-
: string.Empty;
183+
var interfaceExtendsString = hasBaseClass
184+
? $" extends I{baseTypeName}{extendsString}"
185+
: string.Empty;
175186

176-
var classExtendsString = hasBaseClass
177-
? $" extends {baseTypeName}{extendsString}"
178-
: string.Empty;
187+
var classExtendsString = hasBaseClass
188+
? $" extends {baseTypeName}{extendsString}"
189+
: string.Empty;
179190

180-
var blockTypeName = CleanName(typeDefinition.Name);
191+
var blockTypeName = CleanName(typeDefinition.Name);
181192

182-
var classImplementsString =
183-
$" implements I{blockTypeName}{implementsString}, {Config.EndpointsNamespace}.{nameof(IHaveQueryParams)}";
193+
if (!TypeService.IsValidTypeName(blockTypeName))
194+
{
195+
LogMessage($"Interface name [{blockTypeName}] of type [{typeDefinition.FullName}] is invalid!");
196+
return;
197+
}
184198

185-
var parameterOrInstanceString = iHaveGenericParameters
186-
? implementsString
187-
: string.Empty;
199+
var classImplementsString =
200+
$" implements I{blockTypeName}{implementsString}, {Config.EndpointsNamespace}.{nameof(IHaveQueryParams)}";
188201

189-
var interfaceBlock = interfacesBlock
190-
.AddAndUseBlock($"export interface I{blockTypeName}{parameterOrInstanceString}{interfaceExtendsString}");
202+
var parameterOrInstanceString = iHaveGenericParameters
203+
? implementsString
204+
: string.Empty;
191205

192-
var classBlock = interfacesBlock
193-
.AddAndUseBlock($"export class {blockTypeName}{parameterOrInstanceString}{classExtendsString}{classImplementsString}");
206+
var interfaceBlock = interfacesBlock
207+
.AddAndUseBlock($"export interface I{blockTypeName}{parameterOrInstanceString}{interfaceExtendsString}");
194208

195-
var things = GetMembers(typeDefinition);
209+
var classBlock = interfacesBlock
210+
.AddAndUseBlock($"export class {blockTypeName}{parameterOrInstanceString}{classExtendsString}{classImplementsString}");
196211

197-
foreach (var thing in things)
198-
{
199-
var interfaceName = string.Empty;
200-
var typeName = string.Empty;
212+
var things = GetMembers(typeDefinition);
201213

202-
if (thing.CSharpType.IsGenericParameter)
203-
{
204-
typeName = interfaceName = thing.CSharpType.GenericParameterName;
205-
}
206-
else
207-
{
208-
var thingType = thing.CSharpType.TypeDefinition;
209-
var typeScriptType = TypeService.GetTypeScriptType(thingType, thing.Name);
214+
foreach (var thing in things)
215+
{
216+
var interfaceName = string.Empty;
217+
var typeName = string.Empty;
210218

211-
if (thingType.IsInterface)
212-
continue;
219+
if (thing.CSharpType.IsGenericParameter)
220+
{
221+
typeName = interfaceName = thing.CSharpType.GenericParameterName;
222+
}
223+
else
224+
{
225+
var thingType = thing.CSharpType.TypeDefinition;
226+
var typeScriptType = TypeService.GetTypeScriptType(thingType, thing.Name);
213227

214-
interfaceName = typeScriptType.InterfaceName;
215-
typeName = typeScriptType.TypeName;
216-
}
228+
if (thingType.IsInterface)
229+
continue;
217230

218-
var thingName = Config.InterfaceMembersInCamelCase
219-
? Helpers.ToCamelCaseFromPascalCase(thing.Name)
220-
: thing.Name;
231+
interfaceName = typeScriptType.InterfaceName;
232+
typeName = typeScriptType.TypeName;
233+
}
221234

222-
var collectionString = thing.CSharpType.IsCollection ? "[]" : string.Empty;
235+
var thingName = Config.InterfaceMembersInCamelCase
236+
? Helpers.ToCamelCaseFromPascalCase(thing.Name)
237+
: thing.Name;
223238

224-
thingName = TypeService.FixIfReservedWord(thingName);
239+
var collectionString = thing.CSharpType.IsCollection ? "[]" : string.Empty;
225240

226-
interfaceBlock
227-
.AddStatement($"{thingName}: {interfaceName}{collectionString};");
241+
thingName = TypeService.FixIfReservedWord(thingName);
228242

229-
classBlock
230-
.AddStatement($"{thingName}: {typeName}{collectionString};");
231-
}
243+
interfaceBlock
244+
.AddStatement($"{thingName}: {interfaceName}{collectionString};");
232245

233-
if (hasBaseClass)
234-
{
235-
classBlock
236-
.AddAndUseBlock("constructor()")
237-
.AddStatement("super();");
238-
}
246+
classBlock
247+
.AddStatement($"{thingName}: {typeName}{collectionString};");
248+
}
239249

250+
if (hasBaseClass)
251+
{
240252
classBlock
241-
.AddAndUseBlock("getQueryParams()")
242-
.AddStatement("return this;");
253+
.AddAndUseBlock("constructor()")
254+
.AddStatement("super();");
243255
}
244256

245-
foreach (var derivedInterfaceNode in interfaceNode.DerivedInterfaces)
246-
WriteInterfaces(interfacesBlock, derivedInterfaceNode);
257+
classBlock
258+
.AddAndUseBlock("getQueryParams()")
259+
.AddStatement("return this;");
247260
}
248261

249262
private string CleanName(string dirtyName)

0 commit comments

Comments
 (0)